home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / pd8.lzh / SRC / sel_fld.c < prev    next >
C/C++ Source or Header  |  1990-04-13  |  23KB  |  609 lines

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