home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #4 / amigaacscoverdisc1998-041998.iso / utilities / shareware / dev / ucb_logoppc / source / xgraphics.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-18  |  6.4 KB  |  202 lines

  1. /* X window system graphics header file. */
  2.  
  3. #include <memory.h>
  4. #include <X11/Xlib.h>
  5. #include <X11/Xutil.h>
  6.  
  7. extern int have_x;
  8. extern int back_ground;
  9.  
  10. extern void real_window_init();
  11. void logofill(void);
  12.  
  13. /* Some X-related defines. */
  14. #define BORDER    1
  15. #define FONT    "fixed"
  16. #define NUMCOLORS 16
  17. #define EVENT_MASK  (StructureNotifyMask | PointerMotionMask)
  18. #define DEFAULT_HEIGHT           500
  19. #define DEFAULT_WIDTH            500
  20.  
  21. #define GR_SIZE         10000
  22.  
  23. #define checkX { \
  24.     if (have_x < 0) real_window_init(); \
  25.     if (!have_x) { \
  26.     err_logo(BAD_GRAPH_INIT,NIL); \
  27.     return; \
  28.     } \
  29. }
  30.  
  31. #define prepare_to_draw          {checkX; placate_x();}
  32. #define done_drawing             XFlush(dpy)
  33. extern void placate_x();
  34.  
  35. #define prepare_to_draw_turtle nop()
  36. #define done_drawing_turtle nop()
  37.  
  38. #define screen_left              0
  39. #define screen_right             (screen_width-1)
  40. #define screen_top               0
  41. #define screen_bottom            (screen_height-1)
  42.  
  43. /* #define screen_height (1 + screen_bottom - screen_top) */
  44. /* #define screen_width (1 + screen_right - screen_left) */
  45.  
  46. #define screen_x_center (screen_left + (screen_width)/2)
  47. #define screen_y_center (screen_top + (screen_height)/2)
  48.  
  49. #define turtle_left_max ((screen_left) - (screen_x_center))
  50. #define turtle_right_max ((screen_right) - (screen_x_center))
  51. #define turtle_top_max ((screen_y_center) - (screen_top))
  52. #define turtle_bottom_max ((screen_y_center) - (screen_bottom))
  53.  
  54. #define screen_x_coord ((screen_x_center) + turtle_x)
  55. #define screen_y_coord ((screen_y_center) - turtle_y)
  56.  
  57. #define turtle_height 18
  58. #define turtle_half_bottom 6.0
  59. #define turtle_side 19.0
  60.  
  61. #define clear_screen         XClearWindow(dpy, win)
  62.  
  63. #define erase_screen()         XClearWindow(dpy, win)
  64.  
  65. #define line_to(a,b)             if(xgr_pen.vis==0)\
  66.                                  XDrawLine(dpy,win,xgr_pen.pm,\
  67.                                  xgr_pen.xpos,xgr_pen.ypos,\
  68.                                  (a),(b));\
  69.                                  xgr_pen.xpos=(a);\
  70.                                  xgr_pen.ypos=(b)
  71.  
  72. #define move_to(a,b)             xgr_pen.xpos=(a);\
  73.                                  xgr_pen.ypos=(b)
  74.  
  75. #define draw_string(s)           XDrawString(dpy,win,xgr_pen.pm,\
  76.                                  xgr_pen.xpos,xgr_pen.ypos,\
  77.                                  (s),strlen((s)));
  78.  
  79. #define set_pen_vis(v)           xgr_pen.vis=(v)
  80.  
  81. #define set_pen_mode(m)          xgr_pen.pm=(m)
  82.  
  83. #define set_pen_color(c)         draw_turtle();\
  84.                                  xgr_pen.color=c%NUMCOLORS;\
  85.                                  XSetForeground(dpy,draw_gc,color[xgr_pen.color].pixel);\
  86.                                  XSetForeground(dpy,reverse_gc,color[xgr_pen.color].pixel);\
  87.                                  draw_turtle();
  88.  
  89. #define set_back_ground(c)       back_ground=c%NUMCOLORS;\
  90.                                  XSetBackground(dpy,draw_gc,color[back_ground].pixel);\
  91.                                  XSetBackground(dpy,reverse_gc,color[back_ground].pixel);\
  92.                                  XSetBackground(dpy,erase_gc,color[back_ground].pixel);\
  93.                                  XSetForeground(dpy,erase_gc,color[back_ground].pixel);\
  94.                  XSetWindowBackground(dpy,win,color[back_ground].pixel);\
  95.                  redraw_graphics();
  96.  
  97. #define set_pen_width(w)         XSetLineAttributes(dpy, draw_gc, w, LineSolid, \
  98.                             CapProjecting, JoinMiter);\
  99.                                  xgr_pen.pw = w;
  100. #define set_pen_height(h)        XSetLineAttributes(dpy, draw_gc, h, LineSolid, \
  101.                             CapProjecting, JoinMiter);\
  102.                                  xgr_pen.ph = h;
  103. #define set_pen_x(x)             nop()
  104. #define set_pen_y(y)             nop()
  105. #define get_palette(x,y,z,w)     nop()
  106. #define set_palette(x,y,z,w)     nop()
  107.  
  108. /* pen_info is a stucture type with fields for the various
  109.    pen characteristics including the location, size, color,
  110.    mode (e.g. XOR or COPY), pattern, visibility (0 = visible) */
  111.  
  112. typedef struct {
  113.   int color;
  114.   int xpos;
  115.   int ypos;
  116.   int vis;
  117.   int pw;
  118.   int ph;
  119.   GC  pm;
  120. } pen_info;
  121.  
  122. extern pen_info xgr_pen;
  123.  
  124. #define p_info_x(p)              (p.xpos)
  125. #define p_info_y(p)              (p.ypos)
  126.  
  127. /* All these should take an argument, like the two just above.
  128.    Then we could support multiple turtles.
  129.  */
  130.  
  131. #define pen_width                xgr_pen.pw
  132. #define pen_height               xgr_pen.ph
  133. #define pen_color                xgr_pen.color
  134. #define pen_mode                 xgr_pen.pm
  135. #define pen_vis                  xgr_pen.vis
  136. #define pen_x                    (xgr_pen.xpos)
  137. #define pen_y                    (xgr_pen.ypos)
  138. #define get_node_pen_pattern     (cons(make_intnode(-1), NIL))
  139. #define get_node_pen_mode        Get_node_pen_mode(xgr_pen.pm)
  140.  
  141. #define pen_reverse              pen_mode=reverse_gc
  142. #define pen_erase                pen_mode=erase_gc
  143. #define pen_down                 pen_mode=draw_gc
  144.  
  145.  
  146. /* Hmn, buttons are a problem, aren't they? */
  147. #define button                   FALSE
  148. #define mouse_x                  get_mouse_x()
  149. #define mouse_y                  get_mouse_y()
  150.  
  151. /* There seems little point in implementing these unless we put
  152.    everything in one window.  (Possibly use a slave xterm?)
  153.  */
  154. #define full_screen              nop()
  155. #define split_screen             nop()
  156. #define text_screen              nop()
  157.  
  158. #define save_pen(p)              memcpy(((char *)(p)),((char *)(&xgr_pen)),sizeof(pen_info))
  159. #define restore_pen(p)           memcpy(((char *)(&xgr_pen)),((char *)(p)),sizeof(pen_info))
  160.  
  161. #define plain_xor_pen()          pen_reverse
  162.  
  163. #define label(s)                 XDrawString(dpy,win,xgr_pen.pm,\
  164.                                  xgr_pen.xpos,xgr_pen.ypos,\
  165.                                  (s), strlen(s))
  166.  
  167. #define tone(p,d)                nop()
  168. #define get_pen_pattern(p)       nop()
  169. #define set_pen_pattern(p)       nop()
  170. #define set_list_pen_pattern(p)  nop()
  171.  
  172. /* The sparc has fmod.  So I use it. */
  173. /* #define fmod(x,y)                x */
  174.  
  175.  
  176. extern void nop();
  177.  
  178. /* Global X variables. */
  179. extern int screen_height, screen_width;
  180.  
  181. extern Display    *dpy;        /* X server connection */
  182. extern Window      win;        /* Window ID */
  183. extern GC          draw_gc,     /* GC to draw with */
  184.                    erase_gc,    /* GC to draw with */
  185.                    reverse_gc;  /* GC to draw with */
  186.  
  187. extern XColor color[16];
  188. extern XColor dummy;
  189.  
  190. extern NODE * Get_node_pen_mode();
  191.  
  192. extern int get_mouse_x(), get_mouse_y();
  193.  
  194.  
  195. /* Avoid name conflicts.  Note: if xgraphics.c uses True and
  196.    False, bad things are likely to happen.
  197.  */
  198. #undef True
  199. #undef False
  200.  
  201.  
  202.