home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource1 / ast40dos / driver.c < prev    next >
C/C++ Source or Header  |  1994-01-04  |  56KB  |  1,757 lines

  1. /*
  2. ** Astrolog (Version 4.00) File: driver.c
  3. **
  4. ** IMPORTANT NOTICE: the graphics database and chart display routines
  5. ** used in this program are Copyright (C) 1991-1993 by Walter D. Pullen
  6. ** (cruiser1@stein.u.washington.edu). Permission is granted to freely
  7. ** use and distribute these routines provided one doesn't sell,
  8. ** restrict, or profit from them in any way. Modification is allowed
  9. ** provided these notices remain with any altered or edited versions of
  10. ** the program.
  11. **
  12. ** The main planetary calculation routines used in this program have
  13. ** been Copyrighted and the core of this program is basically a
  14. ** conversion to C of the routines created by James Neely as listed in
  15. ** Michael Erlewine's 'Manual of Computer Programming for Astrologers',
  16. ** available from Matrix Software. The copyright gives us permission to
  17. ** use the routines for personal use but not to sell them or profit from
  18. ** them in any way.
  19. **
  20. ** The PostScript code within the core graphics routines are programmed
  21. ** and Copyright (C) 1992-1993 by Brian D. Willoughby
  22. ** (brianw@sounds.wa.com). Conditions are identical to those above.
  23. **
  24. ** The extended accurate ephemeris databases and formulas are from the
  25. ** calculation routines in the program "Placalc" and are programmed and
  26. ** Copyright (C) 1989,1991,1993 by Astrodienst AG and Alois Treindl
  27. ** (alois@azur.ch). The use of that source code is subject to
  28. ** regulations made by Astrodienst Zurich, and the code is not in the
  29. ** public domain. This copyright notice must not be changed or removed
  30. ** by any user of this program.
  31. **
  32. ** Initial programming 8/28,30, 9/10,13,16,20,23, 10/3,6,7, 11/7,10,21/1991.
  33. ** X Window graphics initially programmed 10/23-29/1991.
  34. ** PostScript graphics initially programmed 11/29-30/1992.
  35. ** Last code change made 12/31/1993.
  36. */
  37.  
  38. #include "astrolog.h"
  39.  
  40. char *filenamescreen = NULL, *filenameout, **extralines;
  41. int prog = FALSE, extracount = 0;
  42.  
  43.  
  44. /*
  45. ******************************************************************************
  46. ** Table Display Routines.
  47. ******************************************************************************
  48. */
  49.  
  50. /* A subprocedure of the credit displayed below, this prints out one line */
  51. /* of credit information on the screen. Given a string, it's displayed    */
  52. /* centered with left and right borders around it, in the given color.    */
  53.  
  54. #define CREDITWIDTH 74
  55.  
  56. void PrintW(string, col)
  57. char *string;
  58. int col;
  59. {
  60.   int i;
  61.  
  62.   if (!string) {
  63.  
  64.     /* Null string means print the top, bottom, or a separator row. */
  65.  
  66.     if (col < 0)
  67.       AnsiColor(RED);
  68.     printc(col ? (col > 0 ? BOXSW : BOXNW) : BOXJE);
  69.     PrintTab(BOXH, CREDITWIDTH);
  70.     printc(col ? (col > 0 ? BOXSE : BOXNE) : BOXJW);
  71.   } else {
  72.     i = StringLen(string);
  73.     printc(BOXV);
  74.     PrintTab(' ', (CREDITWIDTH-i)/2 + (i&1));
  75.     AnsiColor(col);
  76.     fprintf(S, "%s", string);
  77.     PrintTab(' ', (CREDITWIDTH-i)/2);
  78.     AnsiColor(RED);
  79.     printc(BOXV);
  80.   }
  81.   printl();
  82. }
  83.  
  84.  
  85. /* Display a list of credits showing those who helped create the various  */
  86. /* parts of Astrolog, as well as important copyright and version info, as */
  87. /* displayed with the -Hc switch.                                         */
  88.  
  89. void DisplayCredits()
  90. {
  91.   char string[STRING];
  92.  
  93.   PrintW(NULL, -1);
  94.   sprintf(string, "%s version %s", appname, VERSION);
  95.   PrintW(string, WHITE);
  96.   sprintf(string, "As of %s", DATE);
  97.   PrintW(string, LTGRAY);
  98.   PrintW("By Walter D. Pullen (cruiser1@stein.u.washington.edu)", CYAN);
  99.   PrintW(NULL, 0);
  100.   PrintW("Main planetary calculation formulas were converted from", GREEN);
  101.   PrintW(
  102.     "routines by James Neely, as listed in 'Manual of Computer Programming",
  103.     GREEN);
  104.   PrintW(
  105.     "for Astrologers' by Michael Erlewine, available from Matrix Software.",
  106.     GREEN);
  107.   PrintW("PostScript graphics routines by Brian D. Willoughby", YELLOW);
  108.   PrintW(
  109.     "Extended ephemeris calculation and formulas are by Alois Treindl,",
  110.     MAGENTA);
  111.   PrintW(
  112.     "as in the package 'Placalc', available from Astrodienst AG.", MAGENTA);
  113.   PrintW(
  114.     "IMPORTANT: Astrolog is 'freeware', but is copyrighted and not in public",
  115.     LTGRAY);
  116.   PrintW(
  117.     "domain. Permission is granted to freely use and distribute these",
  118.     LTGRAY);
  119.   PrintW(
  120.     "routines provided one does not sell, restrict, or profit from the",
  121.     LTGRAY);
  122.   PrintW(
  123.     "program or its output in any way. Modification is allowed provided",
  124.     LTGRAY);
  125.   PrintW(
  126.     "these exact notices remain with any altered or edited versions of the",
  127.     LTGRAY);
  128.   PrintW(
  129.     "program. These conditions are true of both the program in whole and of",
  130.     LTGRAY);
  131.   PrintW(
  132.     "all parts by any individual author. Violators are subject to copyright",
  133.     LTGRAY);
  134.   PrintW(
  135.     "law penalties, and negative karmic debts to aforementioned contributors.",
  136.     LTGRAY);
  137.   PrintW(NULL, 0);
  138.   PrintW(
  139.     "Special thanks to all those unmentioned, seen and unseen, who have",
  140.      BLUE);
  141.   PrintW(
  142.     "pointed out problems, suggested featues, and sent many positive vibes!",
  143.     BLUE);
  144.   PrintW(NULL, 1);
  145.   AnsiColor(DEFAULT);
  146. }
  147.  
  148.  
  149. /* Print out a command switch or keypress info line to the screen, as done  */
  150. /* with the -H switch or 'H' key in a graphic window. This is just printing */
  151. /* out the string, except in Ansi mode we set the proper colors: Red for    */
  152. /* header lines, Green for individual switches or keys, and White for the   */
  153. /* rest of the line telling what it does. We also prefix each switch with   */
  154. /* either Unix's '-' or PC's '/', whichever is appropriate for the system.  */
  155.  
  156. void Prints(string)
  157. char *string;
  158. {
  159.   int dash;
  160.   char c;
  161.  
  162.   dash = string[1];
  163.   if (*string != ' ')
  164.     AnsiColor(RED);
  165.   else if (dash != ' ')
  166.     AnsiColor(dash == 'P' || string[3] == ' ' || string[3] == ':' ?
  167.       GREEN : DKGREEN);
  168.   else
  169.     AnsiColor(DEFAULT);
  170.   while ((c = *string) && c != ':' &&
  171.     (dash != 'P' || (c != ' ' || *(string+1) != 't'))) {
  172.     if (c != '_')
  173.       printc(c);
  174.     else
  175.       printc(DASH);
  176.     string++;
  177.   }
  178.   if (*string)
  179.     printc(*string++);
  180.   AnsiColor(DEFAULT);
  181.   while (c = *string) {
  182.     if (c != '_')
  183.       printc(c);
  184.     else
  185.       printc(DASH);
  186.     string++;
  187.   }
  188.   printl();
  189. }
  190.  
  191.  
  192. /* Print a list of every command switch that can be passed to the program, */
  193. /* and a description of what it does. This is what the -H switch prints.   */
  194.  
  195. void DisplaySwitches()
  196. {
  197.   char string[STRING];
  198.  
  199.   sprintf(string, "%s (version %s) command switches:", appname, VERSION);
  200.   Prints(string);
  201.   Prints(" _H: Display this help list.");
  202.   Prints(" _Hc: Display program credits and copyrights.");
  203.   Prints(" _H0: Display names of zodiac signs and houses.");
  204.   Prints(" _O: Display available planets and other celestial objects.");
  205.   Prints(" _O0: Like _O but ignore object restrictions.");
  206.   Prints(" _A: Display available aspects, their angles, and present orbs.");
  207. #ifdef INTERPRET
  208.   Prints(" _I0: Display meanings of signs, houses, planets, and aspects.");
  209. #endif
  210.   Prints(" _Q: Prompt for more command switches after display finished.");
  211. #ifdef SWITCHES
  212.   Prints(" _Q0: Like _Q but prompt for additional switches on startup.");
  213. #endif
  214.   Prints("\nSwitches which determine the type of chart to display:");
  215.   Prints(" _v: Display list of object positions (chosen by default).");
  216.   Prints(" _v0: Like _v but express velocities relative to average speed.");
  217.   Prints(" _w [<rows>]: Display chart in a graphic house wheel format.");
  218.   Prints(" _w0 [..]: Like _w but reverse order of objects in houses 4..9.");
  219.   Prints(" _g: Display aspect and midpoint grid among planets.");
  220.   Prints(" _g0: Like _g but flag aspect configurations (e.g. Yod's) too.");
  221.   Prints(" _g0: For comparison charts, show midpoints instead of aspects.");
  222.   Prints(" _ga: Like _g but indicate applying instead of difference orbs.");
  223.   Prints(" _m: Display all object midpoints in sorted zodiac order.");
  224.   Prints(" _m0: Like _m but list aspects ordered by influence instead.");
  225.   Prints(" _m[0]a: Like _m0 but indicate applyi