home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume19 / xephem / part12 < prev    next >
Encoding:
Text File  |  1993-05-15  |  76.7 KB  |  1,963 lines

  1. Newsgroups: comp.sources.x
  2. From: ecdowney@pobox.cca.cr.rockwell.com (Elwood Downey)
  3. Subject: v19i100:  xephem - astronomical ephemeris program, Part12/21
  4. Message-ID: <1993May10.221114.8891@sparky.imd.sterling.com>
  5. X-Md4-Signature: 888f48c42f2b47418574d92b93fcdf8b
  6. Date: Mon, 10 May 1993 22:11:14 GMT
  7. Approved: chris@sparky.imd.sterling.com
  8.  
  9. Submitted-by: ecdowney@pobox.cca.cr.rockwell.com (Elwood Downey)
  10. Posting-number: Volume 19, Issue 100
  11. Archive-name: xephem/part12
  12. Environment: X11r4, OSF/Motif
  13. Supersedes: xephem: Volume 16, Issue 112-134
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  20. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  21. # Contents:  smallfm.xbm.3 solsysmenu.c
  22. # Wrapped by chris@nova on Mon May 10 16:41:48 1993
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 12 (of 21)."'
  26. if test -f 'smallfm.xbm.3' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'smallfm.xbm.3'\"
  28. else
  29.   echo shar: Extracting \"'smallfm.xbm.3'\" \(30676 characters\)
  30.   sed "s/^X//" >'smallfm.xbm.3' <<'END_OF_FILE'
  31. X   0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  32. X   0x55, 0x50, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  33. X   0x55, 0x5d, 0x55, 0xd5, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  34. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  35. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  36. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0x0a, 0x82, 0xa0, 0x20, 0x02,
  37. X   0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x80, 0xa2, 0x2a,
  38. X   0x00, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa, 0xae, 0xfe, 0xff, 0xff, 0xff, 0xff,
  39. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  40. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  41. X   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  42. X   0x55, 0x45, 0x01, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  43. X   0x55, 0x5d, 0x55, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  44. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  45. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  46. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xaa, 0x22, 0x20, 0x88, 0x8a, 0x00,
  47. X   0x28, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x2a, 0x00,
  48. X   0xaa, 0x8a, 0xaa, 0xaa, 0xaa, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  49. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  50. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  51. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0x55, 0x5d, 0x55, 0x55, 0x55,
  52. X   0x55, 0x05, 0x04, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  53. X   0x55, 0x55, 0x55, 0x57, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  54. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  55. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  56. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0x80, 0x08, 0x28, 0x00, 0x00,
  57. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xaa, 0xa0,
  58. X   0xa8, 0xa2, 0xaa, 0xaa, 0xaa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  59. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  60. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  61. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55,
  62. X   0x55, 0x05, 0x51, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  63. X   0x55, 0x55, 0x55, 0x55, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  64. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  65. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  66. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x8a, 0xaa, 0x20, 0x80, 0x20,
  67. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xa2, 0xaa, 0x8a,
  68. X   0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  69. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  70. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  71. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0x55, 0x55, 0x55, 0x55,
  72. X   0x55, 0x15, 0x15, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  73. X   0x55, 0x55, 0x57, 0x55, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  74. X   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  75. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  76. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xaa, 0x2a, 0x0a, 0x20, 0x88,
  77. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x0a, 0xa8, 0xaa,
  78. X   0xaa, 0xaa, 0x2a, 0xaa, 0xea, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
  79. X   0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  80. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  81. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 0x55, 0x55, 0x55,
  82. X   0x55, 0x45, 0x50, 0x51, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  83. X   0x55, 0x55, 0x55, 0x55, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  84. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  85. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  86. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xaa, 0xaa, 0x02, 0x02, 0xa2,
  87. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xaa, 0x82,
  88. X   0x88, 0x8a, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  89. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  90. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  91. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0x55, 0x55, 0x55,
  92. X   0x55, 0x45, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  93. X   0x55, 0x55, 0xd5, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  94. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  95. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  96. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xaa, 0x02, 0x80, 0x28,
  97. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x80, 0x88, 0x22,
  98. X   0xa0, 0xaa, 0xaa, 0xaa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  99. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  100. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  101. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x55, 0x55, 0x55,
  102. X   0x55, 0x55, 0x05, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  103. X   0x55, 0x55, 0x5d, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  104. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  105. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  106. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x2a, 0x0a, 0x08, 0xa2,
  107. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x02, 0x00,
  108. X   0x00, 0x00, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  109. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  110. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  111. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0x55, 0x55,
  112. X   0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  113. X   0x55, 0x55, 0x55, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  114. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  115. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  116. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0x0a, 0x00, 0x22,
  117. X   0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00,
  118. X   0x00, 0xa0, 0xaa, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  119. X   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  120. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  121. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 0x55,
  122. X   0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  123. X   0x55, 0x55, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  124. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  125. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  126. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x80, 0x82,
  127. X   0x22, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
  128. X   0x00, 0x28, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
  129. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  130. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  131. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55,
  132. X   0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  133. X   0x55, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  134. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  135. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  136. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x8a, 0xaa,
  137. X   0x80, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00,
  138. X   0xa0, 0xaa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
  139. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  140. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  141. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x57,
  142. X   0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
  143. X   0x55, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  144. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  145. X   0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  146. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa,
  147. X   0x82, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x82,
  148. X   0xaa, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  149. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  150. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  151. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  152. X   0x5f, 0x55, 0x55, 0x55, 0x15, 0x51, 0x54, 0x55, 0x55, 0x55, 0x55, 0xd5,
  153. X   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  154. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  155. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  156. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
  157. X   0xaa, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xaa,
  158. X   0xaa, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  159. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  160. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  161. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  162. X   0xff, 0x5f, 0x55, 0x55, 0x15, 0x51, 0x55, 0x55, 0x55, 0x55, 0x57, 0xfd,
  163. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  164. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  165. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  166. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
  167. X   0xaa, 0xaa, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x82, 0x88, 0xaa, 0xaa,
  168. X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  169. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  170. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  171. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  172. X   0xff, 0xff, 0x5d, 0x55, 0x55, 0x55, 0x11, 0x55, 0x55, 0x55, 0xf5, 0xff,
  173. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  174. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  175. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  176. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  177. X   0xbf, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xaa, 0xaa, 0xff,
  178. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  179. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  180. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  181. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  182. X   0xff, 0xff, 0xff, 0x57, 0x5d, 0x55, 0xd5, 0x55, 0x7d, 0xf5, 0xff, 0xff,
  183. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  184. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  185. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  186. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  187. X   0xff, 0xff, 0xbb, 0xaa, 0xaa, 0x02, 0xa8, 0xa2, 0xaa, 0xaa, 0xff, 0xff,
  188. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  189. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  190. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  191. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  192. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x5f, 0xfd, 0xdf, 0xff, 0xff, 0xff,
  193. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  194. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  195. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  196. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
  197. X   0xff, 0xff, 0xff, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xeb, 0xff, 0xff, 0xff,
  198. X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  199. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  200. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  201. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
  202. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  203. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  204. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  205. X   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  206. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  207. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  208. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  209. X   0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  210. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  211. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  212. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  213. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  214. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  215. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  216. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  217. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  218. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  219. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
  220. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  221. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  222. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  223. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  224. X   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  225. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  226. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  227. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  228. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  229. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  230. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  231. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
  232. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  233. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  234. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  235. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  236. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
  237. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  238. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  239. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  240. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  241. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
  242. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  243. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  244. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  245. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  246. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  247. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  248. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  249. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  250. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  251. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  252. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  253. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  254. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  255. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  256. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  257. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  258. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  259. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  260. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  261. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
  262. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  263. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  264. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  265. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  266. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  267. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  268. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  269. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  270. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  271. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  272. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  273. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  274. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  275. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  276. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  277. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  278. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  279. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  280. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  281. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  282. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  283. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  284. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  285. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  286. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  287. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
  288. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  289. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  290. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  291. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  292. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  293. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  294. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  295. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  296. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  297. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  298. X   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  299. X   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  300. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  301. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  302. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  303. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  304. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  305. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  306. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  307. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  308. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  309. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  310. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  311. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  312. X   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  313. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  314. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  315. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  316. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  317. X   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  318. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  319. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  320. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  321. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  322. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  323. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  324. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  325. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  326. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
  327. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  328. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  329. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  330. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  331. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
  332. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  333. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  334. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  335. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  336. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  337. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  338. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  339. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  340. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  341. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  342. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  343. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  344. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  345. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  346. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  347. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  348. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  349. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  350. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  351. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  352. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  353. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  354. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  355. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  356. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  357. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  358. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  359. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  360. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  361. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  362. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  363. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  364. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  365. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  366. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  367. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
  368. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  369. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  370. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  371. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  372. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  373. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff,
  374. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
  375. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  376. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  377. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  378. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  379. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  380. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  381. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  382. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  383. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff,
  384. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  385. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  386. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  387. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  388. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  389. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  390. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  391. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  392. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  393. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  394. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  395. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  396. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
  397. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  398. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  399. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  400. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  401. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  402. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  403. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  404. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  405. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  406. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  407. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  408. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  409. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  410. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  411. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  412. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  413. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  414. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  415. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
  416. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  417. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  418. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  419. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  420. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  421. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  422. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  423. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  424. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  425. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  426. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  427. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  428. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  429. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  430. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  431. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  432. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  433. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  434. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  435. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  436. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  437. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  438. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  439. X   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
  440. END_OF_FILE
  441.   if test 30676 -ne `wc -c <'smallfm.xbm.3'`; then
  442.     echo shar: \"'smallfm.xbm.3'\" unpacked with wrong size!
  443.   fi
  444.   # end of 'smallfm.xbm.3'
  445. fi
  446. if test -f 'solsysmenu.c' -a "${1}" != "-c" ; then 
  447.   echo shar: Will not clobber existing file \"'solsysmenu.c'\"
  448. else
  449.   echo shar: Extracting \"'solsysmenu.c'\" \(43023 characters\)
  450.   sed "s/^X//" >'solsysmenu.c' <<'END_OF_FILE'
  451. X/* code to manage the stuff on the solar system display.
  452. X * functions and data to support the main display begin with ss_.
  453. X * function and data to support the stereo display begin with st_.
  454. X */
  455. X
  456. X#include <stdio.h>
  457. X#include <ctype.h>
  458. X#include <math.h>
  459. X#if defined(__STDC__)
  460. X#include <stdlib.h>
  461. X#endif
  462. X#include <X11/Xlib.h>
  463. X#include <Xm/Xm.h>
  464. X#include <Xm/Form.h>
  465. X#include <Xm/Frame.h>
  466. X#include <Xm/DrawingA.h>
  467. X#include <Xm/RowColumn.h>
  468. X#include <Xm/Label.h>
  469. X#include <Xm/PushB.h>
  470. X#include <Xm/ToggleB.h>
  471. X#include <Xm/Text.h>
  472. X#include <Xm/Scale.h>
  473. X#include "astro.h"
  474. X#include "circum.h"
  475. X
  476. X/* heliocentric coordinates, and enough info to locate it on screen */
  477. Xtypedef struct {
  478. X    Obj o;        /* copy of Obj at the given moment */
  479. X    double smjd;    /* mjd when Obj was valid */
  480. X    int sx, sy;        /* main view window coords of object */
  481. X    int stx;        /* stereo view x coord (y is the same in both) */
  482. X    float x, y, z;    /* heliocentric cartesian coords */
  483. X} HLoc;
  484. X
  485. X#if defined(__STDC__) || defined(__cplusplus)
  486. X#define P_(s) s
  487. X#define    Const const
  488. X#else
  489. X#define P_(s) ()
  490. X#define    Const
  491. X#endif
  492. X
  493. Xextern Now *mm_get_now P_((void));
  494. Xextern Obj *db_basic P_((int id));
  495. Xextern double mjd_hr P_((double jd));
  496. Xextern void db_update P_((Obj *op));
  497. Xextern void f_angle P_((Widget w, double a));
  498. Xextern void f_date P_((Widget w, double jd));
  499. Xextern void f_double P_((Widget w, char *fmt, double f));
  500. Xextern void f_ra P_((Widget w, double ra));
  501. Xextern void f_string P_((Widget w, char *s));
  502. Xextern void f_time P_((Widget w, double t));
  503. Xextern void get_something P_((Widget w, char *resource, char *value));
  504. Xextern void hlp_dialog P_((char *tag, char *deflt[], int ndeflt));
  505. Xextern void obj_pickgc P_((Obj *op, Widget w, GC *gcp));
  506. Xextern void set_something P_((Widget w, char *resource, char *value));
  507. Xextern void set_xmstring P_((Widget w, char *resource, char *txt));
  508. Xextern void timestamp P_((Now *np, Widget w));
  509. X
  510. Xvoid ss_manage P_((void));
  511. Xvoid ss_newobj P_((int dbidx));
  512. Xint ss_ison P_((void));
  513. Xvoid ss_update P_((Now *np, int how_much));
  514. Xvoid ss_cursor P_((Cursor c));
  515. Xstatic void ss_create_form P_((void));
  516. Xstatic void st_create_form P_((void));
  517. Xstatic Widget ss_create_pot P_((Widget form_w, Widget bot_w));
  518. Xstatic void ss_activate_cb P_((Widget w, XtPointer client, XtPointer call));
  519. Xstatic void ss_obj_cb P_((Widget w, XtPointer client, XtPointer call));
  520. Xstatic void ss_changed_cb P_((Widget w, XtPointer client, XtPointer call));
  521. Xstatic void ss_close_cb P_((Widget w, XtPointer client, XtPointer call));
  522. Xstatic void ss_help_cb P_((Widget w, XtPointer client, XtPointer call));
  523. Xstatic void ss_da_exp_cb P_((Widget w, XtPointer client, XtPointer call));
  524. Xstatic void ss_da_input_cb P_((Widget w, XtPointer client, XtPointer call));
  525. Xstatic void st_parallax_cb P_((Widget w, XtPointer client, XtPointer call));
  526. Xstatic void st_map_cb P_((Widget wid, XtPointer client, XtPointer call));
  527. Xstatic void st_da_exp_cb P_((Widget w, XtPointer client, XtPointer call));
  528. Xstatic void st_da_input_cb P_((Widget w, XtPointer client, XtPointer call));
  529. Xstatic void ss_popup P_((XEvent *ev, HLoc *lp));
  530. Xstatic void ss_create_popup P_((void));
  531. Xstatic int cmpHLoc P_((Const void *lp1, Const void *lp2));
  532. Xstatic void ss_all P_((int preclr));
  533. Xstatic void solar_system P_((HLoc *lp, double scale, double elt, double elg, unsigned nx, unsigned ny));
  534. X
  535. X#undef P_
  536. X
  537. Xextern Widget toplevel_w;
  538. X#define    XtD    XtDisplay(toplevel_w)
  539. X
  540. Xstatic Widget ssform_w;        /* main solar system form dialog */
  541. Xstatic Widget hr_w, hlng_w, hlat_w; /* scales for heliocentric R, long, lat */
  542. Xstatic Widget ssda_w;        /* solar system drawring area */
  543. Xstatic Widget dt_w;        /* date/time stamp label widget */
  544. X
  545. Xstatic Widget stform_w;        /* main stereo form dialog */
  546. Xstatic Widget parallax_w;    /* scale to set amount of parallax */
  547. Xstatic Widget stda_w;        /* stereo solar system drawring area */
  548. X
  549. Xenum {TRAILS, BIGDOTS, CONNECT, TAGS, STEREO};    /* toggle button ids */
  550. X
  551. X#define    MINMAG    3.0    /* minimum mag factor, pixels/AU */
  552. X#define    MAXMAG    250.0    /* maximum mag factor, pixels/AU */
  553. X
  554. X/* whether each option is currently on */
  555. Xstatic int trails;
  556. Xstatic int bigdots;
  557. Xstatic int connectdots;
  558. Xstatic int nametags;
  559. Xstatic int stereo;
  560. X
  561. X/* current value of desired parallax */
  562. Xstatic int parallax;
  563. X
  564. Xstatic HLoc *points[NOBJ];    /* malloc'd set of points on screen now */
  565. Xstatic int npoints[NOBJ];    /* number of points */
  566. X
  567. Xstatic char obj_on[NOBJ];    /* 1 of object is on */
  568. Xstatic Widget obj_w[NOBJ];    /* toggle buttons for each object */
  569. X
  570. X/* info about the popup widget */
  571. Xtypedef struct {
  572. X    Widget pu_w;
  573. X    Widget name_w;
  574. X    Widget ud_w, udl_w;
  575. X    Widget ut_w, utl_w;
  576. X    Widget ra_w, ral_w;
  577. X    Widget dec_w, decl_w;
  578. X    Widget hlong_w, hlongl_w;
  579. X    Widget hlat_w, hlatl_w;
  580. X    Widget eadst_w, eadstl_w;
  581. X    Widget sndst_w, sndstl_w;
  582. X    Widget elong_w, elongl_w;
  583. X} Popup;
  584. Xstatic Popup pu;
  585. X
  586. Xstatic char earthname[] = "Earth";
  587. X
  588. X/* called when the solar system view is activated via the main menu pulldown.
  589. X * if never called before, create and manage all the widgets as a child of a
  590. X * form. otherwise, just toggle whether the form is managed.
  591. X */
  592. Xvoid
  593. Xss_manage ()
  594. X{
  595. X    if (!ssform_w) {
  596. X        ss_create_form();
  597. X        ss_create_popup();
  598. X        st_create_form();
  599. X    }
  600. X    
  601. X    if (XtIsManaged(ssform_w)) {
  602. X        if (XtIsManaged(stform_w))
  603. X        XtUnmanageChild(stform_w);
  604. X        XtUnmanageChild (ssform_w);
  605. X    } else {
  606. X        XtManageChild (ssform_w);
  607. X        if (stereo)
  608. X        XtManageChild (stform_w);
  609. X    }
  610. X}
  611. X
  612. X/* called when one of the user defined objects has changed.
  613. X * discard the points for that object.
  614. X * if the object is now defined in the SS manage the toggle button.
  615. X * N.B. no need to rebuild the scene -- ss_update() will be called for us.
  616. X */
  617. Xvoid
  618. Xss_newobj (dbidx)
  619. Xint dbidx;
  620. X{
  621. X    static char me[] = "ss_newobj()";
  622. X    Obj *op;
  623. X
  624. X    /* we might get called before we are ever brought up the first time */
  625. X    if (!ssform_w)
  626. X        return;
  627. X
  628. X    if (dbidx >= NOBJ) {
  629. X        printf ("%s: dbidx=%d but NOBJ=%d\n", me, dbidx, NOBJ);
  630. X        exit (1);
  631. X    }
  632. X
  633. X    if (points[dbidx])
  634. X        XtFree ((char *)points[dbidx]);
  635. X    points[dbidx] = NULL;
  636. X    npoints[dbidx] = 0;
  637. X
  638. X    op = db_basic(dbidx);
  639. X    switch (op->type) {
  640. X    case ELLIPTICAL: case HYPERBOLIC: case PARABOLIC:
  641. X        XtManageChild (obj_w[dbidx]);
  642. X        XmToggleButtonSetState (obj_w[dbidx], True, False);
  643. X        set_xmstring (obj_w[dbidx], XmNlabelString, op->o_name);
  644. X        obj_on[dbidx] = 1;
  645. X        break;
  646. X    default:
  647. X        XtUnmanageChild (obj_w[dbidx]);
  648. X        XmToggleButtonSetState (obj_w[dbidx], False, False);
  649. X        obj_on[dbidx] = 0;
  650. X        break;
  651. X    }
  652. X        
  653. X}
  654. X
  655. Xss_ison()
  656. X{
  657. X    return (ssform_w && XtIsManaged(ssform_w));
  658. X}
  659. X
  660. X/* called when we are to update our view.
  661. X * don't bother if we are unmanaged unless trails is on - in that case,
  662. X * compute the new locations but don't display them.
  663. X */
  664. X/* ARGSUSED */
  665. Xvoid
  666. Xss_update (np, how_much)
  667. XNow *np;
  668. Xint how_much;
  669. X{
  670. X    HLoc *lp;
  671. X    int up;
  672. X    int dbidx;
  673. X
  674. X    up = ssform_w && XtIsManaged(ssform_w);
  675. X    if (!up && !trails)
  676. X        return;
  677. X
  678. X    /* tag earth's data (from SUN object) as object MOON */
  679. X    for (dbidx = 0; dbidx < NOBJ; dbidx++) {
  680. X        Obj *op;
  681. X        double sd;
  682. X        int inss;
  683. X
  684. X        /* see if object is still a solar system object */
  685. X        op = db_basic(dbidx);
  686. X        switch (op->type) {
  687. X        case PLANET: case ELLIPTICAL: case HYPERBOLIC: case PARABOLIC:
  688. X        inss = 1;
  689. X        break;
  690. X        default:
  691. X        inss = 0;
  692. X        break;
  693. X        }
  694. X
  695. X        /* discard previous set if not leaving trails or obj no longer 
  696. X         * in solar system.
  697. X         */
  698. X        if (!inss || !trails) {
  699. X        if (points[dbidx])
  700. X            XtFree ((char*)points[dbidx]);
  701. X        points[dbidx] = NULL;
  702. X        npoints[dbidx] = 0;
  703. X        }
  704. X
  705. X        if (!inss)
  706. X        continue;
  707. X
  708. X        /* just one SUN will do */
  709. X        if (dbidx == SUN && npoints[SUN] > 0)
  710. X        continue;
  711. X
  712. X        npoints[dbidx]++;
  713. X        points[dbidx] = (HLoc *) XtRealloc ((char *)points[dbidx],
  714. X                        npoints[dbidx]*sizeof(HLoc));
  715. X        lp = &points[dbidx][npoints[dbidx]-1];
  716. X        if (dbidx == MOON) {
  717. X        /* really want earth info here; get it from SUN */
  718. X        op = db_basic (SUN);
  719. X        db_update(op);
  720. X        sd = op->s_edist;
  721. X        } else {
  722. X        sd = op->s_sdist;
  723. X        }
  724. X        lp->x = sd*cos(op->s_hlat)*cos(op->s_hlong);
  725. X        lp->y = sd*cos(op->s_hlat)*sin(op->s_hlong);
  726. X        lp->z = sd*sin(op->s_hlat);
  727. X        lp->o = *op;
  728. X        if (dbidx == MOON)
  729. X        lp->o.pl.code = MOON;
  730. X        lp->smjd = mjd;
  731. X
  732. X        /* keep points array sorted in increasing time order */
  733. X        qsort ((char *)points[dbidx], npoints[dbidx], sizeof(HLoc),
  734. X                                    cmpHLoc);
  735. X    }
  736. X
  737. X    if (up) {
  738. X        ss_all(!trails);
  739. X        timestamp (np, dt_w);
  740. X    }
  741. X        
  742. X}
  743. X
  744. X/* called to put up or remove the watch cursor.  */
  745. Xvoid
  746. Xss_cursor (c)
  747. XCursor c;
  748. X{
  749. X    Window win;
  750. X
  751. X    if (ssform_w && (win = XtWindow(ssform_w))) {
  752. X        Display *dsp = XtDisplay(ssform_w);
  753. X        if (c)
  754. X        XDefineCursor (dsp, win, c);
  755. X        else
  756. X        XUndefineCursor (dsp, win);
  757. X    }
  758. X}
  759. X
  760. X/* create the main solarsystem form */
  761. Xstatic void
  762. Xss_create_form()
  763. X{
  764. X    Widget close_w;
  765. X    Widget stereo_w;
  766. X    Widget trails_w;
  767. X    Widget frame_w;
  768. X    Widget form_w;
  769. X    Widget fr_w;
  770. X    Widget help_w;
  771. X    Widget big_w;
  772. X    Widget con_w;
  773. X    Widget tags_w;
  774. X    Widget pot_w;
  775. X    XmString str;
  776. X    Arg args[20];
  777. X    int n;
  778. X
  779. X    /* create form */
  780. X    n = 0;
  781. X    XtSetArg (args[n], XmNautoUnmanage, False); n++;
  782. X    XtSetArg (args[n], XmNdefaultPosition, False); n++;
  783. X    XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++;
  784. X    ssform_w = XmCreateFormDialog (toplevel_w, "SolarSystem", args, n);
  785. X
  786. X    /* set some stuff in the parent DialogShell.
  787. X     * setting XmNdialogTitle in the Form didn't work..
  788. X     */
  789. X    n = 0;
  790. X    XtSetArg (args[n], XmNtitle, "xephem Solar System"); n++;
  791. X    XtSetValues (XtParent(ssform_w), args, n);
  792. X
  793. X    /* make a form for the bottom controls */
  794. X
  795. X    n = 0;
  796. X    XtSetArg (args[n], XmNfractionBase, 13); n++;
  797. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  798. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  799. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  800. X    form_w = XmCreateForm (ssform_w, "CtlForm", args, n);
  801. X    XtManageChild (form_w);
  802. X
  803. X        /* make the "close" push button */
  804. X
  805. X        n = 0;
  806. X        XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  807. X        XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  808. X        XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
  809. X        XtSetArg (args[n], XmNleftPosition, 1); n++;
  810. X        XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
  811. X        XtSetArg (args[n], XmNrightPosition, 4); n++;
  812. X        close_w = XmCreatePushButton (form_w, "Close", args, n);
  813. X        XtAddCallback (close_w, XmNactivateCallback, ss_close_cb, 0);
  814. X        XtManageChild (close_w);
  815. X
  816. X        /* make the "stereo" toggle button in a frame */
  817. X
  818. X        n = 0;
  819. X        XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  820. X        XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  821. X        XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
  822. X        XtSetArg (args[n], XmNleftPosition, 5); n++;
  823. X        XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
  824. X        XtSetArg (args[n], XmNrightPosition, 8); n++;
  825. X        fr_w = XmCreateFrame (form_w, "StereoFrame", args, n);
  826. X        XtManageChild (fr_w);
  827. X        stereo_w = XmCreateToggleButton (fr_w, "Stereo", args, n);
  828. X        XtAddCallback (stereo_w, XmNvalueChangedCallback, ss_activate_cb, 
  829. X                                (XtPointer)STEREO);
  830. X        XtManageChild (stereo_w);
  831. X        stereo = XmToggleButtonGetState (stereo_w);
  832. X
  833. X        /* make the "help" push button */
  834. X
  835. X        n = 0;
  836. X        XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  837. X        XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  838. X        XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
  839. X        XtSetArg (args[n], XmNleftPosition, 9); n++;
  840. X        XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
  841. X        XtSetArg (args[n], XmNrightPosition, 12); n++;
  842. X        help_w = XmCreatePushButton (form_w, "Help", args, n);
  843. X        XtAddCallback (help_w, XmNactivateCallback, ss_help_cb, 0);
  844. X        XtManageChild (help_w);
  845. X
  846. X    /* make the planet on/off table */
  847. X
  848. X    pot_w = ss_create_pot(ssform_w, form_w);
  849. X    XtManageChild (pot_w);
  850. X
  851. X    /* make the "big dots" toggle button */
  852. X
  853. X    str = XmStringCreate("Big dots", XmSTRING_DEFAULT_CHARSET);
  854. X    n = 0;
  855. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  856. X    XtSetArg (args[n], XmNbottomWidget, pot_w); n++;
  857. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  858. X    XtSetArg (args[n], XmNlabelString, str); n++;
  859. X    big_w = XmCreateToggleButton(ssform_w, "BigDots", args, n);
  860. X    XmStringFree (str);
  861. X    XtManageChild (big_w);
  862. X    bigdots = XmToggleButtonGetState (big_w);
  863. X    XtAddCallback(big_w, XmNvalueChangedCallback, ss_activate_cb,
  864. X                            (XtPointer)BIGDOTS);
  865. X
  866. X    /* make the "connect" toggle button */
  867. X
  868. X    str = XmStringCreate("Connect dots", XmSTRING_DEFAULT_CHARSET);
  869. X    n = 0;
  870. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  871. X    XtSetArg (args[n], XmNbottomWidget, big_w); n++;
  872. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  873. X    XtSetArg (args[n], XmNlabelString, str); n++;
  874. X    con_w = XmCreateToggleButton(ssform_w, "ConnectDots", args, n);
  875. X    XmStringFree (str);
  876. X    XtManageChild (con_w);
  877. X    connectdots = XmToggleButtonGetState (con_w);
  878. X    XtAddCallback(con_w, XmNvalueChangedCallback, ss_activate_cb,
  879. X                                (XtPointer)CONNECT);
  880. X
  881. X    /* make the "leave trails" toggle button */
  882. X
  883. X    str = XmStringCreate("Leave trails", XmSTRING_DEFAULT_CHARSET);
  884. X    n = 0;
  885. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  886. X    XtSetArg (args[n], XmNbottomWidget, pot_w); n++;
  887. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  888. X    XtSetArg (args[n], XmNlabelString, str); n++;
  889. X    trails_w = XmCreateToggleButton(ssform_w, "Trails", args, n);
  890. X    XmStringFree (str);
  891. X    XtManageChild (trails_w);
  892. X    trails = XmToggleButtonGetState (trails_w);
  893. X    XtAddCallback(trails_w, XmNvalueChangedCallback, ss_activate_cb,
  894. X                                (XtPointer)TRAILS);
  895. X
  896. X    /* make the "tags" toggle button */
  897. X
  898. X    str = XmStringCreate("Names", XmSTRING_DEFAULT_CHARSET);
  899. X    n = 0;
  900. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  901. X    XtSetArg (args[n], XmNbottomWidget, trails_w); n++;
  902. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  903. X    XtSetArg (args[n], XmNlabelString, str); n++;
  904. X    tags_w = XmCreateToggleButton(ssform_w, "Names", args, n);
  905. X    XmStringFree (str);
  906. X    XtManageChild (tags_w);
  907. X    nametags = XmToggleButtonGetState (tags_w);
  908. X    XtAddCallback(tags_w, XmNvalueChangedCallback, ss_activate_cb,
  909. X                                (XtPointer)TAGS);
  910. X
  911. X    /* make the time/date stamp label */
  912. X
  913. X    n = 0;
  914. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  915. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  916. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  917. X    XtSetArg (args[n], XmNbottomWidget, con_w); n++;
  918. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++;
  919. X    dt_w = XmCreateLabel (ssform_w, "DateStamp", args, n);
  920. X    XtManageChild (dt_w);
  921. X
  922. X    /* make the bottom scale */
  923. X
  924. X    n = 0;
  925. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  926. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  927. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  928. X    XtSetArg (args[n], XmNbottomWidget, dt_w); n++;
  929. X    XtSetArg (args[n], XmNmaximum, 359); n++;
  930. X    XtSetArg (args[n], XmNminimum, 0); n++;
  931. X    XtSetArg (args[n], XmNscaleMultiple, 1); n++;
  932. X    XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++;
  933. X    XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
  934. X    XtSetArg (args[n], XmNshowValue, True); n++;
  935. X    hlng_w = XmCreateScale (ssform_w, "HLongScale", args, n);
  936. X    XtAddCallback (hlng_w, XmNdragCallback, ss_changed_cb, 0);
  937. X    XtAddCallback (hlng_w, XmNvalueChangedCallback, ss_changed_cb, 0);
  938. X    XtManageChild (hlng_w);
  939. X
  940. X    /* make the left scale */
  941. X
  942. X    n = 0;
  943. X    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  944. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  945. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  946. X    XtSetArg (args[n], XmNbottomWidget, hlng_w); n++;
  947. X    XtSetArg (args[n], XmNdecimalPoints, 1); n++;
  948. X    XtSetArg (args[n], XmNmaximum, 100); n++;
  949. X    XtSetArg (args[n], XmNminimum, 0); n++;
  950. X    XtSetArg (args[n], XmNscaleMultiple, 1); n++;
  951. X    XtSetArg (args[n], XmNorientation, XmVERTICAL); n++;
  952. X    XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
  953. X    /* XtSetArg (args[n], XmNshowValue, True); n++; */
  954. X    hr_w = XmCreateScale (ssform_w, "DistScale", args, n);
  955. X    XtAddCallback (hr_w, XmNdragCallback, ss_changed_cb, 0);
  956. X    XtAddCallback (hr_w, XmNvalueChangedCallback, ss_changed_cb, 0);
  957. X    XtManageChild (hr_w);
  958. X
  959. X    /* make the right scale */
  960. X
  961. X    n = 0;
  962. X    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  963. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  964. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  965. X    XtSetArg (args[n], XmNbottomWidget, hlng_w); n++;
  966. X    XtSetArg (args[n], XmNmaximum, 90); n++;
  967. X    XtSetArg (args[n], XmNminimum, -90); n++;
  968. X    XtSetArg (args[n], XmNscaleMultiple, 1); n++;
  969. X    XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
  970. X    XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
  971. X    XtSetArg (args[n], XmNshowValue, True); n++;
  972. X    hlat_w = XmCreateScale (ssform_w, "HLatScale", args, n);
  973. X    XtAddCallback (hlat_w, XmNdragCallback, ss_changed_cb, 0);
  974. X    XtAddCallback (hlat_w, XmNvalueChangedCallback, ss_changed_cb, 0);
  975. X    XtManageChild (hlat_w);
  976. X
  977. X    /* make a frame for the drawing area */
  978. X
  979. X    n = 0;
  980. X    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  981. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  982. X    XtSetArg (args[n], XmNbottomWidget, hlng_w); n++;
  983. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
  984. X    XtSetArg (args[n], XmNleftWidget, hr_w); n++;
  985. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
  986. X    XtSetArg (args[n], XmNrightWidget, hlat_w); n++;
  987. X    XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
  988. X    frame_w = XmCreateFrame (ssform_w, "SolarFrame", args, n);
  989. X    XtManageChild (frame_w);
  990. X
  991. X    /* make a drawing area for drawing the solar system */
  992. X
  993. X    n = 0;
  994. X    ssda_w = XmCreateDrawingArea (frame_w, "SolarDA", args, n);
  995. X    XtAddCallback (ssda_w, XmNexposeCallback, ss_da_exp_cb, 0);
  996. X    XtAddCallback (ssda_w, XmNinputCallback, ss_da_input_cb, 0);
  997. X    XtManageChild (ssda_w);
  998. X}
  999. X
  1000. X/* create the stereo solarsystem form */
  1001. Xstatic void
  1002. Xst_create_form()
  1003. X{
  1004. X    Widget frame_w;
  1005. X    Arg args[20];
  1006. X    int n;
  1007. X
  1008. X    /* create form */
  1009. X    n = 0;
  1010. X    XtSetArg (args[n], XmNautoUnmanage, False); n++;
  1011. X    XtSetArg (args[n], XmNdefaultPosition, False); n++;
  1012. X    XtSetArg (args[n], XmNnoResize, True); n++;    /* user can't resize */
  1013. X    stform_w = XmCreateFormDialog (toplevel_w, "StereoSolarSystem", args,n);
  1014. X    XtAddCallback (stform_w, XmNmapCallback, st_map_cb, NULL);
  1015. X
  1016. X    /* set some stuff in the parent DialogShell.
  1017. X     * setting XmNdialogTitle in the Form didn't work..
  1018. X     */
  1019. X    n = 0;
  1020. X    XtSetArg (args[n], XmNtitle, "xephem Stereo Solar System"); n++;
  1021. X    XtSetValues (XtParent(stform_w), args, n);
  1022. X
  1023. X    /* make the parallax scale at the bottom */
  1024. X
  1025. X    n = 0;
  1026. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1027. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1028. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  1029. X    XtSetArg (args[n], XmNmaximum, 10); n++;
  1030. X    XtSetArg (args[n], XmNminimum, -10); n++;
  1031. X    XtSetArg (args[n], XmNscaleMultiple, 1); n++;
  1032. X    XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++;
  1033. X    XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
  1034. X    parallax_w = XmCreateScale (stform_w, "Parallax", args, n);
  1035. X    XtAddCallback (parallax_w, XmNdragCallback, st_parallax_cb, 0);
  1036. X    XtAddCallback (parallax_w, XmNvalueChangedCallback, st_parallax_cb, 0);
  1037. X    XtManageChild (parallax_w);
  1038. X    XmScaleGetValue (parallax_w, ¶llax);
  1039. X
  1040. X    /* make a frame for the drawing area */
  1041. X
  1042. X    n = 0;
  1043. X    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  1044. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  1045. X    XtSetArg (args[n], XmNbottomWidget, parallax_w); n++;
  1046. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1047. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1048. X    XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
  1049. X    frame_w = XmCreateFrame (stform_w, "StereoFrame", args, n);
  1050. X    XtManageChild (frame_w);
  1051. X
  1052. X    /* make a drawing area for drawing the stereo solar system */
  1053. X
  1054. X    n = 0;
  1055. X    stda_w = XmCreateDrawingArea (frame_w, "StereoDA", args, n);
  1056. X    XtAddCallback (stda_w, XmNexposeCallback, st_da_exp_cb, 0);
  1057. X    XtAddCallback (stda_w, XmNinputCallback, st_da_input_cb, 0);
  1058. X    XtManageChild (stda_w);
  1059. X}
  1060. X
  1061. X/* create the planet on/off table.
  1062. X * don't manage it yet; return the outtermost Widget.
  1063. X */
  1064. Xstatic Widget
  1065. Xss_create_pot (form_w, bot_w)
  1066. XWidget form_w;    /* form host */
  1067. XWidget bot_w;    /* attach our bottom to this one */
  1068. X{
  1069. X    Widget frame_w;
  1070. X    Widget rc_w;
  1071. X    Arg args[20];
  1072. X    int n;
  1073. X    int i;
  1074. X
  1075. X    n = 0;
  1076. X    XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
  1077. X    XtSetArg (args[n], XmNbottomWidget, bot_w); n++;
  1078. X    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  1079. X    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  1080. X    frame_w = XmCreateFrame (form_w, "ObjTblF", args, n);
  1081. X
  1082. X    n = 0;
  1083. X    XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++;
  1084. X    XtSetArg (args[n], XmNnumColumns, 4); n++;
  1085. X    rc_w = XmCreateRowColumn (frame_w, "ObjTblRC", args, n);
  1086. X    XtManageChild (rc_w);
  1087. X
  1088. X    /* make the toggle buttons.
  1089. X     * fill in the names we can now.
  1090. X     * default the planets to all on.
  1091. X     */
  1092. X    for (i = 0; i < NOBJ; i++) {
  1093. X        Obj *op = db_basic(i);
  1094. X        n = 0;
  1095. X        obj_w[i] = XmCreateToggleButton (rc_w, "ObjTB", args, n);
  1096. X        XtAddCallback (obj_w[i], XmNvalueChangedCallback, ss_obj_cb,
  1097. X                            (XtPointer)i);
  1098. X        switch (op->type) {
  1099. X        case ELLIPTICAL: case PARABOLIC: case HYPERBOLIC: case PLANET:
  1100. X        set_xmstring (obj_w[i], XmNlabelString,
  1101. X            is_planet(op,MOON)? earthname : op->o_name);
  1102. X        XtManageChild (obj_w[i]);
  1103. X        XmToggleButtonSetState (obj_w[i], True, False);
  1104. X        break;
  1105. X        }
  1106. X        obj_on[i] = XmToggleButtonGetState (obj_w[i]);
  1107. X    }
  1108. X
  1109. X    return (frame_w);
  1110. X}
  1111. X
  1112. X/* callback from the control toggle buttons
  1113. X */
  1114. X/* ARGSUSED */
  1115. Xstatic void
  1116. Xss_activate_cb (w, client, call)
  1117. XWidget w;
  1118. XXtPointer client;
  1119. XXtPointer call;
  1120. X{
  1121. X    int what = (int) client;
  1122. X
  1123. X    switch (what) {
  1124. X    case TRAILS:
  1125. X        trails = XmToggleButtonGetState(w);
  1126. X        break;
  1127. X    case BIGDOTS:
  1128. X        bigdots = XmToggleButtonGetState(w);
  1129. X        ss_all (1);
  1130. X        break;
  1131. X    case CONNECT:
  1132. X        connectdots = XmToggleButtonGetState(w);
  1133. X        ss_all (1);
  1134. X        break;
  1135. X    case TAGS:
  1136. X        nametags = XmToggleButtonGetState(w);
  1137. X        ss_all (1);
  1138. X        break;
  1139. X    case STEREO:
  1140. X        stereo = XmToggleButtonGetState(w);
  1141. X        if (stereo) {
  1142. X        XtManageChild(stform_w);
  1143. X        ss_all (1);
  1144. X        } else
  1145. X        XtUnmanageChild(stform_w);
  1146. X        break;
  1147. X    default:
  1148. X        printf ("solsysmenu.c: unknown toggle button\n");
  1149. X        exit(1);
  1150. X    }
  1151. X}
  1152. X
  1153. X/* callback from the object on/off toggle buttons.
  1154. X * client is the dbidx.
  1155. X */
  1156. X/* ARGSUSED */
  1157. Xstatic void
  1158. Xss_obj_cb (w, client, call)
  1159. XWidget w;
  1160. XXtPointer client;
  1161. XXtPointer call;
  1162. X{
  1163. X    int who = (int) client;
  1164. X
  1165. X    obj_on[who] = XmToggleButtonGetState(w);
  1166. X    ss_all(1);
  1167. X}
  1168. X
  1169. X/* callback when any of the scales change value.
  1170. X */
  1171. X/* ARGSUSED */
  1172. Xstatic void
  1173. Xss_changed_cb (w, client, call)
  1174. XWidget w;
  1175. XXtPointer client;
  1176. XXtPointer call;
  1177. X{
  1178. X    XmScaleCallbackStruct *sp = (XmScaleCallbackStruct *)call;
  1179. X
  1180. X    if (w != hr_w && w != hlng_w && w != hlat_w) {
  1181. X        printf ("solsysmenu.c: Unknown scaled callback\n");
  1182. X        exit(1);
  1183. X    }
  1184. X
  1185. X    ss_all(1);
  1186. X
  1187. X    /* some of these get a bit lengthy, so discard remaining events.
  1188. X     * TODO: don't discard pending Expose events
  1189. X     */
  1190. X    if (sp->reason == XmCR_DRAG)
  1191. X        XSync (XtDisplay(w), True);
  1192. X}
  1193. X
  1194. X/* callback from the Close button.
  1195. X */
  1196. X/* ARGSUSED */
  1197. Xstatic void
  1198. Xss_close_cb (w, client, call)
  1199. XWidget w;
  1200. XXtPointer client;
  1201. XXtPointer call;
  1202. X{
  1203. X    if (XtIsManaged(stform_w))
  1204. X        XtUnmanageChild (stform_w);
  1205. X    XtUnmanageChild (ssform_w);
  1206. X}
  1207. X
  1208. X/* callback from the Help button.
  1209. X */
  1210. X/* ARGSUSED */
  1211. Xstatic void
  1212. Xss_help_cb (w, client, call)
  1213. XWidget w;
  1214. XXtPointer client;
  1215. XXtPointer call;
  1216. X{
  1217. X    static char *msg[] = {
  1218. X"This displays the solar system. The sun is always at the center. The left",
  1219. X"slider controls your distance from the sun - further up is closer. The",
  1220. X"bottom slider controls your heliocentric longitude. The right slider controls",
  1221. X"your heliocentric latitude - your angle above the ecliptic."
  1222. X};
  1223. X
  1224. X    hlp_dialog ("Solar System View", msg, sizeof(msg)/sizeof(msg[0]));
  1225. X}
  1226. X
  1227. X/* expose of solar system drawing area.
  1228. X */
  1229. X/* ARGSUSED */
  1230. Xstatic void
  1231. Xss_da_exp_cb (w, client, call)
  1232. XWidget w;
  1233. XXtPointer client;
  1234. XXtPointer call;
  1235. X{
  1236. X    XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call;
  1237. X
  1238. X    switch (c->reason) {
  1239. X    case XmCR_EXPOSE: {
  1240. X        /* turn off gravity so we get expose events for either shrink or
  1241. X         * expand.
  1242. X         */
  1243. X        static before;
  1244. X        XExposeEvent *e = &c->event->xexpose;
  1245. X
  1246. X        if (!before) {
  1247. X        XSetWindowAttributes swa;
  1248. X        swa.bit_gravity = ForgetGravity;
  1249. X        XChangeWindowAttributes (e->display, e->window,
  1250. X                                CWBitGravity, &swa);
  1251. X        before = 1;
  1252. X        }
  1253. X        /* wait for the last in the series */
  1254. X        if (e->count != 0)
  1255. X        return;
  1256. X        break;
  1257. X        }
  1258. X    default:
  1259. X        printf ("Unexpected ssda_w event. type=%d\n", c->reason);
  1260. X        exit(1);
  1261. X    }
  1262. X
  1263. X    ss_update (mm_get_now(), 1);
  1264. X}
  1265. X
  1266. X/* a dot has been picked: find what it is and report it. */
  1267. X/* ARGSUSED */
  1268. Xstatic void
  1269. Xss_da_input_cb (w, client, call)
  1270. XWidget w;
  1271. XXtPointer client;
  1272. XXtPointer call;
  1273. X{
  1274. X    XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call;
  1275. X    XEvent *ev;
  1276. X    
  1277. X#define    PICKRANGE    100    /* sqr of dist allowed from pointer */
  1278. X    int x, y, mind;
  1279. X    int dbidx;
  1280. X    HLoc *lp;
  1281. X    int i;
  1282. X
  1283. X    if (c->reason != XmCR_INPUT)
  1284. X        return;
  1285. X    ev = c->event;
  1286. X    if (ev->xany.type != ButtonPress || ev->xbutton.button != Button3)
  1287. X        return;
  1288. X
  1289. X    x = ((XButtonPressedEvent *)ev)->x;
  1290. X    y = ((XButtonPressedEvent *)ev)->y;
  1291. X
  1292. X    lp = NULL;
  1293. X    for (dbidx = 0; dbidx < NOBJ; dbidx++)
  1294. X        for (i = 0; i < npoints[dbidx]; i++) {
  1295. X        int d = (x-points[dbidx][i].sx)*(x-points[dbidx][i].sx) +
  1296. X                (y-points[dbidx][i].sy)*(y-points[dbidx][i].sy);
  1297. X        if (!lp || d < mind) {
  1298. X            lp = &points[dbidx][i];
  1299. X            mind = d;
  1300. X        }
  1301. X        }
  1302. X
  1303. X    if (lp && mind <= PICKRANGE)
  1304. X        ss_popup (ev, lp);
  1305. X}
  1306. X
  1307. X/* ARGSUSED */
  1308. Xstatic void
  1309. Xst_parallax_cb (w, client, call)
  1310. XWidget w;
  1311. XXtPointer client;
  1312. XXtPointer call;
  1313. X{
  1314. X    XmScaleCallbackStruct *sp = (XmScaleCallbackStruct *)call;
  1315. X
  1316. X    XmScaleGetValue (w, ¶llax);
  1317. X    ss_all (1);
  1318. X
  1319. X    /* some of these get a bit lengthy, so discard remaining events.
  1320. X     * TODO: don't discard pending Expose events
  1321. X     */
  1322. X    if (sp->reason == XmCR_DRAG)
  1323. X        XSync (XtDisplay(w), True);
  1324. X}
  1325. X
  1326. X/* called whenever the stereo scene is mapped.
  1327. X * we set the size of the DrawingArea the same as the main window's.
  1328. X * we also try to position it just to the left, but it doesn't always work :-(
  1329. X */
  1330. X/* ARGSUSED */
  1331. Xstatic void
  1332. Xst_map_cb (wid, client, call)
  1333. XWidget wid;
  1334. XXtPointer client;
  1335. XXtPointer call;
  1336. X{
  1337. X    Dimension w, h;
  1338. X    Position x, y;
  1339. X    Arg args[20];
  1340. X    int n;
  1341. X
  1342. X    n = 0;
  1343. X    XtSetArg (args[n], XmNwidth, &w); n++;
  1344. X    XtSetArg (args[n], XmNheight, &h); n++;
  1345. X    XtGetValues (ssda_w, args, n);
  1346. X
  1347. X    n = 0;
  1348. X    XtSetArg (args[n], XmNwidth, w); n++;
  1349. X    XtSetArg (args[n], XmNheight, h); n++;
  1350. X    XtSetValues (stda_w, args, n);
  1351. X
  1352. X    n = 0;
  1353. X    XtSetArg (args[n], XmNx, &x); n++;
  1354. X    XtSetArg (args[n], XmNy, &y); n++;
  1355. X    XtGetValues (ssform_w, args, n);
  1356. X
  1357. X    n = 0;
  1358. X    XtSetArg (args[n], XmNx, x-w); n++;
  1359. X    XtSetArg (args[n], XmNy, y); n++;
  1360. X    XtSetValues (stform_w, args, n);
  1361. X}
  1362. X
  1363. X/* expose of stereo solar system drawing area.
  1364. X */
  1365. X/* ARGSUSED */
  1366. Xstatic void
  1367. Xst_da_exp_cb (w, client, call)
  1368. XWidget w;
  1369. XXtPointer client;
  1370. XXtPointer call;
  1371. X{
  1372. X    XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call;
  1373. X
  1374. X    switch (c->reason) {
  1375. X    case XmCR_EXPOSE: {
  1376. X        /* turn off gravity so we get expose events for either shrink or
  1377. X         * expand.
  1378. X         */
  1379. X        static before;
  1380. X        XExposeEvent *e = &c->event->xexpose;
  1381. X
  1382. X        if (!before) {
  1383. X        XSetWindowAttributes swa;
  1384. X        swa.bit_gravity = ForgetGravity;
  1385. X        XChangeWindowAttributes (e->display, e->window,
  1386. X                                CWBitGravity, &swa);
  1387. X        before = 1;
  1388. X        }
  1389. X        /* wait for the last in the series */
  1390. X        if (e->count != 0)
  1391. X        return;
  1392. X        break;
  1393. X        }
  1394. X    default:
  1395. X        printf ("Unexpected stda_w event. type=%d\n", c->reason);
  1396. X        exit(1);
  1397. X    }
  1398. X
  1399. X    ss_update (mm_get_now(), 1);
  1400. X}
  1401. X
  1402. X/* a dot has been picked on the stereo map: find what it is and report it. */
  1403. X/* ARGSUSED */
  1404. Xstatic void
  1405. Xst_da_input_cb (w, client, call)
  1406. XWidget w;
  1407. XXtPointer client;
  1408. XXtPointer call;
  1409. X{
  1410. X    XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call;
  1411. X    XEvent *ev;
  1412. X    
  1413. X#define    PICKRANGE    100    /* sqr of dist allowed from pointer */
  1414. X    int x, y, mind;
  1415. X    int dbidx;
  1416. X    HLoc *lp;
  1417. X    int i;
  1418. X
  1419. X    if (c->reason != XmCR_INPUT)
  1420. X        return;
  1421. X    ev = c->event;
  1422. X    if (ev->xany.type != ButtonPress || ev->xbutton.button != Button3)
  1423. X        return;
  1424. X
  1425. X    x = ((XButtonPressedEvent *)ev)->x;
  1426. X    y = ((XButtonPressedEvent *)ev)->y;
  1427. X
  1428. X    lp = NULL;
  1429. X    for (dbidx = 0; dbidx < NOBJ; dbidx++)
  1430. X        for (i = 0; i < npoints[dbidx]; i++) {
  1431. X        int d = (x-points[dbidx][i].stx)*(x-points[dbidx][i].stx) +
  1432. X                (y-points[dbidx][i].sy)*(y-points[dbidx][i].sy);
  1433. X        if (!lp || d < mind) {
  1434. X            lp = &points[dbidx][i];
  1435. X            mind = d;
  1436. X        }
  1437. X        }
  1438. X
  1439. X    if (lp && mind <= PICKRANGE)
  1440. X        ss_popup (ev, lp);
  1441. X}
  1442. X
  1443. X/* fill in the popup with goodies from lp.
  1444. X * display fields the same way they are in main data menu.
  1445. X * position the popup as indicated by ev and display it.
  1446. X * it goes down by itself.
  1447. X */
  1448. Xstatic void
  1449. Xss_popup (ev, lp)
  1450. XXEvent *ev;
  1451. XHLoc *lp;
  1452. X{
  1453. X    Obj *op = &lp->o;
  1454. X    double d;
  1455. X
  1456. X    if (is_planet(op, MOON)) {
  1457. X        /* MOON is used to denote Earth */
  1458. X        f_string (pu.name_w, earthname);
  1459. X        XtManageChild (pu.ud_w);
  1460. X        XtManageChild (pu.udl_w);
  1461. X        XtManageChild (pu.ut_w);
  1462. X        XtManageChild (pu.utl_w);
  1463. X        XtManageChild (pu.ra_w);
  1464. X        XtManageChild (pu.ral_w);
  1465. X        set_xmstring (pu.ral_w, XmNlabelString, "Sun RA:");
  1466. X        XtManageChild (pu.dec_w);
  1467. X        XtManageChild (pu.decl_w);
  1468. X        set_xmstring (pu.decl_w, XmNlabelString, "Sun Dec:");
  1469. X        XtManageChild (pu.hlong_w);
  1470. X        XtManageChild (pu.hlongl_w);
  1471. X        XtUnmanageChild (pu.hlat_w);
  1472. X        XtUnmanageChild (pu.hlatl_w);
  1473. X        XtUnmanageChild (pu.eadst_w);
  1474. X        XtUnmanageChild (pu.eadstl_w);
  1475. X        XtManageChild (pu.sndst_w);
  1476. X        XtManageChild (pu.sndstl_w);
  1477. X        XtUnmanageChild (pu.elong_w);
  1478. X        XtUnmanageChild (pu.elongl_w);
  1479. X        set_something (pu.pu_w, XmNnumColumns, (char *)7);
  1480. X    } else {
  1481. X        f_string (pu.name_w, op->o_name);
  1482. X        if (is_planet (op, SUN)) {
  1483. X        XtUnmanageChild (pu.ud_w);
  1484. X        XtUnmanageChild (pu.udl_w);
  1485. X        XtUnmanageChild (pu.ut_w);
  1486. X        XtUnmanageChild (pu.utl_w);
  1487. X        XtUnmanageChild (pu.ra_w);
  1488. X        XtUnmanageChild (pu.ral_w);
  1489. X        XtUnmanageChild (pu.dec_w);
  1490. X        XtUnmanageChild (pu.decl_w);
  1491. X        XtUnmanageChild (pu.hlong_w);
  1492. X        XtUnmanageChild (pu.hlongl_w);
  1493. X        XtUnmanageChild (pu.hlat_w);
  1494. X        XtUnmanageChild (pu.hlatl_w);
  1495. X        XtUnmanageChild (pu.eadst_w);
  1496. X        XtUnmanageChild (pu.eadstl_w);
  1497. X        XtUnmanageChild (pu.sndst_w);
  1498. X        XtUnmanageChild (pu.sndstl_w);
  1499. X        XtUnmanageChild (pu.elong_w);
  1500. X        XtUnmanageChild (pu.elongl_w);
  1501. X        set_something (pu.pu_w, XmNnumColumns, (char *)1);
  1502. X        } else {
  1503. X        XtManageChild (pu.ud_w);
  1504. X        XtManageChild (pu.udl_w);
  1505. X        XtManageChild (pu.ut_w);
  1506. X        XtManageChild (pu.utl_w);
  1507. X        XtManageChild (pu.ra_w);
  1508. X        XtManageChild (pu.ral_w);
  1509. X        set_xmstring (pu.ral_w, XmNlabelString, "RA:");
  1510. X        XtManageChild (pu.dec_w);
  1511. X        XtManageChild (pu.decl_w);
  1512. X        set_xmstring (pu.decl_w, XmNlabelString, "Dec:");
  1513. X        XtManageChild (pu.hlong_w);
  1514. X        XtManageChild (pu.hlongl_w);
  1515. X        XtManageChild (pu.hlat_w);
  1516. X        XtManageChild (pu.hlatl_w);
  1517. X        XtManageChild (pu.eadst_w);
  1518. X        XtManageChild (pu.eadstl_w);
  1519. X        XtManageChild (pu.sndst_w);
  1520. X        XtManageChild (pu.sndstl_w);
  1521. X        XtManageChild (pu.elong_w);
  1522. X        XtManageChild (pu.elongl_w);
  1523. X        set_something (pu.pu_w, XmNnumColumns, (char *)10);
  1524. X        }
  1525. X    }
  1526. X
  1527. X    f_date (pu.ud_w, lp->smjd);
  1528. X    f_time (pu.ut_w, mjd_hr(lp->smjd));
  1529. X    f_ra (pu.ra_w, op->s_ra);
  1530. X    f_angle (pu.dec_w, op->s_dec);
  1531. X    f_angle (pu.hlong_w, op->s_hlong);
  1532. X    f_angle (pu.hlat_w, op->s_hlat);
  1533. X
  1534. X    d = op->s_edist;
  1535. X    f_double (pu.eadst_w, d >= 9.99995 ? "%6.3f" : "%6.4f", d);
  1536. X
  1537. X    d = is_planet(op, MOON) ? op->s_edist
  1538. X                : op->s_sdist;
  1539. X    f_double (pu.sndst_w, d >= 9.99995 ? "%6.3f" : "%6.4f", d);
  1540. X
  1541. X    f_double (pu.elong_w, "%6.1f", op->s_elong);
  1542. X
  1543. X    XmMenuPosition (pu.pu_w, (XButtonPressedEvent *)ev);
  1544. X    XtManageChild (pu.pu_w);
  1545. X}
  1546. X
  1547. X/* create the id popup */
  1548. Xstatic void
  1549. Xss_create_popup()
  1550. X{
  1551. X    Arg args[20];
  1552. X    Widget w;
  1553. X    int n;
  1554. X
  1555. X    /* create the outer form */
  1556. X    n = 0;
  1557. X    XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++;
  1558. X    XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++;
  1559. X    XtSetArg (args[n], XmNisAligned, False); n++;
  1560. X    pu.pu_w = XmCreatePopupMenu (toplevel_w, "SSPopup", args, n);
  1561. X
  1562. X    /* create the widgets */
  1563. X
  1564. X    /* name */
  1565. X    n = 0;
  1566. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1567. X    w = XmCreateLabel (pu.pu_w, "SSPopNameL", args, n);
  1568. X    set_xmstring (w, XmNlabelString, "Name:");
  1569. X    XtManageChild (w);
  1570. X    n = 0;
  1571. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1572. X    pu.name_w = XmCreateLabel (pu.pu_w, "SSPopName", args, n);
  1573. X    XtManageChild (pu.name_w);
  1574. X
  1575. X    /* UT date */
  1576. X    n = 0;
  1577. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1578. X    pu.udl_w = XmCreateLabel (pu.pu_w, "SSPopupUTDateL", args, n);
  1579. X    set_xmstring (pu.udl_w, XmNlabelString, "UT Date:");
  1580. X    XtManageChild (pu.udl_w);
  1581. X    n = 0;
  1582. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1583. X    pu.ud_w = XmCreateLabel (pu.pu_w, "SSPopUTDate", args, n);
  1584. X    XtManageChild (pu.ud_w);
  1585. X
  1586. X    /* UT time */
  1587. X    n = 0;
  1588. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1589. X    pu.utl_w = XmCreateLabel (pu.pu_w, "SSPopupUTTimeL", args, n);
  1590. X    set_xmstring (pu.utl_w, XmNlabelString, "UT Time:");
  1591. X    XtManageChild (pu.utl_w);
  1592. X    n = 0;
  1593. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1594. X    pu.ut_w = XmCreateLabel (pu.pu_w, "SSPopUTTime", args, n);
  1595. X    XtManageChild (pu.ut_w);
  1596. X
  1597. X    /* ra */
  1598. X    n = 0;
  1599. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1600. X    pu.ral_w = XmCreateLabel (pu.pu_w, "SSPopRAL", args, n);
  1601. X    XtManageChild (pu.ral_w);
  1602. X    n = 0;
  1603. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1604. X    pu.ra_w = XmCreateLabel (pu.pu_w, "SSPopRA", args, n);
  1605. X    XtManageChild (pu.ra_w);
  1606. X
  1607. X    /* dec */
  1608. X    n = 0;
  1609. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1610. X    pu.decl_w = XmCreateLabel (pu.pu_w, "SSPopDecL", args, n);
  1611. X    XtManageChild (pu.decl_w);
  1612. X    n = 0;
  1613. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1614. X    pu.dec_w = XmCreateLabel (pu.pu_w, "SSPopDec", args, n);
  1615. X    XtManageChild (pu.dec_w);
  1616. X
  1617. X    /* hlong */
  1618. X    n = 0;
  1619. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1620. X    pu.hlongl_w = XmCreateLabel (pu.pu_w, "SSPopupHLongL", args, n);
  1621. X    set_xmstring (pu.hlongl_w, XmNlabelString, "HeLong:");
  1622. X    XtManageChild (pu.hlongl_w);
  1623. X    n = 0;
  1624. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1625. X    pu.hlong_w = XmCreateLabel (pu.pu_w, "SSPopHLong", args, n);
  1626. X    XtManageChild (pu.hlong_w);
  1627. X
  1628. X    /* hlat */
  1629. X    n = 0;
  1630. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1631. X    pu.hlatl_w = XmCreateLabel (pu.pu_w, "SSPopupHLatL", args, n);
  1632. X    set_xmstring (pu.hlatl_w, XmNlabelString, "HeLat:");
  1633. X    XtManageChild (pu.hlatl_w);
  1634. X    n = 0;
  1635. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1636. X    pu.hlat_w = XmCreateLabel (pu.pu_w, "SSPopHLat", args, n);
  1637. X    XtManageChild (pu.hlat_w);
  1638. X
  1639. X    /* earth dist */
  1640. X    n = 0;
  1641. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1642. X    pu.eadstl_w = XmCreateLabel (pu.pu_w, "SSPopupEaDstL", args, n);
  1643. X    set_xmstring (pu.eadstl_w, XmNlabelString, "EaDst:");
  1644. X    XtManageChild (pu.eadstl_w);
  1645. X    n = 0;
  1646. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1647. X    pu.eadst_w = XmCreateLabel (pu.pu_w, "SSPopEaDst", args, n);
  1648. X    XtManageChild (pu.eadst_w);
  1649. X
  1650. X    /* sun dist */
  1651. X    n = 0;
  1652. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1653. X    pu.sndstl_w = XmCreateLabel (pu.pu_w, "SSPopupSnDstL", args, n);
  1654. X    set_xmstring (pu.sndstl_w, XmNlabelString, "SnDst:");
  1655. X    XtManageChild (pu.sndstl_w);
  1656. X    n = 0;
  1657. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1658. X    pu.sndst_w = XmCreateLabel (pu.pu_w, "SSPopSnDst", args, n);
  1659. X    XtManageChild (pu.sndst_w);
  1660. X
  1661. X    /* elong */
  1662. X    n = 0;
  1663. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
  1664. X    pu.elongl_w = XmCreateLabel (pu.pu_w, "SSPopupElongL", args, n);
  1665. X    set_xmstring (pu.elongl_w, XmNlabelString, "Elong:");
  1666. X    XtManageChild (pu.elongl_w);
  1667. X    n = 0;
  1668. X    XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
  1669. X    pu.elong_w = XmCreateLabel (pu.pu_w, "SSPopElong", args, n);
  1670. X    XtManageChild (pu.elong_w);
  1671. X}
  1672. X
  1673. X/* sort by time.
  1674. X */
  1675. Xstatic int
  1676. XcmpHLoc (lp1, lp2)
  1677. XConst void *lp1, *lp2;
  1678. X{
  1679. X    double dt = ((HLoc *)lp1)->smjd - ((HLoc *)lp2)->smjd;
  1680. X    return (dt < 0 ? -1 : dt > 0 ? 1 : 0);
  1681. X}
  1682. X
  1683. X/* draw everything in the points arrays from the current vantage to the
  1684. X * current screen size.
  1685. X * always draw the main window; also the stereo one if it's up.
  1686. X */
  1687. X/* ARGSUSED */
  1688. Xstatic void
  1689. Xss_all(preclr)
  1690. Xint preclr;
  1691. X{
  1692. X#define    CACHE_SZ    100    /* collect these many X commands */
  1693. X#define    CACHE_PAD    10    /* flush when only this many left */
  1694. X#define    CACHE_HWM    (CACHE_SZ - CACHE_PAD)    /* hi water mark */
  1695. X    static Pixmap ss_pm;
  1696. X    static Pixmap st_pm;
  1697. X    static GC ss_bgc;
  1698. X    static GC st_bgc;
  1699. X    static XFontStruct *ss_fs;
  1700. X    static XFontStruct *st_fs;
  1701. X    static unsigned ss_last_nx, ss_last_ny;
  1702. X    static unsigned st_last_nx, st_last_ny;
  1703. X    static int ss_cw;
  1704. X    static int st_cw;
  1705. X    Display *dsp = XtDisplay(ssda_w);
  1706. X    Window ss_win = XtWindow(ssda_w);
  1707. X    Window st_win = XtWindow(stda_w);
  1708. X    Window root;
  1709. X    unsigned int ss_nx, ss_ny;
  1710. X    unsigned int st_nx, st_ny;
  1711. X    int x, y;
  1712. X    unsigned int bw, d;
  1713. X    int dbidx;
  1714. X    int sv;        /* ScaleValue tmp */
  1715. X    double scale;
  1716. X    double elt;    /* heliocentric lat of eye, rads */
  1717. X    double elg;    /* heliocentric lng of eye, rads */
  1718. X    int n;
  1719. X
  1720. X    if (!ss_bgc) {
  1721. X        XGCValues gcv;
  1722. X        unsigned int gcm;
  1723. X        gcm = GCForeground;
  1724. X        get_something (ssda_w, XmNbackground, (char *)&gcv.foreground);
  1725. X        ss_bgc = XCreateGC (dsp, ss_win, gcm, &gcv);
  1726. X        ss_fs = XQueryFont (dsp, XGContextFromGC (ss_bgc));
  1727. X        ss_cw = ss_fs->max_bounds.width;
  1728. X    }
  1729. X
  1730. X    if (!st_bgc && stereo) {
  1731. X        XGCValues gcv;
  1732. X        unsigned int gcm;
  1733. X        gcm = GCForeground;
  1734. X        get_something (stda_w, XmNbackground, (char *)&gcv.foreground);
  1735. X        st_bgc = XCreateGC (dsp, st_win, gcm, &gcv);
  1736. X        st_fs = XQueryFont (dsp, XGContextFromGC (st_bgc));
  1737. X        st_cw = st_fs->max_bounds.width;
  1738. X    }
  1739. X
  1740. X    XGetGeometry(dsp, ss_win, &root, &x, &y, &ss_nx, &ss_ny, &bw, &d);
  1741. X    if (!ss_pm || ss_nx != ss_last_nx || ss_ny != ss_last_ny) {
  1742. X        if (ss_pm)
  1743. X        XFreePixmap (dsp, ss_pm);
  1744. X        ss_pm = XCreatePixmap (dsp, ss_win, ss_nx, ss_ny, d);
  1745. X        ss_last_nx = ss_nx;
  1746. X        ss_last_ny = ss_ny;
  1747. X    }
  1748. X
  1749. X    if (stereo) {
  1750. X        XGetGeometry(dsp, st_win, &root, &x, &y, &st_nx, &st_ny, &bw, &d);
  1751. X        if (!st_pm || st_nx != st_last_nx || st_ny != st_last_ny) {
  1752. X        if (st_pm)
  1753. X            XFreePixmap (dsp, st_pm);
  1754. X        st_pm = XCreatePixmap (dsp, st_win, st_nx, st_ny, d);
  1755. X        st_last_nx = st_nx;
  1756. X        st_last_ny = st_ny;
  1757. X        }
  1758. X    }
  1759. X
  1760. X    XFillRectangle (dsp, ss_pm, ss_bgc, 0, 0, ss_nx, ss_ny);
  1761. X    if (stereo)
  1762. X        XFillRectangle (dsp, st_pm, st_bgc, 0, 0, st_nx, st_ny);
  1763. X
  1764. X    XmScaleGetValue (hr_w, &sv);
  1765. X    scale = MINMAG * pow (MAXMAG/MINMAG, sv/100.);
  1766. X    XmScaleGetValue (hlat_w, &sv);
  1767. X    elt = degrad(sv);
  1768. X    XmScaleGetValue (hlng_w, &sv);
  1769. X    elg = degrad(sv);
  1770. X
  1771. X    /* display each point and optionally connect with line segments. */
  1772. X    for (dbidx = 0; dbidx < NOBJ; dbidx++) {
  1773. X        XPoint ss_xpoints[CACHE_SZ], *ss_xp = ss_xpoints;
  1774. X        XPoint st_xpoints[CACHE_SZ], *st_xp = st_xpoints;
  1775. X        XSegment ss_xsegments[CACHE_SZ], *ss_xs = ss_xsegments;
  1776. X        XSegment st_xsegments[CACHE_SZ], *st_xs = st_xsegments;
  1777. X        GC gc;
  1778. X        obj_pickgc (db_basic(dbidx), ssda_w, &gc);
  1779. X        if (npoints[dbidx] > 0 && obj_on[dbidx]) {
  1780. X        HLoc *flp, *lp;
  1781. X        flp = points[dbidx];
  1782. X        for (lp = flp; lp < flp + npoints[dbidx]; lp++) {
  1783. X            solar_system(lp, scale, elt, elg, ss_nx, ss_ny);
  1784. X            ss_xp->x = lp->sx;        ss_xp->y = lp->sy;    ss_xp++;
  1785. X            if (bigdots) {
  1786. X            ss_xp->x = lp->sx+1;    ss_xp->y = lp->sy;    ss_xp++;
  1787. X            ss_xp->x = lp->sx;    ss_xp->y = lp->sy+1;    ss_xp++;
  1788. X            ss_xp->x = lp->sx+1;    ss_xp->y = lp->sy+1;    ss_xp++;
  1789. X            }
  1790. X            if (connectdots && lp > flp) {
  1791. X            ss_xs->x1 = lp[-1].sx;
  1792. X            ss_xs->y1 = lp[-1].sy;
  1793. X            ss_xs->x2 = lp->sx;
  1794. X            ss_xs->y2 = lp->sy;
  1795. X            ss_xs++;
  1796. X            }
  1797. X            if (stereo) {
  1798. X            st_xp->x = lp->stx;    st_xp->y = lp->sy;    st_xp++;
  1799. X            if (bigdots) {
  1800. X                st_xp->x = lp->stx+1; st_xp->y = lp->sy;    st_xp++;
  1801. X                st_xp->x = lp->stx;   st_xp->y = lp->sy+1;    st_xp++;
  1802. X                st_xp->x = lp->stx+1; st_xp->y = lp->sy+1;    st_xp++;
  1803. X            }
  1804. X            if (connectdots && lp > flp) {
  1805. X                st_xs->x1 = lp[-1].stx;
  1806. X                st_xs->y1 = lp[-1].sy;
  1807. X                st_xs->x2 = lp->stx;
  1808. X                st_xs->y2 = lp->sy;
  1809. X                st_xs++;
  1810. X            }
  1811. X            }
  1812. X            if (dbidx == SUN) {
  1813. X            XDrawArc (dsp, ss_pm, gc, lp->sx-3, lp->sy-3,
  1814. X                                7, 7, 0, 64*360);
  1815. X            if (stereo)
  1816. X                XDrawArc (dsp, st_pm, gc, lp->stx-3, lp->sy-3,
  1817. X                                7, 7, 0, 64*360);
  1818. X            }
  1819. X            if ((n = ss_xp - ss_xpoints) >= CACHE_HWM) {
  1820. X            XDrawPoints (dsp,ss_pm,gc,ss_xpoints,n,CoordModeOrigin);
  1821. X            ss_xp = ss_xpoints;
  1822. X            }
  1823. X            if ((n = st_xp - st_xpoints) >= CACHE_HWM) {
  1824. X            XDrawPoints (dsp,st_pm,gc,st_xpoints,n,CoordModeOrigin);
  1825. X            st_xp = st_xpoints;
  1826. X            }
  1827. X            if ((n = ss_xs - ss_xsegments) >= CACHE_HWM) {
  1828. X            XDrawSegments (dsp, ss_pm, gc, ss_xsegments, n);
  1829. X            ss_xs = ss_xsegments;
  1830. X            }
  1831. X            if ((n = st_xs - st_xsegments) >= CACHE_HWM) {
  1832. X            XDrawSegments (dsp, st_pm, gc, st_xsegments, n);
  1833. X            st_xs = st_xsegments;
  1834. X            }
  1835. X        }
  1836. X        if (nametags) {
  1837. X            char *name;
  1838. X            if (dbidx == MOON)
  1839. X            name = earthname;
  1840. X            else {
  1841. X            Obj *op = db_basic (dbidx);
  1842. X            name = op->o_name;
  1843. X            }
  1844. X            XDrawString (dsp, ss_pm, gc, flp->sx+ss_cw, flp->sy,
  1845. X                            name, strlen(name));
  1846. X            if (stereo)
  1847. X            XDrawString (dsp, st_pm, gc, flp->stx+st_cw, flp->sy,
  1848. X                            name, strlen(name));
  1849. X        }
  1850. X        }
  1851. X        if ((n = ss_xp - ss_xpoints) > 0) {
  1852. X        XDrawPoints (dsp, ss_pm, gc, ss_xpoints, n, CoordModeOrigin);
  1853. X        ss_xp = ss_xpoints;
  1854. X        }
  1855. X        if ((n = st_xp - st_xpoints) > 0) {
  1856. X        XDrawPoints (dsp, st_pm, gc, st_xpoints, n, CoordModeOrigin);
  1857. X        st_xp = st_xpoints;
  1858. X        }
  1859. X        if ((n = ss_xs - ss_xsegments) > 0) {
  1860. X        XDrawSegments (dsp, ss_pm, gc, ss_xsegments, n);
  1861. X        ss_xs = ss_xsegments;
  1862. X        }
  1863. X        if ((n = st_xs - st_xsegments) > 0) {
  1864. X        XDrawSegments (dsp, st_pm, gc, st_xsegments, n);
  1865. X        st_xs = st_xsegments;
  1866. X        }
  1867. X    }
  1868. X
  1869. X    XCopyArea (dsp, ss_pm, ss_win, ss_bgc, 0, 0, ss_nx, ss_ny, 0, 0);
  1870. X
  1871. X    if (stereo)
  1872. X        XCopyArea (dsp, st_pm, st_win, st_bgc, 0, 0, st_nx, st_ny, 0, 0);
  1873. X}
  1874. X
  1875. X/* compute location of HLoc in window of size [nx,ny] */
  1876. Xstatic void
  1877. Xsolar_system(lp, scale, elt, elg, nx, ny)
  1878. XHLoc *lp;
  1879. Xdouble scale;    /* mag factor */
  1880. Xdouble elt;    /* heliocentric lat of eye, rads */
  1881. Xdouble elg;    /* heliocentric lng of eye, rads */
  1882. Xunsigned nx, ny;/* size of drawing area, in pixels */
  1883. X{
  1884. X    double x, y, z;    /* progressive transform values... */
  1885. X    double xp, yp, zp;
  1886. X    double xpp, ypp, zpp;
  1887. X    double tmp;
  1888. X    double back;
  1889. X
  1890. X    /* initial loc of points[i] */
  1891. X    x = lp->x;
  1892. X    y = lp->y;
  1893. X    z = lp->z;
  1894. X
  1895. X    /* rotate by -elg about z axis to get to xz plane.
  1896. X     * once we rotate up about x to the z axis (next step) that will put
  1897. X     * +x to the right and +y up.
  1898. X     */
  1899. X    tmp = -elg;
  1900. X    xp = x*cos(tmp) - y*sin(tmp);
  1901. X    yp = x*sin(tmp) + y*cos(tmp);
  1902. X    zp = z;
  1903. X
  1904. X    /* rotate by -(PI/2-elt) about x axis to get to z axis.
  1905. X     * +x right, +y up, +z towards, all in AU.
  1906. X     */
  1907. X    tmp = -(PI/2-elt);
  1908. X    xpp = xp;
  1909. X    ypp = yp*cos(tmp) - zp*sin(tmp);
  1910. X    zpp = yp*sin(tmp) + zp*cos(tmp);
  1911. X
  1912. X    /* now, straight ortho projection */
  1913. X    lp->sx = nx/2 + xpp*scale;
  1914. X    lp->sy = ny/2 - ypp*scale;
  1915. X
  1916. X    /* back is y coord, in AU, behind which there is no parallax.
  1917. X     */
  1918. X    back = -20.0/scale;
  1919. X    if (zpp < back)
  1920. X        lp->stx = lp->sx;
  1921. X    else
  1922. X        lp->stx = lp->sx + parallax*(zpp-back)*(scale/50);
  1923. X}
  1924. END_OF_FILE
  1925.   if test 43023 -ne `wc -c <'solsysmenu.c'`; then
  1926.     echo shar: \"'solsysmenu.c'\" unpacked with wrong size!
  1927.   fi
  1928.   # end of 'solsysmenu.c'
  1929. fi
  1930. echo shar: End of archive 12 \(of 21\).
  1931. cp /dev/null ark12isdone
  1932. MISSING=""
  1933. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ; do
  1934.     if test ! -f ark${I}isdone ; then
  1935.     MISSING="${MISSING} ${I}"
  1936.     fi
  1937. done
  1938. if test "${MISSING}" = "" ; then
  1939.     echo You have unpacked all 21 archives.
  1940.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1941.     echo Building ephem.db
  1942.     cat > ephem.db.Z.uu ephem.db.Z.uu.?
  1943.     uudecode ephem.db.Z.uu
  1944.     rm ephem.db.Z.uu ephem.db.Z.uu.?
  1945.     uncompress ephem.db.Z
  1946.     echo Building skyviewmenu.c
  1947.     cat > skyviewmenu.c skyviewmenu.c.?
  1948.     rm skyviewmenu.c.?
  1949.     echo Building smallfm.xbm
  1950.     cat > smallfm.xbm smallfm.xbm.?
  1951.     rm smallfm.xbm.?
  1952. else
  1953.     echo You still must unpack the following archives:
  1954.     echo "        " ${MISSING}
  1955. fi
  1956. exit 0
  1957. exit 0 # Just in case...
  1958. -- 
  1959.   // chris@IMD.Sterling.COM            | Send comp.sources.x submissions to:
  1960. \X/  Amiga - The only way to fly!      |
  1961.  "It's intuitively obvious to the most |    sources-x@imd.sterling.com
  1962.   casual observer..."                  |
  1963.