home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / astrnomy / ephem421.zip / SEL_FLD.C < prev    next >
C/C++ Source or Header  |  1990-09-13  |  25KB  |  637 lines

  1. #include <stdio.h>
  2. #include "screen.h"
  3.  
  4. /* define BANG if and only if your system supports the system() function.
  5.  */
  6. #define    BANG
  7.  
  8. /* table of the fields, with flags indicating which menu(s) they are on and
  9.  * whether pickable for changing or plotting.
  10.  * N.B. type must be long enough to hold 16 bits.
  11.  */
  12. static int fields[] = {
  13.     rcfpack (R_ALTM,    C_ALTM,        F_MMNU|F_CHG),
  14.     rcfpack (R_DAWN,    C_DAWN,        F_MMNU|F_CHG),
  15.     rcfpack (R_DAWN,    C_DAWNV,    F_MMNU|F_PLT),
  16.     rcfpack (R_DUSK,    C_DUSK,        F_MMNU|F_CHG),
  17.     rcfpack (R_DUSK,    C_DUSKV,    F_MMNU|F_PLT),
  18.     rcfpack (R_EPOCH,    C_EPOCHV,    F_MMNU|F_CHG),
  19.     rcfpack (R_HEIGHT,    C_HEIGHTV,    F_MMNU|F_CHG|F_PLT),
  20.     rcfpack (R_JD,    C_JDV,        F_MMNU|F_CHG|F_PLT),
  21.     rcfpack (R_JUPITER,    C_ALT,        F_MNU1|F_PLT),
  22.     rcfpack (R_JUPITER,    C_AZ,        F_MNU1|F_PLT),
  23.     rcfpack (R_JUPITER,    C_DEC,        F_MNU1|F_PLT),
  24.     rcfpack (R_JUPITER,    C_EDIST,    F_MNU1|F_PLT),
  25.     rcfpack (R_JUPITER,    C_ELONG,    F_MNU1|F_PLT),
  26.     rcfpack (R_JUPITER,    C_HLAT,        F_MNU1|F_PLT),
  27.     rcfpack (R_JUPITER,    C_HLONG,    F_MNU1|F_PLT),
  28.     rcfpack (R_JUPITER,    C_MAG,        F_MNU1|F_PLT),
  29.     rcfpack (R_JUPITER,    C_MARS,        F_MNU3|F_PLT),
  30.     rcfpack (R_JUPITER,    C_MERCURY,    F_MNU3|F_PLT),
  31.     rcfpack (R_JUPITER,    C_MOON,        F_MNU3|F_PLT),
  32.     rcfpack (R_JUPITER,    C_NEPTUNE,    F_MNU3|F_PLT),
  33.     rcfpack (R_JUPITER,    C_OBJ,        F_MMNU|F_CHG),
  34.     rcfpack (R_JUPITER,    C_OBJX,        F_MNU3|F_PLT),
  35.     rcfpack (R_JUPITER,    C_OBJY,        F_MNU3|F_PLT),
  36.     rcfpack (R_JUPITER,    C_PHASE,    F_MNU1|F_PLT),
  37.     rcfpack (R_JUPITER,    C_PLUTO,    F_MNU3|F_PLT),
  38.     rcfpack (R_JUPITER,    C_RA,        F_MNU1|F_PLT),
  39.     rcfpack (R_JUPITER,    C_RISEAZ,    F_MNU2|F_PLT),
  40.     rcfpack (R_JUPITER,    C_RISETM,    F_MNU2|F_PLT),
  41.     rcfpack (R_JUPITER,    C_SATURN,    F_MNU3|F_PLT),
  42.     rcfpack (R_JUPITER,    C_SDIST,    F_MNU1|F_PLT),
  43.     rcfpack (R_JUPITER,    C_SETAZ,    F_MNU2|F_PLT),
  44.     rcfpack (R_JUPITER,    C_SETTM,    F_MNU2|F_PLT),
  45.     rcfpack (R_JUPITER,    C_SIZE,        F_MNU1|F_PLT),
  46.     rcfpack (R_JUPITER,    C_SUN,        F_MNU3|F_PLT),
  47.     rcfpack (R_JUPITER,    C_TRANSALT,    F_MNU2|F_PLT),
  48.     rcfpack (R_JUPITER,    C_TRANSTM,    F_MNU2|F_PLT),
  49.     rcfpack (R_JUPITER,    C_TUP,        F_MNU2|F_PLT),
  50.     rcfpack (R_JUPITER,    C_URANUS,    F_MNU3|F_PLT),
  51.     rcfpack (R_JUPITER,    C_VENUS,    F_MNU3|F_PLT),
  52.     rcfpack (R_LAT,    C_LATV,        F_MMNU|F_CHG|F_PLT),
  53.     rcfpack (R_LD,    C_LD,        F_MMNU|F_PLT|F_CHG),
  54.     rcfpack (R_LISTING,    C_LISTING,    F_MMNU|F_CHG),
  55.     rcfpack (R_LON,    C_LON,        F_MMNU|F_CHG),
  56.     rcfpack (R_LON,    C_LONV,        F_MMNU|F_PLT),
  57.     rcfpack (R_LONG,    C_LONGV,    F_MMNU|F_CHG|F_PLT),
  58.     rcfpack (R_LST,    C_LSTV,        F_MMNU|F_CHG|F_PLT),
  59.     rcfpack (R_LT,    C_LT,        F_MMNU|F_CHG|F_PLT),
  60.     rcfpack (R_MARS,    C_ALT,        F_MNU1|F_PLT),
  61.     rcfpack (R_MARS,    C_AZ,        F_MNU1|F_PLT),
  62.     rcfpack (R_MARS,    C_DEC,        F_MNU1|F_PLT),
  63.     rcfpack (R_MARS,    C_EDIST,    F_MNU1|F_PLT),
  64.     rcfpack (R_MARS,    C_ELONG,    F_MNU1|F_PLT),
  65.     rcfpack (R_MARS,    C_HLAT,        F_MNU1|F_PLT),
  66.     rcfpack (R_MARS,    C_HLONG,    F_MNU1|F_PLT),
  67.     rcfpack (R_MARS,    C_JUPITER,    F_MNU3|F_PLT),
  68.     rcfpack (R_MARS,    C_MAG,        F_MNU1|F_PLT),
  69.     rcfpack (R_MARS,    C_MERCURY,    F_MNU3|F_PLT),
  70.     rcfpack (R_MARS,    C_MOON,        F_MNU3|F_PLT),
  71.     rcfpack (R_MARS,    C_NEPTUNE,    F_MNU3|F_PLT),
  72.     rcfpack (R_MARS,    C_OBJ,        F_MMNU|F_CHG),
  73.     rcfpack (R_MARS,    C_OBJX,        F_MNU3|F_PLT),
  74.     rcfpack (R_MARS,    C_OBJY,        F_MNU3|F_PLT),
  75.     rcfpack (R_MARS,    C_PHASE,    F_MNU1|F_PLT),
  76.     rcfpack (R_MARS,    C_PLUTO,    F_MNU3|F_PLT),
  77.     rcfpack (R_MARS,    C_RA,        F_MNU1|F_PLT),
  78.     rcfpack (R_MARS,    C_RISEAZ,    F_MNU2|F_PLT),
  79.     rcfpack (R_MARS,    C_RISETM,    F_MNU2|F_PLT),
  80.     rcfpack (R_MARS,    C_SATURN,    F_MNU3|F_PLT),
  81.     rcfpack (R_MARS,    C_SDIST,    F_MNU1|F_PLT),
  82.     rcfpack (R_MARS,    C_SETAZ,    F_MNU2|F_PLT),
  83.     rcfpack (R_MARS,    C_SETTM,    F_MNU2|F_PLT),
  84.     rcfpack (R_MARS,    C_SIZE,        F_MNU1|F_PLT),
  85.     rcfpack (R_MARS,    C_SUN,        F_MNU3|F_PLT),
  86.     rcfpack (R_MARS,    C_TRANSALT,    F_MNU2|F_PLT),
  87.     rcfpack (R_MARS,    C_TRANSTM,    F_MNU2|F_PLT),
  88.     rcfpack (R_MARS,    C_TUP,        F_MNU2|F_PLT),
  89.     rcfpack (R_MARS,    C_URANUS,    F_MNU3|F_PLT),
  90.     rcfpack (R_MARS,    C_VENUS,    F_MNU3|F_PLT),
  91.     rcfpack (R_MERCURY,    C_ALT,        F_MNU1|F_PLT),
  92.     rcfpack (R_MERCURY,    C_AZ,        F_MNU1|F_PLT),
  93.     rcfpack (R_MERCURY,    C_DEC,        F_MNU1|F_PLT),
  94.     rcfpack (R_MERCURY,    C_EDIST,    F_MNU1|F_PLT),
  95.     rcfpack (R_MERCURY,    C_ELONG,    F_MNU1|F_PLT),
  96.     rcfpack (R_MERCURY,    C_HLAT,        F_MNU1|F_PLT),
  97.     rcfpack (R_MERCURY,    C_HLONG,    F_MNU1|F_PLT),
  98.     rcfpack (R_MERCURY,    C_JUPITER,    F_MNU3|F_PLT),
  99.     rcfpack (R_MERCURY,    C_MAG,        F_MNU1|F_PLT),
  100.     rcfpack (R_MERCURY,    C_MARS,        F_MNU3|F_PLT),
  101.     rcfpack (R_MERCURY,    C_MOON,        F_MNU3|F_PLT),
  102.     rcfpack (R_MERCURY,    C_NEPTUNE,    F_MNU3|F_PLT),
  103.     rcfpack (R_MERCURY,    C_OBJ,        F_MMNU|F_CHG),
  104.     rcfpack (R_MERCURY,    C_OBJX,        F_MNU3|F_PLT),
  105.     rcfpack (R_MERCURY,    C_OBJY,        F_MNU3|F_PLT),
  106.     rcfpack (R_MERCURY,    C_PHASE,    F_MNU1|F_PLT),
  107.     rcfpack (R_MERCURY,    C_PLUTO,    F_MNU3|F_PLT),
  108.     rcfpack (R_MERCURY,    C_RA,        F_MNU1|F_PLT),
  109.     rcfpack (R_MERCURY,    C_RISEAZ,    F_MNU2|F_PLT),
  110.     rcfpack (R_MERCURY,    C_RISETM,    F_MNU2|F_PLT),
  111.     rcfpack (R_MERCURY,    C_SATURN,    F_MNU3|F_PLT),
  112.     rcfpack (R_MERCURY,    C_SDIST,    F_MNU1|F_PLT),
  113.     rcfpack (R_MERCURY,    C_SETAZ,    F_MNU2|F_PLT),
  114.     rcfpack (R_MERCURY,    C_SETTM,    F_MNU2|F_PLT),
  115.     rcfpack (R_MERCURY,    C_SIZE,        F_MNU1|F_PLT),
  116.     rcfpack (R_MERCURY,    C_SUN,        F_MNU3|F_PLT),
  117.     rcfpack (R_MERCURY,    C_TRANSALT,    F_MNU2|F_PLT),
  118.     rcfpack (R_MERCURY,    C_TRANSTM,    F_MNU2|F_PLT),
  119.     rcfpack (R_MERCURY,    C_TUP,        F_MNU2|F_PLT),
  120.     rcfpack (R_MERCURY,    C_URANUS,    F_MNU3|F_PLT),
  121.     rcfpack (R_MERCURY,    C_VENUS,    F_MNU3|F_PLT),
  122.     rcfpack (R_MOON,    C_ALT,        F_MNU1|F_PLT),
  123.     rcfpack (R_MOON,    C_AZ,        F_MNU1|F_PLT),
  124.     rcfpack (R_MOON,    C_DEC,        F_MNU1|F_PLT),
  125.     rcfpack (R_MOON,    C_EDIST,    F_MNU1|F_PLT),
  126.     rcfpack (R_MOON,    C_ELONG,    F_MNU1|F_PLT),
  127.     rcfpack (R_MOON,    C_HLAT,        F_MNU1|F_PLT),
  128.     rcfpack (R_MOON,    C_HLONG,    F_MNU1|F_PLT),
  129.     rcfpack (R_MOON,    C_JUPITER,    F_MNU3|F_PLT),
  130.     rcfpack (R_MOON,    C_MAG,        F_MNU1|F_PLT),
  131.     rcfpack (R_MOON,    C_MARS,        F_MNU3|F_PLT),
  132.     rcfpack (R_MOON,    C_MERCURY,    F_MNU3|F_PLT),
  133.     rcfpack (R_MOON,    C_NEPTUNE,    F_MNU3|F_PLT),
  134.     rcfpack (R_MOON,    C_OBJ,        F_MMNU|F_CHG),
  135.     rcfpack (R_MOON,    C_OBJX,        F_MNU3|F_PLT),
  136.     rcfpack (R_MOON,    C_OBJY,        F_MNU3|F_PLT),
  137.     rcfpack (R_MOON,    C_PHASE,    F_MNU1|F_PLT),
  138.     rcfpack (R_MOON,    C_PLUTO,    F_MNU3|F_PLT),
  139.     rcfpack (R_MOON,    C_RA,        F_MNU1|F_PLT),
  140.     rcfpack (R_MOON,    C_RISEAZ,    F_MNU2|F_PLT),
  141.     rcfpack (R_MOON,    C_RISETM,    F_MNU2|F_PLT),
  142.     rcfpack (R_MOON,    C_SATURN,    F_MNU3|F_PLT),
  143.     rcfpack (R_MOON,    C_SDIST,    F_MNU1|F_PLT),
  144.     rcfpack (R_MOON,    C_SETAZ,    F_MNU2|F_PLT),
  145.     rcfpack (R_MOON,    C_SETTM,    F_MNU2|F_PLT),
  146.     rcfpack (R_MOON,    C_SIZE,        F_MNU1|F_PLT),
  147.     rcfpack (R_MOON,    C_SUN,        F_MNU3|F_PLT),
  148.     rcfpack (R_MOON,    C_TRANSALT,    F_MNU2|F_PLT),
  149.     rcfpack (R_MOON,    C_TRANSTM,    F_MNU2|F_PLT),
  150.     rcfpack (R_MOON,    C_TUP,        F_MNU2|F_PLT),
  151.     rcfpack (R_MOON,    C_URANUS,    F_MNU3|F_PLT),
  152.     rcfpack (R_MOON,    C_VENUS,    F_MNU3|F_PLT),
  153.     rcfpack (R_NEPTUNE,    C_ALT,        F_MNU1|F_PLT),
  154.     rcfpack (R_NEPTUNE,    C_AZ,        F_MNU1|F_PLT),
  155.     rcfpack (R_NEPTUNE,    C_DEC,        F_MNU1|F_PLT),
  156.     rcfpack (R_NEPTUNE,    C_EDIST,    F_MNU1|F_PLT),
  157.     rcfpack (R_NEPTUNE,    C_ELONG,    F_MNU1|F_PLT),
  158.     rcfpack (R_NEPTUNE,    C_HLAT,        F_MNU1|F_PLT),
  159.     rcfpack (R_NEPTUNE,    C_HLONG,    F_MNU1|F_PLT),
  160.     rcfpack (R_NEPTUNE,    C_JUPITER,    F_MNU3|F_PLT),
  161.     rcfpack (R_NEPTUNE,    C_MAG,        F_MNU1|F_PLT),
  162.     rcfpack (R_NEPTUNE,    C_MARS,        F_MNU3|F_PLT),
  163.     rcfpack (R_NEPTUNE,    C_MERCURY,    F_MNU3|F_PLT),
  164.     rcfpack (R_NEPTUNE,    C_MOON,        F_MNU3|F_PLT),
  165.     rcfpack (R_NEPTUNE,    C_OBJ,        F_MMNU|F_CHG),
  166.     rcfpack (R_NEPTUNE,    C_OBJX,        F_MNU3|F_PLT),
  167.     rcfpack (R_NEPTUNE,    C_OBJY,        F_MNU3|F_PLT),
  168.     rcfpack (R_NEPTUNE,    C_PHASE,    F_MNU1|F_PLT),
  169.     rcfpack (R_NEPTUNE,    C_PLUTO,    F_MNU3|F_PLT),
  170.     rcfpack (R_NEPTUNE,    C_RA,        F_MNU1|F_PLT),
  171.     rcfpack (R_NEPTUNE,    C_RISEAZ,    F_MNU2|F_PLT),
  172.     rcfpack (R_NEPTUNE,    C_RISETM,    F_MNU2|F_PLT),
  173.     rcfpack (R_NEPTUNE,    C_SATURN,    F_MNU3|F_PLT),
  174.     rcfpack (R_NEPTUNE,    C_SDIST,    F_MNU1|F_PLT),
  175.     rcfpack (R_NEPTUNE,    C_SETAZ,    F_MNU2|F_PLT),
  176.     rcfpack (R_NEPTUNE,    C_SETTM,    F_MNU2|F_PLT),
  177.     rcfpack (R_NEPTUNE,    C_SIZE,        F_MNU1|F_PLT),
  178.     rcfpack (R_NEPTUNE,    C_SUN,        F_MNU3|F_PLT),
  179.     rcfpack (R_NEPTUNE,    C_TRANSALT,    F_MNU2|F_PLT),
  180.     rcfpack (R_NEPTUNE,    C_TRANSTM,    F_MNU2|F_PLT),
  181.     rcfpack (R_NEPTUNE,    C_TUP,        F_MNU2|F_PLT),
  182.     rcfpack (R_NEPTUNE,    C_URANUS,    F_MNU3|F_PLT),
  183.     rcfpack (R_NEPTUNE,    C_VENUS,    F_MNU3|F_PLT),
  184.     rcfpack (R_NSTEP,    C_NSTEPV,    F_MMNU|F_CHG),
  185.     rcfpack (R_OBJX,    C_ALT,        F_MNU1|F_PLT),
  186.     rcfpack (R_OBJX,    C_AZ,        F_MNU1|F_PLT),
  187.     rcfpack (R_OBJX,    C_DEC,        F_MNU1|F_PLT),
  188.     rcfpack (R_OBJX,    C_EDIST,    F_MNU1|F_PLT),
  189.     rcfpack (R_OBJX,    C_ELONG,    F_MNU1|F_PLT),
  190.     rcfpack (R_OBJX,    C_HLAT,        F_MNU1|F_PLT),
  191.     rcfpack (R_OBJX,    C_HLONG,    F_MNU1|F_PLT),
  192.     rcfpack (R_OBJX,    C_JUPITER,    F_MNU3|F_PLT),
  193.     rcfpack (R_OBJX,    C_MAG,        F_MNU1|F_PLT),
  194.     rcfpack (R_OBJX,    C_MARS,        F_MNU3|F_PLT),
  195.     rcfpack (R_OBJX,    C_MERCURY,    F_MNU3|F_PLT),
  196.     rcfpack (R_OBJX,    C_MOON,        F_MNU3|F_PLT),
  197.     rcfpack (R_OBJX,    C_NEPTUNE,    F_MNU3|F_PLT),
  198.     rcfpack (R_OBJX,    C_OBJ,        F_MMNU|F_CHG),
  199.     rcfpack (R_OBJX,    C_OBJY,        F_MNU3|F_PLT),
  200.     rcfpack (R_OBJX,    C_PHASE,    F_MNU1|F_PLT),
  201.     rcfpack (R_OBJX,    C_PLUTO,    F_MNU3|F_PLT),
  202.     rcfpack (R_OBJX,    C_RA,        F_MNU1|F_PLT),
  203.     rcfpack (R_OBJX,    C_RISEAZ,    F_MNU2|F_PLT),
  204.     rcfpack (R_OBJX,    C_RISETM,    F_MNU2|F_PLT),
  205.     rcfpack (R_OBJX,    C_SATURN,    F_MNU3|F_PLT),
  206.     rcfpack (R_OBJX,    C_SDIST,    F_MNU1|F_PLT),
  207.     rcfpack (R_OBJX,    C_SETAZ,    F_MNU2|F_PLT),
  208.     rcfpack (R_OBJX,    C_SETTM,    F_MNU2|F_PLT),
  209.     rcfpack (R_OBJX,    C_SUN,        F_MNU3|F_PLT),
  210.     rcfpack (R_OBJX,    C_TRANSALT,    F_MNU2|F_PLT),
  211.     rcfpack (R_OBJX,    C_TRANSTM,    F_MNU2|F_PLT),
  212.     rcfpack (R_OBJX,    C_TUP,        F_MNU2|F_PLT),
  213.     rcfpack (R_OBJX,    C_URANUS,    F_MNU3|F_PLT),
  214.     rcfpack (R_OBJX,    C_VENUS,    F_MNU3|F_PLT),
  215.     rcfpack (R_OBJY,    C_ALT,        F_MNU1|F_PLT),
  216.     rcfpack (R_OBJY,    C_AZ,        F_MNU1|F_PLT),
  217.     rcfpack (R_OBJY,    C_DEC,        F_MNU1|F_PLT),
  218.     rcfpack (R_OBJY,    C_EDIST,    F_MNU1|F_PLT),
  219.     rcfpack (R_OBJY,    C_ELONG,    F_MNU1|F_PLT),
  220.     rcfpack (R_OBJY,    C_HLAT,        F_MNU1|F_PLT),
  221.     rcfpack (R_OBJY,    C_HLONG,    F_MNU1|F_PLT),
  222.     rcfpack (R_OBJY,    C_JUPITER,    F_MNU3|F_PLT),
  223.     rcfpack (R_OBJY,    C_MAG,        F_MNU1|F_PLT),
  224.     rcfpack (R_OBJY,    C_MARS,        F_MNU3|F_PLT),
  225.     rcfpack (R_OBJY,    C_MERCURY,    F_MNU3|F_PLT),
  226.     rcfpack (R_OBJY,    C_MOON,        F_MNU3|F_PLT),
  227.     rcfpack (R_OBJY,    C_NEPTUNE,    F_MNU3|F_PLT),
  228.     rcfpack (R_OBJY,    C_OBJ,        F_MMNU|F_CHG),
  229.     rcfpack (R_OBJY,    C_OBJX,        F_MNU3|F_PLT),
  230.     rcfpack (R_OBJY,    C_PHASE,    F_MNU1|F_PLT),
  231.     rcfpack (R_OBJY,    C_PLUTO,    F_MNU3|F_PLT),
  232.     rcfpack (R_OBJY,    C_RA,        F_MNU1|F_PLT),
  233.     rcfpack (R_OBJY,    C_RISEAZ,    F_MNU2|F_PLT),
  234.     rcfpack (R_OBJY,    C_RISETM,    F_MNU2|F_PLT),
  235.     rcfpack (R_OBJY,    C_SATURN,    F_MNU3|F_PLT),
  236.     rcfpack (R_OBJY,    C_SDIST,    F_MNU1|F_PLT),
  237.     rcfpack (R_OBJY,    C_SETAZ,    F_MNU2|F_PLT),
  238.     rcfpack (R_OBJY,    C_SETTM,    F_MNU2|F_PLT),
  239.     rcfpack (R_OBJY,    C_SUN,        F_MNU3|F_PLT),
  240.     rcfpack (R_OBJY,    C_TRANSALT,    F_MNU2|F_PLT),
  241.     rcfpack (R_OBJY,    C_TRANSTM,    F_MNU2|F_PLT),
  242.     rcfpack (R_OBJY,    C_TUP,        F_MNU2|F_PLT),
  243.     rcfpack (R_OBJY,    C_URANUS,    F_MNU3|F_PLT),
  244.     rcfpack (R_OBJY,    C_VENUS,    F_MNU3|F_PLT),
  245.     rcfpack (R_PAUSE,    C_PAUSEV,    F_MMNU|F_CHG),
  246.     rcfpack (R_PLOT,    C_PLOT,        F_MMNU|F_CHG),
  247.     rcfpack (R_PLUTO,    C_ALT,        F_MNU1|F_PLT),
  248.     rcfpack (R_PLUTO,    C_AZ,        F_MNU1|F_PLT),
  249.     rcfpack (R_PLUTO,    C_DEC,        F_MNU1|F_PLT),
  250.     rcfpack (R_PLUTO,    C_EDIST,    F_MNU1|F_PLT),
  251.     rcfpack (R_PLUTO,    C_ELONG,    F_MNU1|F_PLT),
  252.     rcfpack (R_PLUTO,    C_HLAT,        F_MNU1|F_PLT),
  253.     rcfpack (R_PLUTO,    C_HLONG,    F_MNU1|F_PLT),
  254.     rcfpack (R_PLUTO,    C_JUPITER,    F_MNU3|F_PLT),
  255.     rcfpack (R_PLUTO,    C_MAG,        F_MNU1|F_PLT),
  256.     rcfpack (R_PLUTO,    C_MARS,        F_MNU3|F_PLT),
  257.     rcfpack (R_PLUTO,    C_MERCURY,    F_MNU3|F_PLT),
  258.     rcfpack (R_PLUTO,    C_MOON,        F_MNU3|F_PLT),
  259.     rcfpack (R_PLUTO,    C_NEPTUNE,    F_MNU3|F_PLT),
  260.     rcfpack (R_PLUTO,    C_OBJ,        F_MMNU|F_CHG),
  261.     rcfpack (R_PLUTO,    C_OBJX,        F_MNU3|F_PLT),
  262.     rcfpack (R_PLUTO,    C_OBJY,        F_MNU3|F_PLT),
  263.     rcfpack (R_PLUTO,    C_PHASE,    F_MNU1|F_PLT),
  264.     rcfpack (R_PLUTO,    C_RA,        F_MNU1|F_PLT),
  265.     rcfpack (R_PLUTO,    C_RISEAZ,    F_MNU2|F_PLT),
  266.     rcfpack (R_PLUTO,    C_RISETM,    F_MNU2|F_PLT),
  267.     rcfpack (R_PLUTO,    C_SATURN,    F_MNU3|F_PLT),
  268.     rcfpack (R_PLUTO,    C_SDIST,    F_MNU1|F_PLT),
  269.     rcfpack (R_PLUTO,    C_SETAZ,    F_MNU2|F_PLT),
  270.     rcfpack (R_PLUTO,    C_SETTM,    F_MNU2|F_PLT),
  271.     rcfpack (R_PLUTO,    C_SIZE,        F_MNU1|F_PLT),
  272.     rcfpack (R_PLUTO,    C_SUN,        F_MNU3|F_PLT),
  273.     rcfpack (R_PLUTO,    C_TRANSALT,    F_MNU2|F_PLT),
  274.     rcfpack (R_PLUTO,    C_TRANSTM,    F_MNU2|F_PLT),
  275.     rcfpack (R_PLUTO,    C_TUP,        F_MNU2|F_PLT),
  276.     rcfpack (R_PLUTO,    C_URANUS,    F_MNU3|F_PLT),
  277.     rcfpack (R_PLUTO,    C_VENUS,    F_MNU3|F_PLT),
  278.     rcfpack (R_PRES,    C_PRESV,    F_MMNU|F_CHG|F_PLT),
  279.     rcfpack (R_SATURN,    C_ALT,        F_MNU1|F_PLT),
  280.     rcfpack (R_SATURN,    C_AZ,        F_MNU1|F_PLT),
  281.     rcfpack (R_SATURN,    C_DEC,        F_MNU1|F_PLT),
  282.     rcfpack (R_SATURN,    C_EDIST,    F_MNU1|F_PLT),
  283.     rcfpack (R_SATURN,    C_ELONG,    F_MNU1|F_PLT),
  284.     rcfpack (R_SATURN,    C_HLAT,        F_MNU1|F_PLT),
  285.     rcfpack (R_SATURN,    C_HLONG,    F_MNU1|F_PLT),
  286.     rcfpack (R_SATURN,    C_JUPITER,    F_MNU3|F_PLT),
  287.     rcfpack (R_SATURN,    C_MAG,        F_MNU1|F_PLT),
  288.     rcfpack (R_SATURN,    C_MARS,        F_MNU3|F_PLT),
  289.     rcfpack (R_SATURN,    C_MERCURY,    F_MNU3|F_PLT),
  290.     rcfpack (R_SATURN,    C_MOON,        F_MNU3|F_PLT),
  291.     rcfpack (R_SATURN,    C_NEPTUNE,    F_MNU3|F_PLT),
  292.     rcfpack (R_SATURN,    C_OBJ,        F_MMNU|F_CHG),
  293.     rcfpack (R_SATURN,    C_OBJX,        F_MNU3|F_PLT),
  294.     rcfpack (R_SATURN,    C_OBJY,        F_MNU3|F_PLT),
  295.     rcfpack (R_SATURN,    C_PHASE,    F_MNU1|F_PLT),
  296.     rcfpack (R_SATURN,    C_PLUTO,    F_MNU3|F_PLT),
  297.     rcfpack (R_SATURN,    C_RA,        F_MNU1|F_PLT),
  298.     rcfpack (R_SATURN,    C_RISEAZ,    F_MNU2|F_PLT),
  299.     rcfpack (R_SATURN,    C_RISETM,    F_MNU2|F_PLT),
  300.     rcfpack (R_SATURN,    C_SDIST,    F_MNU1|F_PLT),
  301.     rcfpack (R_SATURN,    C_SETAZ,    F_MNU2|F_PLT),
  302.     rcfpack (R_SATURN,    C_SETTM,    F_MNU2|F_PLT),
  303.     rcfpack (R_SATURN,    C_SIZE,        F_MNU1|F_PLT),
  304.     rcfpack (R_SATURN,    C_SUN,        F_MNU3|F_PLT),
  305.     rcfpack (R_SATURN,    C_TRANSALT,    F_MNU2|F_PLT),
  306.     rcfpack (R_SATURN,    C_TRANSTM,    F_MNU2|F_PLT),
  307.     rcfpack (R_SATURN,    C_TUP,        F_MNU2|F_PLT),
  308.     rcfpack (R_SATURN,    C_URANUS,    F_MNU3|F_PLT),
  309.     rcfpack (R_SATURN,    C_VENUS,    F_MNU3|F_PLT),
  310.     rcfpack (R_SRCH,    C_SRCH,        F_MMNU|F_CHG|F_PLT),
  311.     rcfpack (R_STPSZ,    C_STPSZV,    F_MMNU|F_CHG),
  312.     rcfpack (R_SUN,    C_ALT,        F_MNU1|F_PLT),
  313.     rcfpack (R_SUN,    C_AZ,        F_MNU1|F_PLT),
  314.     rcfpack (R_SUN,    C_DEC,        F_MNU1|F_PLT),
  315.     rcfpack (R_SUN,    C_EDIST,    F_MNU1|F_PLT),
  316.     rcfpack (R_SUN,    C_HLONG,    F_MNU1|F_PLT),
  317.     rcfpack (R_SUN,    C_JUPITER,    F_MNU3|F_PLT),
  318.     rcfpack (R_SUN,    C_MAG,        F_MNU1|F_PLT),
  319.     rcfpack (R_SUN,    C_MARS,        F_MNU3|F_PLT),
  320.     rcfpack (R_SUN,    C_MERCURY,    F_MNU3|F_PLT),
  321.     rcfpack (R_SUN,    C_MOON,        F_MNU3|F_PLT),
  322.     rcfpack (R_SUN,    C_NEPTUNE,    F_MNU3|F_PLT),
  323.     rcfpack (R_SUN,    C_OBJ,        F_MMNU|F_CHG),
  324.     rcfpack (R_SUN,    C_OBJX,        F_MNU3|F_PLT),
  325.     rcfpack (R_SUN,    C_OBJY,        F_MNU3|F_PLT),
  326.     rcfpack (R_SUN,    C_PLUTO,    F_MNU3|F_PLT),
  327.     rcfpack (R_SUN,    C_RA,        F_MNU1|F_PLT),
  328.     rcfpack (R_SUN,    C_RISEAZ,    F_MNU2|F_PLT),
  329.     rcfpack (R_SUN,    C_RISETM,    F_MNU2|F_PLT),
  330.     rcfpack (R_SUN,    C_SATURN,    F_MNU3|F_PLT),
  331.     rcfpack (R_SUN,    C_SETAZ,    F_MNU2|F_PLT),
  332.     rcfpack (R_SUN,    C_SETTM,    F_MNU2|F_PLT),
  333.     rcfpack (R_SUN,    C_SIZE,        F_MNU1|F_PLT),
  334.     rcfpack (R_SUN,    C_TRANSALT,    F_MNU2|F_PLT),
  335.     rcfpack (R_SUN,    C_TRANSTM,    F_MNU2|F_PLT),
  336.     rcfpack (R_SUN,    C_TUP,        F_MNU2|F_PLT),
  337.     rcfpack (R_SUN,    C_URANUS,    F_MNU3|F_PLT),
  338.     rcfpack (R_SUN,    C_VENUS,    F_MNU3|F_PLT),
  339.     rcfpack (R_TEMP,    C_TEMPV,    F_MMNU|F_CHG|F_PLT),
  340.     rcfpack (R_TZN,    C_TZN,        F_MMNU|F_CHG),
  341.     rcfpack (R_TZONE,    C_TZONEV,    F_MMNU|F_CHG),
  342.     rcfpack (R_UD,    C_UD,        F_MMNU|F_PLT|F_CHG),
  343.     rcfpack (R_URANUS,    C_ALT,        F_MNU1|F_PLT),
  344.     rcfpack (R_URANUS,    C_AZ,        F_MNU1|F_PLT),
  345.     rcfpack (R_URANUS,    C_DEC,        F_MNU1|F_PLT),
  346.     rcfpack (R_URANUS,    C_EDIST,    F_MNU1|F_PLT),
  347.     rcfpack (R_URANUS,    C_ELONG,    F_MNU1|F_PLT),
  348.     rcfpack (R_URANUS,    C_HLAT,        F_MNU1|F_PLT),
  349.     rcfpack (R_URANUS,    C_HLONG,    F_MNU1|F_PLT),
  350.     rcfpack (R_URANUS,    C_JUPITER,    F_MNU3|F_PLT),
  351.     rcfpack (R_URANUS,    C_MAG,        F_MNU1|F_PLT),
  352.     rcfpack (R_URANUS,    C_MARS,        F_MNU3|F_PLT),
  353.     rcfpack (R_URANUS,    C_MERCURY,    F_MNU3|F_PLT),
  354.     rcfpack (R_URANUS,    C_MOON,        F_MNU3|F_PLT),
  355.     rcfpack (R_URANUS,    C_NEPTUNE,    F_MNU3|F_PLT),
  356.     rcfpack (R_URANUS,    C_OBJ,        F_MMNU|F_CHG),
  357.     rcfpack (R_URANUS,    C_OBJX,        F_MNU3|F_PLT),
  358.     rcfpack (R_URANUS,    C_OBJY,        F_MNU3|F_PLT),
  359.     rcfpack (R_URANUS,    C_PHASE,    F_MNU1|F_PLT),
  360.     rcfpack (R_URANUS,    C_PLUTO,    F_MNU3|F_PLT),
  361.     rcfpack (R_URANUS,    C_RA,        F_MNU1|F_PLT),
  362.     rcfpack (R_URANUS,    C_RISEAZ,    F_MNU2|F_PLT),
  363.     rcfpack (R_URANUS,    C_RISETM,    F_MNU2|F_PLT),
  364.     rcfpack (R_URANUS,    C_SATURN,    F_MNU3|F_PLT),
  365.     rcfpack (R_URANUS,    C_SDIST,    F_MNU1|F_PLT),
  366.     rcfpack (R_URANUS,    C_SETAZ,    F_MNU2|F_PLT),
  367.     rcfpack (R_URANUS,    C_SETTM,    F_MNU2|F_PLT),
  368.     rcfpack (R_URANUS,    C_SIZE,        F_MNU1|F_PLT),
  369.     rcfpack (R_URANUS,    C_SUN,        F_MNU3|F_PLT),
  370.     rcfpack (R_URANUS,    C_TRANSALT,    F_MNU2|F_PLT),
  371.     rcfpack (R_URANUS,    C_TRANSTM,    F_MNU2|F_PLT),
  372.     rcfpack (R_URANUS,    C_TUP,        F_MNU2|F_PLT),
  373.     rcfpack (R_URANUS,    C_VENUS,    F_MNU3|F_PLT),
  374.     rcfpack (R_UT,    C_UTV,        F_MMNU|F_PLT|F_CHG),
  375.     rcfpack (R_VENUS,    C_ALT,        F_MNU1|F_PLT),
  376.     rcfpack (R_VENUS,    C_AZ,        F_MNU1|F_PLT),
  377.     rcfpack (R_VENUS,    C_DEC,        F_MNU1|F_PLT),
  378.     rcfpack (R_VENUS,    C_EDIST,    F_MNU1|F_PLT),
  379.     rcfpack (R_VENUS,    C_ELONG,    F_MNU1|F_PLT),
  380.     rcfpack (R_VENUS,    C_HLAT,        F_MNU1|F_PLT),
  381.     rcfpack (R_VENUS,    C_HLONG,    F_MNU1|F_PLT),
  382.     rcfpack (R_VENUS,    C_JUPITER,    F_MNU3|F_PLT),
  383.     rcfpack (R_VENUS,    C_MAG,        F_MNU1|F_PLT),
  384.     rcfpack (R_VENUS,    C_MARS,        F_MNU3|F_PLT),
  385.     rcfpack (R_VENUS,    C_MERCURY,    F_MNU3|F_PLT),
  386.     rcfpack (R_VENUS,    C_MOON,        F_MNU3|F_PLT),
  387.     rcfpack (R_VENUS,    C_NEPTUNE,    F_MNU3|F_PLT),
  388.     rcfpack (R_VENUS,    C_OBJ,        F_MMNU|F_CHG),
  389.     rcfpack (R_VENUS,    C_OBJX,        F_MNU3|F_PLT),
  390.     rcfpack (R_VENUS,    C_OBJY,        F_MNU3|F_PLT),
  391.     rcfpack (R_VENUS,    C_PHASE,    F_MNU1|F_PLT),
  392.     rcfpack (R_VENUS,    C_PLUTO,    F_MNU3|F_PLT),
  393.     rcfpack (R_VENUS,    C_RA,        F_MNU1|F_PLT),
  394.     rcfpack (R_VENUS,    C_RISEAZ,    F_MNU2|F_PLT),
  395.     rcfpack (R_VENUS,    C_RISETM,    F_MNU2|F_PLT),
  396.     rcfpack (R_VENUS,    C_SATURN,    F_MNU3|F_PLT),
  397.     rcfpack (R_VENUS,    C_SDIST,    F_MNU1|F_PLT),
  398.     rcfpack (R_VENUS,    C_SETAZ,    F_MNU2|F_PLT),
  399.     rcfpack (R_VENUS,    C_SETTM,    F_MNU2|F_PLT),
  400.     rcfpack (R_VENUS,    C_SIZE,        F_MNU1|F_PLT),
  401.     rcfpack (R_VENUS,    C_SUN,        F_MNU3|F_PLT),
  402.     rcfpack (R_VENUS,    C_TRANSALT,    F_MNU2|F_PLT),
  403.     rcfpack (R_VENUS,    C_TRANSTM,    F_MNU2|F_PLT),
  404.     rcfpack (R_VENUS,    C_TUP,        F_MNU2|F_PLT),
  405.     rcfpack (R_VENUS,    C_URANUS,    F_MNU3|F_PLT),
  406.     rcfpack (R_WATCH,    C_WATCH,    F_MMNU|F_CHG),
  407. };
  408. #define    NFIELDS (sizeof(fields)/sizeof(fields[0]))
  409.  
  410. /* let op select a field by moving around and hitting RETURN, or until see END.
  411.  * also allow moving directly to a planet row using its name.
  412.  * only allow fields with the given flag mask.
  413.  * return the rcfpack()'d field, or 0 if typed END.
  414.  * N.B. we might also exit() entirely by calling bye() if op types QUIT.
  415.  */
  416. sel_fld (r, c, flag, prmpt, help)
  417. int r, c;    /* inial row, col */
  418. int flag;
  419. char *prmpt, *help;
  420. {
  421.     extern void bye();
  422.     char *lastp;
  423.     int ch;
  424.  
  425.     lastp = 0;
  426.     while (1) {
  427.         if (lastp != prmpt) {
  428.         lastp = prmpt;
  429.         f_prompt (lastp);
  430.         }
  431.         c_pos (r, c);
  432.         switch (ch = read_char()) {
  433.         case REDRAW:
  434.         redraw_screen(2);    /* redraw all from scratch */
  435.         lastp = 0;
  436.         break;
  437.         case VERSION:
  438.         version();
  439.         lastp = 0;
  440.         break;
  441.         case HELP:
  442.         f_msg (help);
  443.         lastp = 0;
  444.         break;
  445.         case QUIT:
  446.         f_prompt ("Exit ephem? (y) ");
  447.         if (read_char() == 'y')
  448.             bye();    /* never returns */
  449.         lastp = 0;
  450.         break;
  451. #ifdef BANG
  452.         case '!': {
  453.         char buf[NC];
  454.         f_prompt ("!");
  455.         if (read_line (buf, sizeof(buf)-2) > 0) {
  456.             c_erase();
  457.             byetty();
  458.             (void) system (buf);
  459.             printf ("\nHit any key to resume ephem...");
  460.             (void) read_char();
  461.             redraw_screen(2);    /* redraw all from scratch */
  462.         }
  463.         lastp = 0;
  464.         }
  465.         break;
  466. #endif
  467.         case END:
  468.         return (0);
  469.         case '\r':
  470.         return (rcfpack (r, c, 0));
  471.         default:
  472.         move_cur (ch, flag, &r, &c);
  473.         break;
  474.         }
  475.     }
  476. }
  477.  
  478. /* move cursor to next field in given direction: hjkl, or directly to a
  479.  * field, and set *rp and *cp.
  480.  * limit eligible fields to those with given flag mask.
  481.  */
  482. static
  483. move_cur (dirchar, flag, rp, cp)
  484. char dirchar;
  485. int flag;
  486. int *rp, *cp;
  487. {
  488.     int curr = *rp, curc = *cp;
  489.     int f, newf, *fp;
  490.     int d, newd;
  491.  
  492.     wrapped:
  493.     newf = 0;
  494.     newd = 1000;
  495.  
  496.     switch (dirchar) {
  497.     case 'h': /* left */
  498.         /* go to next field to the left, or wrap.  */
  499.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  500.         f = *fp;
  501.         if (tstpackf(f,flag) && unpackr(f) == curr) {
  502.             d = curc - unpackc(f);
  503.             if (d > 0 && d < newd) {
  504.             newf = f;
  505.             newd = d;
  506.             }
  507.         }
  508.         }
  509.         if (!newf) {
  510.         curc = NC;
  511.         goto wrapped;
  512.         }
  513.         break;
  514.  
  515.     case 'j': /* down */
  516.         /* go to closest field on next row down with anything on it,
  517.          * or wrap.
  518.          */
  519.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  520.         f = *fp;
  521.         if (tstpackf(f,flag)) {
  522.             d = unpackr(f) - curr;
  523.             if (d > 0 && d < newd) {
  524.             newf = f;
  525.             newd = d;
  526.             }
  527.         }
  528.         }
  529.         if (newf) {
  530.         /* now find the field closest to current col on that row */
  531.         newf = nearestfld (unpackr(newf), curc, flag);
  532.         } else {
  533.         curr = 0;
  534.         goto wrapped;
  535.         }
  536.         break;
  537.  
  538.     case 'k': /* up */
  539.         /* go to closest field on next row up with anything on it, 
  540.          * or wrap.
  541.          */
  542.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  543.         f = *fp;
  544.         if (tstpackf(f,flag)) {
  545.             d = curr - unpackr(f);
  546.             if (d > 0 && d < newd) {
  547.             newf = f;
  548.             newd = d;
  549.             }
  550.         }
  551.         }
  552.         if (newf) {
  553.         /* now find the field closest to current col on that row */
  554.         newf = nearestfld (unpackr(newf), curc, flag);
  555.         } else {
  556.         curr = NR+1;
  557.         goto wrapped;
  558.         }
  559.         break;
  560.  
  561.     case 'l': /* right */
  562.         /* go to next field to the right, or wrap.  */
  563.         for (fp = fields+NFIELDS; --fp >= fields; ) {
  564.         f = *fp;
  565.         if (tstpackf(f,flag) && unpackr(f) == curr) {
  566.             d = unpackc(f) - curc;
  567.             if (d > 0 && d < newd) {
  568.             newf = f;
  569.             newd = d;
  570.             }
  571.         }
  572.         }
  573.         if (!newf) {
  574.         curc = 0;
  575.         goto wrapped;
  576.         }
  577.         break;
  578.  
  579.     /* handy shorthands directly to a given spot.
  580.      * calling nearestfld() automatically allows for which menu
  581.      *   is up now and what is pickable. you can use rcfpack()
  582.      *   directly for top half fields that are always up.
  583.      * N.B. using nearestfld() can be too aggressive. it will try
  584.      *   other fields entirely if one you intend is not eligible.
  585.      */
  586.     case 'S': newf = nearestfld (R_SUN, 1, flag); break;
  587.     case 'M': newf = nearestfld (R_MOON, 1, flag); break;
  588.     case 'e': newf = nearestfld (R_MERCURY, 1, flag); break;
  589.     case 'v': newf = nearestfld (R_VENUS, 1, flag); break;
  590.     case 'm': newf = nearestfld (R_MARS, 1, flag); break;
  591.     case cntrl('j'): newf = nearestfld (R_JUPITER, 1, flag); break;
  592.     case 's': newf = nearestfld (R_SATURN, 1, flag); break;
  593.     case 'u': newf = nearestfld (R_URANUS, 1, flag); break;
  594.     case 'n': newf = nearestfld (R_NEPTUNE, 1, flag); break;
  595.     case 'p': newf = nearestfld (R_PLUTO, 1, flag); break;
  596.     case 'x': newf = nearestfld (R_OBJX, 1, flag); break;
  597.     case 'y': newf = nearestfld (R_OBJY, 1, flag); break;
  598.     case 'c': newf = rcfpack (R_ALTM, C_ALTM, 0); break;
  599.     case 'd': newf = rcfpack (R_UD, C_UD, 0); break;
  600.     case 'o': newf = rcfpack (R_EPOCH, C_EPOCHV, 0); break;
  601.     case 'z': newf = rcfpack (R_STPSZ, C_STPSZV, 0); break;
  602.     case 'w': newf = rcfpack (R_WATCH, C_WATCH, 0); break;
  603.     case 'L': newf = rcfpack (R_LISTING, C_LISTING, 0); break;
  604.     }
  605.  
  606.     if (newf > 0) {
  607.         *rp = unpackr(newf);
  608.         *cp = unpackc(newf);
  609.     }
  610. }
  611.  
  612. /* return the nearest field with given flag mask, either way, on this row,
  613.  * else -1 if none.
  614.  */
  615. static int
  616. nearestfld (r, c, flag)
  617. int r, c, flag;
  618. {
  619.     int nf, f, *fp;
  620.     int d, d0;
  621.  
  622.     nf = 0;
  623.     d0 = 1000;
  624.  
  625.     for (fp = fields+NFIELDS; --fp >= fields; ) {
  626.         f = *fp;
  627.         if (tstpackf(f,flag) && unpackr(f) == r) {
  628.         d = abs(c - unpackc(f));
  629.         if (d < d0) {
  630.             nf = f;
  631.             d0 = d;
  632.         }
  633.         }
  634.     }
  635.     return (nf ? nf : -1);
  636. }
  637.