home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / star.lzh / star.4 < prev    next >
Encoding:
Text File  |  1990-03-27  |  48.1 KB  |  1,758 lines

  1. #! /bin/sh
  2. # This is a shell archive.  Remove anything before this line, then unpack
  3. # it by saving it into a file and typing "sh file".  To overwrite existing
  4. # files, type "sh file -c".  You can also feed this as standard input via
  5. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  6. # will see the following message at the end:
  7. #        "End of archive 4 (of 32)."
  8. # Contents:  observe/README observe/astlib.c observe/outaltaz.c
  9. #   observe/outeph.c observe/riseset.c starchart/parse_input.c
  10. #   starchart/parse_input.h starchart/star3.h
  11. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  12. if test -f 'observe/README' -a "${1}" != "-c" ; then 
  13.   echo shar: Will not clobber existing file \"'observe/README'\"
  14. else
  15. echo shar: Extracting \"'observe/README'\" \(5694 characters\)
  16. sed "s/^X//" >'observe/README' <<'END_OF_FILE'
  17. X1)
  18. Xdescrip.mms is for VMS; Observe.MSC  is for Microsoft  C on the IBMPC;
  19. XAstring.h is  for  use  on  the  Atari  ST where   it should  be named
  20. X'strings.h', since this header is apparently not provided with MWC.
  21. X
  22. X2)
  23. XYou may need to change things in main.c, especially the time functions
  24. Xand default location.
  25. X
  26. X3)
  27. XThe following awk scripts may be useful.  They are for use in editing
  28. Xthe .sif files produced when "observe" is used for a range of dates.
  29. XUse dataconv to produce a 'lineread' or 'binfull' file from the
  30. Xresulting editted .sif file.
  31. X
  32. XIf you don't have and can't get awk, you can edit the program to
  33. Xproduce the output you usually want.
  34. X
  35. Xvelim removes the labels from vector commands,
  36. Xe.g. 
  37. Xawk -f velim.awk jan.sif > jan.sif2
  38. Xdataconv -i jan.sif2 sif -o jan.binfull binfull
  39. X
  40. XTo eliminate all the symbols from the file, use 
  41. Xawk '($4 ~ /V./) {print $0}' FS=";" OFS=";" jan.sif > jan.sif2
  42. Xdataconv -i jan.sif2 sif -o jan.binfull binfull
  43. X
  44. Xrange.awk removes all but the first and last labels for each planet,
  45. Xand all but every Nth symbol.  M must equal the number of days in the
  46. Xrange of dates.
  47. Xe.g.
  48. Xawk -f range.awk N=7 M=31 jan.sif > jan.sif2
  49. Xdataconv -i jan.sif2 sif -o jan.binfull binfull
  50. X
  51. X
  52. Xaltaz.awk selects fields from the .altaz file.  Fields are printed in
  53. Xthe order azi alt, for obect NAME at time TIME, where TIME is
  54. X"sunset", "evetwil", morntwil", or "sunrise".
  55. Xe.g.
  56. Xawk -f altaz.awk TIME="evetwil" NAME="Austin" aus.altaz > aus.data
  57. X
  58. Xtimetable.awk selects fields from an .eph file for object NAME.  The
  59. Xfields may be specified as TIME ("rise", "trans", "set" ) or FIELD
  60. Xnumber, e.g.
  61. X
  62. Xawk -f timetable.awk NAME="Austin"  TIME="set" aus.eph > aus.set_times
  63. Xawk -f timetable.awk NAME="Austin"  FIELD=9 aus.eph > aus.mag
  64. X
  65. X
  66. X Copyright (c) 1990 by Craig Counterman. All rights reserved.
  67. X
  68. X This software may be redistributed freely, not sold.
  69. X This copyright notice and disclaimer of warranty must remain
  70. X    unchanged. 
  71. X
  72. X No representation is made about the suitability of this
  73. X software for any purpose.  It is provided "as is" without express or
  74. X implied warranty, to the extent permitted by applicable law.
  75. X
  76. X DISCLAIMER OF WARRANTY
  77. X ----------------------
  78. X The author  disclaims all warranties  with regard to  this software to
  79. X the   extent  permitted  by applicable   law,  including all   implied
  80. X warranties  of merchantability  and  fitness. In  no event shall   the
  81. X author be liable for any special, indirect or consequential damages or
  82. X any  damages whatsoever resulting from  loss of use, data or  profits,
  83. X whether in an action of contract, negligence or other tortious action,
  84. X arising  out of  or in connection with the  use or performance of this
  85. X software.
  86. X
  87. X#! /bin/sh
  88. X# This is a shell archive.  Remove anything before this line, then unpack
  89. X# it by saving it into a file and typing "sh file".  To overwrite existing
  90. X# files, type "sh file -c".  You can also feed this as standard input via
  91. X# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  92. X# will see the following message at the end:
  93. X#        "End of shell archive."
  94. X# Contents:  altaz.awk range.awk timetable.awk velim.awk
  95. XPATH=/bin:/usr/bin:/usr/ucb ; export PATH
  96. Xif test -f 'altaz.awk' -a "${1}" != "-c" ; then 
  97. X  echo shar: Will not clobber existing file \"'altaz.awk'\"
  98. Xelse
  99. Xecho shar: Extracting \"'altaz.awk'\" \(214 characters\)
  100. Xsed "s/^X//" >'altaz.awk' <<'END_OF_FILE'
  101. XXNR == 1 {if (TIME == "sunset")
  102. XX        var = 2
  103. XX    else if (TIME == "evetwil")
  104. XX        var = 4;
  105. XX    else if (TIME == "morntwil")
  106. XX        var = 6;
  107. XX    else if (TIME == "sunrise")
  108. XX        var = 8;
  109. XX    else
  110. XX        var = 4
  111. XX}
  112. XX$1 == NAME {print $(var+1), $var}
  113. XEND_OF_FILE
  114. Xif test 214 -ne `wc -c <'altaz.awk'`; then
  115. X    echo shar: \"'altaz.awk'\" unpacked with wrong size!
  116. Xfi
  117. X# end of 'altaz.awk'
  118. Xfi
  119. Xif test -f 'range.awk' -a "${1}" != "-c" ; then 
  120. X  echo shar: Will not clobber existing file \"'range.awk'\"
  121. Xelse
  122. Xecho shar: Extracting \"'range.awk'\" \(414 characters\)
  123. Xsed "s/^X//" >'range.awk' <<'END_OF_FILE'
  124. XXBEGIN {FS = OFS = ";";
  125. XX    i = 0}
  126. XX# eliminate labels from vectors
  127. XX$4 ~ /V./ {$8 = ""}
  128. XX# eliminate labels except from first and last
  129. XX# NPS = n planet symbol, number of planet lines for this planet 
  130. XX{NPS = 1+(NR-1)/2 - M*i}
  131. XX#{print NPS, (NPS % N)}
  132. XX(($4 ~ /P./) && ((NPS != 1) && (NPS != M))) {$8 = ""}
  133. XX
  134. XX(($4 ~ /V./) || (($4 ~ /P./) && ((NPS == 1) || (NPS == M) || ((NPS % N) == 1)))) {print $0}
  135. XX
  136. XX(NPS == M) {i = i + 1}
  137. XEND_OF_FILE
  138. Xif test 414 -ne `wc -c <'range.awk'`; then
  139. X    echo shar: \"'range.awk'\" unpacked with wrong size!
  140. Xfi
  141. X# end of 'range.awk'
  142. Xfi
  143. Xif test -f 'timetable.awk' -a "${1}" != "-c" ; then 
  144. X  echo shar: Will not clobber existing file \"'timetable.awk'\"
  145. Xelse
  146. Xecho shar: Extracting \"'timetable.awk'\" \(324 characters\)
  147. Xsed "s/^X//" >'timetable.awk' <<'END_OF_FILE'
  148. XXfunction hrtodec(t) {
  149. XX    split(t, tsplit, ":"); return tsplit[1] + (tsplit[2]/60.0)
  150. XX}
  151. XXBEGIN {i = 0}
  152. XXNR == 1  {if (TIME == "rise")
  153. XX        field = 6
  154. XX    else if (TIME == "trans")
  155. XX        field = 7
  156. XX    else if (TIME == "set")
  157. XX        field = 8
  158. XX    else if (FIELD != "")
  159. XX        field = FIELD
  160. XX    else
  161. XX        field = 7
  162. XX}
  163. XX$1 == NAME {i = i + 1; print i, hrtodec($field)}
  164. XEND_OF_FILE
  165. Xif test 324 -ne `wc -c <'timetable.awk'`; then
  166. X    echo shar: \"'timetable.awk'\" unpacked with wrong size!
  167. Xfi
  168. X# end of 'timetable.awk'
  169. Xfi
  170. Xif test -f 'velim.awk' -a "${1}" != "-c" ; then 
  171. X  echo shar: Will not clobber existing file \"'velim.awk'\"
  172. Xelse
  173. Xecho shar: Extracting \"'velim.awk'\" \(54 characters\)
  174. Xsed "s/^X//" >'velim.awk' <<'END_OF_FILE'
  175. XXBEGIN {FS = OFS = ";"}
  176. XX$4 ~ /V./ {$8 = ""}
  177. XX{print $0}
  178. XEND_OF_FILE
  179. Xif test 54 -ne `wc -c <'velim.awk'`; then
  180. X    echo shar: \"'velim.awk'\" unpacked with wrong size!
  181. Xfi
  182. X# end of 'velim.awk'
  183. Xfi
  184. Xecho shar: End of shell archive.
  185. Xexit 0
  186. END_OF_FILE
  187. if test 5694 -ne `wc -c <'observe/README'`; then
  188.     echo shar: \"'observe/README'\" unpacked with wrong size!
  189. fi
  190. # end of 'observe/README'
  191. fi
  192. if test -f 'observe/astlib.c' -a "${1}" != "-c" ; then 
  193.   echo shar: Will not clobber existing file \"'observe/astlib.c'\"
  194. else
  195. echo shar: Extracting \"'observe/astlib.c'\" \(5704 characters\)
  196. sed "s/^X//" >'observe/astlib.c' <<'END_OF_FILE'
  197. X/*
  198. X * astlib.c
  199. X * misc functions, including precession
  200. X *
  201. X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
  202. X *
  203. X * This software may be redistributed freely, not sold.
  204. X * This copyright notice and disclaimer of warranty must remain
  205. X *    unchanged. 
  206. X *
  207. X * No representation is made about the suitability of this
  208. X * software for any purpose.  It is provided "as is" without express or
  209. X * implied warranty, to the extent permitted by applicable law.
  210. X *
  211. X */
  212. X
  213. X
  214. X#ifndef  lint
  215. Xstatic char rcsid[] =
  216. X  "$Header: astlib.c,v 1.7 90/02/23 00:16:22 ccount Exp $";
  217. X#endif
  218. X
  219. X
  220. X#include <math.h>
  221. X#include "degree.h"
  222. X
  223. X/* Rigorous precession */
  224. X/* From Astronomical Ephemeris 1989, p. B18 */
  225. X/*
  226. Xfrom t_0 to t:
  227. X
  228. XA = 
  229. Xsin(alpha - z_A) cos(delta) = sin(alpha_0 + zeta_A) cos(delta_0);
  230. XB =
  231. Xcos(alpha - z_A) cos(delta) = cos(alpha_0 + zeta_A) cos(theta_A) cos(delta_0)
  232. X                - sin(theta_A) sin(delta_0);
  233. XC =
  234. X                 sin(delta) = cos(alpha_0 + zeta_A) sin(theta_A) cos(delta_0)
  235. X                + cos(theta_A) sin(delta_0);
  236. X
  237. Xdelta = asin(C);
  238. Xalpha = atan2(A/B) + z_A;
  239. X
  240. X
  241. X
  242. Xfrom t to t_0:
  243. X
  244. XA =
  245. Xsin(alpha_0 + zeta_A) cos(delta_0) = sin(alpha - z_A) cos(delta);
  246. X
  247. XB =
  248. Xcos(alpha_0 + zeta_A) cos(delta_0) = cos(alpha - z_A) cos(theta_A) cos(delta)
  249. X                + sin(theta_A) sin(delta);
  250. XC =
  251. X                      sin(delta_0) = -cos(alpha - z_A) sin(theta_A) cos(delta)
  252. X                + cos(theta_A) sin(delta)
  253. X
  254. Xdelta_0 = asin(C);
  255. Xalpha_0 = atan2(A,B) - zeta_A;
  256. X*/
  257. X
  258. X
  259. X
  260. X/* For reduction with respect to the standard epoch t_0 = J2000.0
  261. Xzeta_A  = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T
  262. X   Z_A  = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T
  263. Xtheta_A = 0.5567530* T - 0.0001185* T*T + 0.0000116* T*T*T
  264. X
  265. Xin degrees.
  266. X
  267. XT = (jd - 2451545.0)/36525.0;
  268. X
  269. Xalpha2000 = alpha_0;
  270. Xdelta2000 = delta_0;
  271. X*/
  272. X
  273. X
  274. Xvoid precess(from_equinox, to_equinox,
  275. X         alpha_in, delta_in, alpha_out, delta_out)
  276. X     double from_equinox, to_equinox,
  277. X       alpha_in, delta_in, *alpha_out, *delta_out;
  278. X{
  279. X  double zeta_A, z_A, theta_A;
  280. X  double T;
  281. X  double A, B, C;
  282. X  double alpha, delta;
  283. X  double alpha2000, delta2000;
  284. X  double into_range();
  285. X
  286. X
  287. X  /* From from_equinox to 2000.0 */
  288. X  if (from_equinox != 2000.0) {
  289. X    T = (from_equinox - 2000.0)/100.0;
  290. X    zeta_A  = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T;
  291. X    z_A     = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T;
  292. X    theta_A = 0.5567530* T - 0.0001185* T*T + 0.0000116* T*T*T;
  293. X
  294. X    A = DSIN(alpha_in - z_A) * DCOS(delta_in);
  295. X    B = DCOS(alpha_in - z_A) * DCOS(theta_A) * DCOS(delta_in)
  296. X      + DSIN(theta_A) * DSIN(delta_in);
  297. X    C = -DCOS(alpha_in - z_A) * DSIN(theta_A) * DCOS(delta_in)
  298. X      + DCOS(theta_A) * DSIN(delta_in);
  299. X
  300. X    alpha2000 = into_range(DATAN2(A,B) - zeta_A);
  301. X    delta2000 = DASIN(C);
  302. X  } else {
  303. X    /* should get the same answer, but this could improve accruacy */
  304. X    alpha2000 = alpha_in;
  305. X    delta2000 = delta_in;
  306. X  };
  307. X
  308. X
  309. X  /* From 2000.0 to to_equinox */
  310. X  if (to_equinox != 2000.0) {
  311. X    T = (to_equinox - 2000.0)/100.0;
  312. X    zeta_A  = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T;
  313. X    z_A     = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T;
  314. X    theta_A = 0.5567530* T - 0.0001185* T*T + 0.0000116* T*T*T;
  315. X
  316. X    A = DSIN(alpha2000 + zeta_A) * DCOS(delta2000);
  317. X    B = DCOS(alpha2000 + zeta_A) * DCOS(theta_A) * DCOS(delta2000)
  318. X      - DSIN(theta_A) * DSIN(delta2000);
  319. X    C = DCOS(alpha2000 + zeta_A) * DSIN(theta_A) * DCOS(delta2000)
  320. X      + DCOS(theta_A) * DSIN(delta2000);
  321. X
  322. X    alpha = into_range(DATAN2(A,B) + z_A);
  323. X    delta = DASIN(C);
  324. X  } else {
  325. X    /* should get the same answer, but this could improve accruacy */
  326. X    alpha = alpha2000;
  327. X    delta = delta2000;
  328. X  };
  329. X
  330. X  *alpha_out = alpha;
  331. X  *delta_out = delta;
  332. X}
  333. X
  334. X
  335. X/* Obliquity epsilon 
  336. Xepsilon = 23.439291 - 0.0130042* T - 0.00000016* T*T - 0.000000504* T*T*T;
  337. X*/
  338. Xdouble obl_jd(jd)
  339. Xdouble jd;
  340. X{
  341. X  double T = (jd - 2451545.0)/36525.0;
  342. X
  343. X  return (23.439291 - 0.0130042* T - 0.00000016* T*T - 0.000000504* T*T*T);
  344. X}
  345. X
  346. Xdouble obl_year(year)
  347. Xdouble year;
  348. X{
  349. X  double T = (year - 2000.0)/100.0;
  350. X
  351. X  return (23.439291 - 0.0130042* T - 0.00000016* T*T - 0.000000504* T*T*T);
  352. X}
  353. X
  354. Xvoid anom_calc(M, e, E_p, nu_p)
  355. X     double M, e, *E_p, *nu_p;
  356. X{
  357. X  double corr, e_0, E_0, E_1;
  358. X
  359. X  e_0 = e * RAD_TO_DEG;
  360. X
  361. X  corr = 1;
  362. X  E_0 = M;
  363. X  while (corr > 0.000001) {
  364. X    corr = (M + e_0 * DSIN(E_0) - E_0)/(1 - e * DCOS(E_0));
  365. X    E_1 = E_0 + corr;
  366. X    if (corr < 0) corr *= -1.0;
  367. X    E_0 = E_1;
  368. X  };
  369. X    
  370. X  *E_p = E_1;
  371. X
  372. X  *nu_p = 2.0 * RAD_TO_DEG * atan(sqrt((1+e)/(1-e))*DTAN(E_1/2));
  373. X}
  374. X
  375. X
  376. X/* 
  377. XGMST = 24110.54841 + 8640184.812866 * T_u + 0.093104 *T_u*T_u - 6.2e-6*T_u*T_u*T_u
  378. X
  379. XT_u = (jd - 2451545.0)/36525.0
  380. X
  381. X1.00273790934
  382. XGAST = apparent siderial time
  383. X = GMST + (total nutation in longitude)cos epsilon
  384. X*/
  385. Xdouble gmst0_degrees(jd)
  386. X     double jd;
  387. X{
  388. X  double T;
  389. X  double secs;
  390. X  double into_range();
  391. X
  392. X  T = (jd - 2451545.0)/36525.0;
  393. X  
  394. X  secs = 24110.54841 + 8640184.812866 * T + 0.093104 *T*T - 6.2e-6*T*T*T;
  395. X
  396. X  return into_range(secs/240.0);
  397. X}
  398. X
  399. X
  400. Xdouble into_range(ang)
  401. X     double ang;
  402. X{
  403. X  long i;
  404. X
  405. X  while (ang < 0.0) ang += 360.0;
  406. X  /* Shouldn't be more than once */
  407. X
  408. X  i = (long)floor(ang/360.0);
  409. X
  410. X  ang = ang - i * 360;
  411. X
  412. X  return(ang);
  413. X}
  414. X
  415. Xvoid altaz(jd, lat, lon, zone, height, alpha, delta, hour, alt, azi)
  416. X     double jd;
  417. X     double lat, lon, zone, height;
  418. X     double alpha, delta;
  419. X     double hour;
  420. X     double *alt, *azi;
  421. X{
  422. X  double jd0;
  423. X  double ha;
  424. X
  425. X  jd0 = ((long) (jd + 0.5001)) - .5; /* round to nearest midnight */
  426. X
  427. X  ha = gmst0_degrees(jd0) + (hour*15.0 - zone*15.0) * 1.00273790934
  428. X    + lon - alpha;
  429. X
  430. X  *alt = DASIN(DSIN(delta)*DSIN(lat) + DCOS(delta)*DCOS(lat)*DCOS(ha));
  431. X  *azi = DATAN2(-DCOS(delta)*DSIN(ha),
  432. X           DSIN(delta)*DCOS(lat) - DCOS(delta)*DCOS(ha)*DSIN(lat));
  433. X  *azi = (*azi < 0.0 ? 360 + *azi: *azi);
  434. X}
  435. END_OF_FILE
  436. if test 5704 -ne `wc -c <'observe/astlib.c'`; then
  437.     echo shar: \"'observe/astlib.c'\" unpacked with wrong size!
  438. fi
  439. # end of 'observe/astlib.c'
  440. fi
  441. if test -f 'observe/outaltaz.c' -a "${1}" != "-c" ; then 
  442.   echo shar: Will not clobber existing file \"'observe/outaltaz.c'\"
  443. else
  444. echo shar: Extracting \"'observe/outaltaz.c'\" \(4310 characters\)
  445. sed "s/^X//" >'observe/outaltaz.c' <<'END_OF_FILE'
  446. X/*
  447. X * outaltaz.c
  448. X * output altaz file
  449. X *
  450. X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
  451. X *
  452. X * This software may be redistributed freely, not sold.
  453. X * This copyright notice and disclaimer of warranty must remain
  454. X *    unchanged. 
  455. X *
  456. X * No representation is made about the suitability of this
  457. X * software for any purpose.  It is provided "as is" without express or
  458. X * implied warranty, to the extent permitted by applicable law.
  459. X *
  460. X */
  461. X
  462. X#ifndef  lint
  463. Xstatic char rcsid[] =
  464. X  "$Header: outaltaz.c,v 1.3 90/02/19 17:20:53 ccount Exp $";
  465. X#endif
  466. X
  467. X
  468. X#include <stdio.h>
  469. X#ifndef SYSV
  470. X#include <strings.h>
  471. X#else
  472. X#include <string.h>
  473. X#endif
  474. X#include "observe.h"
  475. X#include "date.h"
  476. X
  477. X#ifndef FALSE
  478. X#define FALSE 0
  479. X#endif
  480. X#ifndef TRUE
  481. X#define TRUE 1
  482. X#endif
  483. X
  484. X
  485. Xchar *malloc();
  486. X
  487. Xvoid altaz();
  488. X
  489. X
  490. X/* Output altaz file for object(s) */
  491. Xvoid out_altaz(o_altaz, one_day, jd,
  492. X           lon, lat, zone, height,
  493. X           sun_data, moon_data, planets, bodies, nbodies, objects, nobjects)
  494. X     FILE *o_altaz;
  495. X     int one_day;        /* only doing one day */
  496. X     double jd;
  497. X     double lon, lat, zone, height;
  498. X     sun_data_t sun_data;
  499. X     moon_data_t moon_data;
  500. X     planet_data_t planets[];
  501. X     wanderer_data_t bodies[];
  502. X     int nbodies;
  503. X     obj_data_t objects[];
  504. X     int nobjects;
  505. X{
  506. X  int i;
  507. X  char datestr[15];
  508. X  double rise_hr, set_hr, eve_twil, morn_twil;
  509. X  double alt1, az1, alt2, az2, alt3, az3, alt4, az4;
  510. X
  511. X  jd_to_str(jd, datestr);
  512. X  if (!one_day) fprintf(o_altaz, "%s  %.3f\n", datestr, jd);
  513. X
  514. X  rise_hr = sun_data.rise_hour;
  515. X  set_hr = sun_data.set_hour;
  516. X  morn_twil = morntwil(jd, lon, lat, zone, height, sun_data);
  517. X  eve_twil = evetwil(jd, lon, lat, zone, height, sun_data);
  518. X  fprintf(o_altaz,
  519. X"name       at sun set    eve. twil.   morn. twil.   at sun rise\n");
  520. X
  521. X
  522. X  altaz(jd, lat, lon, zone, height, sun_data.alpha, sun_data.delta,
  523. X    set_hr, &alt1, &az1);
  524. X  altaz(jd, lat, lon, zone, height, sun_data.alpha, sun_data.delta,
  525. X    eve_twil, &alt2, &az2);
  526. X  altaz(jd, lat, lon, zone, height, sun_data.alpha, sun_data.delta,
  527. X    morn_twil, &alt3, &az3);
  528. X  altaz(jd, lat, lon, zone, height, sun_data.alpha, sun_data.delta,
  529. X    rise_hr, &alt4, &az4);
  530. X  
  531. X  fprintf(o_altaz,
  532. X      "%-7.7s %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f\n",
  533. X      "Sun",
  534. X      alt1, az1,
  535. X      alt2, az2,
  536. X      alt3, az3,
  537. X      alt4, az4
  538. X      );
  539. X
  540. X  for (i = 0; i < 7; i++)
  541. X    if (planets[i].name[0]) {
  542. X      altaz(jd, lat, lon, zone, height, planets[i].alpha, planets[i].delta,
  543. X        set_hr, &alt1, &az1);
  544. X      altaz(jd, lat, lon, zone, height, planets[i].alpha, planets[i].delta,
  545. X        eve_twil, &alt2, &az2);
  546. X      altaz(jd, lat, lon, zone, height, planets[i].alpha, planets[i].delta,
  547. X        morn_twil, &alt3, &az3);
  548. X      altaz(jd, lat, lon, zone, height, planets[i].alpha, planets[i].delta,
  549. X        rise_hr, &alt4, &az4);
  550. X      fprintf(o_altaz,
  551. X          "%-7.7s %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f\n",
  552. X          planets[i].name,
  553. X          alt1, az1,
  554. X          alt2, az2,
  555. X          alt3, az3,
  556. X          alt4, az4
  557. X          );
  558. X    };
  559. X
  560. X
  561. X  for (i = 0; i < nbodies; i++) {
  562. X      altaz(jd, lat, lon, zone, height, bodies[i].alpha, bodies[i].delta,
  563. X        set_hr, &alt1, &az1);
  564. X      altaz(jd, lat, lon, zone, height, bodies[i].alpha, bodies[i].delta,
  565. X        eve_twil, &alt2, &az2);
  566. X      altaz(jd, lat, lon, zone, height, bodies[i].alpha, bodies[i].delta,
  567. X        morn_twil, &alt3, &az3);
  568. X      altaz(jd, lat, lon, zone, height, bodies[i].alpha, bodies[i].delta,
  569. X        rise_hr, &alt4, &az4);
  570. X      fprintf(o_altaz,
  571. X          "%-7.7s %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f\n",
  572. X          bodies[i].name,
  573. X          alt1, az1,
  574. X          alt2, az2,
  575. X          alt3, az3,
  576. X          alt4, az4
  577. X          );
  578. X  };
  579. X
  580. X  for (i = 0; i < nobjects; i++) {
  581. X      altaz(jd, lat, lon, zone, height, objects[i].alpha, objects[i].delta,
  582. X        set_hr, &alt1, &az1);
  583. X      altaz(jd, lat, lon, zone, height, objects[i].alpha, objects[i].delta,
  584. X        eve_twil, &alt2, &az2);
  585. X      altaz(jd, lat, lon, zone, height, objects[i].alpha, objects[i].delta,
  586. X        morn_twil, &alt3, &az3);
  587. X      altaz(jd, lat, lon, zone, height, objects[i].alpha, objects[i].delta,
  588. X        rise_hr, &alt4, &az4);
  589. X      fprintf(o_altaz,
  590. X          "%-7.7s %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f\n",
  591. X          objects[i].name,
  592. X          alt1, az1,
  593. X          alt2, az2,
  594. X          alt3, az3,
  595. X          alt4, az4
  596. X          );
  597. X  };
  598. X
  599. X  if (!one_day) fprintf(o_altaz, "\f\n");
  600. X}
  601. END_OF_FILE
  602. if test 4310 -ne `wc -c <'observe/outaltaz.c'`; then
  603.     echo shar: \"'observe/outaltaz.c'\" unpacked with wrong size!
  604. fi
  605. # end of 'observe/outaltaz.c'
  606. fi
  607. if test -f 'observe/outeph.c' -a "${1}" != "-c" ; then 
  608.   echo shar: Will not clobber existing file \"'observe/outeph.c'\"
  609. else
  610. echo shar: Extracting \"'observe/outeph.c'\" \(5903 characters\)
  611. sed "s/^X//" >'observe/outeph.c' <<'END_OF_FILE'
  612. X/*
  613. X * outeph.c
  614. X * output ephemeris file
  615. X *
  616. X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
  617. X *
  618. X * This software may be redistributed freely, not sold.
  619. X * This copyright notice and disclaimer of warranty must remain
  620. X *    unchanged. 
  621. X *
  622. X * No representation is made about the suitability of this
  623. X * software for any purpose.  It is provided "as is" without express or
  624. X * implied warranty, to the extent permitted by applicable law.
  625. X *
  626. X */
  627. X
  628. X#ifndef  lint
  629. Xstatic char rcsid[] =
  630. X  "$Header: outeph.c,v 1.11 90/03/06 00:09:35 ccount Exp $";
  631. X#endif
  632. X
  633. X
  634. X#include <stdio.h>
  635. X#ifndef SYSV
  636. X#include <strings.h>
  637. X#else
  638. X#include <string.h>
  639. X#endif
  640. X#include "observe.h"
  641. X#include "date.h"
  642. X
  643. X#ifndef FALSE
  644. X#define FALSE 0
  645. X#endif
  646. X#ifndef TRUE
  647. X#define TRUE 1
  648. X#endif
  649. X
  650. X
  651. Xvoid raformat(), decformat(), timeformat();
  652. Xchar *malloc();
  653. X
  654. X
  655. X/* Output ephemeris file for object(s) */
  656. Xvoid out_eph(o_eph, one_day, jd,
  657. X         sun_data, moon_data, planets, bodies, nbodies, objects, nobjects)
  658. X     FILE *o_eph;
  659. X     int one_day;        /* only doing one day */
  660. X     double jd;
  661. X     sun_data_t sun_data;
  662. X     moon_data_t moon_data;
  663. X     planet_data_t planets[];
  664. X     wanderer_data_t bodies[];
  665. X     int nbodies;
  666. X     obj_data_t objects[];
  667. X     int nobjects;
  668. X{
  669. X  int i;
  670. X  char datestr[15];
  671. X  char rastr1[15], rastr2[15];
  672. X  char decstr1[15], decstr2[15];
  673. X  char risestr[6], setstr[6], transitstr[6];
  674. X  char Delta_str[6], r_str[6];
  675. X
  676. X
  677. X  jd_to_str(jd, datestr);
  678. X  if (!one_day) fprintf(o_eph, "%s  %.3f\n", datestr, jd);
  679. X
  680. X
  681. X  fprintf(o_eph,
  682. X"name   RA2000.0  Dec2000.0  RA epoch  Dec epoch  rise  trans set   mag    size   elong. phase Delta r\n");
  683. X
  684. X  raformat(sun_data.alpha2000/15.0, rastr1);
  685. X  raformat(sun_data.alpha/15.0, rastr2);
  686. X  decformat(sun_data.delta2000, decstr1);
  687. X  decformat(sun_data.delta, decstr2);
  688. X  timeformat(sun_data.rise_hour, risestr);
  689. X  timeformat(sun_data.transit_hour, transitstr);
  690. X  timeformat(sun_data.set_hour, setstr);
  691. X  fprintf(o_eph,
  692. X      "%-7.7s %s %s %s %s %s %s %s %5.1f %6.1f              %5.2f\n",
  693. X      "Sun",
  694. X      rastr1, decstr1,
  695. X      rastr2, decstr2,
  696. X      risestr, transitstr, setstr,
  697. X      -26.0, sun_data.size, sun_data.R);
  698. X
  699. X  raformat(moon_data.alpha2000/15.0, rastr1);
  700. X  raformat(moon_data.alpha/15.0, rastr2);
  701. X  decformat(moon_data.delta2000, decstr1);
  702. X  decformat(moon_data.delta, decstr2);
  703. X  timeformat(moon_data.rise_hour, risestr);
  704. X  timeformat(moon_data.transit_hour, transitstr);
  705. X  timeformat(moon_data.set_hour, setstr);
  706. X  fprintf(o_eph,
  707. X     "%-7.7s %s %s %s %s %s %s %s %5.1f %6.1f        %5.3f %5.2f\n",
  708. X      "Moon",
  709. X      rastr1, decstr1,
  710. X      rastr2, decstr2,
  711. X      risestr, transitstr, setstr,
  712. X      moon_data.mag, moon_data.size, moon_data.illum_frac,
  713. X      moon_data.Delta/10000.0);
  714. X
  715. X
  716. X  for (i = 0; i < 7; i++)
  717. X    if (planets[i].name[0]) {
  718. X      raformat(planets[i].alpha2000/15.0, rastr1);
  719. X      raformat(planets[i].alpha/15.0, rastr2);
  720. X      decformat(planets[i].delta2000, decstr1);
  721. X      decformat(planets[i].delta, decstr2);
  722. X      timeformat(planets[i].eventlist[0].hour, risestr);
  723. X      timeformat(planets[i].eventlist[3].hour, transitstr);
  724. X      timeformat(planets[i].eventlist[6].hour, setstr);
  725. X      fprintf(o_eph,
  726. X        "%-7.7s %s %s %s %s %s %s %s %5.2f %6.1f %6.1f %5.3f %5.2f %5.2f\n",
  727. X          planets[i].name,
  728. X          rastr1, decstr1,
  729. X          rastr2, decstr2,
  730. X          risestr, transitstr, setstr,
  731. X          planets[i].mag, planets[i].size,
  732. X          planets[i].psi, planets[i].illum_frac,
  733. X          planets[i].Delta, planets[i].r);
  734. X    };
  735. X
  736. X
  737. X  for (i = 0; i < nbodies; i++) {
  738. X    raformat(bodies[i].alpha2000/15.0, rastr1);
  739. X    raformat(bodies[i].alpha/15.0, rastr2);
  740. X    decformat(bodies[i].delta2000, decstr1);
  741. X    decformat(bodies[i].delta, decstr2);
  742. X    timeformat(bodies[i].eventlist[0].hour, risestr);
  743. X    timeformat(bodies[i].eventlist[3].hour, transitstr);
  744. X    timeformat(bodies[i].eventlist[6].hour, setstr);
  745. X    if (bodies[i].Delta < 0.0) {
  746. X      strcpy(Delta_str, "-----");
  747. X    } else {
  748. X      sprintf(Delta_str, "%5.2f", bodies[i].Delta);
  749. X    };
  750. X    if (bodies[i].r < 0.0) {
  751. X      strcpy(r_str, "-----");
  752. X    } else {
  753. X      sprintf(r_str, "%5.2f", bodies[i].r);
  754. X    };
  755. X
  756. X    fprintf(o_eph,
  757. X      "%-7.7s %s %s %s %s %s %s %s %5.2f                     %s %s\n",
  758. X        bodies[i].name,
  759. X        rastr1, decstr1,
  760. X        rastr2, decstr2,
  761. X        risestr, transitstr, setstr,
  762. X        bodies[i].mag, Delta_str, r_str);
  763. X  };
  764. X
  765. X  for (i = 0; i < nobjects; i++) {
  766. X    raformat(objects[i].alpha2000/15.0, rastr1);
  767. X    raformat(objects[i].alpha/15.0, rastr2);
  768. X    decformat(objects[i].delta2000, decstr1);
  769. X    decformat(objects[i].delta, decstr2);
  770. X    timeformat(objects[i].rise_hour, risestr);
  771. X    timeformat(objects[i].transit_hour, transitstr);
  772. X    timeformat(objects[i].set_hour, setstr);
  773. X    fprintf(o_eph,
  774. X      "%-7.7s %s %s %s %s %s %s %s %5.2f %6.1f\n",
  775. X        objects[i].name,
  776. X        rastr1, decstr1,
  777. X        rastr2, decstr2,
  778. X        risestr, transitstr, setstr, objects[i].mag, objects[i].size);
  779. X  };
  780. X  if (!one_day) fprintf(o_eph, "\f\n");
  781. X}
  782. X
  783. Xvoid raformat(ra, str)
  784. X     double ra;
  785. X     char str[];
  786. X{
  787. X  int h, m, s;
  788. X
  789. X  h = ra;
  790. X  m = (ra-h)*60;
  791. X  s = ((ra-h)*60 - m)*60 + .5;
  792. X  if (s == 60) {
  793. X    s = 0;
  794. X    m++;
  795. X  };
  796. X  if (m == 60) {
  797. X    m = 0;
  798. X    h++;
  799. X  }
  800. X  if (h == 24) h = 0;
  801. X  sprintf(str, "%02dh%02dm%02ds", h, m, s);
  802. X}
  803. X
  804. Xvoid decformat(dec, str)
  805. X     double dec;
  806. X     char str[];
  807. X{
  808. X  int h, m, s;
  809. X  char sign_char = ' ';
  810. X
  811. X  if (dec < 0) {
  812. X    sign_char = '-';
  813. X    dec = -dec;
  814. X  };
  815. X
  816. X  h = dec;
  817. X  m = (dec-h)*60;
  818. X  s = ((dec-h)*60 - m)*60 + .5;
  819. X  if (s == 60) {
  820. X    s = 0;
  821. X    m++;
  822. X  };
  823. X  if (m == 60) {
  824. X    m = 0;
  825. X    h++;
  826. X  }
  827. X
  828. X  sprintf(str, "%c%02dd%02dm%02ds", sign_char, h, m, s);
  829. X}
  830. X
  831. Xvoid timeformat(time, str)
  832. X     double time;        /* Hours */
  833. X     char str[];
  834. X{
  835. X  int hrs, mins;
  836. X
  837. X  if (time < 0.0) strcpy(str, "-----");
  838. X  else {
  839. X    hrs = time;
  840. X    mins = (time-hrs)*60.0 + 0.5;
  841. X    if (mins == 60)
  842. X      {
  843. X       hrs = (hrs == 23) ? 0 :(hrs+1);
  844. X       mins = 0;
  845. X      }
  846. X    sprintf(str, "%02d:%02d", hrs, mins);
  847. X  };
  848. X}
  849. END_OF_FILE
  850. if test 5903 -ne `wc -c <'observe/outeph.c'`; then
  851.     echo shar: \"'observe/outeph.c'\" unpacked with wrong size!
  852. fi
  853. # end of 'observe/outeph.c'
  854. fi
  855. if test -f 'observe/riseset.c' -a "${1}" != "-c" ; then 
  856.   echo shar: Will not clobber existing file \"'observe/riseset.c'\"
  857. else
  858. echo shar: Extracting \"'observe/riseset.c'\" \(5175 characters\)
  859. sed "s/^X//" >'observe/riseset.c' <<'END_OF_FILE'
  860. X/*
  861. X * riseset.c
  862. X * calculate rise and set times of objects, sun, moon
  863. X *
  864. X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
  865. X *
  866. X * This software may be redistributed freely, not sold.
  867. X * This copyright notice and disclaimer of warranty must remain
  868. X *    unchanged. 
  869. X *
  870. X * No representation is made about the suitability of this
  871. X * software for any purpose.  It is provided "as is" without express or
  872. X * implied warranty, to the extent permitted by applicable law.
  873. X *
  874. X */
  875. X
  876. X#ifndef  lint
  877. Xstatic char rcsid[] =
  878. X  "$Header: riseset.c,v 1.6 90/02/23 00:17:03 ccount Exp $";
  879. X#endif
  880. X
  881. X#include <math.h>
  882. X
  883. X#include "observe.h"
  884. X#include "degree.h"
  885. X
  886. X#ifndef FALSE
  887. X#define FALSE 0
  888. X#endif
  889. X#ifndef TRUE
  890. X#define TRUE 1
  891. X#endif
  892. X
  893. Xdouble gmst0_degrees();
  894. X
  895. Xdouble risetime(rise, jd, alt, lat, lon, zone, height, alpha, delta)
  896. X     int rise;
  897. X     double jd;
  898. X     double alt;
  899. X     double lat, lon, zone, height;
  900. X     double alpha, delta;
  901. X{
  902. X  double H_0;
  903. X  double jd0;
  904. X  double cos_term;
  905. X  double hour;
  906. X
  907. X  jd0 = ((long) (jd + 0.5001)) - .5; /* round to nearest midnight */
  908. X
  909. X  cos_term = (DSIN(alt) - DSIN(lat) * DSIN(delta))/(DCOS(lat)*DCOS(delta));
  910. X
  911. X  if (cos_term < -1.0)        /* Never rises or sets */
  912. X    return -1.0;
  913. X  if (cos_term > 1.0)        /* Never rises or sets */
  914. X    return -1.0;
  915. X
  916. X  H_0 = RAD_TO_DEG * acos(cos_term);
  917. X
  918. X  if (rise) H_0 *= -1.0;
  919. X
  920. X  hour = (H_0 + alpha - gmst0_degrees(jd0) - lon) / 1.00273790934 + zone*15.0;
  921. X
  922. X  hour = into_range(hour);
  923. X
  924. X  return (hour/15.0);
  925. X}
  926. X
  927. Xdouble sunrise(jd, lon, lat, zone, height, sun_data)
  928. X     double jd;
  929. X     double lon, lat, zone, height;
  930. X     sun_data_t sun_data;
  931. X{
  932. X  return risetime(TRUE, jd, -0.566666667, lat, lon, zone, height,
  933. X          sun_data.alpha, sun_data.delta);
  934. X}
  935. X
  936. Xdouble suntransit(jd, lon, lat, zone, height, sun_data)
  937. X     double jd;
  938. X     double lon, lat, zone, height;
  939. X     sun_data_t sun_data;
  940. X{
  941. X  double hour;
  942. X  double jd0;
  943. X
  944. X
  945. X  jd0 = ((long) (jd + 0.5001)) - .5; /* round to nearest midnight */
  946. X
  947. X  hour = (sun_data.alpha - gmst0_degrees(jd0) - lon) / 1.00273790934
  948. X    + zone*15.0;
  949. X  hour = into_range(hour);
  950. X
  951. X  return (hour/15.0);
  952. X}
  953. X
  954. Xdouble sunset(jd, lon, lat, zone, height, sun_data)
  955. X     double jd;
  956. X     double lon, lat, zone, height;
  957. X     sun_data_t sun_data;
  958. X{
  959. X  return risetime(FALSE, jd, -0.566666667, lat, lon, zone, height,
  960. X          sun_data.alpha, sun_data.delta);
  961. X}
  962. X
  963. X
  964. Xdouble morntwil(jd, lon, lat, zone, height, sun_data)
  965. X     double jd;
  966. X     double lon, lat, zone, height;
  967. X     sun_data_t sun_data;
  968. X{
  969. X  return risetime(TRUE, jd, -18.0, lat, lon, zone, height,
  970. X          sun_data.alpha, sun_data.delta);
  971. X}
  972. X
  973. X
  974. Xdouble evetwil(jd, lon, lat, zone, height, sun_data)
  975. X     double jd;
  976. X     double lon, lat, zone, height;
  977. X     sun_data_t sun_data;
  978. X{
  979. X  return risetime(FALSE, jd, -18.0, lat, lon, zone, height,
  980. X          sun_data.alpha, sun_data.delta);
  981. X}
  982. X
  983. X
  984. Xdouble moonrise(jd, lon, lat, zone, height, moon_data)
  985. X     double jd;
  986. X     double lon, lat, zone, height;
  987. X     moon_data_t moon_data;
  988. X{
  989. X  return risetime(TRUE, jd, -0.566666667, lat, lon, zone, height,
  990. X          moon_data.alpha, moon_data.delta);
  991. X}
  992. X
  993. Xdouble moontransit(jd, lon, lat, zone, height, moon_data)
  994. X     double jd;
  995. X     double lon, lat, zone, height;
  996. X     moon_data_t moon_data;
  997. X{
  998. X  double hour;
  999. X  double jd0;
  1000. X
  1001. X
  1002. X  jd0 = ((long) (jd + 0.5001)) - .5; /* round to nearest midnight */
  1003. X
  1004. X  hour = (moon_data.alpha - gmst0_degrees(jd0) - lon) / 1.00273790934
  1005. X    + zone*15.0;
  1006. X  hour = into_range(hour);
  1007. X
  1008. X  return (hour/15.0);
  1009. X}
  1010. X
  1011. Xdouble moonset(jd, lon, lat, zone, height, moon_data)
  1012. X     double jd;
  1013. X     double lon, lat, zone, height;
  1014. X     moon_data_t moon_data;
  1015. X{
  1016. X  return risetime(FALSE, jd, -0.566666667, lat, lon, zone, height,
  1017. X          moon_data.alpha, moon_data.delta);
  1018. X}
  1019. X
  1020. Xdouble objrise(jd, lon, lat, zone, height, alpha, delta)
  1021. X     double jd, lon, lat, zone, height, alpha, delta;
  1022. X{
  1023. X  return risetime(TRUE, jd, -0.566666667, lat, lon, zone, height,
  1024. X          alpha, delta);
  1025. X}
  1026. X
  1027. Xdouble objrise20(jd, lon, lat, zone, height, alpha, delta)
  1028. X     double jd, lon, lat, zone, height, alpha, delta;
  1029. X{
  1030. X  return risetime(TRUE, jd, 20.0, lat, lon, zone, height, alpha, delta);
  1031. X}
  1032. X
  1033. Xdouble objrise30(jd, lon, lat, zone, height, alpha, delta)
  1034. X     double jd, lon, lat, zone, height, alpha, delta;
  1035. X{
  1036. X  return risetime(TRUE, jd, 30.0, lat, lon, zone, height, alpha, delta);
  1037. X}
  1038. X
  1039. Xdouble objtransit(jd, lon, lat, zone, height, alpha, delta)
  1040. X     double jd, lon, lat, zone, height, alpha, delta;
  1041. X{
  1042. X  double hour;
  1043. X  double jd0;
  1044. X
  1045. X
  1046. X  jd0 = ((long) (jd + 0.5001)) - .5; /* round to nearest midnight */
  1047. X
  1048. X  hour = (alpha - gmst0_degrees(jd0) - lon) / 1.00273790934 + zone*15.0;
  1049. X
  1050. X  hour = into_range(hour);
  1051. X
  1052. X  return (hour/15.0);
  1053. X}
  1054. X
  1055. Xdouble objset30(jd, lon, lat, zone, height, alpha, delta)
  1056. X     double jd, lon, lat, zone, height, alpha, delta;
  1057. X{
  1058. X  return risetime(FALSE, jd, 30.0, lat, lon, zone, height, alpha, delta);
  1059. X}
  1060. X
  1061. Xdouble objset20(jd, lon, lat, zone, height, alpha, delta)
  1062. X     double jd, lon, lat, zone, height, alpha, delta;
  1063. X{
  1064. X  return risetime(FALSE, jd, 20.0, lat, lon, zone, height, alpha, delta);
  1065. X}
  1066. X
  1067. Xdouble objset(jd, lon, lat, zone, height, alpha, delta)
  1068. X     double jd, lon, lat, zone, height, alpha, delta;
  1069. X{
  1070. X  return risetime(FALSE, jd, -0.566666667, lat, lon, zone, height,
  1071. X          alpha, delta);
  1072. X}
  1073. X
  1074. X
  1075. END_OF_FILE
  1076. if test 5175 -ne `wc -c <'observe/riseset.c'`; then
  1077.     echo shar: \"'observe/riseset.c'\" unpacked with wrong size!
  1078. fi
  1079. # end of 'observe/riseset.c'
  1080. fi
  1081. if test -f 'starchart/parse_input.c' -a "${1}" != "-c" ; then 
  1082.   echo shar: Will not clobber existing file \"'starchart/parse_input.c'\"
  1083. else
  1084. echo shar: Extracting \"'starchart/parse_input.c'\" \(5244 characters\)
  1085. sed "s/^X//" >'starchart/parse_input.c' <<'END_OF_FILE'
  1086. X/*
  1087. X * Parse .rc file and interactive input
  1088. X *
  1089. X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
  1090. X *
  1091. X * This software may be redistributed freely, not sold.
  1092. X * This copyright notice and disclaimer of warranty must remain
  1093. X *    unchanged. 
  1094. X *
  1095. X * No representation is made about the suitability of this
  1096. X * software for any purpose.  It is provided "as is" without express or
  1097. X * implied warranty, to the extent permitted by applicable law.
  1098. X *
  1099. X */
  1100. X
  1101. X
  1102. X
  1103. Xstatic char rcsid[]="$Header: parse_input.c,v 1.5 90/02/19 17:52:54 ccount Exp $";
  1104. X
  1105. X#include <ctype.h>
  1106. X#include "star3.h"
  1107. X#define PARSE_INPUT
  1108. X#include "parse_input.h"
  1109. X  
  1110. X#define LINELEN 81
  1111. X
  1112. Xstatic char var_name[LINELEN];
  1113. X
  1114. X/* Parse input line, return data from keyword map in pointers,
  1115. X   c_buf is always set to the string after the = if any,
  1116. X   otherwise c_buf = v_name
  1117. X   return value is TRUE if valid input, FALSE if not.
  1118. X   validity of input is determined by the variable_type field in keyword_map
  1119. X   if the string can be parsed as that type, return TRUE */
  1120. Xint parse_line(sbuf, v_name, r_code, var_type, c_buf, f_buf, i_buf, l_buf)
  1121. X     char *sbuf;
  1122. X     char **v_name;
  1123. X     int *r_code;
  1124. X     int *var_type;
  1125. X     char **c_buf;        /* parsed as character string */
  1126. X     double *f_buf;        /* parsed as double */
  1127. X     int *i_buf;        /* parsed as integer */
  1128. X     int *l_buf;        /* parsed as logical (TRUE or FALSE) */
  1129. X{
  1130. X  char *cp;
  1131. X  char tbuf1[LINELEN];
  1132. X  int i;
  1133. X  int i_flag, f_flag, l_flag;    /* parsing successful */
  1134. X
  1135. X  /* remove trailing \n */
  1136. X  i = strlen(sbuf);
  1137. X  if (sbuf[i-1] == '\n') sbuf[i-1] = '\0';
  1138. X
  1139. X  /* eliminate comments */
  1140. X  for (i=0; ((i <= LINELEN) && (sbuf[i])); i++)
  1141. X    if (sbuf[i] == '#') sbuf[i] = '\0';
  1142. X  
  1143. X  /* Convert "var_name=value" to "var_name value" */
  1144. X  for (i=0; ((i <= LINELEN) && (sbuf[i])); i++)
  1145. X      if (sbuf[i] == '=') sbuf[i] = ' ';
  1146. X  sbuf[i] = '\0';    
  1147. X  
  1148. X  /* scan variable name, value */
  1149. X  /* everything to first space is var_name */
  1150. X  for (i=0; ((i<=LINELEN) && (sbuf[i] != ' ') && (sbuf[i] != '\t')
  1151. X         && (sbuf[i])); i++)
  1152. X    var_name[i] = sbuf[i];
  1153. X  var_name[i++] = '\0';
  1154. X
  1155. X  /* everything after is value, put in cp */
  1156. X  if (var_name[0]) cp = &sbuf[i];
  1157. X  else cp = var_name;
  1158. X
  1159. X  /* Remove leading and trailing spaces, newlines and tabs from cp */
  1160. X  while ((cp[0] == ' ') || (cp[0] == '\t')) cp++;
  1161. X  for (i = strlen(cp) - 1;  ((i >= 0) && ((cp[i] == ' ') || (cp[i] == '\t')));
  1162. X       i--);
  1163. X  if (i != 0) cp[i+1] = '\0';
  1164. X
  1165. X
  1166. X  /* lowercase var_name */
  1167. X  for (i = 0; var_name[i]; i++)
  1168. X    if (isupper(var_name[i]))
  1169. X      var_name[i] = tolower(var_name[i]);
  1170. X  
  1171. X  
  1172. X  
  1173. X  /* variable value may be a string, double, integer, or logical value */
  1174. X  f_flag = (sscanf(sbuf,"%*s%lf", f_buf) == 1);
  1175. X  i_flag = (sscanf(sbuf,"%*s%d", i_buf) == 1);
  1176. X  if (i_flag) {
  1177. X    l_flag = TRUE;
  1178. X    *l_buf = ((*i_buf == 0) ? FALSE : TRUE);
  1179. X  } else {
  1180. X    l_flag = FALSE;
  1181. X  };
  1182. X
  1183. X  i = 0;
  1184. X  while (tbuf1[i] = cp[i]) i++;
  1185. X  /* lowercase tbuf1 */
  1186. X  for (i = 0; tbuf1[i]; i++)
  1187. X    if (isupper(tbuf1[i]))
  1188. X      tbuf1[i] = tolower(tbuf1[i]);
  1189. X
  1190. X  if ((!strcmp(tbuf1,"true"))  || (!strcmp(tbuf1,"on"))) {
  1191. X    l_flag = TRUE;
  1192. X    *l_buf = TRUE;
  1193. X  } else if ((!strcmp(tbuf1,"false")) || (!strcmp(tbuf1,"off"))) {
  1194. X    l_flag = TRUE;
  1195. X    *l_buf = FALSE;
  1196. X  }
  1197. X  *v_name = var_name;
  1198. X  *c_buf = cp;
  1199. X
  1200. X  /* Check validity, may be blank line */
  1201. X  if ((var_name[0] == 0) && (cp[0] == 0)) {
  1202. X    *r_code = R_NONE;
  1203. X    *var_type = V_NONE;
  1204. X    return TRUE;
  1205. X  }
  1206. X  
  1207. X  i = 0;
  1208. X  while (keyword_map[i].word[0]) {
  1209. X    if (!strcmp(var_name, keyword_map[i].word)) {
  1210. X      *r_code = keyword_map[i].return_code;
  1211. X      switch (keyword_map[i].variable_type) {
  1212. X      case V_NONE:
  1213. X    *c_buf = var_name;
  1214. X    return TRUE;
  1215. X    break;
  1216. X      case V_CHAR:
  1217. X    return TRUE;
  1218. X    break;
  1219. X      case V_FLOAT:
  1220. X    return f_flag;
  1221. X    break;
  1222. X      case V_INT:
  1223. X    return i_flag;
  1224. X    break;
  1225. X      case V_BOOL:
  1226. X    return l_flag;
  1227. X    break;
  1228. X      default:
  1229. X    return FALSE;
  1230. X      };
  1231. X    }
  1232. X    i++;
  1233. X  }
  1234. X
  1235. X  return FALSE;
  1236. X}
  1237. X
  1238. X
  1239. Xstatic char *tr_vtype(v_ty)
  1240. Xint v_ty;
  1241. X{
  1242. X  switch (v_ty) {
  1243. X  case V_NONE:
  1244. X    return " (keyword)";
  1245. X    break;
  1246. X  case V_CHAR:
  1247. X    return " = string";
  1248. X  case V_FLOAT:
  1249. X    return " = floating point (e.g. 3.14 or 6e23)";
  1250. X  case V_INT:
  1251. X    return " = integer";
  1252. X  case V_BOOL:
  1253. X    return " = boolean (e.g. 1 or false or off)";
  1254. X  default:
  1255. X    return "";
  1256. X  }
  1257. X}
  1258. X
  1259. X/* send to stdout the keyword_map table */
  1260. Xhelp_vars(word)
  1261. Xchar *word;
  1262. X{
  1263. X  int i;
  1264. X
  1265. X
  1266. X  printf("Word = Expected value type\n");
  1267. X
  1268. X  if (word[0]) {
  1269. X    i = 0;
  1270. X    while (keyword_map[i].word[0]) {
  1271. X      if (!strcmp(word, keyword_map[i].word)) {
  1272. X    if (keyword_map[i].synonym[0])
  1273. X      printf("%-20s: synonym for %s\n", word, keyword_map[i].synonym);
  1274. X    else
  1275. X      if (keyword_map[i].doc[0])
  1276. X        printf("%-20s%s\n", word, keyword_map[i].doc);
  1277. X      else
  1278. X        printf("%-20s%s\n", word, tr_vtype(keyword_map[i].variable_type));
  1279. X    return;
  1280. X      }
  1281. X      i++;
  1282. X    };
  1283. X    printf("%-20s is not a valid keyword\n", word);
  1284. X  } else {
  1285. X    i = 0;
  1286. X    while (keyword_map[i].word[0]) {
  1287. X    if (keyword_map[i].synonym[0])
  1288. X      printf("%-20s: synonym for %s\n", keyword_map[i].word,
  1289. X         keyword_map[i].synonym);
  1290. X    else
  1291. X      if (keyword_map[i].doc[0])
  1292. X        printf("%-20s%s\n", keyword_map[i].word, keyword_map[i].doc);
  1293. X      else
  1294. X        printf("%-20s%s\n", keyword_map[i].word,
  1295. X           tr_vtype(keyword_map[i].variable_type));
  1296. X      i++;
  1297. X    }
  1298. X  }
  1299. X}
  1300. X
  1301. END_OF_FILE
  1302. if test 5244 -ne `wc -c <'starchart/parse_input.c'`; then
  1303.     echo shar: \"'starchart/parse_input.c'\" unpacked with wrong size!
  1304. fi
  1305. # end of 'starchart/parse_input.c'
  1306. fi
  1307. if test -f 'starchart/parse_input.h' -a "${1}" != "-c" ; then 
  1308.   echo shar: Will not clobber existing file \"'starchart/parse_input.h'\"
  1309. else
  1310. echo shar: Extracting \"'starchart/parse_input.h'\" \(5360 characters\)
  1311. sed "s/^X//" >'starchart/parse_input.h' <<'END_OF_FILE'
  1312. X/* Header for parse input */
  1313. X/*
  1314. X *
  1315. X * $Header: parse_input.h,v 1.3 90/01/10 02:06:52 ccount Exp $
  1316. X * 
  1317. X*/
  1318. X/* Variable setting */
  1319. X
  1320. X/* RETURN CODES */
  1321. X#define TINT 1000
  1322. X#define TFLO 1001
  1323. X#define TBOOL 1002
  1324. X#define TNONE 1003
  1325. X#define TCHAR 1004
  1326. X#define TREPORT 1005
  1327. X
  1328. X#define EXIT 101
  1329. X#define END_INPUT 103
  1330. X#define HELP_ME 104
  1331. X#define SHOW_ME 105
  1332. X#define WRITE_RC_FILE 110
  1333. X
  1334. X#define R_NONE 0
  1335. X#define R_RA 1
  1336. X#define R_DEC 2
  1337. X#define R_SCALE 3
  1338. X#define R_NAMELIM 4
  1339. X#define R_MAGLIM 5
  1340. X#define R_GKLIM 6
  1341. X#define R_TITLE 7
  1342. X#define R_STARFILE 8
  1343. X#define R_INDEXFILE 9
  1344. X#define R_NEBFILE 10
  1345. X#define R_PLANETFILE 11
  1346. X#define R_USERFILE 12
  1347. X#define R_MAPFILE 13
  1348. X#define R_CONSTFILE 14
  1349. X#define R_FINDCONST 15
  1350. X#define R_BOUNDFILE 16
  1351. X#define R_PATTERNFILE 17
  1352. X#define R_CONSTLNAMEFILE 18
  1353. X#define R_LAYERS 19
  1354. X#define R_POLARMODE 20
  1355. X#define R_BIGFLAG 21
  1356. X#define R_PROJECTION_MODE 22
  1357. X#define R_INVERT 23
  1358. X#define R_CHART_TYPE 24
  1359. X#define R_VRANGE 25
  1360. X#define R_VMAGS 26
  1361. X#define R_GRID 27
  1362. X#define R_NOGRID 28
  1363. X#define R_NOGRID_RA 29
  1364. X#define R_NOGRID_DEC 30
  1365. X#define R_NOMAGLBLS 31
  1366. X#define R_DRIVER_CONTROL 32
  1367. X#define R_WRITE_MAPWIN_FILE 33
  1368. X#define R_READ_MAPWIN_FILE 34
  1369. X#define R_PRECESS_TO 35
  1370. X
  1371. X/* VARIABLE TYPES */
  1372. X#define V_NONE 0
  1373. X#define V_CHAR 1
  1374. X#define V_FLOAT 2
  1375. X#define V_INT 3
  1376. X#define V_BOOL 4
  1377. X
  1378. Xtypedef struct {
  1379. X  char *word;
  1380. X  int return_code;
  1381. X  int variable_type;
  1382. X  char *synonym;
  1383. X  char *doc;
  1384. X} keyword;
  1385. X
  1386. X#ifdef PARSE_INPUT
  1387. Xkeyword keyword_map[] =
  1388. X{
  1389. X/*
  1390. X  {"int", TINT, V_INT, "", ""},
  1391. X  {"bool", TBOOL, V_BOOL, "", "Test doc string"},
  1392. X  {"none", TNONE, V_NONE, "", ""},
  1393. X  {"flo", TFLO, V_FLOAT, "", ""},
  1394. X  {"char", TCHAR, V_CHAR, "", ""},
  1395. X*/
  1396. X  {"exit", EXIT, V_NONE, "", "Exit the program"},
  1397. X  {"quit", EXIT, V_NONE, "exit", ""},
  1398. X  {"end_input", END_INPUT, V_NONE, "", "End input, display chart"},
  1399. X  {"done_input", END_INPUT, V_NONE, "end_input", ""},
  1400. X  {"done", END_INPUT, V_NONE, "end_input", ""},
  1401. X  {"draw", END_INPUT, V_NONE, "end_input", ""},
  1402. X  {"help", HELP_ME, V_NONE, "", ""},
  1403. X  {"?", HELP_ME, V_NONE, "help", ""},
  1404. X  {"show", SHOW_ME, V_NONE, "", ""},
  1405. X  {"ra", R_RA, V_FLOAT, "", "Right Ascension of center of map"},
  1406. X  {"dec", R_DEC, V_FLOAT, "", "Declination of center of map"},
  1407. X  {"scale", R_SCALE, V_FLOAT, "", "Scale of center of map"},
  1408. X  {"title", R_TITLE, V_CHAR, "", "Title of chart"},
  1409. X  {"findconst", R_FINDCONST, V_CHAR, "",
  1410. X     "Constellation, specification in constfile"},
  1411. X  {"constfile", R_CONSTFILE, V_CHAR, "",
  1412. X     "Filename for constellation location"},
  1413. X  {"namelim", R_NAMELIM, V_FLOAT, "", "Limiting magnitude for object names"},
  1414. X  {"lbllim", R_NAMELIM, V_FLOAT, "namelim", ""},
  1415. X  {"gklim", R_GKLIM, V_FLOAT, "", "Limiting magnitude for object label"},
  1416. X  {"maglim", R_MAGLIM, V_FLOAT, "", "Limiting magnitude for object"},
  1417. X  {"starfile", R_STARFILE, V_CHAR, "", "Filename for stars"},
  1418. X  {"indexfile", R_INDEXFILE, V_CHAR, "", "Filename for SAO stars"},
  1419. X  {"nebfile", R_NEBFILE, V_CHAR, "", "Filename for nebulae"},
  1420. X  {"planetfile", R_PLANETFILE, V_CHAR, "", "Filename for planets"},
  1421. X  {"userfile", R_USERFILE, V_CHAR, "", "Filename for user file"},
  1422. X  {"mapfile", R_MAPFILE, V_CHAR, "",
  1423. X     "Filenames for files to replaces starfile etc."},
  1424. X  {"boundfile", R_BOUNDFILE, V_CHAR, "",
  1425. X     "Filename for constellation boundaries"},
  1426. X  {"patternfile", R_PATTERNFILE, V_CHAR, "",
  1427. X     "Filename for constellation patterns"},
  1428. X  {"constlnamefile", R_CONSTLNAMEFILE, V_CHAR, "",
  1429. X     "Filename for constellation names"},
  1430. X  {"layers", R_LAYERS, V_CHAR, "",
  1431. X     "Order for layers drawn in each window of the chart"},
  1432. X  {"all_layer", R_LAYERS, V_CHAR, "layers", ""},
  1433. X  {"polarmode", R_POLARMODE, V_BOOL, "", "Use stereographic projection"},
  1434. X  {"projection_mode", R_PROJECTION_MODE, V_CHAR, "",
  1435. X     "Projection mode (sansons, stereographic, gnomonic, etc."},
  1436. X  {"invert", R_INVERT, V_BOOL, "", "Flip north and south"},
  1437. X  {"precess_to", R_PRECESS_TO, V_FLOAT, "",
  1438. X     "Precess to equinox and ecliptic of year."},
  1439. X  {"bigflag", R_BIGFLAG, V_BOOL, "", "Chart contains one large window"},
  1440. X  {"chart_type", R_CHART_TYPE, V_CHAR, "",
  1441. X     "fullpage for one large window, threepart for thumbscale map\n\
  1442. X\t\t\t\tand legend"},
  1443. X  {"vrange", R_VRANGE, V_FLOAT, "",
  1444. X     "label stars with magnitudes if in range"},
  1445. X  {"vmags", R_VMAGS, V_FLOAT, "",
  1446. X     "label stars with magnitudes if within (arg2) of (arg1)"},
  1447. X  {"grid", R_GRID, V_FLOAT, "",
  1448. X     "draw grid: grid ra_space dec_space [ra_start] [dec_start]"},
  1449. X  {"nogrid", R_NOGRID, V_BOOL, "", "Don't draw grids"},
  1450. X  {"nogrid_ra", R_NOGRID_RA, V_BOOL, "", "Don't draw grid in R.A."},
  1451. X  {"nogrid_dec", R_NOGRID_DEC, V_BOOL, "", "Don't draw grid in dec."},
  1452. X  {"nomaglbls", R_NOMAGLBLS, V_BOOL, "", "Don't label stars with magnitudes"},
  1453. X  {"driver_control", R_DRIVER_CONTROL, V_CHAR, "",
  1454. X     "special control string for device driver"},
  1455. X  {"drivercontrol", R_DRIVER_CONTROL, V_CHAR, "driver_control", ""},
  1456. X  {"additional", R_DRIVER_CONTROL, V_CHAR, "driver_control", ""},
  1457. X  {"write_rc_file", WRITE_RC_FILE, V_CHAR, "",
  1458. X     "Write current state to .starrc file"},
  1459. X  {"write_mapwin_file", R_WRITE_MAPWIN_FILE, V_CHAR, "",
  1460. X     "write detailed specification of chart to given filename"},
  1461. X  {"read_mapwin_file", R_READ_MAPWIN_FILE, V_CHAR, "",
  1462. X     "read detailed specification of chart from given filename"},
  1463. X/*  {"report", R_REPORT, V_NONE, "", ""},*/
  1464. X  {"", R_NONE, V_NONE, "", ""}
  1465. X};
  1466. X
  1467. X/* longest word  17 characters */
  1468. X#endif
  1469. END_OF_FILE
  1470. if test 5360 -ne `wc -c <'starchart/parse_input.h'`; then
  1471.     echo shar: \"'starchart/parse_input.h'\" unpacked with wrong size!
  1472. fi
  1473. # end of 'starchart/parse_input.h'
  1474. fi
  1475. if test -f 'starchart/star3.h' -a "${1}" != "-c" ; then 
  1476.   echo shar: Will not clobber existing file \"'starchart/star3.h'\"
  1477. else
  1478. echo shar: Extracting \"'starchart/star3.h'\" \(5818 characters\)
  1479. sed "s/^X//" >'starchart/star3.h' <<'END_OF_FILE'
  1480. X/* Header for starchart 3.x */
  1481. X/*
  1482. X * 
  1483. X * $Header: star3.h,v 2.8 90/02/19 17:58:03 ccount Exp $
  1484. X *
  1485. X*/
  1486. X/*
  1487. X *
  1488. X * Copyright (c) 1990 by Craig Counterman. All rights reserved.
  1489. X *
  1490. X * This software may be redistributed freely, not sold.
  1491. X * This copyright notice and disclaimer of warranty must remain
  1492. X *    unchanged. 
  1493. X *
  1494. X * No representation is made about the suitability of this
  1495. X * software for any purpose.  It is provided "as is" without express or
  1496. X * implied warranty, to the extent permitted by applicable law.
  1497. X *
  1498. X * DISCLAIMER OF WARRANTY
  1499. X * ----------------------
  1500. X * The author  disclaims all warranties  with regard to  this software to
  1501. X * the   extent  permitted  by applicable   law,  including all   implied
  1502. X * warranties  of merchantability  and  fitness. In  no event shall   the
  1503. X * author be liable for any special, indirect or consequential damages or
  1504. X * any  damages whatsoever resulting from  loss of use, data or  profits,
  1505. X * whether in an action of contract, negligence or other tortious action,
  1506. X * arising  out of  or in connection with the  use or performance of this
  1507. X * software.
  1508. X *
  1509. X */
  1510. X
  1511. X
  1512. X#define FALSE 0
  1513. X#define TRUE 1
  1514. X
  1515. X#ifdef MSDOS
  1516. X#include "pcstar.h"
  1517. X#endif
  1518. X
  1519. X/* Line Styles */
  1520. X/* SOLID is defined for HP's, maybe some others. */
  1521. X#ifndef SOLID
  1522. X#define SOLID 1
  1523. X#define DOTTED 2
  1524. X#define DASHED 3
  1525. X#define VECSOLID 4
  1526. X#define VECDOT 5
  1527. X#define VECDASH 6
  1528. X#define MAXSTLNS 7
  1529. X#define CURNTSTY 100
  1530. X#else
  1531. X#define DOTTED 2
  1532. X#define DASHED 3
  1533. X#define VECSOLID 4
  1534. X#define VECDOT 5
  1535. X#define VECDASH 6
  1536. X#define MAXSTLNS 7
  1537. X#define CURNTSTY 100
  1538. X#endif
  1539. X
  1540. X/* Functions */
  1541. X#define CHRTOUTLN 1
  1542. X#define CHRTHTICK 2
  1543. X#define CHRTVTICK 3
  1544. X#define GRID_RA 4
  1545. X#define GRID_DEC 5
  1546. X#define ECLIPT 6
  1547. X#define CONSTBOUND 7
  1548. X#define CONSTPATTRN 8
  1549. X#define CONSTNAME 9
  1550. X#define CHARTFILE 10
  1551. X
  1552. X
  1553. X/* Fonts */
  1554. X#define CURNTFONT 100
  1555. X#define TIMESROMAN 10
  1556. X#define TIMESBOLD 11
  1557. X#define TIMESITAL 12
  1558. X#define TIMESBOLDITAL 13
  1559. X#define HELV 20
  1560. X#define HELVBOLD 21
  1561. X#define HELVITAL 22
  1562. X#define HELVBOLDITAL 23
  1563. X#define COURIER 30
  1564. X#define COURBOLD 31
  1565. X#define COURITAL 32
  1566. X#define COURITALBOLD 33
  1567. X
  1568. X#define NAMESIZE 10
  1569. X
  1570. X/* Chart types */
  1571. X#define THREEPART 1
  1572. X#define FULLPAGE 2
  1573. X#define OTHERTYPE 3
  1574. X
  1575. X/* Inverse Chart types */
  1576. Xstatic char *inv_ctypes[] = {
  1577. X  "none",
  1578. X  "threepart",
  1579. X  "fullpage",
  1580. X  "none"
  1581. X  };
  1582. X
  1583. X
  1584. X/* File types */
  1585. X#define LINEREAD 1
  1586. X#define INDEXTYPE 2
  1587. X#define BINFULL 3
  1588. X#define BINOBJ 4
  1589. X#define BINSTAR 5
  1590. X#define SAOFORMAT 6
  1591. X#define GSCTYPE 7
  1592. X
  1593. X/* inverse file types */
  1594. Xstatic char *inv_ftypes[] = {
  1595. X  "none",
  1596. X  "lineread",
  1597. X  "indextype",
  1598. X  "binfull",
  1599. X  "binobj",
  1600. X  "binstar",
  1601. X  "saoformat",
  1602. X  "gsc"
  1603. X  };
  1604. X
  1605. X/* Projection Modes */
  1606. X#define SANSONS 1
  1607. X#define STEREOGR 2
  1608. X#define GNOMONIC 3
  1609. X#define ORTHOGR 4
  1610. X#define RECTANGULAR 5
  1611. X#define OTHERPROJ 6
  1612. X
  1613. X/* inverse projection mode */
  1614. Xstatic char *inv_projs[] = {
  1615. X  "",
  1616. X  "sansons",
  1617. X  "stereogr",
  1618. X  "gnomonic",
  1619. X  "orthogr",
  1620. X  "rectangular",
  1621. X  "otherproj"
  1622. X  };
  1623. X
  1624. X/* map types */
  1625. X#define MAINMAP 0
  1626. X#define FULLPAGEMAP 1
  1627. X#define THUMBNAIL 2
  1628. X
  1629. X/* Layers */
  1630. X#define OUTLINE 1
  1631. X#define RA_GRID 2
  1632. X#define DEC_GRID 3
  1633. X#define ECLIPTIC 4
  1634. X#define BOUNDARIES 5
  1635. X#define PATTERNS 6
  1636. X#define CONSTLNAMES 7
  1637. X#define ALLFILES 8
  1638. X#define ALLGLYPHS 9
  1639. X#define ALLNAMES 10
  1640. X#define ALLMAGLBLS 11
  1641. X#define ALLVECTORS 12
  1642. X#define ALLAREAS 13
  1643. X#define LEGENDS    14
  1644. X#define SKIP 0
  1645. X
  1646. X/* inverse layers types */
  1647. Xstatic char *inv_layrs[] = {
  1648. X  "skip",
  1649. X  "outline",
  1650. X  "ra_grid",
  1651. X  "dec_grid",
  1652. X  "ecliptic",
  1653. X  "boundaries",
  1654. X  "patterns",
  1655. X  "constlnames",
  1656. X  "allfiles",
  1657. X  "allglyphs",
  1658. X  "allnames",
  1659. X  "allmaglbls",
  1660. X  "allvectors",
  1661. X  "allareas",
  1662. X  "legends"
  1663. X  };
  1664. X
  1665. X
  1666. X/* Order of standard files in mapfiles */
  1667. X#define YALEF 0
  1668. X#define INDXF 1
  1669. X#define NEBF 2
  1670. X#define PLANF 3
  1671. X#define NUMFS 4
  1672. X
  1673. X#define MAXLAYRS 20
  1674. X
  1675. X#define MAXUFILES 10                /* Maximum number of user supplied files */
  1676. X#define MAXMAPFILES (MAXUFILES+NUMFS) /* Maximum total number of files
  1677. X                     user + standard */
  1678. X
  1679. Xtypedef struct {
  1680. X  char *name;                /* file name */
  1681. X  int type;                /* file type */
  1682. X  double maglim, lbllim, gklim;        /* limiting mag for glyph, name,
  1683. X                       lable */
  1684. X  int draw_maglbl;            /* Label with the magnitude */
  1685. X  double maglmin, maglmax;        /* Minimum and maximum mag to be labeled */
  1686. X} datafile;
  1687. X
  1688. X/* The variables in the first few lines MUST be set by driver */
  1689. Xtypedef struct {
  1690. X  int width, height, x_offset, y_offset; /* Size and position,
  1691. X                        in integer device coords */
  1692. X  double maglim, lbllim, gklim;        /* default limiting mag for glyph, name,
  1693. X                       and lable for files */
  1694. X
  1695. X/* The next several variables SHOULD be set by the driver,
  1696. X   but are only used by the driver */
  1697. X  int map_type;                /* Type of map: THUMBNAIL may have
  1698. X                       some restrictions */
  1699. X  int tag;                /* May be used by driver for whatever */
  1700. X  char *tag_field;            /* May be used by driver for whatever */
  1701. X
  1702. X/* The next several variables may be set by the driver, but the main routines
  1703. X   may reset them (and the driver routines may then override that) */
  1704. X  int proj_mode;            /* Projection mode for this map */
  1705. X  int draw_ragrid, draw_decgrid;    /* Draw grids */
  1706. X  double ra_step, dec_step;        /* grid step size */
  1707. X  double ra_strt, dec_strt;        /* grid origin */
  1708. X
  1709. X  int invert;                /* Invert (flip north south) */
  1710. X
  1711. X/* The following are set by the main routines */
  1712. X  double racen, dlcen, scale;        /* R.A. and decl. of center,
  1713. X                       scale in degrees */
  1714. X  double c_scale;            /* One second of arc
  1715. X                       in display units */
  1716. X  int layer[MAXLAYRS];            /* layer order */
  1717. X  int nlayers;                /* number of layers */
  1718. X  datafile file[MAXMAPFILES];        /* files in this map and their controls */
  1719. X  int numfiles;                /* number of files */
  1720. X} mapwindow;
  1721. X#define MAXWINDOWS 10
  1722. X
  1723. X
  1724. Xdouble modup(), moddown();
  1725. Xdouble ftod(), dtof(), htod();
  1726. Xlong size_obj();
  1727. X
  1728. X/* declared here for VMS and pure-ANSI systems (declared in stdlib.h there) */
  1729. Xdouble atof();
  1730. X
  1731. X
  1732. END_OF_FILE
  1733. if test 5818 -ne `wc -c <'starchart/star3.h'`; then
  1734.     echo shar: \"'starchart/star3.h'\" unpacked with wrong size!
  1735. fi
  1736. # end of 'starchart/star3.h'
  1737. fi
  1738. echo shar: End of archive 4 \(of 32\).
  1739. cp /dev/null ark4isdone
  1740. MISSING=""
  1741. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ; do
  1742.     if test ! -f ark${I}isdone ; then
  1743.     MISSING="${MISSING} ${I}"
  1744.     fi
  1745. done
  1746. if test "${MISSING}" = "" ; then
  1747.     echo You have unpacked all 32 archives.
  1748.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1749. else
  1750.     echo You still need to unpack the following archives:
  1751.     echo "        " ${MISSING}
  1752. fi
  1753. ##  End of shell archive.
  1754. exit 0
  1755.  
  1756.  
  1757.