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