home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume20 / xephem / patch01 / xephem.p1
Encoding:
Text File  |  1993-06-01  |  67.7 KB  |  2,069 lines

  1. diff -c v2.4b/Makefile.simple v2.4e/Makefile.simple
  2. *** v2.4b/Makefile.simple    Tue Jun  1 14:30:20 1993
  3. --- v2.4e/Makefile.simple    Tue Jun  1 10:23:00 1993
  4. ***************
  5. *** 1,4 ****
  6. ! # Simple Makefile for xephem v2.4b.
  7.   # We include sample compile and link flags for a few popular systems.
  8.   
  9.   # "stock" X systems
  10. --- 1,4 ----
  11. ! # Simple Makefile for xephem v2.4e.
  12.   # We include sample compile and link flags for a few popular systems.
  13.   
  14.   # "stock" X systems
  15. diff -c v2.4b/README v2.4e/README
  16. *** v2.4b/README    Tue Jun  1 14:31:30 1993
  17. --- v2.4e/README    Tue Jun  1 14:24:00 1993
  18. ***************
  19. *** 35,50 ****
  20.   
  21.       If not, there is also a Makefile.simple.
  22.   
  23. !     atof() can be somewhat problematic. It was historically declared to be
  24. !     double in math.h. More contemporary systems declare it only in stdlib.h.
  25. !     Xephem includes stdlib.h if __STDC__ is defined, else it assumes atof()
  26. !     is declared in math.h.  This should work pretty well but if you get
  27. !     crazy numbers from xephem check the files that use atof and figure out a
  28. !     way to get it declared to return a double. Atof() is called in compiler.c,
  29. !     db.c, formats.c, mainmenu.c and satmenu.c.
  30.   
  31. -     Also, on some systems (such as SVR3.2) compile with -D_NO_PROTO and -DSYSV.
  32.       I have searched carefully through the output of running all of xephem
  33.       through lint and gcc on Ultrix and SVR4 and can rationalize all the
  34.       warnings so don't let these bother you.
  35. --- 35,42 ----
  36.   
  37.       If not, there is also a Makefile.simple.
  38.   
  39. !     On some systems (such as SVR3.2) compile with -D_NO_PROTO and -DSYSV.
  40.   
  41.       I have searched carefully through the output of running all of xephem
  42.       through lint and gcc on Ultrix and SVR4 and can rationalize all the
  43.       warnings so don't let these bother you.
  44. ***************
  45. *** 80,86 ****
  46.       to run on the following configurations:
  47.   
  48.   
  49. ! xephem v2.4b is known to run on the following systems; check with the author
  50.   for availability of statically linked binary executables.
  51.   
  52.       OS                      CPU                     X
  53. --- 72,78 ----
  54.       to run on the following configurations:
  55.   
  56.   
  57. ! xephem v2.4e is known to run on the following systems; check with the author
  58.   for availability of statically linked binary executables.
  59.   
  60.       OS                      CPU                     X
  61. ***************
  62. *** 88,99 ****
  63.       SVR3.2/Venix            i486                    Metrolink X11R4/Motif 1.1.3
  64.       SVR4.0.3/Consensys      i486                    MIT X11R5/Motif 1.1.4
  65.       Ultrix 4.2              DECstation 5000         DEC's (?)
  66. !     SunOS 4.1.2             Sun 4c                  TeleUSE development system
  67.       hpux 8.07               HP 9000/720             X11R4, Motif 1.1.?
  68.       IRIX 4.0.5              SGI                     X11R4
  69.       OSF/1 1.2               DEC Alpha               X11R5, Motif 1.1.3
  70.   
  71.   
  72.   If you would like to gut xephem for just its astronomical functionality, start
  73.   with obj_cir(). This is basically the dividing line between the user interface
  74.   and the astronomical functions. Also, the following files are pretty much just
  75. --- 80,97 ----
  76.       SVR3.2/Venix            i486                    Metrolink X11R4/Motif 1.1.3
  77.       SVR4.0.3/Consensys      i486                    MIT X11R5/Motif 1.1.4
  78.       Ultrix 4.2              DECstation 5000         DEC's (?)
  79. !     SunOS 4.1.2             Sun 4c                  TeleUSE development system*
  80.       hpux 8.07               HP 9000/720             X11R4, Motif 1.1.?
  81.       IRIX 4.0.5              SGI                     X11R4
  82.       OSF/1 1.2               DEC Alpha               X11R5, Motif 1.1.3
  83. +     AIXv3.2                 IBM RS/6000             AIXwindows
  84. +     VMS                     VAX                     DECwindows
  85. +     SCO v3.2                i486                    ODT 2.0
  86. +     Linux                   i486                    MetroLink
  87.   
  88. + *  requires Sun's X server patch 100444-35.
  89.   
  90.   If you would like to gut xephem for just its astronomical functionality, start
  91.   with obj_cir(). This is basically the dividing line between the user interface
  92.   and the astronomical functions. Also, the following files are pretty much just
  93. ***************
  94. *** 149,171 ****
  95.   
  96.   ecdowney@pobox.cca.cr.rockwell.com
  97.   
  98. ! April 21, 1993
  99.   
  100. ! The following (untested!) DCL file will build xephem for VMS/DECwindows MOTIF;
  101. ! based on an earlier version by Ethan VanMatre:
  102.   
  103.   $!
  104.   $!    Makefile.com -- Command file to compile and link Xephem
  105.   $!
  106. - $!
  107.   $!    A simple minded command file to compile and link Xephem under VAX/VMS
  108.   $!    and DECwindows MOTIF 
  109.   $!
  110. ! $!    when        who            what
  111.   $!
  112. ! $!    2-feb-1992    Ethan VanMatre        original from unix makefile
  113.   $!
  114. ! $
  115.   $ cc    aa_hadec/opt/obj
  116.   $ cc    anomaly    /opt/obj
  117.   $ cc    cal_mjd    /opt/obj
  118. --- 147,176 ----
  119.   
  120.   ecdowney@pobox.cca.cr.rockwell.com
  121.   
  122. ! June 1, 1993
  123.   
  124. ! The following DCL file, courtesy fisica@astrpd.DNET.NASA.GOV (Max Calvani -
  125. ! Italy) will build xephem for VMS/DECwindows MOTIF. In addition,
  126. ! drucker@Csa2.LBL.Gov (Bob Drucker, Berkeley/LBL) writes:
  127.   
  128. +     For VMS users the default settings file can be pointed to in one of
  129. +     two ways.  The default name for the resource file on VMS is
  130. +     SYS$LOGIN:DECW$XDEFAULTS.DAT.  If you don't wish to use this
  131. +     you can define the logical XENVIRONMENT to point to the file (this
  132. +     allows you to keep the file anywhere you want with any name).
  133.   $!
  134.   $!    Makefile.com -- Command file to compile and link Xephem
  135.   $!
  136.   $!    A simple minded command file to compile and link Xephem under VAX/VMS
  137.   $!    and DECwindows MOTIF 
  138.   $!
  139. ! $!      when            who                     what
  140.   $!
  141. ! $!      2-feb-1992      Ethan VanMatre          original from unix makefile
  142. ! $!      13-mar-1993    Max Calvani        updated for xephem v2.4.
  143.   $!
  144. ! $ set ver
  145.   $ cc    aa_hadec/opt/obj
  146.   $ cc    anomaly    /opt/obj
  147.   $ cc    cal_mjd    /opt/obj
  148. ***************
  149. *** 186,191 ****
  150. --- 191,197 ----
  151.   $ cc    listmenu/opt/obj
  152.   $ cc    mainmenu/opt/obj
  153.   $ cc    marsmenu/opt/obj
  154. + $ cc    marsmap/opt/obj
  155.   $ cc    misc    /opt/obj
  156.   $ cc    moon    /opt/obj
  157.   $ cc    moonmenu/opt/obj
  158. ***************
  159. *** 200,211 ****
  160.   $ cc    plot_aux/opt/obj
  161.   $ cc    plotmenu/opt/obj
  162.   $ cc    precess    /opt/obj
  163.   $ cc    query    /opt/obj
  164.   $ cc    reduce    /opt/obj
  165.   $ cc    refract    /opt/obj
  166.   $ cc    riset    /opt/obj
  167.   $ cc    riset_cir/opt/obj
  168. - $ cc    risetmenu/opt/obj
  169.   $ cc    satmenu    /opt/obj
  170.   $ cc    sex_dec    /opt/obj
  171.   $ cc    skyfiltmenu/opt/obj
  172. --- 206,217 ----
  173.   $ cc    plot_aux/opt/obj
  174.   $ cc    plotmenu/opt/obj
  175.   $ cc    precess    /opt/obj
  176. + $ cc    preferences/opt/obj
  177.   $ cc    query    /opt/obj
  178.   $ cc    reduce    /opt/obj
  179.   $ cc    refract    /opt/obj
  180.   $ cc    riset    /opt/obj
  181.   $ cc    riset_cir/opt/obj
  182.   $ cc    satmenu    /opt/obj
  183.   $ cc    sex_dec    /opt/obj
  184.   $ cc    skyfiltmenu/opt/obj
  185. ***************
  186. *** 239,244 ****
  187. --- 245,251 ----
  188.       listmenu.obj,    -
  189.       mainmenu.obj,    -
  190.       marsmenu.obj,    -
  191. +         marsmap.obj,    -
  192.       misc.obj,    -
  193.       moon.obj,    -
  194.       moonmenu.obj,    -
  195. ***************
  196. *** 253,264 ****
  197.       plot_aux.obj,    -
  198.       plotmenu.obj,    -
  199.       precess.obj,    -
  200.       query.obj,    -
  201.       reduce.obj,    -
  202.       refract.obj,    -
  203.       riset.obj,    -
  204.       riset_cir.obj,    -
  205. -     risetmenu.obj,    -
  206.       satmenu.obj,    -
  207.       sex_dec.obj,    -
  208.       skyfiltmenu.obj,    -
  209. --- 260,271 ----
  210.       plot_aux.obj,    -
  211.       plotmenu.obj,    -
  212.       precess.obj,    -
  213. +         preferences.obj, -
  214.       query.obj,    -
  215.       reduce.obj,    -
  216.       refract.obj,    -
  217.       riset.obj,    -
  218.       riset_cir.obj,    -
  219.       satmenu.obj,    -
  220.       sex_dec.obj,    -
  221.       skyfiltmenu.obj,    -
  222. ***************
  223. *** 278,280 ****
  224. --- 285,288 ----
  225.   $!clean:
  226.   $    purge
  227.   $!
  228. + $ set nover
  229. diff -c v2.4b/XEphem.ad v2.4e/XEphem.ad
  230. *** v2.4b/XEphem.ad    Tue Jun  1 14:30:43 1993
  231. --- v2.4e/XEphem.ad    Wed May 19 13:59:45 1993
  232. ***************
  233. *** 168,173 ****
  234. --- 168,176 ----
  235.   XEphem*SkyFilter*SymbolDA.foreground: snow
  236.   XEphem*SkyFilter*SymbolDA.background: #00004a
  237.   
  238. + ! set the width of the symbol boxes in the Sky view Filter menu.
  239. + XEphem*SkyFilter*SymbolDA.width: 20
  240.   ! initial types of object to display in Sky View
  241.   XEphem*SkyFilter*Planets.set: True
  242.   XEphem*SkyFilter*Elliptical.set: True
  243. diff -c v2.4b/compiler.c v2.4e/compiler.c
  244. *** v2.4b/compiler.c    Tue Jun  1 14:30:14 1993
  245. --- v2.4e/compiler.c    Tue May 18 09:36:50 1993
  246. ***************
  247. *** 27,32 ****
  248. --- 27,34 ----
  249.   #define P_(s) ()
  250.   #endif
  251.   
  252. + extern double atod P_((char *buf));
  253.   int compile_expr P_((char *ex, char *errbuf));
  254.   int execute_expr P_((double *vp, char *errbuf));
  255.   int prog_isgood P_((void));
  256. ***************
  257. *** 276,282 ****
  258.           (void) sprintf (err_msg, toomc, MAX_OPX);
  259.           return (ERR);
  260.           }
  261. !         consts[nconsts] = atof (lcexpr);
  262.           tok = CONST | (nconsts++ << OP_SHIFT);
  263.           skip_double();
  264.       } else if (isalpha(c)) {
  265. --- 278,284 ----
  266.           (void) sprintf (err_msg, toomc, MAX_OPX);
  267.           return (ERR);
  268.           }
  269. !         consts[nconsts] = atod (lcexpr);
  270.           tok = CONST | (nconsts++ << OP_SHIFT);
  271.           skip_double();
  272.       } else if (isalpha(c)) {
  273. diff -c v2.4b/datamenu.c v2.4e/datamenu.c
  274. *** v2.4b/datamenu.c    Tue Jun  1 14:31:45 1993
  275. --- v2.4e/datamenu.c    Tue Jun  1 10:54:35 1993
  276. ***************
  277. *** 40,45 ****
  278. --- 40,46 ----
  279.   extern void f_ra P_((Widget w, double ra));
  280.   extern void f_showit P_((Widget w, char *s));
  281.   extern void f_string P_((Widget w, char *s));
  282. + extern void field_log P_((Widget w, double value, int logv, char *str));
  283.   extern void get_something P_((Widget w, char *resource, char *value));
  284.   extern void get_xmstring P_((Widget w, char *resource, char **txtp));
  285.   extern void hlp_dialog P_((char *tag, char *deflt[], int ndeflt));
  286. ***************
  287. *** 66,72 ****
  288.   static void dm_help_cb P_((Widget w, XtPointer client, XtPointer call));
  289.   static void dm_compute P_((int r, int force, Now *np));
  290.   static void dm_format P_((Now *np, Obj *op, RiseSet *rp, int c, Widget w));
  291. ! static void dm_rs_addplus P_((Widget w, int addplus));
  292.   static void dm_rs_hrsup P_((Widget w, RiseSet *rp));
  293.   static void show_constellation P_((Now *np, Obj *op, Widget w));
  294.   static void dm_separation P_((Obj *p, Obj *q, int how, Widget w));
  295. --- 67,73 ----
  296.   static void dm_help_cb P_((Widget w, XtPointer client, XtPointer call));
  297.   static void dm_compute P_((int r, int force, Now *np));
  298.   static void dm_format P_((Now *np, Obj *op, RiseSet *rp, int c, Widget w));
  299. ! static void dm_rs_addplus P_((Widget w, double tm, int addplus));
  300.   static void dm_rs_hrsup P_((Widget w, RiseSet *rp));
  301.   static void show_constellation P_((Now *np, Obj *op, Widget w));
  302.   static void dm_separation P_((Obj *p, Obj *q, int how, Widget w));
  303. ***************
  304. *** 844,853 ****
  305.           f_string (w, "NvrUp ");
  306.           else if (rp->rs_flags & RS_NORISE)
  307.           f_string (w, "NoRise");
  308. !         else {
  309. !         f_mtime (w, rp->rs_risetm);    /* 5 chars wide */
  310. !         dm_rs_addplus (w, rp->rs_flags & RS_2RISES);    /* adds 1 */
  311. !         }
  312.           break;
  313.   
  314.       case RSAZ_ID:
  315. --- 845,852 ----
  316.           f_string (w, "NvrUp ");
  317.           else if (rp->rs_flags & RS_NORISE)
  318.           f_string (w, "NoRise");
  319. !         else
  320. !         dm_rs_addplus (w, rp->rs_risetm, rp->rs_flags & RS_2RISES);
  321.           break;
  322.   
  323.       case RSAZ_ID:
  324. ***************
  325. *** 872,881 ****
  326.           f_string (w, "NvrUp ");
  327.           else if (rp->rs_flags & RS_NOSET)
  328.           f_string (w, "NoSet ");
  329. !         else {
  330. !         f_mtime (w, rp->rs_settm);    /* 5 chars wide */
  331. !         dm_rs_addplus (w, rp->rs_flags & RS_2SETS);    /* adds 1 */
  332. !         }
  333.           break;
  334.   
  335.       case SETAZ_ID:
  336. --- 871,878 ----
  337.           f_string (w, "NvrUp ");
  338.           else if (rp->rs_flags & RS_NOSET)
  339.           f_string (w, "NoSet ");
  340. !         else
  341. !         dm_rs_addplus (w, rp->rs_settm, rp->rs_flags & RS_2SETS);
  342.           break;
  343.   
  344.       case SETAZ_ID:
  345. ***************
  346. *** 898,907 ****
  347.           f_string (w, "NvrUp ");
  348.           else if (rp->rs_flags & RS_NOTRANS)
  349.           f_string (w, "NoTran");
  350. !         else {
  351. !         f_mtime (w, rp->rs_trantm);    /* 5 chars wide */
  352. !         dm_rs_addplus (w, rp->rs_flags & RS_2TRANS);    /* adds 1 */
  353. !         }
  354.           break;
  355.   
  356.       case TRALT_ID:
  357. --- 895,902 ----
  358.           f_string (w, "NvrUp ");
  359.           else if (rp->rs_flags & RS_NOTRANS)
  360.           f_string (w, "NoTran");
  361. !         else
  362. !         dm_rs_addplus (w, rp->rs_trantm, rp->rs_flags & RS_2TRANS);
  363.           break;
  364.   
  365.       case TRALT_ID:
  366. ***************
  367. *** 939,957 ****
  368.       }
  369.   }
  370.   
  371.   static void
  372. ! dm_rs_addplus (w, addplus)
  373.   Widget w;
  374.   int addplus;
  375.   {
  376. !     char *orig, *new;
  377.   
  378. !     get_xmstring (w, XmNlabelString, &orig);
  379. !     new = XtMalloc(strlen(orig)+2); /* '+' plus the '\0' */
  380. !     (void) sprintf (new, addplus ? "%s+" : "%s ", orig);
  381. !     f_string (w, new);
  382. !     XtFree (orig);
  383. !     XtFree (new);
  384.   }
  385.   
  386.   /* display the total hours this object has been up.
  387. --- 934,955 ----
  388.       }
  389.   }
  390.   
  391. + /* display the rise/set/transit time tm (in hours) in widget w.
  392. +  * if addplus is != 0 then add a '+' to the time string.
  393. +  * N.B. be sure the total string length is the same regardless of addplus.
  394. +  */
  395.   static void
  396. ! dm_rs_addplus (w, tm, addplus)
  397.   Widget w;
  398. + double tm;
  399.   int addplus;
  400.   {
  401. !     char str[32];
  402.   
  403. !     fs_mtime (str, tm);                /* 5 chars: "hh:mm" */
  404. !     (void) strcat (str, addplus ? "+" : " ");    /* always add 1 */
  405. !     field_log (w, tm, 1, str);
  406. !     f_showit (w, str);
  407.   }
  408.   
  409.   /* display the total hours this object has been up.
  410. ***************
  411. *** 973,980 ****
  412.           return;
  413.       }
  414.       if (rp->rs_flags & RS_NEVERUP) {
  415. !         f_mtime (w, 0.0);        /* 5 chars wide */
  416. !         dm_rs_addplus(w, 0);    /* adds 1 */
  417.           return;
  418.       }
  419.   
  420. --- 971,977 ----
  421.           return;
  422.       }
  423.       if (rp->rs_flags & RS_NEVERUP) {
  424. !         dm_rs_addplus (w, 0.0, 0);
  425.           return;
  426.       }
  427.   
  428. ***************
  429. *** 983,990 ****
  430.       hrs = s - r;
  431.       if (hrs < 0)
  432.           hrs += 24.0;
  433. !     f_mtime (w, hrs);    /* 5 chars wide */
  434. !     dm_rs_addplus(w, rp->rs_flags&(RS_NORISE|RS_NOSET|RS_2RISES|RS_2SETS));
  435.   }
  436.   
  437.   static void
  438. --- 980,986 ----
  439.       hrs = s - r;
  440.       if (hrs < 0)
  441.           hrs += 24.0;
  442. !     dm_rs_addplus(w, hrs, rp->rs_flags&(RS_NORISE|RS_NOSET|RS_2RISES|RS_2SETS));
  443.   }
  444.   
  445.   static void
  446. diff -c v2.4b/db.c v2.4e/db.c
  447. *** v2.4b/db.c    Tue Jun  1 14:30:16 1993
  448. --- v2.4e/db.c    Thu May 20 12:51:21 1993
  449. ***************
  450. *** 3,14 ****
  451.   
  452.   #include <stdio.h>
  453.   #include <ctype.h>
  454. - #include <malloc.h>
  455.   #include <math.h>
  456.   #if defined(__STDC__)
  457.   #include <stdlib.h>
  458.   #include <string.h>
  459.   #endif
  460.   #include "astro.h"
  461.   #include "circum.h"
  462.   #include "preferences.h"
  463. --- 3,17 ----
  464.   
  465.   #include <stdio.h>
  466.   #include <ctype.h>
  467.   #include <math.h>
  468.   #if defined(__STDC__)
  469.   #include <stdlib.h>
  470.   #include <string.h>
  471. + #else
  472. + extern void *malloc(), *realloc();
  473.   #endif
  474.   #include "astro.h"
  475.   #include "circum.h"
  476.   #include "preferences.h"
  477. ***************
  478. *** 20,25 ****
  479. --- 23,29 ----
  480.   #define P_(s) ()
  481.   #endif
  482.   
  483. + extern double atod P_((char *buf));
  484.   extern Now *mm_get_now P_((void));
  485.   extern int obj_cir P_((Now *np, Obj *op));
  486.   extern void cal_mjd P_((int mn, double dy, int yr, double *Mjd));
  487. ***************
  488. *** 332,341 ****
  489.           break;
  490.       }
  491.       case F_MAG:
  492. !         op->f_mag = atof (bp) * MAGSCALE;
  493.           break;
  494.       case F_SIZE:
  495. !         op->f_size = atof (bp);
  496.           break;
  497.       case F_EPOCH: {
  498.           double fepoch;
  499. --- 336,345 ----
  500.           break;
  501.       }
  502.       case F_MAG:
  503. !         op->f_mag = atod (bp) * MAGSCALE;
  504.           break;
  505.       case F_SIZE:
  506. !         op->f_size = atod (bp);
  507.           break;
  508.       case F_EPOCH: {
  509.           double fepoch;
  510. ***************
  511. *** 365,389 ****
  512.       }
  513.   
  514.       case E_INC:
  515. !         op->e_inc = atof (bp);
  516.           break;
  517.       case E_LAN:
  518. !         op->e_Om = atof (bp);
  519.           break;
  520.       case E_AOP:
  521. !         op->e_om = atof (bp);
  522.           break;
  523.       case E_A:
  524. !         op->e_a = atof (bp);
  525.           break;
  526.       case E_N:
  527. !         op->e_n = atof (bp);
  528.           break;
  529.       case E_E:
  530. !         op->e_e = atof (bp);
  531.           break;
  532.       case E_M:
  533. !         op->e_M = atof (bp);
  534.           break;
  535.       case E_CEPOCH:
  536.           crack_year (bp, pref, &op->e_cepoch);
  537. --- 369,393 ----
  538.       }
  539.   
  540.       case E_INC:
  541. !         op->e_inc = atod (bp);
  542.           break;
  543.       case E_LAN:
  544. !         op->e_Om = atod (bp);
  545.           break;
  546.       case E_AOP:
  547. !         op->e_om = atod (bp);
  548.           break;
  549.       case E_A:
  550. !         op->e_a = atod (bp);
  551.           break;
  552.       case E_N:
  553. !         op->e_n = atod (bp);
  554.           break;
  555.       case E_E:
  556. !         op->e_e = atod (bp);
  557.           break;
  558.       case E_M:
  559. !         op->e_M = atod (bp);
  560.           break;
  561.       case E_CEPOCH:
  562.           crack_year (bp, pref, &op->e_cepoch);
  563. ***************
  564. *** 405,411 ****
  565.           /* leave type unchanged if no or unrecognized prefix */
  566.           break;
  567.           }
  568. !         op->e_mag.m1 = atof(bp);
  569.           break;
  570.       case E_M2:
  571.           switch (bp[0]) {
  572. --- 409,415 ----
  573.           /* leave type unchanged if no or unrecognized prefix */
  574.           break;
  575.           }
  576. !         op->e_mag.m1 = atod(bp);
  577.           break;
  578.       case E_M2:
  579.           switch (bp[0]) {
  580. ***************
  581. *** 421,430 ****
  582.           /* leave type unchanged if no or unrecognized prefix */
  583.           break;
  584.           }
  585. !         op->e_mag.m2 = atof(bp);
  586.           break;
  587.       case E_SIZE:
  588. !         op->e_size = atof (bp);
  589.           break;
  590.   
  591.       case H_EP:
  592. --- 425,434 ----
  593.           /* leave type unchanged if no or unrecognized prefix */
  594.           break;
  595.           }
  596. !         op->e_mag.m2 = atod(bp);
  597.           break;
  598.       case E_SIZE:
  599. !         op->e_size = atod (bp);
  600.           break;
  601.   
  602.       case H_EP:
  603. ***************
  604. *** 431,461 ****
  605.           crack_year (bp, pref, &op->h_ep);
  606.           break;
  607.       case H_INC:
  608. !         op->h_inc = atof (bp);
  609.           break;
  610.       case H_LAN:
  611. !         op->h_Om = atof (bp);
  612.           break;
  613.       case H_AOP:
  614. !         op->h_om = atof (bp);
  615.           break;
  616.       case H_E:
  617. !         op->h_e = atof (bp);
  618.           break;
  619.       case H_QP:
  620. !         op->h_qp = atof (bp);
  621.           break;
  622.       case H_EPOCH:
  623.           crack_year (bp, pref, &op->h_epoch);
  624.           break;
  625.       case H_G:
  626. !         op->h_g = atof (bp);
  627.           break;
  628.       case H_K:
  629. !         op->h_k = atof (bp);
  630.           break;
  631.       case H_SIZE:
  632. !         op->h_size = atof (bp);
  633.           break;
  634.   
  635.       case P_EP:
  636. --- 435,465 ----
  637.           crack_year (bp, pref, &op->h_ep);
  638.           break;
  639.       case H_INC:
  640. !         op->h_inc = atod (bp);
  641.           break;
  642.       case H_LAN:
  643. !         op->h_Om = atod (bp);
  644.           break;
  645.       case H_AOP:
  646. !         op->h_om = atod (bp);
  647.           break;
  648.       case H_E:
  649. !         op->h_e = atod (bp);
  650.           break;
  651.       case H_QP:
  652. !         op->h_qp = atod (bp);
  653.           break;
  654.       case H_EPOCH:
  655.           crack_year (bp, pref, &op->h_epoch);
  656.           break;
  657.       case H_G:
  658. !         op->h_g = atod (bp);
  659.           break;
  660.       case H_K:
  661. !         op->h_k = atod (bp);
  662.           break;
  663.       case H_SIZE:
  664. !         op->h_size = atod (bp);
  665.           break;
  666.   
  667.       case P_EP:
  668. ***************
  669. *** 462,489 ****
  670.           crack_year (bp, pref, &op->p_ep);
  671.           break;
  672.       case P_INC:
  673. !         op->p_inc = atof (bp);
  674.           break;
  675.       case P_AOP:
  676. !         op->p_om = atof (bp);
  677.           break;
  678.       case P_QP:
  679. !         op->p_qp = atof (bp);
  680.           break;
  681.       case P_LAN:
  682. !         op->p_Om = atof (bp);
  683.           break;
  684.       case P_EPOCH:
  685.           crack_year (bp, pref, &op->p_epoch);
  686.           break;
  687.       case P_G:
  688. !         op->p_g = atof (bp);
  689.           break;
  690.       case P_K:
  691. !         op->p_k = atof (bp);
  692.           break;
  693.       case P_SIZE:
  694. !         op->p_size = atof (bp);
  695.           break;
  696.       default:
  697.           printf ("BUG! db_set_field: bad id: %d\n", id);
  698. --- 466,493 ----
  699.           crack_year (bp, pref, &op->p_ep);
  700.           break;
  701.       case P_INC:
  702. !         op->p_inc = atod (bp);
  703.           break;
  704.       case P_AOP:
  705. !         op->p_om = atod (bp);
  706.           break;
  707.       case P_QP:
  708. !         op->p_qp = atod (bp);
  709.           break;
  710.       case P_LAN:
  711. !         op->p_Om = atod (bp);
  712.           break;
  713.       case P_EPOCH:
  714.           crack_year (bp, pref, &op->p_epoch);
  715.           break;
  716.       case P_G:
  717. !         op->p_g = atod (bp);
  718.           break;
  719.       case P_K:
  720. !         op->p_k = atod (bp);
  721.           break;
  722.       case P_SIZE:
  723. !         op->p_size = atod (bp);
  724.           break;
  725.       default:
  726.           printf ("BUG! db_set_field: bad id: %d\n", id);
  727. ***************
  728. *** 508,515 ****
  729.       if (nobj[t] >= nmem[t]) {
  730.           int oldn = nmem[t];
  731.           int newn = oldn + DBMEMCHUNKS;
  732. !         char *newp = db[t] ? realloc (db[t], size*newn)
  733. !                    : malloc (size*newn);
  734.           if (!newp)
  735.           return (NULL);
  736.           zero_mem (newp + size*oldn, size*DBMEMCHUNKS);
  737. --- 512,519 ----
  738.       if (nobj[t] >= nmem[t]) {
  739.           int oldn = nmem[t];
  740.           int newn = oldn + DBMEMCHUNKS;
  741. !         char *newp = db[t] ? (char *) realloc (db[t], size*newn)
  742. !                    : (char *) malloc (size*newn);
  743.           if (!newp)
  744.           return (NULL);
  745.           zero_mem (newp + size*oldn, size*DBMEMCHUNKS);
  746. diff -c v2.4b/dbmenu.c v2.4e/dbmenu.c
  747. *** v2.4b/dbmenu.c    Tue Jun  1 14:31:11 1993
  748. --- v2.4e/dbmenu.c    Wed May 19 14:18:50 1993
  749. ***************
  750. *** 4,13 ****
  751.   #include <stdio.h>
  752.   #include <ctype.h>
  753.   #include <math.h>
  754. ! #include <errno.h>
  755.   #if defined(__STDC__)
  756.   #include <stdlib.h>
  757.   #endif
  758.   #include <Xm/Xm.h>
  759.   #include <Xm/Form.h>
  760.   #include <Xm/Frame.h>
  761. --- 4,14 ----
  762.   #include <stdio.h>
  763.   #include <ctype.h>
  764.   #include <math.h>
  765.   #if defined(__STDC__)
  766.   #include <stdlib.h>
  767.   #endif
  768.   #include <Xm/Xm.h>
  769.   #include <Xm/Form.h>
  770.   #include <Xm/Frame.h>
  771. ***************
  772. *** 26,31 ****
  773. --- 27,33 ----
  774.   #endif
  775.   
  776.   extern Obj *db_next P_((Obj *op, HowNext how));
  777. + extern char *syserrstr P_((void));
  778.   extern int db_n P_((void));
  779.   extern int db_read P_((FILE *fp, int append));
  780.   extern void all_newdb P_((int appended));
  781. ***************
  782. *** 46,52 ****
  783.   
  784.   #undef P_
  785.   
  786. - extern char *sys_errlist[];
  787.   extern Widget    toplevel_w;
  788.   extern char *myclass;
  789.   #define    XtD    XtDisplay(toplevel_w)
  790. --- 48,53 ----
  791. ***************
  792. *** 211,217 ****
  793.       if (!fp) {
  794.           char msg[128];
  795.           (void) sprintf (msg, "Can not open %.75s: %.25s", name,
  796. !                             sys_errlist[errno]);
  797.           xe_msg (msg, 1);
  798.       }
  799.       return (fp);
  800. --- 212,218 ----
  801.       if (!fp) {
  802.           char msg[128];
  803.           (void) sprintf (msg, "Can not open %.75s: %.25s", name,
  804. !                             syserrstr());
  805.           xe_msg (msg, 1);
  806.       }
  807.       return (fp);
  808. diff -c v2.4b/formats.c v2.4e/formats.c
  809. *** v2.4b/formats.c    Tue Jun  1 14:30:50 1993
  810. --- v2.4e/formats.c    Tue May 18 09:37:32 1993
  811. ***************
  812. *** 18,23 ****
  813. --- 18,24 ----
  814.   #define P_(s) ()
  815.   #endif
  816.   
  817. + extern double atod P_((char *buf));
  818.   extern void dec_sex P_((double d, int *hd, int *m, int *s, int *isneg));
  819.   extern void f_dec_sexsign P_((double x, int *h, int *m, int *s));
  820.   extern void field_log P_((Widget w, double value, int logv, char *str));
  821. ***************
  822. *** 143,149 ****
  823.       dec = v;
  824.       frac = (v - dec)*60.0;
  825.       (void) sprintf (str, "59.%.*s5", p, "999999999");
  826. !     if (frac >= atof (str)) {
  827.           dec += 1;
  828.           frac = 0.0;
  829.       }
  830. --- 144,150 ----
  831.       dec = v;
  832.       frac = (v - dec)*60.0;
  833.       (void) sprintf (str, "59.%.*s5", p, "999999999");
  834. !     if (frac >= atod (str)) {
  835.           dec += 1;
  836.           frac = 0.0;
  837.       }
  838. ***************
  839. *** 487,493 ****
  840.           /* not in a number now ... */
  841.           if (in) {
  842.               /* ... but we *were* in a number, so it counts */
  843. !             comp[ncomp] = atof (bp0);
  844.               set[ncomp] = 1;
  845.               in = 0;
  846.           }
  847. --- 488,494 ----
  848.           /* not in a number now ... */
  849.           if (in) {
  850.               /* ... but we *were* in a number, so it counts */
  851. !             comp[ncomp] = atod (bp0);
  852.               set[ncomp] = 1;
  853.               in = 0;
  854.           }
  855. diff -c v2.4b/listmenu.c v2.4e/listmenu.c
  856. *** v2.4b/listmenu.c    Tue Jun  1 14:31:13 1993
  857. --- v2.4e/listmenu.c    Wed May 19 14:19:00 1993
  858. ***************
  859. *** 4,17 ****
  860.   #include <stdio.h>
  861.   #include <ctype.h>
  862.   #include <math.h>
  863.   #if defined(__STDC__)
  864.   #include <stdlib.h>
  865.   #endif
  866.   #include <X11/Xlib.h>
  867.   #include <Xm/Xm.h>
  868.   #include <Xm/Form.h>
  869.   #include <Xm/DrawingA.h>
  870. ! #include <Xm/LabelG.h>
  871.   #include <Xm/PushB.h>
  872.   #include <Xm/ToggleB.h>
  873.   #include <Xm/Separator.h>
  874. --- 4,19 ----
  875.   #include <stdio.h>
  876.   #include <ctype.h>
  877.   #include <math.h>
  878.   #if defined(__STDC__)
  879.   #include <stdlib.h>
  880.   #endif
  881.   #include <X11/Xlib.h>
  882.   #include <Xm/Xm.h>
  883.   #include <Xm/Form.h>
  884.   #include <Xm/DrawingA.h>
  885. ! #include <Xm/Label.h>
  886.   #include <Xm/PushB.h>
  887.   #include <Xm/ToggleB.h>
  888.   #include <Xm/Separator.h>
  889. ***************
  890. *** 27,32 ****
  891. --- 29,35 ----
  892.   
  893.   extern int access();    /* don't know whether to include unistd.h */
  894.   
  895. + extern char *syserrstr P_((void));
  896.   extern void all_selection_mode P_((int whether));
  897.   extern void f_string P_((Widget w, char *s));
  898.   extern void hlp_dialog P_((char *tag, char *deflt[], int ndeflt));
  899. ***************
  900. *** 58,73 ****
  901.   
  902.   extern Widget toplevel_w;
  903.   
  904. - #ifdef VMS
  905. - #include <perror.h>
  906. - #include <errno.h>
  907. - #else
  908. - extern char *sys_errlist[];
  909. - extern errno;
  910. - #endif
  911. - #define    errsys    (sys_errlist[errno])
  912.   /* max number of fields we can keep track of at once to list */
  913.   #define MAXLSTFLDS    10
  914.   #define MAXLSTSTR    32    /* longest string we can list */
  915. --- 61,66 ----
  916. ***************
  917. *** 494,500 ****
  918.           char *buf;
  919.           XmToggleButtonSetState (active_w, False, False);
  920.           buf = XtMalloc (strlen(txt)+100);
  921. !         (void) sprintf (buf, "Can not open %s: %s", txt, errsys);
  922.           xe_msg (buf, 1);
  923.           XtFree (buf);
  924.       }
  925. --- 487,493 ----
  926.           char *buf;
  927.           XmToggleButtonSetState (active_w, False, False);
  928.           buf = XtMalloc (strlen(txt)+100);
  929. !         (void) sprintf (buf, "Can not open %s: %s", txt, syserrstr());
  930.           xe_msg (buf, 1);
  931.           XtFree (buf);
  932.       }
  933. diff -c v2.4b/mainmenu.c v2.4e/mainmenu.c
  934. *** v2.4b/mainmenu.c    Tue Jun  1 14:32:10 1993
  935. --- v2.4e/mainmenu.c    Tue Jun  1 12:23:55 1993
  936. ***************
  937. *** 38,43 ****
  938. --- 38,44 ----
  939.   #define P_(s) ()
  940.   #endif
  941.   
  942. + extern double atod P_((char *buf));
  943.   extern double mjd_day P_((double jd));
  944.   extern double mjd_hr P_((double jd));
  945.   extern int f_ison P_((void));
  946. ***************
  947. *** 118,125 ****
  948.   extern char *myclass;
  949.   extern XtAppContext xe_app;
  950.   #define    XtD    XtDisplay(toplevel_w)
  951. - extern char *sys_errlist[];
  952. - extern errno;
  953.   extern Widget calm_create();
  954.   
  955.   /* shorthands for fields of a Now structure, now.
  956. --- 119,124 ----
  957. ***************
  958. *** 156,161 ****
  959. --- 155,162 ----
  960.   static XtIntervalId mm_interval_id;    /* set while waiting in a pause loop */
  961.   static int mm_selecting;        /* set while our fields are being selected */
  962.   
  963. + #define    NO_PAUSE_DELAY    20    /* ms between loops when pause is 0 */
  964.   /* field ids
  965.    * N.B. must be in same order as they appear in mm_field_map[].
  966.    */
  967. ***************
  968. *** 726,732 ****
  969.           print_idle();
  970.       } else {
  971.           mm_interval_id =
  972. !         XtAppAddTimeOut (xe_app, spause>0 ? 1000 : 120, mm_timer_cb, 0);
  973.       }
  974.   }
  975.   
  976. --- 727,734 ----
  977.           print_idle();
  978.       } else {
  979.           mm_interval_id =
  980. !         XtAppAddTimeOut (xe_app, spause>0 ? 1000 : NO_PAUSE_DELAY,
  981. !                                 mm_timer_cb, 0);
  982.       }
  983.   }
  984.   
  985. ***************
  986. *** 870,876 ****
  987.           if (bp[0] == 'n' || bp[0] == 'N')
  988.           time_fromsys (&now);
  989.           else
  990. !         mjd = atof(bp) - MJD0;
  991.           set_t0 (&now);
  992.           new = 1;
  993.           break;
  994. --- 872,878 ----
  995.           if (bp[0] == 'n' || bp[0] == 'N')
  996.           time_fromsys (&now);
  997.           else
  998. !         mjd = atod(bp) - MJD0;
  999.           set_t0 (&now);
  1000.           new = 1;
  1001.           break;
  1002. ***************
  1003. *** 1035,1041 ****
  1004.           epoch = EOD;
  1005.           else {
  1006.           double e;
  1007. !         e = atof(bp);
  1008.           year_mjd (e, &epoch);
  1009.           }
  1010.           new = 1;
  1011. --- 1037,1043 ----
  1012.           epoch = EOD;
  1013.           else {
  1014.           double e;
  1015. !         e = atod(bp);
  1016.           year_mjd (e, &epoch);
  1017.           }
  1018.           new = 1;
  1019. diff -c v2.4b/misc.c v2.4e/misc.c
  1020. *** v2.4b/misc.c    Tue Jun  1 14:31:52 1993
  1021. --- v2.4e/misc.c    Thu May 20 18:13:49 1993
  1022. ***************
  1023. *** 5,13 ****
  1024. --- 5,15 ----
  1025.   #include <stdio.h>
  1026.   #include <ctype.h>
  1027.   #include <math.h>
  1028.   #if defined(__STDC__)
  1029.   #include <stdlib.h>
  1030.   #endif
  1031.   #include <X11/Xlib.h>
  1032.   #include <X11/cursorfont.h>
  1033.   #include <Xm/Xm.h>
  1034. ***************
  1035. *** 88,93 ****
  1036. --- 90,97 ----
  1037.   int lc P_((int cx, int cy, int cw, int x1, int y1, int x2, int y2, int *sx1, int *sy1, int *sx2, int *sy2));
  1038.   void hg_mag P_((double h, double g, double rp, double rho, double rsn, double *mp));
  1039.   void gk_mag P_((double g, double k, double rp, double rho, double *mp));
  1040. + double atod P_((char *buf));
  1041. + char *syserrstr P_((void));
  1042.   
  1043.   #undef P_
  1044.   
  1045. ***************
  1046. *** 809,812 ****
  1047. --- 813,851 ----
  1048.   double *mp;
  1049.   {
  1050.       *mp = g + 5.0*log10(rho) + 2.5*k*log10(rp);
  1051. + }
  1052. + /* given a string convert to floating point and return it as a double.
  1053. +  * this is to avoid the unportabilities associated with declaring atof().
  1054. +  */
  1055. + double
  1056. + atod (buf)
  1057. + char *buf;
  1058. + {
  1059. +     double tmp;
  1060. +     (void) sscanf (buf, "%lf", &tmp);
  1061. +     return (tmp);
  1062. + }
  1063. + /* return a string for whatever is in errno right now.
  1064. +  * I never would have imagined it would be so hard to turn errno into a string!
  1065. +  */
  1066. + char *
  1067. + syserrstr ()
  1068. + {
  1069. + #if defined(__STDC__)
  1070. + #include <errno.h>
  1071. + #include <string.h>
  1072. +     return (strerror (errno));
  1073. + #else
  1074. + #if defined(VMS)
  1075. + #include <errno.h>
  1076. + #include <perror.h>
  1077. + #else
  1078. +     extern char *sys_errlist[];
  1079. +     extern int errno;
  1080. + #endif
  1081. +     return (sys_errlist[errno]);
  1082. + #endif
  1083.   }
  1084. diff -c v2.4b/patchlevel.h v2.4e/patchlevel.h
  1085. *** v2.4b/patchlevel.h    Tue Jun  1 14:30:25 1993
  1086. --- v2.4e/patchlevel.h    Tue Jun  1 10:20:14 1993
  1087. ***************
  1088. *** 3,6 ****
  1089.    * it is also updated by any subsequent patches that are issued for xephem.
  1090.    */
  1091.   
  1092. ! #define    PATCHLEVEL    "Version 2.4b May 10, 1993"
  1093. --- 3,6 ----
  1094.    * it is also updated by any subsequent patches that are issued for xephem.
  1095.    */
  1096.   
  1097. ! #define    PATCHLEVEL    "Version 2.4e June 1, 1993"
  1098. diff -c v2.4b/plotmenu.c v2.4e/plotmenu.c
  1099. *** v2.4b/plotmenu.c    Tue Jun  1 14:30:58 1993
  1100. --- v2.4e/plotmenu.c    Wed May 19 14:19:24 1993
  1101. ***************
  1102. *** 4,12 ****
  1103. --- 4,14 ----
  1104.   #include <stdio.h>
  1105.   #include <ctype.h>
  1106.   #include <math.h>
  1107.   #if defined(__STDC__)
  1108.   #include <stdlib.h>
  1109.   #endif
  1110.   #include <X11/Xlib.h>
  1111.   #include <Xm/Xm.h>
  1112.   #include <Xm/Form.h>
  1113. ***************
  1114. *** 25,30 ****
  1115. --- 27,33 ----
  1116.   #define P_(s) ()
  1117.   #endif
  1118.   
  1119. + extern char *syserrstr P_((void));
  1120.   extern int plot_cartesian P_((FILE *pfp, Widget widget, unsigned int nx, unsigned int ny, int flipx, int flipy, int grid));
  1121.   extern void all_selection_mode P_((int whether));
  1122.   extern void f_string P_((Widget w, char *s));
  1123. ***************
  1124. *** 70,85 ****
  1125.   extern Widget toplevel_w;
  1126.   #define    XtD    XtDisplay(toplevel_w)
  1127.   
  1128. - #ifdef VMS
  1129. - #include <perror.h>
  1130. - #include <errno.h>
  1131. - #else
  1132. - extern char *sys_errlist[];
  1133. - extern errno;
  1134. - #endif
  1135. - #define    errsys    (sys_errlist[errno])
  1136.   /* max number of things we can keep track of at once to plot */
  1137.   #define    MAXPLTLINES    10
  1138.   #define    MAXFLDNAM    32    /* longest allowed field name */
  1139. --- 73,78 ----
  1140. ***************
  1141. *** 622,628 ****
  1142.           char *buf;
  1143.           XmToggleButtonSetState (active_w, False, False);
  1144.           buf = XtMalloc (strlen(txt)+100);
  1145. !         (void) sprintf (buf, "Can not open %s: %s", txt, errsys);
  1146.           xe_msg (buf, 1);
  1147.           XtFree (buf);
  1148.       }
  1149. --- 615,621 ----
  1150.           char *buf;
  1151.           XmToggleButtonSetState (active_w, False, False);
  1152.           buf = XtMalloc (strlen(txt)+100);
  1153. !         (void) sprintf (buf, "Can not open %s: %s", txt, syserrstr());
  1154.           xe_msg (buf, 1);
  1155.           XtFree (buf);
  1156.       }
  1157. ***************
  1158. *** 668,674 ****
  1159.       if (!fp) {
  1160.           char *buf;
  1161.           buf = XtMalloc (strlen(fn)+100);
  1162. !         (void) sprintf (buf, "Can not open %s: %s", fn, errsys);
  1163.           xe_msg (buf, 1);
  1164.           XtFree (buf);
  1165.           XtFree (fn);
  1166. --- 661,667 ----
  1167.       if (!fp) {
  1168.           char *buf;
  1169.           buf = XtMalloc (strlen(fn)+100);
  1170. !         (void) sprintf (buf, "Can not open %s: %s", fn, syserrstr());
  1171.           xe_msg (buf, 1);
  1172.           XtFree (buf);
  1173.           XtFree (fn);
  1174. diff -c v2.4b/skyviewmenu.c v2.4e/skyviewmenu.c
  1175. *** v2.4b/skyviewmenu.c    Tue Jun  1 14:32:28 1993
  1176. --- v2.4e/skyviewmenu.c    Tue Jun  1 13:24:09 1993
  1177. ***************
  1178. *** 63,68 ****
  1179. --- 63,69 ----
  1180.   extern int svf_filter_ok P_((Obj *op));
  1181.   extern int tickmarks P_((double min, double max, int numdiv, double ticks[]));
  1182.   extern void aa_hadec P_((double lati, double alt, double az, double *ha, double *dec));
  1183. + extern void confnd P_((double r, double d, double e, char **name));
  1184.   extern void db_update P_((Obj *op));
  1185.   extern void ecl_eq P_((double Mjd, double Lat, double Lng, double *ra, double *dec));
  1186.   extern void eq_ecl P_((double Mjd, double ra, double dec, double *Lat, double *Lng));
  1187. ***************
  1188. *** 174,179 ****
  1189. --- 175,181 ----
  1190.   static Pixmap sv_pm;            /* off-screen pixmap we *really* draw */
  1191.   static Widget talt_w, taz_w;        /* tracking alt/az report widgets */
  1192.   static Widget tra_w, tdec_w;        /* tracking ra/dec report widgets */
  1193. + static Widget tconst_w;            /* tracking constellation report wdgt */
  1194.   
  1195.   /* pixels and GCs
  1196.    */
  1197. ***************
  1198. *** 357,364 ****
  1199.   sv_id (op)
  1200.   Obj *op;
  1201.   {
  1202. !     Display *dsp = XtDisplay (svda_w);
  1203. !     Window win = XtWindow (svda_w);
  1204.       unsigned int wide, h, r, xb, yb;
  1205.       double altdec, azra;
  1206.       int x, y;
  1207. --- 359,366 ----
  1208.   sv_id (op)
  1209.   Obj *op;
  1210.   {
  1211. !     Display *dsp;
  1212. !     Window win;
  1213.       unsigned int wide, h, r, xb, yb;
  1214.       double altdec, azra;
  1215.       int x, y;
  1216. ***************
  1217. *** 366,371 ****
  1218. --- 368,376 ----
  1219.       if (!svform_w || !XtIsManaged(svform_w) || !op || op->type == UNDEFOBJ)
  1220.           return (-2);
  1221.   
  1222. +     dsp = XtDisplay (svda_w);
  1223. +     win = XtWindow (svda_w);
  1224.       sv_getcircle (&wide, &h, &r, &xb, &yb);
  1225.   
  1226.       altdec = aa_mode ? op->s_alt : op->s_dec;
  1227. ***************
  1228. *** 1085,1090 ****
  1229. --- 1090,1107 ----
  1230.       set_xmstring (taz_w, XmNlabelString, " ");
  1231.       XtManageChild(taz_w);
  1232.   
  1233. +     /* make a label for the constellation just below Alt */
  1234. +     n = 0;
  1235. +     XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  1236. +     XtSetArg (args[n], XmNleftWidget, fov_w); n++;
  1237. +     XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  1238. +     XtSetArg (args[n], XmNtopWidget, talt_w); n++;
  1239. +     XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1240. +     tconst_w = XmCreateLabel (svform_w, "TConst", args, n);
  1241. +     set_xmstring (tconst_w, XmNlabelString, " ");
  1242. +     XtManageChild(tconst_w);
  1243.       /* make a drawing area inside the sliders for drawing the sky */
  1244.   
  1245.       n = 0;
  1246. ***************
  1247. *** 1442,1447 ****
  1248. --- 1459,1465 ----
  1249.       int evt = ev->type;
  1250.       int okmotion, okbutton;
  1251.       double lst;
  1252. +     char *constellation;
  1253.   
  1254.       /* only interested if motion event or button 1 press/release */
  1255.       okmotion = evt == MotionNotify && ev->xmotion.state == Button1Mask;
  1256. ***************
  1257. *** 1482,1487 ****
  1258. --- 1500,1508 ----
  1259.           refract (pressure, temp, alt, &alt);
  1260.           }
  1261.   
  1262. +         confnd (ra, dec, epoch == EOD ? mjd : epoch, &constellation);
  1263. +         constellation += 5;    /* skip the abbreviation */
  1264.           (void) strcpy (alt_buf, "Alt: ");
  1265.           fs_angle (alt_buf+5, alt);
  1266.           (void) strcpy (az_buf, "Az: ");
  1267. ***************
  1268. *** 1495,1500 ****
  1269. --- 1516,1522 ----
  1270.           (void) strcpy (az_buf, " ");
  1271.           (void) strcpy (ra_buf, " ");
  1272.           (void) strcpy (dec_buf, " ");
  1273. +         constellation = " ";
  1274.       }
  1275.   
  1276.       f_showit (talt_w, alt_buf);
  1277. ***************
  1278. *** 1501,1506 ****
  1279. --- 1523,1529 ----
  1280.       f_showit (taz_w, az_buf);
  1281.       f_showit (tra_w, ra_buf);
  1282.       f_showit (tdec_w, dec_buf);
  1283. +     f_showit (tconst_w, constellation);
  1284.   }
  1285.   
  1286.   /* a dot has been picked:
  1287. ***************
  1288. *** 2254,2260 ****
  1289.   }
  1290.   
  1291.   /* determine if the given object is visible and within a circle of radius r
  1292. !  * pixels. if so, return 1 and compute the location in *xp/*yp, else return 0.
  1293.    * N.B. only call this for bona fide db objects -- *not* for objects in the
  1294.    *   TrailObj lists -- it will destroy their history.
  1295.    */
  1296. --- 2277,2283 ----
  1297.   }
  1298.   
  1299.   /* determine if the given object is visible and within a circle of radius r
  1300. !  * pixels. if so, return 1 and compute the location in *xp / *yp, else return 0.
  1301.    * N.B. only call this for bona fide db objects -- *not* for objects in the
  1302.    *   TrailObj lists -- it will destroy their history.
  1303.    */
  1304. diff -c v2.4b/time.c v2.4e/time.c
  1305. *** v2.4b/time.c    Tue Jun  1 14:30:34 1993
  1306. --- v2.4e/time.c    Tue Jun  1 12:26:24 1993
  1307. ***************
  1308. *** 20,25 ****
  1309. --- 20,26 ----
  1310.   
  1311.   #undef P_
  1312.   
  1313.   static long c0;
  1314.   static double mjd0;
  1315.   
  1316. ***************
  1317. *** 55,62 ****
  1318.   double inc;
  1319.   {
  1320.       if (inc == RTC) {
  1321. !         long c;
  1322. !         (void) time (&c);
  1323.           mjd = mjd0 + (c - c0)/SPD;
  1324.       } else
  1325.           mjd += inc/24.0;
  1326. --- 56,62 ----
  1327.   double inc;
  1328.   {
  1329.       if (inc == RTC) {
  1330. !         long c = time (NULL);
  1331.           mjd = mjd0 + (c - c0)/SPD;
  1332.       } else
  1333.           mjd += inc/24.0;
  1334. diff -c v2.4b/versionmenu.c v2.4e/versionmenu.c
  1335. *** v2.4b/versionmenu.c    Tue Jun  1 14:31:17 1993
  1336. --- v2.4e/versionmenu.c    Tue Jun  1 13:32:32 1993
  1337. ***************
  1338. *** 6,12 ****
  1339. --- 6,21 ----
  1340.    */
  1341.   
  1342.   /*
  1343. +  * 2.4e 6/1    can not list rise/set/transit times while looping: fixed.
  1344. +  *        decreased loop delay when pause is set to 0.
  1345. +  *        changed troublesome comment in skyviewmenu.c.
  1346. +  *        another change for DEC's alpha in time.c.
  1347. +  *        added constellation name to Sky View cursor tracking report.
  1348. +  *        patch to bring v2.4b to v2.4e posted to comp.sources.x.
  1349. +  * 2.4d 5/27    Sky Mark in ObjX/Y before Sky View seg faults: fixed.
  1350. +  * 2.4c 5/19    portability enhancements, particularly to VMS and Motif 1.2.
  1351.    * 2.4b 5/10    changed to using memcpy() instead of struct assign (for Alpha).
  1352. +  *        2.4b was released to comp.sources.x May 1993 in v19i090-v19i110.
  1353.    * 2.4a 4/23    changed usage of time() (just needed for DEC's Alpha CPUs)
  1354.    * 2.4 4/21     fixed blank jup and sat views (unsigned).
  1355.    * 2.3 4/12    add ecliptic option to sky view.
  1356. diff -c v2.4b/xephem.c v2.4e/xephem.c
  1357. *** v2.4b/xephem.c    Tue Jun  1 14:31:47 1993
  1358. --- v2.4e/xephem.c    Wed May 19 13:37:00 1993
  1359. ***************
  1360. *** 463,490 ****
  1361.       cascade = XmCreateCascadeButton (menu_bar, "Control", args, n);
  1362.       XtManageChild (cascade);
  1363.   
  1364. !     /*    Create "ObjX/Y..." Cascade Button.  */
  1365. !     str = XmStringCreate ("ObjX/Y...", XmSTRING_DEFAULT_CHARSET);
  1366.       n = 0;
  1367. !     XtSetArg (args[n], XmNlabelString, str); n++;
  1368.       XtSetArg (args[n], XmNmnemonic, 'O'); n++;
  1369. !     cascade = XmCreateCascadeButton (menu_bar, "ObjXY", args, n);
  1370. !     XtManageChild (cascade);
  1371. !     XtAddCallback (cascade, XmNactivateCallback, m_activate_cb,
  1372.                               (XtPointer)OBJS);
  1373. !     XmStringFree (str);
  1374. !     /*    Create "DB..." Cascade Button.  */
  1375. !     str = XmStringCreate ("DB...", XmSTRING_DEFAULT_CHARSET);
  1376.       n = 0;
  1377. !     XtSetArg (args[n], XmNlabelString, str); n++;
  1378. !     XtSetArg (args[n], XmNmnemonic, 'D'); n++;
  1379. !     cascade = XmCreateCascadeButton (menu_bar, "DB", args, n);
  1380.       XtManageChild (cascade);
  1381. !     XtAddCallback (cascade, XmNactivateCallback, m_activate_cb,
  1382. !                             (XtPointer)DB);
  1383. !     XmStringFree (str);
  1384.       /*    Create "Preferences" PulldownMenu.  */
  1385.   
  1386.       pref_create_pulldown (menu_bar);
  1387. --- 463,492 ----
  1388.       cascade = XmCreateCascadeButton (menu_bar, "Control", args, n);
  1389.       XtManageChild (cascade);
  1390.   
  1391. !     /*    Create "Objects" pulldown  */
  1392.       n = 0;
  1393. !     menu_pane = XmCreatePulldownMenu (menu_bar, "obj_pane", args, n);
  1394. !     
  1395. !     n = 0;
  1396. !     XtSetArg (args[n], XmNmnemonic, 'D'); n++;
  1397. !     button = XmCreatePushButton (menu_pane, "Data Base", args, n);
  1398. !     XtManageChild (button);
  1399. !     XtAddCallback (button, XmNactivateCallback, m_activate_cb,
  1400. !                             (XtPointer)DB);
  1401. !     
  1402. !     n = 0;
  1403.       XtSetArg (args[n], XmNmnemonic, 'O'); n++;
  1404. !     button = XmCreatePushButton (menu_pane, "ObjX/Y", args, n);
  1405. !     XtManageChild (button);
  1406. !     XtAddCallback (button, XmNactivateCallback, m_activate_cb,
  1407.                               (XtPointer)OBJS);
  1408. !     
  1409.       n = 0;
  1410. !     XtSetArg (args[n], XmNsubMenuId, menu_pane);  n++;
  1411. !     XtSetArg (args[n], XmNmnemonic, 'O'); n++;
  1412. !     cascade = XmCreateCascadeButton (menu_bar, "Objects", args, n);
  1413.       XtManageChild (cascade);
  1414. !     
  1415.       /*    Create "Preferences" PulldownMenu.  */
  1416.   
  1417.       pref_create_pulldown (menu_bar);
  1418. diff -c v2.4b/xephem.hlp v2.4e/xephem.hlp
  1419. *** v2.4b/xephem.hlp    Tue Jun  1 14:30:45 1993
  1420. --- v2.4e/xephem.hlp    Tue Jun  1 14:12:32 1993
  1421. ***************
  1422. *** 60,71 ****
  1423.       The "Control" pulldown toggles the plotting, listing and searching control
  1424.       menus.
  1425.   
  1426. !     The "ObjX/Y..." pushbutton toggles the menu that allows you to define
  1427. !     the user defined objects, ObjX and ObjY. Said menu also allows you to
  1428. !     inspect each item currently in the xephem database.
  1429.   
  1430. !     The "DB..." pushbutton toggles the menu that allows to add or replace
  1431. !     entries in the xephem database from files of database objects.
  1432.   
  1433.       The "Preferences" pulldown lists the available preferences that may be
  1434.       changed at runtime. The options currently available include whether the
  1435. --- 60,76 ----
  1436.       The "Control" pulldown toggles the plotting, listing and searching control
  1437.       menus.
  1438.   
  1439. !     The "Objects" pulldown entries toggle the menus that control reading
  1440. !     database files of objects into memory and defining the two user defined
  1441. !     objects, ObjX and ObjY.
  1442.   
  1443. !         The "Data Base" pushbutton toggles the menu that allows you to add or
  1444. !         replace objects in memory from files of database objects.
  1445. !     
  1446. !         The "ObjX/Y" pushbutton toggles the menu that allows you to define
  1447. !         the user defined objects, ObjX and ObjY. This menu also allows you to
  1448. !         inspect the fields of any object currently in memory and locate the
  1449. !         object on the Sky View menu.
  1450.   
  1451.       The "Preferences" pulldown lists the available preferences that may be
  1452.       changed at runtime. The options currently available include whether the
  1453. ***************
  1454. *** 114,142 ****
  1455.    Dusk          Local time when the sun center is "Twilight dip" degrees below
  1456.                  the horizon after sunset today.
  1457.    Night Length  Length of astronomical night, ie, Dawn - Dusk.  If this and the
  1458. !            display for Dawn and Dusk are shown as "-----", it means the sun
  1459. !            is either always below or always above "Twilight dip" degrees
  1460. !            below the horizon on this particular day.
  1461.   
  1462.    N Steps       The number of times the display will be updated (time advanced
  1463.                  by Step Size each step) automatically.
  1464.    Step Size     The amount of time UTC (and its derivatives) is incremented
  1465. !            each loop. 
  1466.    Pause         Number of seconds to pause between screen updates. This is
  1467. !            used mainly to set up for free-running unattended operation.
  1468. !            Pausing is not done when plotting or searching is on.
  1469.   
  1470.    Latitude      Location latitude, positive degrees north of equator.
  1471.    Longitude     Location longitude, positive degrees west of Greenwich meridian.
  1472.    Elevation     Local elevation of the ground above sea level, in feet. (see
  1473. !            implementation notes). Used in refraction correction.
  1474.    Temperature   Local surface air temperature, in degrees F. Used in refraction
  1475. !            correction.
  1476.    Atm Pressure  Local surface air pressure, in inches of mercury. Used in
  1477. !            refraction correction.
  1478.    Epoch         The epoch, to the nearest 0.1 years, to which the ra/dec
  1479. !            fields are precessed.  This says (OfDate) when coordinates
  1480. !            are not precessed, ie, are in the epoch of date.
  1481.   
  1482.   The calendar on the right of the Main menu is based on UTC. Selecting a date
  1483.   button will set the date. Unlabeled buttons before the first of the month
  1484. --- 119,147 ----
  1485.    Dusk          Local time when the sun center is "Twilight dip" degrees below
  1486.                  the horizon after sunset today.
  1487.    Night Length  Length of astronomical night, ie, Dawn - Dusk.  If this and the
  1488. !                display for Dawn and Dusk are shown as "-----", it means the sun
  1489. !                is either always below or always above "Twilight dip" degrees
  1490. !                below the horizon on this particular day.
  1491.   
  1492.    N Steps       The number of times the display will be updated (time advanced
  1493.                  by Step Size each step) automatically.
  1494.    Step Size     The amount of time UTC (and its derivatives) is incremented
  1495. !                each loop. 
  1496.    Pause         Number of seconds to pause between screen updates. This is
  1497. !                used mainly to set up for free-running unattended operation.
  1498. !                Pausing is not done when plotting or searching is on.
  1499.   
  1500.    Latitude      Location latitude, positive degrees north of equator.
  1501.    Longitude     Location longitude, positive degrees west of Greenwich meridian.
  1502.    Elevation     Local elevation of the ground above sea level, in feet. (see
  1503. !                implementation notes). Used in refraction correction.
  1504.    Temperature   Local surface air temperature, in degrees F. Used in refraction
  1505. !                correction.
  1506.    Atm Pressure  Local surface air pressure, in inches of mercury. Used in
  1507. !                refraction correction.
  1508.    Epoch         The epoch, to the nearest 0.1 years, to which the ra/dec
  1509. !                fields are precessed.  This says (OfDate) when coordinates
  1510. !                are not precessed, ie, are in the epoch of date.
  1511.   
  1512.   The calendar on the right of the Main menu is based on UTC. Selecting a date
  1513.   button will set the date. Unlabeled buttons before the first of the month
  1514. ***************
  1515. *** 254,264 ****
  1516.    Long      longitude, in degrees west of Greenwich, in the form d:m:s.
  1517.    Lat       latitude, in degrees north of the equator, in the form d:m:s.
  1518.    Elevation height above sea level, in feet or meters, such as 800. Used to
  1519. !        compute parallax of solar system objects.
  1520.    Temp      air temperature, in degrees F or C, such as 60.
  1521.    Pressure  air pressure, in inches of Mercury or mBar, such as 29.50.
  1522. !        Temp and Pressure are used to compute refraction when the AdpHzrn
  1523. !        option is active; see the Help for the Data setup table.
  1524.    StepSize  the time increment between screen updates, such as "1" to give
  1525.              one hour updates. this can be a specific amount or RTC to use
  1526.              the system clock as a real-time source. You may also specify a
  1527. --- 259,269 ----
  1528.    Long      longitude, in degrees west of Greenwich, in the form d:m:s.
  1529.    Lat       latitude, in degrees north of the equator, in the form d:m:s.
  1530.    Elevation height above sea level, in feet or meters, such as 800. Used to
  1531. !            compute parallax of solar system objects.
  1532.    Temp      air temperature, in degrees F or C, such as 60.
  1533.    Pressure  air pressure, in inches of Mercury or mBar, such as 29.50.
  1534. !            Temp and Pressure are used to compute refraction when the AdpHzrn
  1535. !            option is active; see the Help for the Data setup table.
  1536.    StepSize  the time increment between screen updates, such as "1" to give
  1537.              one hour updates. this can be a specific amount or RTC to use
  1538.              the system clock as a real-time source. You may also specify a
  1539. ***************
  1540. *** 268,277 ****
  1541.              see the discussion under Program Operation.
  1542.    Epoch     this sets the desired ra/dec precession epoch. you can put any
  1543.              date here (use decimal form, such as 1992.5) or "EOD" to use the
  1544. !        current instant ("Epoch of Date").
  1545.    Pause     The number of seconds to pause between calculation steps.
  1546.    TwilightDip Number of degrees the sun is below the horizon that you want to
  1547. !        define as being the end of "twilight"; must be at least 0.
  1548.   @Date/time
  1549.   Xephem uses many values that get are entered in some variation of X/Y/Z form.
  1550.   We call this a "triad" input format.
  1551. --- 273,282 ----
  1552.              see the discussion under Program Operation.
  1553.    Epoch     this sets the desired ra/dec precession epoch. you can put any
  1554.              date here (use decimal form, such as 1992.5) or "EOD" to use the
  1555. !            current instant ("Epoch of Date").
  1556.    Pause     The number of seconds to pause between calculation steps.
  1557.    TwilightDip Number of degrees the sun is below the horizon that you want to
  1558. !            define as being the end of "twilight"; must be at least 0.
  1559.   @Date/time
  1560.   Xephem uses many values that get are entered in some variation of X/Y/Z form.
  1561.   We call this a "triad" input format.
  1562. ***************
  1563. *** 615,628 ****
  1564.   Various odd ball rising, transit and setting conditions are accounted for
  1565.   and marked as follows when they occur:
  1566.   
  1567. !  NoRise      up some time but never rises, as such, today.
  1568. !  NoSet      up some time but never sets, as such, today.
  1569. !  NoTran      up some time but doesn't transit, as such, today.
  1570. !  CirPol      object is circumpolar (never goes below horizon) today.
  1571. !  NvrUp      object is never up today.
  1572. !  XX:XX+      "+" appended to rise, transit or set times means the event occurs
  1573.                 twice today; the time given is the time of the first event.
  1574. !       "+" appended to "Hours Up" means it is still up at midnight.
  1575.   
  1576.   Any of the information in this table may be plotted, listed or used in a
  1577.   search algorithm. See the help for these control functions for more details.
  1578. --- 620,633 ----
  1579.   Various odd ball rising, transit and setting conditions are accounted for
  1580.   and marked as follows when they occur:
  1581.   
  1582. !  NoRise          up some time but never rises, as such, today.
  1583. !  NoSet          up some time but never sets, as such, today.
  1584. !  NoTran          up some time but doesn't transit, as such, today.
  1585. !  CirPol          object is circumpolar (never goes below horizon) today.
  1586. !  NvrUp          object is never up today.
  1587. !  XX:XX+          "+" appended to rise, transit or set times means the event occurs
  1588.                 twice today; the time given is the time of the first event.
  1589. !           "+" appended to "Hours Up" means it is still up at midnight.
  1590.   
  1591.   Any of the information in this table may be plotted, listed or used in a
  1592.   search algorithm. See the help for these control functions for more details.
  1593. ***************
  1594. *** 653,689 ****
  1595.   
  1596.    Cns           name of the constellation in which the object appears.
  1597.    R_A           apparent geocentric right ascension of object, precessed to
  1598. !            given epoch, in hours, minutes and decimal minutes.
  1599.    Dec           apparent geocentric declination of object, precessed to
  1600. !            given epoch, in degrees and minutes.
  1601.    Az            degrees eastward of true north for object.
  1602.    Alt           degrees up from a horizontal plane that is Elevation feet above
  1603.                  sea level.
  1604.    HeLong        true heliocentric longitude, in degrees.  Earth's is displayed
  1605.                  on the sun's line.  For the moon this is the geocentric
  1606. !            longitude.
  1607.    HeLat         true heliocentric latitude, in degrees.  For the moon this is
  1608.                  the geocentric latitude.
  1609.    EaDst         true distance from Earth center to object center, in AU, except
  1610.                  distance to the moon is in miles or km depending on the Units
  1611. !            preference.
  1612.    SnDst         true distance from sun center to object center, in AU.
  1613.    Elong         spherical angular separation between sun and given object,
  1614. !            calculated from the their geocentric ecliptic coordinates.
  1615. !            Note this is not just the difference in ecliptic longitude.
  1616. !            The sign, however, is simply sign(obj's longitude - sun's
  1617. !            longitude), ie, degrees east.  thus, a positive elongation
  1618. !            means the object rises after the sun.  This field is not
  1619. !            generally useful in searching for conjunctions because of
  1620. !            the discontinuous sign change that occurs at conjunction.
  1621.    Size          angular size of object, in arc seconds.
  1622.    VMag          visual magnitude of object.
  1623.    Phase         percent of visible surface in sunlight. Note the moon phase
  1624. !            is calculated simplistically as just abs(elongation)/180*100
  1625. !            which can be a few degrees off... this means that because of
  1626. !            how elongation is defined it doesn't say 0 during new moon
  1627. !            (or 100 during full) except during close eclipses (maybe
  1628. !            that's a "feature"?).
  1629.   
  1630.   Column three controls information related to rising, transiting, and
  1631.   setting.  These may be computed according to two options.
  1632. --- 658,694 ----
  1633.   
  1634.    Cns           name of the constellation in which the object appears.
  1635.    R_A           apparent geocentric right ascension of object, precessed to
  1636. !                given epoch, in hours, minutes and decimal minutes.
  1637.    Dec           apparent geocentric declination of object, precessed to
  1638. !                given epoch, in degrees and minutes.
  1639.    Az            degrees eastward of true north for object.
  1640.    Alt           degrees up from a horizontal plane that is Elevation feet above
  1641.                  sea level.
  1642.    HeLong        true heliocentric longitude, in degrees.  Earth's is displayed
  1643.                  on the sun's line.  For the moon this is the geocentric
  1644. !                longitude.
  1645.    HeLat         true heliocentric latitude, in degrees.  For the moon this is
  1646.                  the geocentric latitude.
  1647.    EaDst         true distance from Earth center to object center, in AU, except
  1648.                  distance to the moon is in miles or km depending on the Units
  1649. !                preference.
  1650.    SnDst         true distance from sun center to object center, in AU.
  1651.    Elong         spherical angular separation between sun and given object,
  1652. !                calculated from the their geocentric ecliptic coordinates.
  1653. !                Note this is not just the difference in ecliptic longitude.
  1654. !                The sign, however, is simply sign(obj's longitude - sun's
  1655. !                longitude), ie, degrees east.  thus, a positive elongation
  1656. !                means the object rises after the sun.  This field is not
  1657. !                generally useful in searching for conjunctions because of
  1658. !                the discontinuous sign change that occurs at conjunction.
  1659.    Size          angular size of object, in arc seconds.
  1660.    VMag          visual magnitude of object.
  1661.    Phase         percent of visible surface in sunlight. Note the moon phase
  1662. !                is calculated simplistically as just abs(elongation)/180*100
  1663. !                which can be a few degrees off... this means that because of
  1664. !                how elongation is defined it doesn't say 0 during new moon
  1665. !                (or 100 during full) except during close eclipses (maybe
  1666. !                that's a "feature"?).
  1667.   
  1668.   Column three controls information related to rising, transiting, and
  1669.   setting.  These may be computed according to two options.
  1670. ***************
  1671. *** 710,721 ****
  1672.    TrnTm
  1673.    TrnAlt   The local time and altitude when the object crosses the meridian
  1674.             today, ie, when its azimuth is true south or, if no precession, when
  1675. !       the local sidereal time equals the object's right ascension.
  1676.    SetTm
  1677.    SetAz    The local time and azimuth when the upper limb (or center) of the
  1678.             object sets today.
  1679.    HrsUp    The number of hours the object is up today, that is, the difference
  1680. !       between the set and rise times.
  1681.   
  1682.   Note that these times are for the current local day. See the description of
  1683.   "odd ball" circumstances that this definition can produce and how xephem
  1684. --- 715,726 ----
  1685.    TrnTm
  1686.    TrnAlt   The local time and altitude when the object crosses the meridian
  1687.             today, ie, when its azimuth is true south or, if no precession, when
  1688. !           the local sidereal time equals the object's right ascension.
  1689.    SetTm
  1690.    SetAz    The local time and azimuth when the upper limb (or center) of the
  1691.             object sets today.
  1692.    HrsUp    The number of hours the object is up today, that is, the difference
  1693. !           between the set and rise times.
  1694.   
  1695.   Note that these times are for the current local day. See the description of
  1696.   "odd ball" circumstances that this definition can produce and how xephem
  1697. ***************
  1698. *** 777,804 ****
  1699.   central display is intended to be similar to a telescopic view.  Descriptions
  1700.   of each function are keyed to the schematic depiction below:
  1701.   
  1702. !             _____________________________________________
  1703. !             |Alt-Az  |   | [Alt]               [Az] |   |
  1704. !             |RA-Dec  | F |                          | A |
  1705. !             |--------| O |                          | l |
  1706. !             |Grid    | V |                          | t |
  1707. !             |--------|   |                          |   |
  1708. !             |F Mag   |   |                          | / |
  1709. !             |B Mag   |   |           Sky            |   |
  1710. !             |--------|   |                          | D |
  1711. !             |Dots    |   |                          | e |
  1712. !             |Ecliptic|   |                          | c |
  1713. !             |Labels  |   |                          |   |
  1714. !             |--------|   |                          |   |
  1715. !             |Locate  |   |                          |   |
  1716. !             |--------|   | [RA]               [Dec] |   |
  1717. !             |        |___|__________________________|___|
  1718. !             |        |             Az / RA              |
  1719. !             |        |__________________________________|
  1720. !             |        |         Date/Time stamp          |
  1721. !             |________|__________________________________|
  1722. !             |   Filter          Close            Help   |
  1723. !             |___________________________________________|
  1724.   
  1725.   Alt-Az / RA-Dec
  1726.       The radio box in the upper left corner selects whether the display
  1727. --- 782,809 ----
  1728.   central display is intended to be similar to a telescopic view.  Descriptions
  1729.   of each function are keyed to the schematic depiction below:
  1730.   
  1731. !                     _____________________________________________
  1732. !                     |Alt-Az  |   | [Alt]               [Az] |   |
  1733. !                     |RA-Dec  | F | [Constellation]          | A |
  1734. !                     |--------| O |                          | l |
  1735. !                     |Grid    | V |                          | t |
  1736. !                     |--------|   |                          |   |
  1737. !                     |F Mag   |   |                          | / |
  1738. !                     |B Mag   |   |           Sky            |   |
  1739. !                     |--------|   |                          | D |
  1740. !                     |Dots    |   |                          | e |
  1741. !                     |Ecliptic|   |                          | c |
  1742. !                     |Labels  |   |                          |   |
  1743. !                     |--------|   |                          |   |
  1744. !                     |Locate  |   |                          |   |
  1745. !                     |--------|   | [RA]               [Dec] |   |
  1746. !                     |        |___|__________________________|___|
  1747. !                     |        |             Az / RA              |
  1748. !                     |        |__________________________________|
  1749. !                     |        |         Date/Time stamp          |
  1750. !                     |________|__________________________________|
  1751. !                     |   Filter          Close            Help   |
  1752. !                     |___________________________________________|
  1753.   
  1754.   Alt-Az / RA-Dec
  1755.       The radio box in the upper left corner selects whether the display
  1756. ***************
  1757. *** 866,875 ****
  1758.       The left vertically-oriented slider controls the field-of-view of the
  1759.       display circle. This can be varied from 1 to 180 degrees.
  1760.   
  1761. ! [Alt] [Az] [RA] [Dec]
  1762. !    The coordinates of the cursor are tracked and displayed across the bottom
  1763. !    and top of the circular display area as long as it is within the circle and
  1764. !    the left mouse button is depressed.
  1765.   
  1766.      NOTE: The values displayed during tracking for the coordinate system
  1767.      opposite to the one currently in effect may not agree exactly with
  1768. --- 871,880 ----
  1769.       The left vertically-oriented slider controls the field-of-view of the
  1770.       display circle. This can be varied from 1 to 180 degrees.
  1771.   
  1772. ! [Alt] [Az] [RA] [Dec] [Constellation]
  1773. !    The coordinates and constellation of the cursor are tracked and displayed
  1774. !    across the top and bottom of the circular display area as long as the left
  1775. !    mouse button is depressed and the cursor is within the circle.
  1776.   
  1777.      NOTE: The values displayed during tracking for the coordinate system
  1778.      opposite to the one currently in effect may not agree exactly with
  1779. ***************
  1780. *** 898,931 ****
  1781.       selected, the data will be as it was at the time the position was created.
  1782.       In addition, the popup offers several control operations, as follows:
  1783.   
  1784. !     Selecting "Point" from the popup will center the object in the field of
  1785. !     view (as well as can be done with the accuracy of the pointing scales
  1786. !     anyway).
  1787.   
  1788. !     Selecting "Make ObjX/Y" will assign the given object to become ObjX
  1789. !     or ObjY, depending on which one is currently being displayed in the
  1790. !     ObjX/Y menu. See the help for the ObjX/Y menu for more information on
  1791. !     that menu.
  1792.   
  1793. !     Selecting "Leave Trail" will start to accumulate all positions of the
  1794. !     given object as time is advanced. Each new location will be connected
  1795. !     with a line to its previous location. The trails remain correct if the
  1796. !     display coordinate system is changed. Trails may be turned on or off
  1797. !     without loss of trail information. However, trailing information is
  1798. !     discarded if trailing is turned off when a new time step is performed.
  1799. !     If any point in a trail is selected the information displayed is as per
  1800. !     the object at that time. The fastest way to accumulate trailing
  1801. !     information is to turn trailing on and pop the menu down while running.
  1802.   
  1803. !     Note that in Alt-Az mode, if an object goes below the horizon the line
  1804. !     segments of the trail are displayed but not the actual points.
  1805.   
  1806. !     Selecting "Persistent Label" will place the name of the object near it
  1807. !     on the display. This will remain until the label is turned off. Note
  1808. !     this option is maintained separately for trailed objects and for
  1809. !     the untrailed objects; that is, you have independent control over
  1810. !     labeling for a trailed object and its currently displayed object
  1811. !     since the latter also always appears in the trailed list.
  1812.   
  1813.       The coordinates of the cursor are displayed in the corners of the circular
  1814.       sky area as long as the cursor is within the central circle and the left
  1815. --- 903,936 ----
  1816.       selected, the data will be as it was at the time the position was created.
  1817.       In addition, the popup offers several control operations, as follows:
  1818.   
  1819. !         Selecting "Point" from the popup will center the object in the field of
  1820. !         view (as well as can be done with the accuracy of the pointing scales
  1821. !         anyway).
  1822.   
  1823. !         Selecting "Make ObjX/Y" will assign the given object to become ObjX
  1824. !         or ObjY, depending on which one is currently being displayed in the
  1825. !         ObjX/Y menu. See the help for the ObjX/Y menu for more information on
  1826. !         that menu.
  1827.   
  1828. !         Selecting "Leave Trail" will start to accumulate all positions of the
  1829. !         given object as time is advanced. Each new location will be connected
  1830. !         with a line to its previous location. The trails remain correct if the
  1831. !         display coordinate system is changed. Trails may be turned on or off
  1832. !         without loss of trail information. However, trailing information is
  1833. !         discarded if trailing is turned off when a new time step is performed.
  1834. !         If any point in a trail is selected the information displayed is as per
  1835. !         the object at that time. The fastest way to accumulate trailing
  1836. !         information is to turn trailing on and pop the menu down while running.
  1837.   
  1838. !         Note that in Alt-Az mode, if an object goes below the horizon the line
  1839. !         segments of the trail are displayed but not the actual points.
  1840.   
  1841. !         Selecting "Persistent Label" will place the name of the object near it
  1842. !         on the display. This will remain until the label is turned off. Note
  1843. !         this option is maintained separately for trailed objects and for
  1844. !         the untrailed objects; that is, you have independent control over
  1845. !         labeling for a trailed object and its currently displayed object
  1846. !         since the latter also always appears in the trailed list.
  1847.   
  1848.       The coordinates of the cursor are displayed in the corners of the circular
  1849.       sky area as long as the cursor is within the central circle and the left
  1850. ***************
  1851. *** 1082,1127 ****
  1852.    For other object types, the remaining fields are defined as follows:
  1853.   
  1854.    elliptical format (e < 1):
  1855. !     i = inclination, degrees
  1856. !     O = longitude of ascending node, degrees
  1857. !     o = argument of perihelion, degrees
  1858. !     a = mean distance (aka semi-major axis), AU
  1859. !     n = mean daily motion, degrees per day (computed from a**3/2 if omitted)
  1860. !     e = eccentricity,
  1861. !     M = mean anomaly (ie, degrees from perihelion),
  1862. !     E = epoch date (ie, time of M),
  1863. !     D = the equinox year (ie, time of i/O/o).
  1864. !     g/k or H/G = magnitude model; select which by preceding the first field
  1865. !         with either a "g" or an "H"; H/G is the default if neither is given.
  1866. !     s = angular size at 1 AU, arc seconds, optional
  1867.   
  1868.    hyperbolic format (e > 1):
  1869. !     T = epoch of perihelion
  1870. !     i = inclination, degrees
  1871. !     O = longitude of ascending node, degrees
  1872. !     o = argument of perihelion, degrees
  1873. !     e = eccentricity,
  1874. !     q = perihelion distance, AU
  1875. !     D = the equinox year (ie, time of i/O/o).
  1876. !     g/k = magnitude model
  1877. !     s = angular size at 1 AU, arc seconds, optional
  1878.   
  1879.    parabolic format (e == 1):
  1880. !     T = epoch of perihelion
  1881. !     i = inclination, degrees
  1882. !     o = argument of perihelion, degrees
  1883. !     q = perihelion distance, AU
  1884. !     O = longitude of ascending node, degrees
  1885. !     D = the equinox year (ie, time of i/O/o).
  1886. !     g/k = magnitude model
  1887. !     s = angular size at 1 AU, arc seconds, optional
  1888.   
  1889.    fixed format:
  1890. !     RA, hours
  1891. !     Declination, degrees
  1892. !     magnitude
  1893. !     reference epoch
  1894. !     s = angular size, arc minutes, optional
  1895.   @Object
  1896.   Xephem supports two user-defined objects, denoted ObjX and ObjY. These may
  1897.   be fixed objects or objects in elliptical, hyperbolic or parabolic
  1898. --- 1087,1132 ----
  1899.    For other object types, the remaining fields are defined as follows:
  1900.   
  1901.    elliptical format (e < 1):
  1902. !         i = inclination, degrees
  1903. !         O = longitude of ascending node, degrees
  1904. !         o = argument of perihelion, degrees
  1905. !         a = mean distance (aka semi-major axis), AU
  1906. !         n = mean daily motion, degrees per day (computed from a**3/2 if omitted)
  1907. !         e = eccentricity,
  1908. !         M = mean anomaly (ie, degrees from perihelion),
  1909. !         E = epoch date (ie, time of M),
  1910. !         D = the equinox year (ie, time of i/O/o).
  1911. !         g/k or H/G = magnitude model; select which by preceding the first field
  1912. !             with either a "g" or an "H"; H/G is the default if neither is given.
  1913. !         s = angular size at 1 AU, arc seconds, optional
  1914.   
  1915.    hyperbolic format (e > 1):
  1916. !         T = epoch of perihelion
  1917. !         i = inclination, degrees
  1918. !         O = longitude of ascending node, degrees
  1919. !         o = argument of perihelion, degrees
  1920. !         e = eccentricity,
  1921. !         q = perihelion distance, AU
  1922. !         D = the equinox year (ie, time of i/O/o).
  1923. !         g/k = magnitude model
  1924. !         s = angular size at 1 AU, arc seconds, optional
  1925.   
  1926.    parabolic format (e == 1):
  1927. !         T = epoch of perihelion
  1928. !         i = inclination, degrees
  1929. !         o = argument of perihelion, degrees
  1930. !         q = perihelion distance, AU
  1931. !         O = longitude of ascending node, degrees
  1932. !         D = the equinox year (ie, time of i/O/o).
  1933. !         g/k = magnitude model
  1934. !         s = angular size at 1 AU, arc seconds, optional
  1935.   
  1936.    fixed format:
  1937. !         RA, hours
  1938. !         Declination, degrees
  1939. !         magnitude
  1940. !         reference epoch
  1941. !         s = angular size, arc minutes, optional
  1942.   @Object
  1943.   Xephem supports two user-defined objects, denoted ObjX and ObjY. These may
  1944.   be fixed objects or objects in elliptical, hyperbolic or parabolic
  1945. diff -c v2.4b/xephem.man v2.4e/xephem.man
  1946. *** v2.4b/xephem.man    Tue Jun  1 14:30:11 1993
  1947. --- v2.4e/xephem.man    Wed May 19 14:12:37 1993
  1948. ***************
  1949. *** 4,9 ****
  1950. --- 4,11 ----
  1951.   .SH Syntax
  1952.   \fBxephem\fP
  1953.   .SH Description
  1954. + .na
  1955. + .nh
  1956.   .PP
  1957.   .B Xephem
  1958.   is an interactive astronomical ephemeris program for X Windows. It has built-in
  1959. ***************
  1960. *** 37,51 ****
  1961.   .B Xephem
  1962.   has information about the Solar system planets and several moons
  1963.   built in. These can be accessed without the need to access an external
  1964. ! database. However, if a database of objects is available then
  1965.   .B xephem
  1966. ! can read this information into memory and use it as well. The database
  1967. ! is read in using the
  1968. ! .I DB...
  1969. ! pulldown. The objects may be inspected in detail, manipulated and assigned
  1970. ! to so-called `user defined objects' X and Y using the
  1971. ! .I ObjX/Y...
  1972. ! pulldown.
  1973.   
  1974.   All of the tabular data that 
  1975.   .B xephem
  1976. --- 39,55 ----
  1977.   .B Xephem
  1978.   has information about the Solar system planets and several moons
  1979.   built in. These can be accessed without the need to access an external
  1980. ! database. In addition, if a database of objects is available then
  1981.   .B xephem
  1982. ! can read this information into memory and use it as well. Database files
  1983. ! are read in using the
  1984. ! .I Data Base
  1985. ! button in the
  1986. ! .I Objects
  1987. ! pulldown. The objects in memory may be inspected in detail,
  1988. ! manipulated and assigned to so-called `user defined objects' X and Y using the
  1989. ! .I ObjX/Y
  1990. ! button in the same pulldown.
  1991.   
  1992.   All of the tabular data that 
  1993.   .B xephem
  1994. ***************
  1995. *** 60,65 ****
  1996. --- 64,75 ----
  1997.   .I Preferences
  1998.   pulldown.
  1999.   
  2000. + The
  2001. + .I Files
  2002. + pulldown in the main menu allows one to reset the main menu from the initial
  2003. + resource settings; toggle whether the general messages menu is display; and
  2004. + quit the program.
  2005.   Finally, the
  2006.   .I Help
  2007.   pulldown provides several categories of assistance applicable to the overall
  2008. ***************
  2009. *** 85,95 ****
  2010.   code is in xephem.c surrounded by #ifdef WANT_EDITRES.
  2011.   .SH Author
  2012.   .PP
  2013. ! Elwood Downey, currently at ecdowney@pobox.cca.cr.rockwell.com
  2014.   .SH See also
  2015.   .PP
  2016. ! Ephem, the ancestor of xephem suitable for "dumb" 24x80 character displays,
  2017.   including VMS and DOS as well as UNIX.
  2018.   .PP
  2019. ! Ephem and xephem are both on export.lcs.mit.edu; look for contrib/ephem*
  2020.   and contrib/xephem* for the latest releases.
  2021. --- 95,109 ----
  2022.   code is in xephem.c surrounded by #ifdef WANT_EDITRES.
  2023.   .SH Author
  2024.   .PP
  2025. ! Elwood Downey, currently at ecdowney@pobox.cca.cr.rockwell.com.
  2026.   .SH See also
  2027.   .PP
  2028. ! .B Ephem,
  2029. ! the ancestor of xephem suitable for "dumb" 24x80 character displays,
  2030.   including VMS and DOS as well as UNIX.
  2031.   .PP
  2032. ! .B Ephem
  2033. ! and
  2034. ! .B xephem
  2035. ! are both on export.lcs.mit.edu; look for contrib/ephem*
  2036.   and contrib/xephem* for the latest releases.
  2037.  
  2038.