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

  1. /*
  2. ** Astrolog (Version 4.00) File: xdata.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. #ifdef GRAPH
  41.  
  42. /*
  43. ******************************************************************************
  44. ** Graphics Global Variables.
  45. ******************************************************************************
  46. */
  47.  
  48. bitmap bm;                     /* Pointer to allocated memory.               */
  49. int bitmaprow;                 /* Horizontal size of bitmap array in memory. */
  50. word PTR metacur;              /* Current mem position when making metafile. */
  51. char modex = MODEv;            /* Current type of chart to create.   */
  52. char bitmapmode = BITMAPMODE;  /* Current bitmap file type (-Xb).    */
  53. char *outputfile = NULL;       /* Current name of bitmap file (-Xo). */
  54. char *dispname = NULL;         /* Current X11 display name (-Xd).    */
  55. circlestruct PTR circ = NULL;  /* Table of sine and cosine values.   */
  56.  
  57. int xfile;
  58. #ifdef ISG
  59. int xbitmap = FALSE;   /* Are we creating a bitmap file (-Xb set). */
  60. #else
  61. int xbitmap = TRUE;
  62. #endif
  63. int psfile   = FALSE;  /* Are we generating a PostScript file (-Xp set).   */
  64. int metafile = FALSE;  /* Are we generating a metafile graphic (-XM set).  */
  65. int xmono    = FALSE;  /* Is this a monochrome monitor.                    */
  66. int xcolor   = TRUE;   /* Are we drawing a color chart (-Xm not set).      */
  67. int xreverse = FALSE;  /* Are we drawing in reverse video (-Xr set).       */
  68. int xroot    = FALSE;  /* Are we drawing on the X11 background (-XB set).  */
  69. int xtext    = TRUE;   /* Are we printing chart info on chart (-XT set).   */
  70. int xfont    = TRUE;   /* Are we simulating fonts in charts (-XM0 set).    */
  71. int xbonus   = FALSE;  /* Are we drawing in alternate mode (-Xi set).      */
  72. int xlabel   = TRUE;   /* Are we labeling objects in charts (-Xl not set). */
  73. int xborder  = TRUE;   /* Are we drawing borders around charts.            */
  74.  
  75. int xnow = 0;                  /* Current animation mode. (-Xn).            */
  76. int xeast = 0;                 /* Current object to place on Asc (-X1).     */
  77. int scale = 200;               /* Current character scale factor (-Xs).     */
  78. int textrows = 0;              /* Numb. of rows to set text screen to (-V). */
  79. int gridobjects = OBJECTS;     /* Number of cells in -g graphic grids.      */
  80. int metawid = 10;              /* Pen width to use when creating metafiles. */
  81. int offsetx = 0, offsety = 0;  /* Viewport origin.                          */
  82. int turtlex = 0, turtley = 0;  /* Current coordinates of pen.               */
  83. int chartx = DEFAULTX, charty = DEFAULTY; /* Current size of graphic chart. */
  84. int degree = 0;                /* Current rotation of globe.                */
  85. real tilt = 0.0;               /* Current vertical tilt of rotating globe.  */
  86. int scalet;                    /* Relative scale to draw chart text at.     */
  87.  
  88. /* Color tables for Astrolog's graphic palette. */
  89.  
  90. colrgb rgbbmp[] = {
  91.   0x000000, 0x00007F, 0x007F00, 0x007F7F,
  92.   0x7F0000, 0x7F007F, 0x7F7F00, 0xBFBFBF,
  93.   0x7F7F7F, 0x0000FF, 0x00FF00, 0x00FFFF,
  94.   0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF};
  95. #ifdef MSG
  96. colrgb rgb[] = {
  97.   _BLACK, _RED, _GREEN, _BROWN,
  98.   _BLUE, _MAGENTA, _CYAN, _WHITE,
  99.   _GRAY, _LIGHTRED, _LIGHTGREEN, _YELLOW,
  100.   _LIGHTBLUE, _LIGHTMAGENTA, _LIGHTCYAN, _BRIGHTWHITE};
  101. #endif
  102. #ifdef X11
  103. char *rgbname[] = {
  104.   "black", "orangered3", "green4", "darkorange2",
  105.   "blue4", "violet", "cyan4", "grey65",
  106.   "grey35", "orangered1", "green1", "yellow1",
  107.   "blue1", "pink", "cyan1", "white"};
  108. colrgb rgbind[16];
  109. #endif
  110.  
  111. /* These are the actual color arrays and variables used by the program.      */
  112. /* Technically, Astrolog always assumes we are drawning on a color terminal; */
  113. /* for B/W graphics, all the values below are filled with black or white.    */
  114.  
  115. colrgb fg, bg;
  116. colpal colcur = -1, metafillcol = -1, on, off, hilite, gray,
  117.   maincolor[6+1], rainbowcolor[7+1],
  118.   elemcolor[4], aspectcolor[ASPECTS+1], objectcolor[TOTAL+1];
  119.  
  120. /* A bunch of physical X window variables dealing with the window itself. */
  121.  
  122. #ifdef X11
  123. Colormap cmap;
  124. Display *disp;
  125. GC gc, pmgc;
  126. KeySym key;
  127. Pixmap pixmap, icon;
  128. Window window, root;
  129. XSizeHints hint;
  130. #if FALSE
  131. XWMHints *wmhint;
  132. #endif
  133. int screen, depth;
  134. char xkey[10];
  135. #endif
  136.  
  137.  
  138. /*
  139. ******************************************************************************
  140. ** Astrolog Icon.
  141. ******************************************************************************
  142. */
  143.  
  144. #ifdef X11
  145. /* This information used to define Astrolog's X icon (Rainbow over Third */
  146. /* Eye) is identical to the output format used by the bitmap program.    */
  147. /* You could extract this section and run xsetroot -bitmap on it.        */
  148.  
  149. #define icon_width 63
  150. #define icon_height 32
  151. /*static*/ char icon_bits[] = {
  152.  0x00,0x00,0x00,0xa8,0x0a,0x00,0x00,0x00,0x00,0x00,0x40,0x55,0x55,0x01,0x00,
  153.  0x00,0x00,0x00,0xa8,0xaa,0xaa,0x0a,0x00,0x00,0x00,0x00,0x54,0xf5,0x57,0x15,
  154.  0x00,0x00,0x00,0x80,0xaa,0xaa,0xaa,0xaa,0x00,0x00,0x00,0x40,0xd5,0xff,0xff,
  155.  0x55,0x01,0x00,0x00,0xa0,0xaa,0xaa,0xaa,0xaa,0x02,0x00,0x00,0x50,0xfd,0xff,
  156.  0xff,0x5f,0x05,0x00,0x00,0xa8,0xaa,0x2a,0xaa,0xaa,0x0a,0x00,0x00,0xd4,0xff,
  157.  0xaf,0xfa,0xff,0x15,0x00,0x00,0xaa,0x2a,0x00,0x00,0xaa,0x2a,0x00,0x00,0xf5,
  158.  0xbf,0xaa,0xaa,0xfe,0x57,0x00,0x80,0xaa,0x02,0x00,0x00,0xa0,0xaa,0x00,0x40,
  159.  0xfd,0xab,0xfa,0xaf,0xea,0x5f,0x01,0xa0,0xaa,0x80,0xff,0xff,0x80,0xaa,0x02,
  160.  0x50,0xff,0xea,0xff,0xff,0xab,0x7f,0x05,0xa0,0x2a,0xf0,0xff,0xff,0x07,0xaa,
  161.  0x02,0xd0,0xbf,0xfa,0x0f,0xf8,0xaf,0x7e,0x05,0xa8,0x0a,0xfc,0x01,0xc0,0x1f,
  162.  0xa8,0x0a,0xd4,0xaf,0x7e,0x00,0x00,0xbf,0xfa,0x15,0xa8,0x0a,0x3f,0x00,0x00,
  163.  0x7e,0xa8,0x0a,0xf4,0xaf,0x1f,0xe0,0x03,0xfc,0xfa,0x15,0xaa,0x82,0x0f,0xdc,
  164.  0x1d,0xf8,0xa0,0x2a,0xf4,0xab,0x07,0x23,0x62,0xf0,0xea,0x17,0xaa,0xc2,0x87,
  165.  0x91,0xc4,0xf0,0xa1,0x2a,0xf4,0xeb,0xc3,0xd0,0x85,0xe1,0xeb,0x17,0xaa,0xe0,
  166.  0x83,0x91,0xc4,0xe0,0x83,0x2a,0xf5,0xeb,0x03,0x23,0x62,0xe0,0xeb,0x57,0xaa,
  167.  0xe0,0x01,0xdc,0x1d,0xc0,0x83,0x2a,0xf5,0xeb,0x01,0xe0,0x03,0xc0,0xeb,0x57,
  168.  0xaa,0xe0,0x01,0x00,0x00,0xc0,0x83,0x2a,0xfd,0xeb,0x01,0x00,0x00,0xc0,0xeb,
  169.  0x5f};
  170. #endif
  171.  
  172.  
  173. /*
  174. ******************************************************************************
  175. ** Graphics Table Data.
  176. ******************************************************************************
  177. */
  178.  
  179. char *signdraw[] = {"",
  180.   "ND4HU2HLGDFBR6EUHLGD2G",