home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume28 / astrolog / part04 < prev    next >
Encoding:
Text File  |  1992-03-14  |  41.1 KB  |  1,348 lines

  1. Newsgroups: comp.sources.misc
  2. From: pullen@cs.washington.edu (Walter D. Pullen)
  3. Subject:  v28i107:  astrolog - Generation of astrology charts v2.10, Part04/06
  4. Message-ID: <1992Mar16.025040.13304@sparky.imd.sterling.com>
  5. X-Md4-Signature: b824ad407dc05a54268230b44b61650f
  6. Date: Mon, 16 Mar 1992 02:50:40 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: pullen@cs.washington.edu (Walter D. Pullen)
  10. Posting-number: Volume 28, Issue 107
  11. Archive-name: astrolog/part04
  12. Environment: UNIX, VMS
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then unpack
  16. # it by saving it into a file and typing "sh file".  To overwrite existing
  17. # files, type "sh file -c".  You can also feed this as standard input via
  18. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  19. # will see the following message at the end:
  20. #        "End of archive 4 (of 6)."
  21. # Contents:  data.c formulas.c
  22. # Wrapped by pullen@lynx.cs.washington.edu on Sun Mar 15 16:05:15 1992
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. if test -f 'data.c' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'data.c'\"
  26. else
  27. echo shar: Extracting \"'data.c'\" \(23711 characters\)
  28. sed "s/^X//" >'data.c' <<'END_OF_FILE'
  29. X/*
  30. X** Astrolog (Version 2.10) File: data.c
  31. X**
  32. X** IMPORTANT: The planetary calculation routines used in this program
  33. X** have been Copyrighted and the core of this program is basically a
  34. X** conversion to C of the routines created by James Neely as listed in
  35. X** Michael Erlewine's 'Manual of Computer Programming for Astrologers',
  36. X** available from Matrix Software. The copyright gives us permission to
  37. X** use the routines for our own purposes but not to sell them or profit
  38. X** from them in any way.
  39. X**
  40. X** IN ADDITION: the graphics database and chart display routines used in
  41. X** this program are Copyright (C) 1991 by Walter D. Pullen. Permission is
  42. X** granted to freely use and distribute these routines provided one
  43. X** doesn't sell, restrict, or profit from them in any way. Modification
  44. X** is allowed provided these notices remain with any altered or edited
  45. X** versions of the program.
  46. X*/
  47. X
  48. X#include "astrolog.h"
  49. X
  50. X/*
  51. X*******************************************************************************
  52. X** Global variables
  53. X*******************************************************************************
  54. X*/
  55. X
  56. XFILE *data;
  57. Xchar *filename, *filename2;
  58. X
  59. Xint objects = OBJECTS;
  60. Xint aspects = 5;
  61. Xint siderial = FALSE;
  62. Xint heliocentric = FALSE;
  63. Xint todisplay = 0;
  64. Xint housesystem = DEFAULT_SYSTEM;
  65. Xint uranian = FALSE;
  66. Xint multiplyfactor = 1;
  67. Xint onasc = 0;
  68. Xint flip = FALSE;
  69. Xint decan = FALSE;
  70. Xint progress = FALSE;
  71. Xint autom = FALSE;
  72. Xint relation = FALSE;
  73. Xint operation = 0;
  74. Xdouble defzone = DEFAULT_ZONE;
  75. Xdouble deflong = DEFAULT_LONG;
  76. Xdouble deflat  = DEFAULT_LAT;
  77. Xdouble modulus = 360.0;
  78. X
  79. Xdouble SD = 0.0, Mon, Day, Yea, Tim, Zon, Lon, Lat, Mon2, Yea2, Delta = 0.0,
  80. X  M = 1.0, D = 4.0, Y = 1992.0, F = 23.11, X = 0.0, L5 = 0.0, LA = 51.30,
  81. X  JD, Jdp;
  82. X
  83. Xdouble planet[OBJECTS+1], planetalt[OBJECTS+1], house[SIGNS+1], ret[OBJECTS+1];
  84. Xint inhouse[OBJECTS+1], grid[OBJECTS+1][OBJECTS+1],
  85. X  gridname[OBJECTS+1][OBJECTS+1], wheel[SIGNS][WHEELROWS],
  86. X  inhouse1[OBJECTS+1], inhouse2[OBJECTS+1];
  87. Xint ignore[OBJECTS+5] =
  88. X#ifdef ASTEROIDS
  89. X  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  90. X#else
  91. X  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0};
  92. X#endif
  93. X
  94. X/*
  95. X*******************************************************************************
  96. X** Table data
  97. X*******************************************************************************
  98. X*/
  99. X
  100. Xchar *signname[]
  101. X  = {"???", "Aries", "Taurus", "Gemini", "Cancer",
  102. X       "Leo", "Virgo", "Libra", "Scorpio",
  103. X       "Sagittarius", "Capricorn", "Aquarius", "Pisces"};
  104. X
  105. Xchar signabbrev[][3]
  106. X  = {"??",
  107. X       "Ar", "Ta", "Ge", "Cn", "Le", "Vi", "Li", "Sc", "Sg", "Cp", "Aq", "Pi"};
  108. X
  109. Xchar objectname[][10]
  110. X  = {"???", "Sun", "Moon", "Mercury", "Venus", "Mars", "Jupiter", "Saturn",
  111. X       "Uranus", "Neptune", "Pluto", "Chiron", "Ceres", "Pallas", "Juno",
  112. X       "Vesta", "Node", "Fortune", "Midheaven", "Ascendant", "Vertex",
  113. X       "11th Cusp", "12th Cusp", "2nd Cusp", "3rd Cusp"};
  114. X
  115. Xchar uranianname[][10]
  116. X  = {"???", "Cupido", "Hades", "Zeus", "Kronos",
  117. X       "Apollo", "Admetos", "Vulkanus", "Poseidon"};
  118. X
  119. Xchar *systemname[]
  120. X  = {"Placidus", "Koch", "Equal", "Campanus", "Meridian",
  121. X       "Regiomontanus", "Porphyry", "Morinus", "Topocentric", "Null"};
  122. X
  123. Xchar *aspectname[]
  124. X  = {"???", "Conjunct", "Opposite", "Square", "Trine", "Sextile",
  125. X       "Inconjunct", "Semisextile", "Semisquare", "Sesquiquadrate",
  126. X       "Quintile", "Biquintile",
  127. X       "Semiquintile", "Septile", "Novile",
  128. X       "Binovile", "Biseptile", "Triseptile", "Quatronovile"};
  129. X
  130. Xchar *aspectglyph[]
  131. X = {"???", "Circle with extending line", "Two circles joined by line",
  132. X      "Quadrilateral", "Triangle", "Six pointed asterisk", "'K' rotated right",
  133. X      "'K' rotated left", "Acute angle", "Square with extending lines",
  134. X      "Letter 'Q'", "'+' over '-'", "'-' over '+'", "Number '7'", "Number '9'",
  135. X      "'9' under Roman 'II'", "'7' under Roman 'II'", "'7' under Roman 'III'",
  136. X      "'9' under Roman 'IV'"};
  137. X
  138. Xchar aspectabbrev[][4]
  139. X  = {"   ", "Con", "Opp", "Squ", "Tri", "Sex",
  140. X       "Inc", "SSx", "SSq", "Ses", "Qui", "BQn",
  141. X       "SQn", "Sep", "Nov", "BNv", "BSp", "TSp", "QNv"};
  142. X
  143. Xdouble aspectangle[ASPECTS+1]
  144. X  = {0, 0.0, 180.0, 90.0, 120.0, 60.0, 150.0, 30.0, 45.0, 135.0, 72.0, 144.0,
  145. X       36.0, 360.0/7.0, 40.0, 80.0, 720.0/7.0, 1080.0/7.0, 160.0};
  146. X
  147. Xdouble aspectorb[ASPECTS+1]
  148. X  = {0, 7.0, 7.0, 7.0, 7.0, 6.0, 3.0, 3.0, 3.0, 3.0, 2.0, 2.0,
  149. X       1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  150. X
  151. Xdouble planetorbmax[OBJECTS+1]
  152. X  = {0, 360.0, 360.0, 360.0, 360.0, 360.0, 360.0, 360.0, 360.0, 360.0, 360.0,
  153. X       360.0, 360.0, 360.0, 360.0, 360.0, 2.0, 2.0, 360.0, 360.0, 2.0};
  154. X
  155. Xint ruler1[OBJECTS+1]
  156. X  = {0, 5, 4,  3,  7,  1,  9, 10, 11, 12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  157. Xint ruler2[OBJECTS+1]
  158. X  = {0, 0, 0,  6,  2,  8, 12, 11,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  159. Xint exalt[OBJECTS+1]
  160. X  = {0, 1, 2, 11, 12, 10,  4,  7,  8,  9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  161. X
  162. Xchar *element[] = {"Fire", "Earth", "Air", "Water"};
  163. Xchar *mode[] = {"Cardinal", "Fixed", "Mutuable"};
  164. X
  165. Xchar post[][3]
  166. X  = {"",
  167. X       "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th"};
  168. X
  169. Xchar *monthname[]
  170. X  = {"?", "January", "February", "March", "April", "May", "June", "July",
  171. X       "August", "September", "October", "November", "December"};
  172. X
  173. Xint errorcount[PLANETS+1] = {0, 0, 0, 0, 0, 0, 11, 5, 4, 4, 4};
  174. X
  175. Xdouble planetdata[] = {
  176. X358.4758,35999.0498,-.0002,.01675,-.4E-4,0,1,101.2208,1.7192,.00045,0,0,0,0,0,
  177. X0, /* sun */
  178. X102.2794,149472.515,0,.205614,.2E-4,0,.3871,28.7538,.3703,.0001,47.1459,1.1852,
  179. X.0002,7.009,.00186,0, /* mercury */
  180. X212.6032,58517.8039,.0013,.00682,-.5E-4,0,.7233,54.3842,.5082,-.14E-2,75.7796,
  181. X.8999,.4E-3,3.3936,.1E-2,0, /* venus */
  182. X319.5294,19139.8585,.2E-3,.09331,.9E-4,0,1.5237,285.4318,1.0698,.1E-3,48.7864,
  183. X.77099,0,1.8503,-.7E-3,0, /* mars */
  184. X225.4928,3033.6879,0,.04838,-.2E-4,0,5.2029,273.393,1.3383,0,99.4198,1.0583,0,
  185. X1.3097,-.52E-2,0, /* jupiter */
  186. X-.001,-.0005,.0045,.0051,581.7,-9.7,-.0005,2510.7,-12.5,-.0026,1313.7,-61.4,
  187. X.0013,2370.79,-24.6,-.0013,3599.3,37.7,-.001,2574.7,31.4,-.00096,6708.2,-114.5,
  188. X-.0006,5499.4,-74.97,-.0013,1419,54.2,.0006,6339.3,-109,.0007,4824.5,-50.9,
  189. X.0020,-.0134,.0127,-.0023,676.2,.9,.00045,2361.4,174.9,.0015,1427.5,-188.8,
  190. X.0006,2110.1,153.6,.0014,3606.8,-57.7,-.0017,2540.2,121.7,-.00099,6704.8,-22.3,
  191. X-.0006,5480.2,24.5,.00096,1651.3,-118.3,.0006,6310.8,-4.8,.0007,4826.6,
  192. X36.2, /* jupiter error */
  193. X174.2153,1223.50796,0,.05423,-.2E-3,0,9.5525,338.9117,-.3167,0,112.8261,.8259,0
  194. X,2.4908,-.0047,0, /* saturn */
  195. X-.0009,.0037,0,.0134,1238.9,-16.4,-.00426,3040.9,-25.2,.0064,1835.3,36.1,
  196. X-.0153,610.8,-44.2,-.0015,2480.5,-69.4,-.0014,.0026,0,.0111,1242.2,78.3,-.0045,
  197. X3034.96,62.8,-.0066,1829.2,-51.5,-.0078,640.6,24.2,-.0016,2363.4,-141.4,.0006,
  198. X-.0002,0,-.0005,1251.1,43.7,.0005,622.8,13.7,.0003,1824.7,-71.1,.0001,2997.1,
  199. X78.2, /* saturn error */
  200. X74.1757,427.2742,0,.04682,.00042,0,19.2215,95.6863,2.0508,0,73.5222,.5242,0,
  201. X.7726,.1E-3,0, /* uranus */
  202. X-.0021,-.0159,0,.0299,422.3,-17.7,-.0049,3035.1,-31.3,-.0038,945.3,60.1,-.0023,
  203. X1227,-4.99,.0134,-.02186,0,.0317,404.3,81.9,-.00495,3037.9,57.3,.004,993.5,
  204. X-54.4,-.0018,1249.4,79.2,-.0003,.0005,0,.0005,352.5,-54.99,.0001,3027.5,54.2,
  205. X-.0001,1150.3,-88, /* uranus error */
  206. X30.13294,240.45516,0,.00913,-.00127,0,30.11375,284.1683,-21.6329,0,130.68415,
  207. X1.1005,0,1.7794,-.0098,0, /* neptune */
  208. X.1832,-.6718,.2726,-.1923,175.7,31.8,.0122,542.1,189.6,.0027,1219.4,178.1,
  209. X-.00496,3035.6,-31.3,-.1122,.166,-.0544,-.00496,3035.3,58.7,.0961,177.1,-68.8,
  210. X-.0073,630.9,51,-.0025,1236.6,78,.00196,-.0119,.0111,.0001,3049.3,44.2,-.0002,
  211. X893.9,48.5,.00007,1416.5,-25.2, /* neptune error */
  212. X229.781,145.1781,0,.24797,.002898,0,39.539,113.5366,.2086,0,108.944,1.3739,0,
  213. X17.1514,-.0161,0, /* pluto */
  214. X-.0426,.073,-.029,.0371,372,-331.3,-.0049,3049.6,-39.2,-.0108,566.2,318.3,
  215. X.0003,1746.5,-238.3,-.0603,.5002,-.6126,.049,273.97,89.97,-.0049,3030.6,61.3,
  216. X.0027,1075.3,-28.1,-.0007,1402.3,20.3,.0145,-.0928,.1195,.0117,302.6,-77.3,
  217. X.00198,528.1,48.6,-.0002,1000.4,-46.1, /* pluto error */
  218. X104.5959,138.5369,0,0,0,0,40.99837, 0,0,0,0,0,0,0,0,0, /* cupido */
  219. X337.4517,101.2176,0,0,0,0,50.667443,0,0,0,0,0,0,0,0,0, /* hades */
  220. X104.0904,80.4057, 0,0,0,0,59.214362,0,0,0,0,0,0,0,0,0, /* zeus */
  221. X17.7346, 70.3863, 0,0,0,0,64.816896,0,0,0,0,0,0,0,0,0, /* kronos */
  222. X138.0354,62.5,    0,0,0,0,70.361652,0,0,0,0,0,0,0,0,0, /* apollo */
  223. X-8.678,  58.3468, 0,0,0,0,73.736476,0,0,0,0,0,0,0,0,0, /* admetos */
  224. X55.9826, 54.2986, 0,0,0,0,77.445895,0,0,0,0,0,0,0,0,0, /* vulkanus */
  225. X165.3595,48.6486, 0,0,0,0,83.493733,0,0,0,0,0,0,0,0,0, /* poseidon */
  226. X34.6127752,713.5756219,0,.382270369,-.004694073,0,13.66975144,337.407213,
  227. X2.163306646,0,208.1482658,1.247724355,0,6.911179715,.011236955,0, /* chiron */
  228. X108.2925,7820.36556,0,.0794314,0,0,2.7672273,71.0794444,0,0,80.23555556,
  229. X1.3960111,0,10.59694444,0,0, /* ceres */
  230. X106.6641667,7806.531667,0,.2347096,0,0,2.7704955,310.166111,0,0,172.497222,
  231. X1.39601111,0,34.81416667,0,0, /* pallas athena */
  232. X267.685,8256.081111,0,.2562318,0,0,2.6689897,245.3752778,0,0,170.137777,
  233. X1.396011111,.0003083333,13.01694444,0,0, /* juno */
  234. X138.7733333,9924.931111,0,.0902807,0,0,2.360723,149.6386111,0,0,103.2197222,
  235. X1.396011111,.000308333,7.139444444,0,0 /* vesta */
  236. X};
  237. X
  238. Xchar *signdraw[] = {"",
  239. X  "ND4HU2HLGDFBR6EUHLGD2G", "BL3D2F2R2E2U2H2NE2L2NH2G2",
  240. X  "BLU3LHBR7GLNL3D6NL3RFBL7ERU3", "BGNDHLGDFRNEFR2EREBU3NHDGLHUENRHL2GLG",
  241. X  "BF4H2UEU2H2L2G2D2FDGH", "BF4HNGNHEU5GHND5HGND6HGND6H",
  242. X  "BGNL3HUER2FDGR3BD2L8", "BH4FND6EFND6EFD6FREU",
  243. X  "BG4E3NH2NF2E5NL2D2", "BH3NLNUD3FND2EU2ENF2UFERFDGLF2D2G",
  244. X  "BG4EUEDFDEUEDFDEUEBU5GDGUHUGDGUHUGDG", "NL4NR4BH4F2D4G2BR8H2U4E2"};
  245. X
  246. Xchar *objectdraw[] = {"",
  247. X  "U0BH3DGD2FDRFR2ERUEU2HULHL2GL", /* Sun */
  248. X  "BG3E2U2H2ER2FRDFD2GDLGL2H", /* Moon */
  249. X  "BD4UNL2NR2U2REU2HNEL2NHGD2FR", /* Mercury */
  250. X  "LHU2ER2FD2GLD2NL2NR2D2", /* Venus */
  251. X  "HLG2DF2RE2UHE4ND2L2", /* Mars */
  252. X  "BH3RFDGDGDR5NDNR2U6E", /* Jupiter */
  253. X  "BH3R2NUNR2D3ND3RERFDGDF", /* Saturn */
  254. X  "BD4NEHURBFULU3NUNR2L2NU2DGBU5NFBR6GD3F", /* Uranus */
  255. X  "BD4U2NL2NR2U5NUNRLBL2NUNLDF2R2E2UNRU", /* Neptune */
  256. X  "D2NL2NR2D2BU8GFEHBL3D2F2R2E2U2", /* Pluto */
  257. X  "BG2LDFEULU3NURFRFBU5GLGLU2", /* Chiron */
  258. X  "BD4UNL3NR3U2RE2UH2L2G", /* Ceres */
  259. X  "BD4UNL3NR3UE2HUHNUGDGF2", /* Pallas Athena */
  260. X  "BD4UNL2NR2U4NL4NR4NE3NF3NG3NH3U3", /* Juno */
  261. X  "BU4DBG3NLFDF2E2UERBH2GDGHUH", /* Vesta */
  262. X  "BG2LGFEU2HU2E2R2F2D2GD2FEHL", /* North Node */
  263. X  "NE2NF2NG2H2GD2F2R2E2U2H2L2G", /* Part of Fortune */
  264. X  "BG4U8F4E4D8", /* Midheaven */
  265. X  "NR4L4ND4UE3R2F3D5", /* Ascendant */
  266. X  "U2NHNEBD4NGNFU2L2NHNGR4NEF" /* Vertex */};
  267. X
  268. Xchar *housedraw[] = {"",
  269. X  "BD2NLNRU4L", "BHBUR2D2L2D2R2", "BHBUR2D2NL2D2L2",
  270. X  "BHBUD2R2NU2D2", "BEBUL2D2R2D2L2", "NLRD2L2U4R2",
  271. X  "BHBUR2DG2D", "NRLU2R2D4L2U2", "NRLU2R2D4L2",
  272. X  "BH2NLD4NLRBR2U4R2D4L2", "BH2NLD4NLRBR2RNRU4L", "BH2NLD4NLRBR2NR2U2R2U2L2"};
  273. X
  274. Xchar *aspectdraw[] = {"",
  275. X  "HLG2DF2RE2UHE4", "BGL2GDFREU2E2U2ERFDGL2", "BH4R8D8L8U8",
  276. X  "BU4GDGDGDGDR8UHUHUHUH", "BLNH3NG3RNU4ND4RNE3F3",
  277. X  "BG4EUEUEUEUNL4NR4BDFDFDFDF", "BH4FDFDFDFDNL4NR4BUEUEUEUE", "BE4G8R8",
  278. X  "BD2L3U6R6D6L3D2R2", "F4BU3U2HULHL2GLDGD2FDRFR2E3", "BD2U3NR3NU3L3BD5R6",
  279. X  "BU2D3NR3ND3L3BU5R6", "BH3R6G6", "BR3L5HUER4FD4GL4H",
  280. X  "BF2UHL2GFR3DGL3BE6LNLU2NRLBL4LNLD2NLR", "BL2R4G4BE6LNLU2NRLBL4LNLD2NLR",
  281. X  "BL2R4G4BE6L7NLU2NLR3ND2R3ND2R", "BF2UHL2GFR3DGL3BU6LNLU2NLRBR2F2E2"};
  282. X
  283. Xchar *worlddata[] = {
  284. X"-031+70",
  285. X"LLRRHLLLLDULLGLLLDULGLLLGLRREDEGGLGGLGLGLLGDRLDRLFFRRERFDFRRREUEEHLUERERUERRF\
  286. XGLGLDDFRRRRREFRLGLLLLLGEFDLHGDDLGHLGLLHGLHURDLRRELLLRHUGLDFDLGLLFHGGLGLLLDLLLD\
  287. XRRFFDDGLLLLLLGDFGDDRRFRERREEUEREUEFRRERRFFFRFRDDLLLLRFRUREURULHLHHHEF",
  288. X"EUROPE",
  289. X"+006+50", "RRERRRRUELLUHHLLREULLELLDGHDUFDEGRDRRLFDLLRGRRGGL", "ENGLAND",
  290. X"+008+55", "GLFGRRREUULL", "IRELAND",
  291. X"+023+64", "RRFRERRREHLLLLLGHLLRFLLRFL", "ICELAND",
  292. X"-011+80", "DDURFRERLGRRLLFRRREEFRRRLHGELLLHRRFRRRRERLLLLLLLLLLLDHGULLL",
  293. X"SVALBARD",
  294. X"-014+45",
  295. X"FRFRFDDFRDRRLLFRURFHHUERRRRRHUUEERRRRGRDERRLHLRRERRGGRFRFFGLLLLHLLLLGLLDLLLFG\
  296. XRFFRERFRERDDDGDGLLDFFEUDDFFDFFDDFFFDFDDDRRERRERRRUERRERURUEEHHLHUGGLLLUUGUHUHU\
  297. XRRFFRFRRRDRRFRRRRRRRF",
  298. X"MIDDLE EAST",
  299. X"-009+41", "DDRUULEUGD", "SARDINIA",
  300. X"-024+35", "RRLL", "CRETE",
  301. X"-032+35", "RRLL", "CYPRUS",
  302. X"-052+37", "LLHUURHUHUHERERRRDDLLLFFDDURFLLDFDDL", "CASPAIN SEA",
  303. X"-060+44", "LLUEERDFLDL", "ARAL SEA",
  304. X"-068+24",
  305. X"FRGFRREDDDDDFDFDDFDDFERUEUUUUEEEEEREURRREFDFRDDDDRREFDDFDDGDDRFDDFDFFRUHUUHHH\
  306. XULUEUUURDRFDFRDEEREUUUHHHUUEERRDDEURRERREREEEUEULLREUHUHLEERRHLGLULUREERDLDRER\
  307. XRFGRFDGRRREUHHUREUE",
  308. X"ASIA S",
  309. X"-140+36",
  310. X"DEUUEUHURREREEGLLHHDDGLDRGDDGGLGLLLGGLDLRDFEUHRRGEERDLLRGLRERRERRE",
  311. X"JAPAN",
  312. X"-121+25", "GDFUEUL", "TAIWAN",
  313. X"-080+10", "DDDDREUHH", "SRI LANKA",
  314. X"-121+18", "LDDDRDDRHRRFFDDDLLEHDULRHDFDDGERDDREUUULUUHHLHEUUL", "PHILIPPINES",
  315. X"-131+43",
  316. X"EFREEREEEUUUEUHLLUDLULEERERERRRRRRERRFLRRRRLUERERRRDRERURRGDLGLGLGLGGDDFDFEUR\
  317. XRUERUURULEEREDERRFRERERRRERRHLHLRRRREURDRRFRFRUURRHLLLDHHLLHLLHLLLLLLLDLLHRLLL\
  318. XLLLLGHULLLLLLLLLLULLLGL",
  319. X"SIBERIA",
  320. X"-145+71",
  321. X"RELLRHLLLLGDHGHLLLLGLLHUHLLLLLDLLLLHLLLLLDULUDLGLLLLRRERERRRELHLLLLLLLELLLLGD\
  322. XLLLLLUDLLLLLGLLLDLLLLLLLDFRDDHELLLLLLDRRLLHUDLGFGRRRRFRLHLLDGLGLLHRRREUHUUULLG\
  323. XGLDRFGHLLLHLLLLRFGHLGLLLULGLLLGLLHRHLDDDLLLLDLLLFLLHUHLRRFRRRREHLLHLLLHLL",
  324. X"RUSSIA",
  325. X"-143+54", "GDDDDDDDEDUUURUUHUU", "SAKHALIN",
  326. X"-180+72", "GRRRRULLL", "WRANGEL I.",
  327. X"-137+76", "DRRRRRRRELLLLLLLL", "SIBERIAN I.",
  328. X"-091+80", "FERDRRRRRRULLLLLRRULLLLGL", "SEVERNAYA",
  329. X"-101+79", "GRRRRELLLL", "ZEMLYA",
  330. X"-068+77", "LLGLLLLLLGLLGGLGLRFRRRRLHERERERRRERRRREL", "NOVAYA",
  331. X"+123+49",
  332. X"FGULLFDDDGFDDDFFDFRFRFDFFFDLFFRDFFEHHHHUHHUFRDFFFRDFFFDFGFRFRFRRFRRRRFFRRFRFF\
  333. XDRFFRFEUUGLHHUUEUHLLLLLEUUEULLLGDLLGLHHUHUUUEHEERERRFRRHRREFRRFDFDFEUUHUUUEERE\
  334. XRUUUHFDEUHFEURRRELUERRE",
  335. X"NORTH AMERICA S",
  336. X"+113+42", "FH", "SALT LAKE",
  337. X"+156+20", "DRULHLHL", "HAWAII",
  338. X"+085+22", "RERFRRFRGRRRRHLHLHLLLLLG", "CUBA",
  339. X"+070+18", "RRHHLLLFLLLFRRRRRR", "HAITI",
  340. X"+078+18", "RRHLLF", "JAMAICA",
  341. X"+066+18", "ELLDR", "PUERTO RICO",
  342. X"+078+24", "UD", "NASSAU",
  343. X"+067+45",
  344. X"REFLGDERERREHDLLLHUELLLGLGLREEERRRRRRREERRGGDGRRRFEFUUHLLLEUUHHGLRELLHHUHHHDG\
  345. XLGHHULLHLLLLLDFGFDDGLLFDDGHHUULLLLHLLHLLLUHUUEREEREERRRREUUHLLLDDGHULLLHLUHLGD\
  346. XRFGGULLLLLLLLLHLLGFLHLLLLLRHLLLLLHLLLLLLHGLLLLGUGLLLHLL",
  347. X"CANADA",
  348. X"+088+49",
  349. X"LGLGRRRRRRRFLLLGRGDDREUURUFRGRFGFERERREEREERLGGLGLLLGRLLGLEUERHLLLHULHL",
  350. X"GREAT LAKES",
  351. X"+117+61", "REHRFRRERGLGLLLL", "SLAVE LAKE",
  352. X"+125+66", "RRERRRGREDLFHGLLLERLLLL", "BEAR LAKE",
  353. X"+097+50", "UULHURFDFG", "LAKE WINNIPEG",
  354. X"+090+72",
  355. X"FRRLLFRRRRRRRRRRFRRGLLGRREEFRFLGLFLLLLFRERFRFRRFRRHLHFRRRUHLHRRFRURELLHLLLHRR\
  356. XHLHLHGHLHLLGLLEHFRRRHLLLLLLGLDFHLUELLGG",
  357. X"BAFFIN I.",
  358. X"+125+72",
  359. X"RFRREERRRLLGFFRRRRRLLLLLFRRRRRRRREFRRRRHRRLHLHHLRRULGLFLHLDLLULLLLHLLLLLLLDG",
  360. X"VICTORIA I.",
  361. X"+141+70",
  362. X"LLLLLLLLHGLHLLLHGLLGLLGLLDRRFRRDLLLULGLLFRRRRRRDLGLLGFDRRRDRRRRRGGGLLGLLGGLLR\
  363. XRERERRRERREERRELEERRRLLGDRERRURRFRRRRRFRRFUDRUDDHFDURDURLURDDLFRULURDHFFRGFEGR\
  364. XFFRFRFLHLHLFFRFE",
  365. X"ALASKA",
  366. X"+045+60",
  367. X"REUEREUERRRRERERRRERRRRERLLLLLLHRRRGERHFRRRRHLUDLLHLRERFRERLEUHRRHLEERLLURRRR\
  368. XRRRRELLLLLLLLLLGLLLRERHGLRELLLLLLLELLLLLLLLLLGLLLLLLGLLLLLLGLULLLLLLLFRLLLLLGL\
  369. XRRRGLLLLLLLGRRRRRRRGLLLLRRFRRRRRRRRRRFDFDLFREFRDLLLDERRFGLLGFFDRFFFRRRF",
  370. X"GREENLAND",
  371. X"+080+10",
  372. X"DRFDFDDGGGDDGRDGDDFFDFDFFDFFRFFFDDDDDDGDDDDGDDDDGDGFGDDDEUDDDGUDDLDRGDDDFDFRF\
  373. XRRFERRLHLUHUURUEELHEREURULURREURREREUHUUDFRREEEEEUEUUEERERRREUEUEUUUUUEEEEUUUH\
  374. XLHLHLLLLHLHLGEHLGEUHUUHLHLLLHHLHULEDLLELLGHLLHLGDDHUELLGLGDGHHL",
  375. X"SOUTH AMERICA",
  376. X"+060-51", "LDRRELL", "FALKLAND ISLANDS",
  377. X"+092+00", "FUL", "GALAPAGOS I.",
  378. X"-032+32",
  379. X"LLGLHLLLLHLGDGHLLHHLLHLEUULLLLLLLLLGLGLLLLHDGLGDGDGGLDGGGDGDFDDDDGDDFFFFDFRFF\
  380. XRRRRRRRRERERRFFRRFFDDDGDFFFDFDDDFDGDGDDDFDFDFDDDFDFDFDDFFERRRRREEEEEEEUUEREUUH\
  381. XUEEEREEUUUUHUUUHUEUEEEEEREEUEUEEUUULLLLGLLHUHHLHUHHUUHHUUHUHHUU",
  382. X"AFRICA",
  383. X"-049-12", "DGGGLGDDDDGDDFFREUEUEUUUEUUUUH", "MADAGASCAR",
  384. X"-032+00", "DDDREUELLL", "LAKE VICTORIA",
  385. X"-014+14", "LRFLU", "LAKE CHAD",
  386. X"-124-16",
  387. X"LGDGGLGLLGLDDDGFDDFDFDGFRRRERRRRURERRRRRRRFFFEEDDRFDFRFREFRERRUUEUEEUUUUUUUHH\
  388. XHHHHHUUHHHUULDDDDGDGHLHLHEUELLLHLFLLULDRGDDLLHLGG",
  389. X"AUSTRALIA",
  390. X"-173-35", "FFDGFDREURULHHHL", "NEW ZEALAND N",
  391. X"-174-41", "LLDGLGLGGRFREEUREEU", "NEW ZEALAND S",
  392. X"-145-41", "DFRRUUUDLLL", "TASMANIA",
  393. X"-178-17", "GRRURUGDH", "FIJI",
  394. X"-130+00", "FRFRLGFEFRFRFDGRRFRRUERFFFRRRLHHHHRHLHHLHLLHGGLHUHLGH",
  395. X"NEW GUINEA",
  396. X"-115-04", "RUUEEURHUUEHHGGGGLLDDHLDDFDDRRDERF", "BORNEO",
  397. X"-095+06", "DFFFFFFDFFFFRUUUHFRHLHLUHHHHHLLH", "SUMATRA",
  398. X"-106-06", "GRFRRRRRRFRRHLHLLLLLHL", "JAVA",
  399. X"-120+00", "DGDDRDFHUEDFRHUHREFHLGHURRRRELLLLG", "CELEBES",
  400. X"+000-70",
  401. X"ULDLLLLLLLLGLLGLLLGLLGLLLLGLGLLGLLLLGLLLLLHLGLLLLLHLLLLLHLLLLHLLUERLEUUUUUUEE\
  402. XRRRULLGLLLLGLGGLLLDRUDRDLGHLLGLLFGRRFLLLLLLLDHLLLLHLLLLLGLLLLHLLLLLLLGRFDLLLUL\
  403. XLLGHLLLLLLLLLLHGHLLGLLLLLLLGLLLLLLLLLLLGLLLGLLLLLLLLGLLLLLLLLLLLLLLLLLLLLL",
  404. X"ANTARCTICA W",
  405. X"+180-78",
  406. X"LLLLLLLHLLGHLLGHLUEERRERREHLLLLHLLLLLLHLLLLLLLLLLLHLHLLLLLHLLULDLLLLLDLLHLLLL\
  407. XGHFLLLLLHLLLLLLGLHLLHLGLLLLHLGLLGLLLULLLGLLHDFLLLGLGLLLELLLLHLLLLLLLLLLHLLLHLL\
  408. XLLGGHGHGLLLGLDLLLLHLLGHGLLLLLLLLLLLLLLHLGLLLLLLLLLLLLLL",
  409. X"ANTARCTICA E",
  410. X"END", "", ""};
  411. X
  412. X
  413. X/*
  414. X*******************************************************************************
  415. X** General and numeric routines
  416. X*******************************************************************************
  417. X*/
  418. X
  419. Xvoid swapint(i1, i2)
  420. Xint *i1, *i2;
  421. X{
  422. X  int temp;
  423. X  temp = *i1; *i1 = *i2; *i2 = temp;
  424. X}
  425. X
  426. Xvoid swapdoub(f1, f2)
  427. Xdouble *f1, *f2;
  428. X{
  429. X  double temp;
  430. X  temp = *f1; *f1 = *f2; *f2 = temp;
  431. X}
  432. X
  433. Xint stringlen(line)
  434. Xchar *line;
  435. X{
  436. X  int i;
  437. X  for (i = 0; line[i] != 0; i++)
  438. X    ;
  439. X  return i;
  440. X}
  441. X
  442. Xdouble dabs(A)
  443. Xdouble A;
  444. X{
  445. X  return A < 0.0 ? -A : A;
  446. X}
  447. X
  448. Xdouble sgn(A)
  449. Xdouble A;
  450. X{
  451. X  return A < 0.0 ? -1.0 : (A > 0.0 ? 1.0 : 0.0);
  452. X}
  453. X
  454. Xdouble dectodeg(A)
  455. Xdouble A;
  456. X{
  457. X  return sgn(A)*(floor(dabs(A))+(dabs(A)-floor(dabs(A)))*100.0/60.0);
  458. X}
  459. X
  460. Xdouble mod(A)
  461. Xdouble A;
  462. X{
  463. X  return ((A)-(floor((A)/modulus)*modulus));
  464. X}
  465. X
  466. Xint mod12(A)
  467. Xint A;
  468. X{
  469. X  return A > SIGNS ? A-SIGNS : (A < 1 ? A+SIGNS : A);
  470. X}
  471. X
  472. Xdouble mindistance(deg1, deg2)
  473. Xdouble deg1, deg2;
  474. X{
  475. X  double i;
  476. X  i = dabs(deg1-deg2);
  477. X  return i < 180 ? i : DEGREES - i;
  478. X}
  479. X
  480. Xdouble midpoint(deg1, deg2)
  481. Xdouble deg1, deg2;
  482. X{
  483. X  double mid;
  484. X  mid = (deg1+deg2)/2.0;
  485. X  return mindistance(deg1, mid) < 90 ? mid : mod(mid+180);
  486. X}
  487. X
  488. Xchar dignify(body, sign)
  489. Xint body, sign;
  490. X{
  491. X  if (body > 10)
  492. X    return ' ';
  493. X  if (ruler1[body] == sign || ruler2[body] == sign)
  494. X    return 'R';
  495. X  if (ruler1[body] == mod12(sign+6) || ruler2[body] == mod12(sign+6))
  496. X    return 'F';
  497. X  if (exalt[body] == sign)
  498. X    return 'e';
  499. X  if (exalt[body] == mod12(sign+6))
  500. X    return 'd';
  501. X  return '-';
  502. X}
  503. X
  504. Xint dayinmonth(month, year)
  505. Xint month, year;
  506. X{
  507. X  return (month == 9 || month == 4 || month == 6 || month == 11 ? 30 :
  508. X      (month != 2 ? 31 :
  509. X       (year/4*4==year && (year/100*100!=year || year/400*400==year) ?
  510. X        29 : 28)));
  511. X}
  512. X
  513. X
  514. X/*
  515. X*******************************************************************************
  516. X** IO routines
  517. X*******************************************************************************
  518. X*/
  519. X
  520. Xdouble readplanetdata(reset)
  521. Xint reset;
  522. X{
  523. X  static int datapointer = 0;
  524. X  if (!reset)
  525. X    return planetdata[datapointer++];
  526. X  return (double) (datapointer = 0);
  527. X}
  528. X
  529. Xint readworlddata(nam, loc, lin)
  530. Xchar **nam, **loc, **lin;
  531. X{
  532. X  static int datapointer = 0;
  533. X  *loc = worlddata[datapointer++];
  534. X  *lin = worlddata[datapointer++];
  535. X  *nam = worlddata[datapointer++];
  536. X  if (*loc[0] != 'E')
  537. X    return 1;
  538. X  datapointer = 0;
  539. X  return 0;
  540. X}
  541. X
  542. X/*printsecond(deg)
  543. Xdouble deg;
  544. X{
  545. X  int sign, d, m, s;
  546. X  deg = mod(deg + 1.0/60.0/60.0/2.0);
  547. X  sign = (int) (deg / 30.0);
  548. X  d = (int) deg - sign*30;
  549. X  m = (int) ((deg - floor(deg))*60.0);
  550. X  s = (int) (((deg - floor(deg))*60 - (double) m)*60.0);
  551. X  printf("%s%d%c%c%c%s%d'%s%d\"",
  552. X     d < 10 ? "0" : "", d, SIGNAM(sign + 1),
  553. X     m < 10 ? "0" : "", m, s < 10 ? "0" : "", s);
  554. X}
  555. X
  556. Xprinttenth(deg)
  557. Xdouble deg;
  558. X{
  559. X  int sign, d, m;
  560. X  deg = mod(deg + 1.0/60.0/10.0/2.0);
  561. X  sign = (int) (deg / 30.0);
  562. X  d = (int) deg - sign*30;
  563. X  m = (int) ((deg - floor(deg))*600.0);
  564. X  printf("%s%d%c%c%c%s%.1f",
  565. X     d < 10 ? "0" : "", d, SIGNAM(sign + 1),
  566. X     m < 100 ? "0" : "", (double) m / 10.0);
  567. X}*/
  568. X
  569. Xprintminute(deg)
  570. Xdouble deg;
  571. X{
  572. X  int sign, d, m;
  573. X  deg = mod(deg + 1.0/60.0/2.0);
  574. X  sign = (int) (deg / 30.0);
  575. X  d = (int) deg - sign*30;
  576. X  m = (int) ((deg - floor(deg))*60.0);
  577. X  printf("%s%d%c%c%c%s%d",
  578. X     d < 10 ? "0" : "", d, SIGNAM(sign + 1), m < 10 ? "0" : "", m);
  579. X}
  580. X
  581. Xprintaltitude(deg)
  582. Xdouble deg;
  583. X{
  584. X  int d, m;
  585. X  if (deg < -90)
  586. X    deg += DEGREES;
  587. X  else if (deg > 90)
  588. X    deg -= DEGREES;
  589. X  if (deg < 0.0)
  590. X    putchar('-');
  591. X  else
  592. X    putchar('+');
  593. X  deg = dabs(deg) + 1.0/60.0/2.0;
  594. X  d = (int) deg;
  595. X  m = (int) ((deg - floor(deg))*60.0);
  596. X  printf("%s%d %s%d'",
  597. X     d < 10 ? "0" : "", d,
  598. X     m < 10 ? "0" : "", m);
  599. X}
  600. X
  601. Xdouble input(prompt, low, high)
  602. Xchar prompt[];
  603. Xdouble low, high;
  604. X{
  605. X  char line[80];
  606. X  double x;
  607. X  while (1) {
  608. X    printf("%s > ", prompt);
  609. X    if (gets(line) == (char *) NULL) {
  610. X      printf("\nAstrolog terminated.\n");
  611. X      exit(1);
  612. X    }
  613. X    sscanf(line, "%lf", &x);
  614. X    if (x >= low && x <= high)
  615. X      return x;
  616. X    printf("Value out of range of from %.0f to %.0f.\n", low, high);
  617. X  }
  618. X}
  619. X
  620. Xvoid inputdata(filename)
  621. Xchar *filename;
  622. X{
  623. X  char name[80], *defdir, c;
  624. X  int i, j;
  625. X  double k, l, m;
  626. X#ifdef TIME
  627. X  struct tm curtime;
  628. X  long int curtimer;
  629. X  if (filename[0] == 'n' && filename[1] == 'o' && filename[2] == 'w' &&
  630. X      filename[3] == 0) {
  631. X    autom = 1;
  632. X    curtimer = (long int) time((long int *) 0);
  633. X    curtime = *localtime(&curtimer);
  634. X    M = (double) curtime.tm_mon + 1.0;
  635. X    D = (double) curtime.tm_mday;
  636. X    Y = (double) curtime.tm_year + 1900.0;
  637. X    F = (double) curtime.tm_hour + (double) curtime.tm_min / 100.0 +
  638. X      (double) curtime.tm_sec / 6000.0;
  639. X    X = defzone; L5 = deflong; LA = deflat;
  640. X    return;
  641. X  }
  642. X#endif
  643. X  if (filename[0] == 't' && filename[1] == 't' && filename[2] == 'y' &&
  644. X      filename[3] == 0) {
  645. X    printf("** Astrolog version %s (pullen@lynx.cs.washington.edu) **\n",
  646. X      VERSION);
  647. X#ifdef SWITCHES
  648. X    printf("   Invoke as 'astrolog -H' for brief list of command options.\n");
  649. X#endif
  650. X    M = input("Enter month of birth [MM]  ", 1.0, 12.0);
  651. X    D = input("Enter date  of birth [DD]  ", 1.0, 31.0);
  652. X    Y = input("Enter year  of birth [YYYY]", 0.0, 4000.0);
  653. X    printf("Assuming a 24 hour clock below (0.00=midnight, 18.00=6pm, etc)\n");
  654. X    printf("Subtract 1 from hour entered if Daylight Saving time then.\n");
  655. X    F = input("Time of birth [HR.MIN - Add 12 for PM times]", -2.0, 24.0);
  656. X    printf("Enter negative value below for time zones east of Greenwich.\n");
  657. X    X = input("Time zone in hours off GMT [HR.MIN - 5=Eastern, 8=Pacific]",
  658. X          -24.0, 24.0);
  659. X    printf("Enter negative values below for eastern or southern locations.\n");
  660. X    L5 = input("Longitude west of place: DEG.MIN", -180.0, 180.0);
  661. X    LA = input("Latitude north of place: DEG.MIN", -90.0, 90.0);
  662. X    printf("\n");
  663. X    return;
  664. X  }
  665. X  autom = 1;
  666. X  data = fopen(filename, "r");
  667. X  if (data == NULL) {
  668. X    defdir = DEFAULT_DIR;
  669. X    for (i = 0; defdir[i]; i++)
  670. X      name[i] = defdir[i];
  671. X    for (j = 0; filename[j]; j++)
  672. X      name[i+j] = filename[j];
  673. X    name[i+j] = 0;
  674. X    data = fopen(name, "r");
  675. X    if (data == NULL) {
  676. X      fprintf(stderr, "File '%s' not found.\n", filename);
  677. X      exit(1);
  678. X    }
  679. X  }
  680. X  if ((c = getc(data)) != 'S') {
  681. X    ungetc(c, data);
  682. X    fscanf(data, "%lf%lf%lf%lf%lf%lf%lf", &M, &D, &Y, &F, &X, &L5, &LA);
  683. X  } else {
  684. X    M = -1.0;
  685. X    for (i = 1; i <= objects; i++) {
  686. X      fscanf(data, "%s%lf%lf%lf", name, &k, &l, &m);
  687. X      planet[i] = (l-1.0)*30.0+k+m/60.0;
  688. X      fscanf(data, "%s%lf%lf", name, &k, &l);
  689. X      planetalt[i] = k+l/60.0;
  690. X      ret[i] = name[1] == 'D' ? 0.0 : 1.0;
  691. X    }
  692. X    for (i = 1; i <= SIGNS/2; i++) {
  693. X      fscanf(data, "%s%lf%lf%lf", name, &k, &l, &m);
  694. X      house[i+6] = mod((house[i] = mod((l-1.0)*30.0+k+m/60.0))+180.0);
  695. X    }
  696. X  }
  697. X  fclose(data);
  698. X}
  699. X
  700. X/**/
  701. END_OF_FILE
  702. if test 23711 -ne `wc -c <'data.c'`; then
  703.     echo shar: \"'data.c'\" unpacked with wrong size!
  704. fi
  705. # end of 'data.c'
  706. fi
  707. if test -f 'formulas.c' -a "${1}" != "-c" ; then 
  708.   echo shar: Will not clobber existing file \"'formulas.c'\"
  709. else
  710. echo shar: Extracting \"'formulas.c'\" \(14938 characters\)
  711. sed "s/^X//" >'formulas.c' <<'END_OF_FILE'
  712. X/*
  713. X** Astrolog (Version 2.10) File: formulas.c
  714. X**
  715. X** IMPORTANT: The planetary calculation routines used in this program
  716. X** have been Copyrighted and the core of this program is basically a
  717. X** conversion to C of the routines created by James Neely as listed in
  718. X** Michael Erlewine's 'Manual of Computer Programming for Astrologers',
  719. X** available from Matrix Software. The copyright gives us permission to
  720. X** use the routines for our own purposes but not to sell them or profit
  721. X** from them in any way.
  722. X*/
  723. X
  724. X#include "astrolog.h"
  725. X
  726. Xdouble T, OB,
  727. X  A, R, B, Q, L, G, O, RA, R2, MC, Asc, AZ, Vtx, XX, R1, FF, LO, OA,
  728. X  S, S1, S2, AP, IN, AN, YY, ZZ, C, NU, BR, SS, AB, P, T0[4];
  729. X
  730. Xdouble geo[PLANETS+2], geoalt[PLANETS+2], georet[PLANETS+2],
  731. X  helio[PLANETS+2], helioalt[PLANETS+2], helioret[PLANETS+2],
  732. X  planet1[OBJECTS+1], planet2[OBJECTS+1],
  733. X  planetalt1[OBJECTS+1], planetalt2[OBJECTS+1],
  734. X  house1[SIGNS+1], house2[SIGNS+1],
  735. X  ret1[OBJECTS+1], ret2[OBJECTS+1];
  736. X
  737. X
  738. X/*
  739. X*******************************************************************************
  740. X** Specific calculations
  741. X*******************************************************************************
  742. X*/
  743. X
  744. Xdouble mdytojulian(mon, day, yea)
  745. Xdouble mon, day, yea;
  746. X{
  747. X  double im, j;
  748. X  im = 12.0*(yea+4800.0)+mon-3.0;
  749. X  j = (2.0*(im-floor(im/12.0)*12.0)+7.0+365.0*im)/12.0;
  750. X  j = floor(j)+day+floor(im/48.0)-32083.0;
  751. X  if (!(j <= 2299171.0))
  752. X    j += floor(im/4800.0)-floor(im/1200.0)+38.0;
  753. X  return j;
  754. X}
  755. X
  756. Xprocessinput(var)
  757. Xint var;
  758. X{
  759. X  double LN;
  760. X  if (var) {
  761. X    F = sgn(F)*floor(dabs(F))+(dabs(F)-floor(dabs(F)))*100.0/60.0+dectodeg(X);
  762. X    L5 = dectodeg(L5);
  763. X    LA = DTOR(dectodeg(LA));
  764. X    JD = mdytojulian(M, D+Delta, Y);
  765. X    if (!progress)
  766. X      T = ((JD-2415020.0)+F/24.0-0.5)/36525.0;
  767. X    else
  768. X      T = (((Jdp-JD)/365.25+JD)-2415020.0+F/24.0-0.5)/36525.0;
  769. X  }
  770. X  OB = DTOR(23.452294-0.0130125*T);
  771. X  LN = mod((933060-6962911*T+7.5*T*T)/3600.0);
  772. X  if (!siderial)
  773. X    return;
  774. X  SD = (259205536.0*T+2013816.0)/3600.0;
  775. X  SD = 17.23*sin(DTOR(LN))+1.27*sin(DTOR(SD))-(5025.64+1.11*T)*T;
  776. X  SD = (SD-84038.27)/3600.0;
  777. X}
  778. X
  779. Xpoltorec()
  780. X{
  781. X  if (A == 0.0)
  782. X    A = 1.7453E-09;
  783. X  X = R*cos(A);
  784. X  Y = R*sin(A);
  785. X}
  786. X
  787. Xrectopol()
  788. X{
  789. X  if (Y == 0.0)
  790. X    Y = 1.7453E-09;
  791. X  R = sqrt(X*X+Y*Y);
  792. X  A = atan(Y/X);
  793. X  if (A < 0.0)
  794. X    A += PI;
  795. X  if (Y < 0.0)
  796. X    A += PI;
  797. X}
  798. X
  799. Xrectosph()
  800. X{
  801. X  A = B; R = 1.0;
  802. X  poltorec();
  803. X  Q = Y; R = X; A = L;
  804. X  poltorec();
  805. X  G = X; X = Y; Y = Q;
  806. X  rectopol();
  807. X  A += O;
  808. X  poltorec();
  809. X  Q = ASIN(Y);
  810. X  Y = X; X = G;
  811. X  rectopol();
  812. X  if (A < 0.0)
  813. X    A += 2*PI;
  814. X  G = A;
  815. X}
  816. X
  817. Xvoid ecltoequ(azi, alt)
  818. Xdouble *azi, *alt;
  819. X{
  820. X  double tilt = DTOR(23.44578889), x, y, a1, l1;
  821. X  x = cos(*alt)*sin(*azi)*cos(tilt);
  822. X  y = sin(*alt)*sin(tilt);
  823. X  x -= y;
  824. X  a1 = cos(*alt);
  825. X  y = cos(*alt)*cos(*azi);
  826. X  l1 = atan(x/y);
  827. X  if (l1 < 0.0)
  828. X    l1 += PI;
  829. X  if (x < 0.0)
  830. X    l1 += PI;
  831. X  a1 = ASIN(a1*sin(*azi)*sin(tilt)+sin(*alt)*cos(tilt));
  832. X  *azi = l1; *alt = a1;
  833. X}
  834. X
  835. Xcomputevariables(var)
  836. Xint var;
  837. X{
  838. X  RA = DTOR(mod((6.6460656+2400.0513*T+2.58E-5*T*T+
  839. X         (var ? F : (T+0.5-floor(T+0.5))*24.0)) *15.0-L5));
  840. X  R2 = RA; O = -OB; B = LA; A = R2; R = 1.0;
  841. X  poltorec();
  842. X  X *= cos(O);
  843. X  rectopol();
  844. X  MC = mod(SD+RTOD(A));
  845. X  L = R2;
  846. X  rectosph();
  847. X  AZ = mod(SD+mod(G+PI/2.0));
  848. X  L= R2+PI; B = PI/2.0-dabs(B);
  849. X  if (LA < 0.0)
  850. X    B = -B;
  851. X  rectosph();
  852. X  Vtx = mod(SD+RTOD(G+PI/2.0));
  853. X}
  854. X
  855. X
  856. X/*
  857. X*******************************************************************************
  858. X** House cusp calculations
  859. X*******************************************************************************
  860. X*/
  861. X
  862. Xint inhouseplace(point)
  863. Xdouble point;
  864. X{
  865. X  int i = 0;
  866. X  do {
  867. X    i++;
  868. X  } while (!(i >= SIGNS ||
  869. X         (point >= house[i] && point < house[mod12(i+1)]) ||
  870. X         (house[i] > house[mod12(i+1)] &&
  871. X          (point >= house[i] || point < house[mod12(i+1)]))));
  872. X  return i;
  873. X}
  874. X
  875. Xvoid houseplace()
  876. X{
  877. X  int i;
  878. X  for (i = 1; i <= objects; i++)
  879. X    inhouse[i] = inhouseplace(planet[i]);
  880. X}
  881. X
  882. Xdouble midheaven()
  883. X{
  884. X  double X;
  885. X  X = atan(tan(RA)/cos(OB));
  886. X  if (X < 0.0)
  887. X    X += PI;
  888. X  if (RA > PI)
  889. X    X += PI;
  890. X  return mod(RTOD(X)+SD);
  891. X}
  892. X
  893. Xdouble ascendant()
  894. X{
  895. X  double Asc;
  896. X  Asc = atan(cos(RA)/(-sin(RA)*cos(OB)-tan(LA)*sin(OB)));
  897. X  if (Asc < 0.0)
  898. X    Asc += PI;
  899. X  if (cos(RA) < 0.0)
  900. X    Asc += PI;
  901. X  return mod(RTOD(Asc)+SD);
  902. X}
  903. X
  904. Xplacidus_cusp()
  905. X{
  906. X  int i;
  907. X  X = -1.0;
  908. X  if (Y == 1.0)
  909. X    X = 1.0;
  910. X  for (i = 1; i <= 10; i++) {
  911. X    XX = ACOS(X*sin(R1)*tan(OB)*tan(LA));
  912. X    if (XX < 0.0)
  913. X      XX += PI;
  914. X    R2 = RA+(XX/FF);
  915. X    if (Y == 1.0)
  916. X      R2 = RA+PI-(XX/FF);
  917. X    R1 = R2;
  918. X  }
  919. X  LO = atan(tan(R1)/cos(OB));
  920. X  if (LO < 0.0)
  921. X    LO += PI;
  922. X  if (sin(R1) < 0.0)
  923. X    LO += PI;
  924. X  LO = RTOD(LO);
  925. X}
  926. X
  927. Xplacidus()
  928. X{
  929. X  int i;
  930. X  Y = 0.0;
  931. X  house[4] = mod(MC+180.0-SD);
  932. X  house[1] = mod(Asc-SD);
  933. X  R1 = RA+DTOR(30.0);  FF=3.0; placidus_cusp(); house[5]=mod(LO+180.0);
  934. X  R1 = RA+DTOR(60.0);  FF=1.5; placidus_cusp(); house[6]=mod(LO+180.0);
  935. X  R1 = RA+DTOR(120.0); Y=1.0;  placidus_cusp(); house[2]=LO;
  936. X  R1 = RA+DTOR(150.0); FF=3.0; placidus_cusp(); house[3]=LO;
  937. X  for (i = 1; i <= SIGNS; i++) {
  938. X    house[i] = mod(house[i]+SD);
  939. X    if (i > 6)
  940. X      house[i] = mod(house[i-6]+180.0);
  941. X  }
  942. X}
  943. X
  944. Xkoch()
  945. X{
  946. X  double A1, A2, A3, KN;
  947. X  int i;
  948. X  A1 = ASIN(sin(RA)*tan(LA)*tan(OB));
  949. X  for (i = 1; i <= SIGNS; i++) {
  950. X    D = mod(60.0+30.0*(double)i);
  951. X    A2 = D/90.0-1.0; KN = 1.0;
  952. X    if (D >= 180.0) {
  953. X      KN = -1.0;
  954. X      A2 = D/90.0-3.0;
  955. X    }
  956. X    A3 = DTOR(mod(RTOD(RA)+D+A2*RTOD(A1)));
  957. X    X = atan(sin(A3)/(cos(A3)*cos(OB)-KN*tan(LA)*sin(OB)));
  958. X    if (X < 0.0)
  959. X      X += PI;
  960. X    if (sin(A3) < 0.0)
  961. X      X += PI;
  962. X    house[i] = mod(RTOD(X)+SD);
  963. X  }
  964. X}
  965. X
  966. Xequal()
  967. X{
  968. X  int i;
  969. X  for (i = 1; i <= SIGNS; i++) {
  970. X    house[i] = mod(Asc-30.0+30.0*(double)i);
  971. X  }
  972. X}
  973. X
  974. Xcampanus()
  975. X{
  976. X  double KO, DN;
  977. X  int i;
  978. X  for (i = 1; i <= SIGNS; i++) {
  979. X    KO = DTOR(60.000001+30.0*(double)i);
  980. X    DN = atan(tan(KO)*cos(LA));
  981. X    if (DN < 0.0)
  982. X      DN += PI;
  983. X    if (sin(KO) < 0.0)
  984. X      DN += PI;
  985. X    Y = sin(RA+DN);
  986. X    X = cos(RA+DN)*cos(OB)-sin(DN)*tan(LA)*sin(OB);
  987. X    X = atan(Y/X);
  988. X    if (X < 0.0)
  989. X      X += PI;
  990. X    if (Y < 0.0)
  991. X      X += PI;
  992. X    house[i] = mod(RTOD(X)+SD);
  993. X  }
  994. X}
  995. X
  996. Xmeridian()
  997. X{
  998. X  int i;
  999. X  for (i = 1; i <= SIGNS; i++) {
  1000. X    D = DTOR(60.0+30.0*(double)i);
  1001. X    Y = sin(RA+D);
  1002. X    X = atan(Y/(cos(RA+D)*cos(OB)));
  1003. X    if (X < 0.0)
  1004. X      X += PI;
  1005. X    if (Y < 0.0)
  1006. X      X += PI;
  1007. X    house[i] = mod(RTOD(X)+SD);
  1008. X  }
  1009. X}
  1010. X
  1011. Xregiomontanus()
  1012. X{
  1013. X  int i;
  1014. X  for (i = 1; i <= SIGNS; i++) {
  1015. X    D = DTOR(60.0+30.0*i);
  1016. X    Y = sin(RA+D);
  1017. X    X = atan(Y/(cos(RA+D)*cos(OB)-sin(D)*tan(LA)*sin(OB)));
  1018. X    if (X < 0.0)
  1019. X      X += PI;
  1020. X    if (Y < 0.0)
  1021. X      X += PI;
  1022. X    house[i] = mod(RTOD(X)+SD);
  1023. X  }
  1024. X}
  1025. X
  1026. Xporphyry()
  1027. X{
  1028. X  int i;
  1029. X  X = Asc-MC;
  1030. X  if (X < 0.0)
  1031. X    X += 360;
  1032. X  Y = X/3.0;
  1033. X  for (i = 1; i <= 2; i++)
  1034. X    house[i+4] = mod(180.0+MC+i*Y);
  1035. X  X = mod(180.0+MC)-Asc;
  1036. X  if (X < 0.0)
  1037. X    X += 360;
  1038. X  house[1]=Asc;
  1039. X  Y = X/3.0;
  1040. X  for (i = 1; i <= 3; i++)
  1041. X    house[i+1] = mod(Asc+i*Y);
  1042. X  for (i = 1; i <= 6; i++)
  1043. X    house[i+6] = mod(house[i]+180.0);
  1044. X}
  1045. X
  1046. Xmorinus()
  1047. X{
  1048. X  int i;
  1049. X  for (i = 1; i <= SIGNS; i++) {
  1050. X    D = DTOR(60.0+30.0*(double)i);
  1051. X    Y = sin(RA+D)*cos(OB);
  1052. X    X = atan(Y/cos(RA+D));
  1053. X    if (X < 0.0)
  1054. X      X += PI;
  1055. X    if (Y < 0.0)
  1056. X      X += PI;
  1057. X    house[i] = mod(RTOD(X)+SD);
  1058. X  }
  1059. X}
  1060. X
  1061. Xtopocentric_cusp()
  1062. X{
  1063. X  X = atan(tan(LA)/cos(OA));
  1064. X  Y = X+OB;
  1065. X  LO = atan(cos(X)*tan(OA)/cos(Y));
  1066. X  if (LO < 0.0)
  1067. X    LO += PI;
  1068. X  if (sin(OA) < 0.0)
  1069. X    LO += PI;
  1070. X}
  1071. X
  1072. Xtopocentric()
  1073. X{
  1074. X  double TL, P1, P2, LT;
  1075. X  int i;
  1076. X  modulus = 2.0*PI;
  1077. X  house[4] = mod(DTOR(MC+180.0-SD));
  1078. X  TL = tan(LA); P1 = atan(TL/3.0); P2 = atan(TL/1.5); LT = LA;
  1079. X  LA = P1; OA = mod(RA+DTOR(30.0)); topocentric_cusp(); house[5] = mod(LO+PI);
  1080. X  LA = P2; OA = mod(OA+DTOR(30.0)); topocentric_cusp(); house[6] = mod(LO+PI);
  1081. X  LA = LT; OA = mod(OA+DTOR(30.0)); topocentric_cusp(); house[1] = LO;
  1082. X  LA = P2; OA = mod(OA+DTOR(30.0)); topocentric_cusp(); house[2] = LO;
  1083. X  LA = P1; OA = mod(OA+DTOR(30.0)); topocentric_cusp(); house[3] = LO;
  1084. X  LA = LT; modulus = 360.0;
  1085. X  for (i = 1; i <= 6; i++) {
  1086. X    house[i] = mod(RTOD(house[i])+SD);
  1087. X    house[i+6] = mod(house[i]+180.0);
  1088. X  }
  1089. X}
  1090. X
  1091. Xnull()
  1092. X{
  1093. X  int i;
  1094. X  for (i = 1; i <= SIGNS; i++)
  1095. X    house[i] = mod((double)(i-1)*30.0+SD);
  1096. X}
  1097. X
  1098. X
  1099. X/*
  1100. X*******************************************************************************
  1101. X** Planetary position calculations
  1102. X*******************************************************************************
  1103. X*/
  1104. X
  1105. Xdouble readthree()
  1106. X{
  1107. X  S = readplanetdata(0); S1 = readplanetdata(0); S2 = readplanetdata(0);
  1108. X  return S = DTOR(S+S1*T+S2*T*T);
  1109. X}
  1110. X
  1111. Xrectosph2()
  1112. X{
  1113. X  rectopol(); A += AP; poltorec(); D = X; X = Y; Y = 0.0; rectopol();
  1114. X  A += IN; poltorec(); G = Y; Y = X; X = D; rectopol(); A += AN;
  1115. X  if (A < 0.0)
  1116. X    A += 2.0*PI;
  1117. X  poltorec();
  1118. X}
  1119. X
  1120. Xerrorcorrect(ind)
  1121. Xint ind;
  1122. X{
  1123. X  double U, V, W;
  1124. X  int IK, IJ, errorindex;
  1125. X  errorindex = errorcount[ind];
  1126. X  for (IK = 1; IK <= 3; IK++) {
  1127. X    if (ind == 6 && IK == 3) {
  1128. X      T0[3]=0;
  1129. X      return;
  1130. X    }
  1131. X    if (IK == 3)
  1132. X      errorindex--;
  1133. X    readthree(); A = 0.0;
  1134. X    for (IJ = 1; IJ <= errorindex; IJ++) {
  1135. X      U = readplanetdata(0); V = readplanetdata(0); W = readplanetdata(0);
  1136. X      A = A+DTOR(U)*cos((V*T+W)*PI/180.0);
  1137. X    }
  1138. X    T0[IK] = RTOD(S+A);
  1139. X  }
  1140. X}
  1141. X
  1142. Xprocessplanet(ind, isgeo, isret)
  1143. Xint ind, isgeo, isret;
  1144. X{
  1145. X  X = XX; Y = YY; rectopol();
  1146. X  C = RTOD(A)+NU-BR;
  1147. X  if (ind == 2 && AB == 1.0)
  1148. X    C = mod(C+180.0);
  1149. X  C = mod(C+SD); SS = C; Y = ZZ; X = R; rectopol();
  1150. X  if (A > 0.35)
  1151. X    A -= 2*PI;
  1152. X  P = RTOD(A);
  1153. X  if (isgeo) {
  1154. X    geo[ind] = C; geoalt[ind] = P; georet[ind] = (double) isret;
  1155. X  } else {
  1156. X    helio[ind] = C; helioalt[ind] = P; helioret[ind] = (double) isret;
  1157. X  }
  1158. X}
  1159. X
  1160. Xplanets()
  1161. X{
  1162. X  double AU, E, EA, E1, XK, XW, YW, ZW, XH, YH, ZH, XA, YA, ZA, X1, Y1, Z1;
  1163. X  int ind, isret, i;
  1164. X  for (ind = 2; ind <= PLANETS+1; ind++) {
  1165. X    if (ind == 2 && uranian)
  1166. X      for (i = 1; i <= 8*16+72+51+42+42+42; i++)
  1167. X    readplanetdata(0);
  1168. X    modulus = 2.0*PI;
  1169. X    M = mod(readthree());
  1170. X    E = RTOD(readthree());
  1171. X    EA = M;
  1172. X    for (A = 1; A <= 5; A++)
  1173. X      EA = M+E*sin(EA);
  1174. X    AU = readplanetdata(0);
  1175. X    E1 = 0.01720209/(pow(AU,1.5)*(1.0-E*cos(EA)));
  1176. X    XW = -(AU*E1)*sin(EA);
  1177. X    YW = (AU*E1)*pow(1.0-E*E,0.5)*cos(EA);
  1178. X    AP = readthree(); AN = readthree(); IN = readthree();
  1179. X    X = XW; Y = YW; rectosph2();
  1180. X      XH = X; YH = Y; ZH = G;
  1181. X    modulus = 360.0;
  1182. X    if (ind == 2) {
  1183. X      XA = -XH; YA = -YH; ZA = -ZH; AB = 0.0;
  1184. X    } else {
  1185. X      XW = XH+XA; YW = YH+YA; ZW = ZH+ZA;
  1186. X    }
  1187. X    X = AU*(cos(EA)-E); Y = AU*sin(EA)*pow(1.0-E*E,0.5);
  1188. X    rectosph2(); XX = X; YY = Y; ZZ = G;
  1189. X    if (ind >= 6 && ind <= 10 && !uranian) {
  1190. X      errorcorrect(ind); XX += T0[2]; YY += T0[1]; ZZ += T0[3];
  1191. X    }
  1192. X    if (ind == 10 && !uranian)
  1193. X      for (i = 1; i <= 8*16; i++)
  1194. X    readplanetdata(0);
  1195. X    XK = (XX*YH-YY*XH)/(XX*XX+YY*YY);
  1196. X    isret = 0;
  1197. X    BR = 0.0; processplanet(ind, 0, isret); AB = 1.0;
  1198. X    if (ind == 2) {
  1199. X      X1 = XX; Y1 = YY; Z1 = ZZ;
  1200. X    } else {
  1201. X      XX -= X1; YY -= Y1; ZZ -= Z1; XK = (XX*YW-YY*XW)/(XX*XX+YY*YY);
  1202. X    }
  1203. X    BR = 0.0057756*sqrt(XX*XX+YY*YY+ZZ*ZZ)*RTOD(XK);
  1204. X    if (XK < 0.0)
  1205. X      isret = 1;
  1206. X    processplanet(ind, 1, isret);
  1207. X    if (heliocentric) {
  1208. X      planet[ind] = helio[ind]; planetalt[ind] = helioalt[ind];
  1209. X      ret[ind] = helioret[ind];
  1210. X    } else {
  1211. X      planet[ind] = geo[ind]; planetalt[ind] = geoalt[ind];
  1212. X      ret[ind] = georet[ind];
  1213. X    }
  1214. X  }
  1215. X}
  1216. X
  1217. X
  1218. X/*
  1219. X*******************************************************************************
  1220. X** Lunar calculations
  1221. X*******************************************************************************
  1222. X*/
  1223. X
  1224. Xlunar(moonlo, moonla, nodelo, nodela)
  1225. Xdouble *moonlo, *moonla, *nodelo, *nodela;
  1226. X{
  1227. X  double LL, G, N, G1, D, L, ML, L1, MB, TN, M = 3600.0;
  1228. X  LL = 973563.0+1732564379.0*T-4.0*T*T;
  1229. X  G = 1012395.0+6189.0*T;
  1230. X  N = 933060.0-6962911.0*T+7.5*T*T;
  1231. X  G1 = 1203586.0+14648523.0*T-37.0*T*T;
  1232. X  D = 1262655.0+1602961611.0*T-5.0*T*T;
  1233. X  L = (LL-G1)/M; L1 = ((LL-D)-G)/M; F = (LL-N)/M; D = D/M; Y = 2.0*D;
  1234. X  ML = 22639.6*SIND(L)-4586.4*SIND(L-Y)+2369.9*SIND(Y)+769.0*SIND(2.0*L)-
  1235. X    669.0*SIND(L1)-411.6*SIND(2.0*F)-212.0*SIND(2.0*L-Y)-206.0*SIND(L+L1-Y);
  1236. X  ML += 192.0*SIND(L+Y)-165.0*SIND(L1-Y)+148.0*SIND(L-L1)-125.0*SIND(D)-
  1237. X    110.0*SIND(L+L1)-55.0*SIND(2.0*F-Y)-45.0*SIND(L+2.0*F)+ 40.0*SIND(L-2.0*F);
  1238. X  *moonlo = G = mod((LL+ML)/M+SD);
  1239. X  MB = 18461.5*SIND(F)+1010.0*SIND(L+F)-999.0*SIND(F-L)-624.0*SIND(F-Y)+
  1240. X    199.0*SIND(F+Y-L)-167.0*SIND(L+F-Y);
  1241. X  MB += 117.0*SIND(F+Y)+62.0*SIND(2.0*L+F)-
  1242. X    33.0*SIND(F-Y-L)-32.0*SIND(F-2.0*L)-30.0*SIND(L1+F-Y);
  1243. X  *moonla = MB = sgn(MB)*((dabs(MB)/M)/360.0-floor((dabs(MB)/M)/360.0))*360.0;
  1244. X  TN = N+5392.0*SIND(2.0*F-Y)-541.0*SIND(L1)-442.0*SIND(Y)+423.0*SIND(2.0*F)-
  1245. X    291.0*SIND(2.0*L-2.0*F);
  1246. X  TN = mod(TN/M);
  1247. X  *nodelo = N = mod(N/M+SD);
  1248. X  *nodela = 0.0;
  1249. X}
  1250. X
  1251. X
  1252. X/*
  1253. X*******************************************************************************
  1254. X** Calculate chart for specific time
  1255. X*******************************************************************************
  1256. X*/
  1257. X
  1258. Xvoid castchart(var)
  1259. Xint var;
  1260. X{
  1261. X  int i, k;
  1262. X  double housetemp[SIGNS+1], j;
  1263. X  if (M == -1.0) {
  1264. X    MC = planet[18]; Asc = planet[19]; Vtx = planet[20];
  1265. X  } else {
  1266. X    processinput(var); computevariables(var);
  1267. X    MC = midheaven(); Asc = ascendant();
  1268. X    if      (housesystem == 1) koch();
  1269. X    else if (housesystem == 2) equal();
  1270. X    else if (housesystem == 3) campanus();
  1271. X    else if (housesystem == 4) meridian();
  1272. X    else if (housesystem == 5) regiomontanus();
  1273. X    else if (housesystem == 6) porphyry();
  1274. X    else if (housesystem == 7) morinus();
  1275. X    else if (housesystem == 8) topocentric();
  1276. X    else if (housesystem == 9) null();
  1277. X    else                       placidus();
  1278. X    planets();
  1279. X    planet[1] = planet[2]; ret[1] = 0.0;
  1280. X    lunar(&planet[2], &planetalt[2], &planet[16], &planetalt[16]);
  1281. X    ret[2] = 0.0; ret[16] = 1.0;
  1282. X    j = planet[2]-planet[1]; j = dabs(j) < 90.0 ? j : j - sgn(j)*DEGREES;
  1283. X    planet[17] = mod(j+Asc); ret[17] = 0.0;
  1284. X    planet[18] = MC; ret[18] = 0.0;
  1285. X    planet[19] = Asc; ret[19] = 0.0;
  1286. X    planet[20] = Vtx; ret[20] = 0.0;
  1287. X  }
  1288. X  for (i = 1; i <= objects; i++)
  1289. X    planet[i] = mod(planet[i] * multiplyfactor);
  1290. X  if (onasc) {
  1291. X    j = planet[onasc]-Asc;
  1292. X    for (i = 1; i <= SIGNS; i++)
  1293. X      house[i] = mod(house[i]+j);
  1294. X  }
  1295. X  houseplace();
  1296. X  if (flip) {
  1297. X    for (i = 1; i <= objects; i++) {
  1298. X      k = inhouse[i];
  1299. X      inhouse[i] = (int) (planet[i]/30.0)+1;
  1300. X      planet[i] = (double)(k-1)*30.0+mindistance(house[k], planet[i])/
  1301. X    mindistance(house[k], house[mod12(k+1)])*30.0;
  1302. X    }
  1303. X    for (i = 1; i <= SIGNS; i++) {
  1304. X      k = inhouseplace((double) (i-1)*30.0);
  1305. X      housetemp[i] = (double)(k-1)*30.0+mindistance(house[k],
  1306. X        (double) (i-1)*30.0)/mindistance(house[k], house[mod12(k+1)])*30.0;
  1307. X    }
  1308. X    for (i = 1; i <= SIGNS; i++)
  1309. X      house[i] = housetemp[i];
  1310. X  }
  1311. X  if (decan)
  1312. X    for (i = 1; i <= objects; i++) {
  1313. X      k = (int) (planet[i]/30.0)+1;
  1314. X      j = planet[i] - (double)((k-1)*30);
  1315. X      k = mod12(k + 4*((int)floor(j/10.0)));
  1316. X      j = (j - floor(j/10.0)*10.0)*3.0;
  1317. X      planet[i] = (double)(k-1)*30.0+j;
  1318. X      houseplace();
  1319. X    }
  1320. X}
  1321. X
  1322. X/**/
  1323. END_OF_FILE
  1324. if test 14938 -ne `wc -c <'formulas.c'`; then
  1325.     echo shar: \"'formulas.c'\" unpacked with wrong size!
  1326. fi
  1327. # end of 'formulas.c'
  1328. fi
  1329. echo shar: End of archive 4 \(of 6\).
  1330. cp /dev/null ark4isdone
  1331. MISSING=""
  1332. for I in 1 2 3 4 5 6 ; do
  1333.     if test ! -f ark${I}isdone ; then
  1334.     MISSING="${MISSING} ${I}"
  1335.     fi
  1336. done
  1337. if test "${MISSING}" = "" ; then
  1338.     echo You have unpacked all 6 archives.
  1339.     rm -f ark[1-9]isdone
  1340. else
  1341.     echo You still need to unpack the following archives:
  1342.     echo "        " ${MISSING}
  1343. fi
  1344. ##  End of shell archive.
  1345. exit 0
  1346.  
  1347. exit 0 # Just in case...
  1348.