use libc::{c_char, c_double, c_float, c_int, c_long, c_short, c_void, uintptr_t};
pub type SpiceLong = c_long;
pub type SpiceInt = c_int;
pub type SpiceShort = c_short;
pub type SpiceChar = c_char;
pub type SpiceDouble = c_double;
pub type SpiceFloat = c_float;
pub type SpiceBoolean = c_int;
#[repr(C)]
pub struct SpiceCellC {
_private: [u8; 0],
}
#[repr(C)]
pub struct SpiceDLADescrC {
bwdptr: SpiceInt,
fwdptr: SpiceInt,
i_base: SpiceInt,
i_size: SpiceInt,
d_base: SpiceInt,
d_size: SpiceInt,
c_base: SpiceInt,
c_size: SpiceInt,
}
const SPICE_DSK_NSYPAR: uintptr_t = 10;
#[repr(C)]
pub struct SpiceDSKDescrC {
surfce: SpiceInt,
center: SpiceInt,
dclass: SpiceInt,
dtype: SpiceInt,
frmcde: SpiceInt,
corsys: SpiceInt,
corpar: [SpiceInt; SPICE_DSK_NSYPAR],
co1min: SpiceDouble,
co1max: SpiceDouble,
co2min: SpiceDouble,
co2max: SpiceDouble,
co3min: SpiceDouble,
co3max: SpiceDouble,
start: SpiceDouble,
stop: SpiceDouble,
}
#[link(name = "cspice")]
extern "C" {
pub fn furnsh_c(file: *const c_char);
pub fn unload_c(file: *const c_char);
pub fn str2et_c(string: *const c_char, et: *mut c_double);
pub fn timout_c(et: c_double, pictur: *const c_char, lenout: c_int, output: *mut c_char);
pub fn scs2e_c(sc: c_int, sclkch: *const c_char, et: *mut c_double);
pub fn kclear_c();
pub fn ktotal_c(kind: *const c_char, count: *mut c_int);
pub fn sce2s_c(sc: c_int, et: c_double, lenout: c_int, sclkch: *mut c_char);
pub fn sct2e_c(sc: c_int, sclkdp: c_double, et: *mut c_double);
pub fn sce2c_c(sc: c_int, et: c_double, sclkdp: *mut c_double);
pub fn scencd_c(sc: c_int, sclkch: *const c_char, sclkdp: *mut c_double);
pub fn scdecd_c(sc: c_int, sclkdp: c_double, lenout: c_int, sclkch: *mut c_char);
pub fn bodfnd_c(body: c_int, item: *const c_char) -> SpiceBoolean;
pub fn bodvrd_c(
bodynm: *const c_char,
item: *const c_char,
maxn: c_int,
dim: *mut c_int,
values: *mut c_double,
);
pub fn pxform_c(
from: *const c_char,
to: *const c_char,
et: c_double,
rotate: *mut *mut c_double,
);
pub fn sxform_c(
from: *const c_char,
to: *const c_char,
et: c_double,
xform: *mut *mut c_double,
);
pub fn pckfrm_c(pck: *const c_char, ids: *mut SpiceCellC);
pub fn pckcov_c(pck: *const c_char, idcode: c_int, cover: *mut SpiceCellC);
pub fn pxfrm2_c(
from: *const c_char,
to: *const c_char,
etfrom: c_double,
ett0: c_double,
rotate: *mut *mut c_double,
);
pub fn spkezr_c(
targ: *const c_char,
et: c_double,
reff: *const c_char,
abcorr: *const c_char,
obs: *const c_char,
starg: *mut c_double,
lt: *mut c_double,
);
pub fn spkpos_c(
targ: *const c_char,
et: c_double,
reff: *const c_char,
abcorr: *const c_char,
obs: *const c_char,
ptarg: *mut c_double,
lt: *mut c_double,
);
pub fn spkcpo_c(
target: *const c_char,
et: c_double,
outref: *const c_char,
refloc: *const c_char,
abcorr: *const c_char,
obspos: *const c_double,
obsctr: *const c_char,
obsref: *const c_char,
state: *mut c_double,
lt: *mut c_double,
);
pub fn spkcpt_c(
trgpos: *const c_double,
trgctr: *const c_char,
trgref: *const c_char,
et: c_double,
outref: *const c_char,
refloc: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
state: *mut c_double,
lt: *mut c_double,
);
pub fn spkcvo_c(
target: *const c_char,
et: c_double,
outref: *const c_char,
refloc: *const c_char,
abcorr: *const c_char,
obssta: *const c_double,
obsepc: c_double,
obsctr: *const c_char,
obsref: *const c_char,
state: *mut c_double,
lt: *mut c_double,
);
pub fn spkcvt_c(
trgsta: *const c_double,
trgepc: c_double,
trgctr: *const c_char,
trgref: *const c_char,
et: c_double,
outref: *const c_char,
refloc: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
state: *mut c_double,
lt: *mut c_double,
);
pub fn spkobj_c(spk: *const c_char, ids: *mut SpiceCellC);
pub fn spkcov_c(spk: *const c_char, idcode: c_int, cover: *mut SpiceCellC);
pub fn ckobj_c(ck: *const c_char, ids: *mut SpiceCellC);
pub fn ckcov_c(
ck: *const c_char,
idcode: c_int,
needav: SpiceBoolean,
level: *const c_char,
tol: c_double,
timsys: *const c_char,
cover: *mut SpiceCellC,
);
pub fn ckgp_c(
inst: c_int,
sclkdp: c_double,
tol: c_double,
reff: *const c_char,
cmat: *const *const c_double,
clkout: *mut c_double,
founnd: *mut SpiceBoolean,
);
pub fn ckgpav_c(
inst: c_int,
sclkdp: c_double,
tol: c_double,
reff: *const c_char,
cmat: *mut *mut c_double,
av: *mut c_double,
clkout: *mut c_double,
found: *mut SpiceBoolean,
);
pub fn getfov_c(
instid: c_int,
room: c_int,
shapelen: c_int,
framelen: c_int,
shape: *mut c_char,
frame: *mut c_char,
bsight: *mut c_double,
n: *mut c_int,
bounds: *mut *mut c_double,
);
pub fn gdpool_c(
name: *const c_char,
start: c_int,
room: c_int,
n: *mut c_int,
values: *mut c_double,
found: *mut SpiceBoolean,
);
pub fn gipool_c(
name: *const c_char,
start: c_int,
room: c_int,
n: *mut c_int,
ivals: *mut c_int,
found: *mut SpiceBoolean,
);
pub fn gcpool_c(
name: *const c_char,
start: c_int,
room: c_int,
n: *mut c_int,
cvals: *mut c_void,
found: *mut SpiceBoolean,
);
pub fn latsrf_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
npts: c_int,
lonlat: *const *const c_double,
srfpts: *mut *mut c_double,
);
pub fn srfnrm_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
npts: c_int,
srfpts: *const *const c_double,
normls: *mut *mut c_double,
);
pub fn dskz02_c(handle: c_int, dladsc: *const SpiceDLADescrC, nv: *mut c_int, np: *mut c_int);
pub fn dskp02_c(
handle: c_int,
dladsc: *const SpiceDLADescrC,
start: c_int,
room: c_int,
n: *mut c_int,
plates: *mut *mut c_int,
);
pub fn dskv02_c(
handle: c_int,
dladsc: *const SpiceDLADescrC,
start: c_int,
room: c_int,
n: *mut c_int,
vrtces: *mut *mut c_double,
);
pub fn dskobj_c(dsk: *const c_char, bodids: *mut SpiceCellC);
pub fn dsksrf_c(dsk: *const c_char, bodyid: c_int, srfids: *mut SpiceCellC);
pub fn bodc2n_c(code: c_int, lenout: c_int, name: *mut c_char, found: *mut SpiceBoolean);
pub fn bodn2c_c(name: *const c_char, code: *mut c_int, found: *mut SpiceBoolean);
pub fn srfcss_c(
code: c_int,
bodstr: *const c_char,
srflen: c_int,
srfstr: *mut c_char,
isname: *mut SpiceBoolean,
);
pub fn srfs2c_c(
srfstr: *const c_char,
bodstr: *const c_char,
code: *mut c_int,
found: *mut SpiceBoolean,
);
pub fn srfc2s_c(
code: c_int,
bodyid: c_int,
srflen: c_int,
srfstr: *mut c_char,
isname: *mut SpiceBoolean,
);
pub fn srfscc_c(
srfstr: *const c_char,
bodyid: c_int,
code: *mut c_int,
found: *mut SpiceBoolean,
);
pub fn reclat_c(
rectan: *const c_double,
radius: *mut c_double,
longitude: *mut c_double,
latitude: *mut c_double,
);
pub fn latrec_c(
radius: c_double,
longitude: c_double,
latitude: c_double,
rectan: *mut c_double,
);
pub fn srfrec_c(body: c_int, longitude: c_double, latitude: c_double, rectan: *mut c_double);
pub fn recgeo_c(
rectan: *const c_double,
re: c_double,
f: c_double,
lon: *mut c_double,
lat: *mut c_double,
alt: *mut c_double,
);
pub fn georec_c(
lon: c_double,
lat: c_double,
alt: c_double,
re: c_double,
f: c_double,
rectan: *mut c_double,
);
pub fn recpgr_c(
body: *const c_char,
rectan: *const c_double,
re: c_double,
f: c_double,
lon: *mut c_double,
lat: *mut c_double,
alt: *mut c_double,
);
pub fn pgrrec_c(
body: *const c_char,
lon: c_double,
lat: c_double,
alt: c_double,
re: c_double,
f: c_double,
rectan: *mut c_double,
);
pub fn sincpt_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
dref: *const c_char,
dvec: *const c_double,
spoint: *mut c_double,
trgepc: *mut c_double,
srfvec: *mut c_double,
found: *mut SpiceBoolean,
);
pub fn dskxv_c(
pri: SpiceBoolean,
target: *const c_char,
nsurf: c_int,
srflst: *const c_int,
et: c_double,
fixref: *const c_char,
nrays: c_int,
vtxarr: *const *const c_double,
dirarr: *const *const c_double,
xptarr: *mut *mut c_double,
fndarr: *mut SpiceBoolean,
);
pub fn dskxsi_c(
pri: SpiceBoolean,
target: *const c_char,
nsurf: c_int,
srflst: *const c_int,
et: c_double,
fixref: *const c_char,
vertex: *const c_double,
raydir: *const c_double,
maxd: c_int,
maxi: c_int,
xpt: *mut c_double,
handle: *mut c_int,
dladsc: *mut SpiceDLADescrC,
dskdsc: *mut SpiceDSKDescrC,
dc: *mut c_double,
ic: *mut c_int,
found: *mut SpiceBoolean,
);
pub fn subpnt_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
spoint: *mut c_double,
trgepc: *mut c_double,
srfvec: *mut c_double,
);
pub fn subslr_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
spoint: *mut c_double,
trgepc: *mut c_double,
srfvec: *mut c_double,
);
pub fn ilumin_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
spoint: *const c_double,
trgepc: *mut c_double,
srfvec: *mut c_double,
phase: *mut c_double,
incdnc: *mut c_double,
emissn: *mut c_double,
);
pub fn illumg_c(
method: *const c_char,
target: *const c_char,
ilusrc: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
spoint: *const c_double,
trgepc: *mut c_double,
srfvec: *mut c_double,
phase: *mut c_double,
incdnc: *mut c_double,
emissn: *mut c_double,
);
pub fn illumf_c(
method: *const c_char,
target: *const c_char,
ilusrc: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
spoint: *const c_double,
trgepc: *mut c_double,
srfvec: *mut c_double,
phase: *mut c_double,
incdnc: *mut c_double,
visibl: *mut SpiceBoolean,
lit: *mut SpiceBoolean,
);
pub fn phaseq_c(
et: c_double,
target: *const c_char,
illmn: *const c_char,
obsrvr: *const c_char,
abcorr: *const c_char,
) -> c_double;
pub fn limbpt_c(
method: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
corloc: *const c_char,
obsrvr: *const c_char,
refvec: *const c_double,
rolstp: c_double,
ncuts: c_int,
schstp: c_double,
soltol: c_double,
maxn: c_int,
npts: *mut c_int,
points: *mut *mut c_double,
epochs: *mut c_double,
tangts: *mut *mut c_double,
);
pub fn termpt_c(
method: *const c_char,
ilusrc: *const c_char,
target: *const c_char,
et: c_double,
fixref: *const c_char,
abcorr: *const c_char,
corloc: *const c_char,
obsrvr: *const c_char,
refvec: *const c_double,
rolstp: c_double,
ncuts: c_int,
schstp: c_double,
soltol: c_double,
maxn: c_int,
npts: *mut c_int,
points: *mut *mut c_double,
epochs: *mut c_double,
trmvcs: *mut *mut c_double,
);
pub fn conics_c(elts: *const c_double, et: c_double, state: *mut c_double);
pub fn oscelt_c(state: *const c_double, et: c_double, mu: c_double, elts: *mut c_double);
pub fn fovray_c(
inst: *const c_char,
raydir: *const c_double,
rframe: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
et: *const c_double,
visible: *mut SpiceBoolean,
);
pub fn fovtrg_c(
inst: *const c_char,
target: *const c_char,
tshape: *const c_char,
tframe: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
et: *const c_double,
visible: *mut SpiceBoolean,
);
pub fn occult_c(
targ1: *const c_char,
shape1: *const c_char,
frame1: *const c_char,
targ2: *const c_char,
shape2: *const c_char,
frame2: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
et: c_double,
ocltid: *mut c_int,
);
pub fn gfdist_c(
target: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfilum_c(
method: *const c_char,
angtyp: *const c_char,
target: *const c_char,
illmn: *const c_char,
fixref: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
spoint: *const c_double,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfpa_c(
target: *const c_char,
illmn: *const c_char,
frame: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfposc_c(
target: *const c_char,
frame: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
crdsys: *const c_char,
coord: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfrr_c(
target: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfsep_c(
targ1: *const c_char,
shape1: *const c_char,
frame1: *const c_char,
targ2: *const c_char,
shape2: *const c_char,
frame2: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfsntc_c(
target: *const c_char,
fixref: *const c_char,
method: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
dref: *const c_char,
dvec: *const c_double,
crdsys: *const c_char,
coord: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfsubc_c(
target: *const c_char,
fixref: *const c_char,
method: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
crdsys: *const c_char,
coord: *const c_char,
relate: *const c_char,
refval: c_double,
adjust: c_double,
step: c_double,
nintvls: c_int,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfrfov_c(
inst: *const c_char,
raydir: *const c_double,
rframe: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
step: c_double,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gftfov_c(
inst: *const c_char,
target: *const c_char,
tshape: *const c_char,
tframe: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
step: c_double,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn gfoclt_c(
occtyp: *const c_char,
front: *const c_char,
fshape: *const c_char,
fframe: *const c_char,
back: *const c_char,
bshape: *const c_char,
bframe: *const c_char,
abcorr: *const c_char,
obsrvr: *const c_char,
step: c_double,
cnfine: *mut SpiceCellC,
result: *mut SpiceCellC,
);
pub fn recrad_c(
rectan: *const c_double,
range: *mut c_double,
ra: *mut c_double,
dec: *mut c_double,
);
pub fn radrec_c(range: c_double, ra: c_double, dec: c_double, rectan: *mut c_double);
pub fn recsph_c(
rectan: *const c_double,
r: *mut c_double,
colat: *mut c_double,
lons: *mut c_double,
);
pub fn sphrec_c(r: c_double, colat: c_double, lons: c_double, rectan: *mut c_double);
pub fn reccyl_c(
rectan: *const c_double,
r: *mut c_double,
lon: *mut c_double,
z: *mut c_double,
);
pub fn cylrec_c(r: c_double, lon: c_double, z: c_double, rectan: *mut c_double);
pub fn sphcyl_c(
radius: c_double,
colat: c_double,
slon: c_double,
r: *mut c_double,
lon: *mut c_double,
z: *mut c_double,
);
pub fn cylsph_c(
r: c_double,
lonc: c_double,
z: c_double,
radius: *mut c_double,
colat: *mut c_double,
lon: *mut c_double,
);
pub fn sphlat_c(
r: c_double,
colat: c_double,
lons: c_double,
radius: *mut c_double,
lon: *mut c_double,
lat: *mut c_double,
);
pub fn latsph_c(
radius: c_double,
lon: c_double,
lat: c_double,
rho: *mut c_double,
colat: *mut c_double,
lons: *mut c_double,
);
pub fn cyllat_c(
r: c_double,
lonc: c_double,
z: c_double,
radius: *mut c_double,
lon: *mut c_double,
lat: *mut c_double,
);
pub fn latcyl_c(
radius: c_double,
lon: c_double,
lat: c_double,
r: *mut c_double,
lonc: *mut c_double,
z: *mut c_double,
);
pub fn xfmsta_c(
input_state: *const c_double,
input_coord_sys: *const c_char,
output_coord_sys: *const c_char,
body: *const c_char,
output_state: *mut c_double,
);
pub fn vpack_c(x: c_double, y: c_double, z: c_double, v: *mut c_double);
pub fn vupack_c(v: *const c_double, x: *mut c_double, y: *mut c_double, z: *mut c_double);
pub fn vadd_c(v1: *const c_double, v2: *const c_double, vout: *mut c_double);
pub fn vsub_c(v1: *const c_double, v2: *const c_double, vout: *mut c_double);
pub fn vcrss_c(v1: *const c_double, v2: *const c_double, vout: *mut c_double);
pub fn vdot_c(v1: *const c_double, v2: *const c_double) -> c_double;
pub fn vrel_c(v1: *const c_double, v2: *const c_double) -> c_double;
pub fn vscl_c(s: c_double, v1: *const c_double, vout: *mut c_double);
pub fn vminus_c(v1: *const c_double, vout: *mut c_double);
pub fn vequ_c(vin: *const c_double, vout: *mut c_double);
pub fn vzero_c(v: *const c_double) -> SpiceBoolean;
pub fn vsep_c(v1: *const c_double, v2: *const c_double) -> c_double;
pub fn vdist_c(v1: *const c_double, v2: *const c_double) -> c_double;
pub fn vnorm_c(v1: *const c_double) -> c_double;
pub fn vhat_c(v1: *const c_double, vout: *mut c_double);
pub fn ucrss_c(v1: *const c_double, v2: *const c_double, vout: *mut c_double);
pub fn unorm_c(v1: *const c_double, vout: *mut c_double, vmag: *mut c_double);
pub fn vperp_c(a: *const c_double, b: *const c_double, p: *mut c_double);
pub fn vproj_c(a: *const c_double, b: *const c_double, p: *mut c_double);
pub fn vrotv_c(v: *const c_double, axis: *const c_double, theta: c_double, r: *mut c_double);
pub fn rotvec_c(v1: *const c_double, angle: c_double, iaxis: c_int, vout: *mut c_double);
pub fn vlcom_c(
a: c_double,
v1: *const c_double,
b: c_double,
v2: *const c_double,
sum: *mut c_double,
);
pub fn vlcom3_c(
a: c_double,
v1: *const c_double,
b: c_double,
v2: *const c_double,
c: c_double,
v3: *const c_double,
sum: *mut c_double,
);
pub fn mxm_c(m1: *const *const c_double, m2: *const *const c_double, mout: *mut *mut c_double);
pub fn mxmt_c(m1: *const *const c_double, m2: *const *const c_double, mout: *mut *mut c_double);
pub fn mxv_c(m1: *const *const c_double, vin: *const c_double, vout: *mut c_double);
pub fn mtxm_c(m1: *const *const c_double, m2: *const *const c_double, mout: *mut *mut c_double);
pub fn mtxv_c(m1: *const *const c_double, vin: *const c_double, vout: *mut c_double);
pub fn vtmv_c(
v1: *const c_double,
matrix: *const *const c_double,
v2: *const c_double,
) -> c_double;
pub fn xpose_c(m1: *const *const c_double, mout: *mut *mut c_double);
pub fn mequ_c(m1: *const *const c_double, mout: *mut *mut c_double);
pub fn det_c(matrix: *const *const c_double);
pub fn trace_c(matrix: *const *const c_double);
pub fn rotate_c(angle: c_double, iaxis: c_int, mout: *mut *mut c_double);
pub fn rotmat_c(
m1: *const *const c_double,
angle: c_double,
iaxis: c_int,
mout: *mut *mut c_double,
);
pub fn twovec_c(
axdef: *const c_double,
indexa: c_int,
pldef: *const c_double,
indexp: c_int,
mout: *mut *mut c_double,
);
pub fn eul2m_c(
angle3: c_double,
angle2: c_double,
angle1: c_double,
axis3: c_int,
axis2: c_int,
axis1: c_int,
r: *mut *mut c_double,
);
pub fn m2eul_c(
r: *const *const c_double,
axis3: c_int,
axis2: c_int,
axis1: c_int,
angle3: *mut c_double,
angle2: *mut c_double,
angle1: *mut c_double,
);
pub fn raxisa_c(matrix: *const *const c_double, axis: *mut c_double, angle: *mut c_double);
pub fn axisar_c(axis: *const c_double, angle: c_double, r: *mut *mut c_double);
pub fn m2q_c(r: *const *const c_double, q: *mut c_double);
pub fn q2m_c(q: *const c_double, r: *mut *mut c_double);
pub fn halfpi_c() -> c_double;
pub fn pi_c() -> c_double;
pub fn twopi_c() -> c_double;
pub fn dpr_c() -> c_double;
pub fn rpd_c() -> c_double;
pub fn spd_c() -> c_double;
pub fn jyear_c() -> c_double;
pub fn tyear_c() -> c_double;
pub fn clight_c() -> c_double;
pub fn b1900_c() -> c_double;
pub fn b1950_c() -> c_double;
pub fn j1900_c() -> c_double;
pub fn j1950_c() -> c_double;
pub fn j2000_c() -> c_double;
pub fn j2100_c() -> c_double;
}