home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume13 / ishido / part01 < prev    next >
Encoding:
Internet Message Format  |  1992-04-09  |  18.7 KB

  1. Path: uunet!zephyr.ens.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v13i072:  ishido - Unix/X11 solitare game, Part01/02 (REPOST)
  5. Message-ID: <2655@master.CNA.TEK.COM>
  6. Date: 24 Mar 92 20:36:29 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 723
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: jjs40@cd.amdahl.COM (John Sullivan)
  12. Posting-number: Volume 13, Issue 70
  13. Archive-name: ishido/Part01
  14. Environment: Unix, X11
  15.  
  16.     [This repost appears not to have gone out so it is reposted again.]
  17.  
  18.     [The first posting of Part01 unpacked with wrong counts due to line
  19.      wrapping on the original files. This version is fixed.  -br]
  20.  
  21. Here is a Unix/X11 port of an entertaining solitare game.
  22.  
  23. #! /bin/sh
  24. # This is a shell archive.  Remove anything before this line, then unpack
  25. # it by saving it into a file and typing "sh file".  To overwrite existing
  26. # files, type "sh file -c".  You can also feed this as standard input via
  27. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  28. # will see the following message at the end:
  29. #        "End of archive 1 (of 2)."
  30. # Contents:  README Makefile bitmap gl.c gl.h
  31. # Wrapped by billr@saab on Mon Mar 23 13:27:40 1992
  32. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  33. if test -f 'README' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'README'\"
  35. else
  36. echo shar: Extracting \"'README'\" \(1961 characters\)
  37. sed "s/^X//" >'README' <<'END_OF_FILE'
  38. XIshido is a (questionably) ancient solitare game of matching stone tiles. 
  39. XThere is a on-line rule screen in the game.  It is known to compile and
  40. Xwork on Suns running SunOS 4.1 and 386/486 systems running ISC SysV.
  41. X
  42. XThis archive contains the following files:
  43. X    bitmaps  - directory of X11 bitmaps used for the tiles.
  44. X    gl.c     - An X11-based graphics library for an extra level of 
  45. X               simplicity/portability/flexibility.  Not comprehensive.
  46. X    gl.h     - Include file for gl.c.
  47. X    ishido.c - The actual source code of the game.
  48. X
  49. XTo install ishido:
  50. X    1. Edit the Makefile.  Set LIBS for the system you are on, and
  51. X       set the high score file and game directory at the top of
  52. X       the file.
  53. X    2. Type "make install".
  54. X
  55. XTo run ishido:
  56. X    Type 'ishido -h' for a list of options.
  57. X
  58. XI wrote this game because it's fairly simple and interesting.  It also
  59. Xgave me an opportunity to do some hacking around with X11 while avoiding
  60. Xthe time-consuming trap of dealing with Xt.  Implementation took most of
  61. Xa weekend, so there is no great depth to the code.  However, everything
  62. Xseems to work well and correctly, so I am not inclined to do much more
  63. Xwork on it. Finally, it is always great fun to unlease a new game upon one's 
  64. Xco-workers just to bring productivity to a crashing halt.
  65. X
  66. XA note on strategy: The best way to get high scores is to work on setting up
  67. Xfour-way matches and ignore all else.  The first two to concentrate on are
  68. Xthe ones you can build around the middle pieces.  Use the corner pieces
  69. Xfor the next four four-way matches.  My office mate can regularly get 4-6
  70. Xfour-way matches, and has gotten as many as eight.
  71. X
  72. XFinally, a disclaimer: This code was developed entirely on my system at
  73. Xhome, and I didn't even think about working this program while at work.
  74. XAmdahl has no responsibility for the existence of this program and 
  75. Xshares none of my political views.
  76. X
  77. X- John Sullivan, Amdahl Corporation
  78. X     jjs40@cd.amdahl.com
  79. END_OF_FILE
  80. if test 1961 -ne `wc -c <'README'`; then
  81.     echo shar: \"'README'\" unpacked with wrong size!
  82. fi
  83. # end of 'README'
  84. fi
  85. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  86.   echo shar: Will not clobber existing file \"'Makefile'\"
  87. else
  88. echo shar: Extracting \"'Makefile'\" \(904 characters\)
  89. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  90. X################################################################################
  91. X# Makefile for Ishido                                                  
  92. X#
  93. X################################################################################
  94. X
  95. XHIGH_SCORE_FILE=/home/cd1/evu2/jjs40/tmp/ishido_scores
  96. XGAME_DIR=/home/cd1/evu2/jjs40/bin
  97. X
  98. X################################################################################
  99. X
  100. X# Libs for SunOS 4.1
  101. XLIBS= -lX11
  102. X
  103. X# Libs for ISC Unix Sys V
  104. X# LIBS= -lX11 -linet -lpt
  105. X
  106. XCFLAGS=-DHIGH_SCORE_FILE='"$(HIGH_SCORE_FILE)"'
  107. X
  108. X################################################################################
  109. X
  110. XOBJS= gl.o ishido.o
  111. X
  112. X################################################################################
  113. X
  114. Xall: ishido
  115. X
  116. Xishido: $(OBJS)
  117. X    cc -o ishido $(OBJS) $(LIBS)
  118. X
  119. Xinstall: all
  120. X    cp ishido $(GAME_DIR)
  121. X
  122. Xclean:
  123. X    -rm *.o
  124. X    -rm Part*
  125. X    -rm ishido
  126. X
  127. Xshar: clean
  128. X    find . -print | makekit
  129. END_OF_FILE
  130. if test 904 -ne `wc -c <'Makefile'`; then
  131.     echo shar: \"'Makefile'\" unpacked with wrong size!
  132. fi
  133. # end of 'Makefile'
  134. fi
  135. if test ! -d 'bitmap' ; then
  136.     echo shar: Creating directory \"'bitmap'\"
  137.     mkdir 'bitmap'
  138. fi
  139. if test -f 'gl.c' -a "${1}" != "-c" ; then 
  140.   echo shar: Will not clobber existing file \"'gl.c'\"
  141. else
  142. echo shar: Extracting \"'gl.c'\" \(9528 characters\)
  143. sed "s/^X//" >'gl.c' <<'END_OF_FILE'
  144. X/*
  145. X * gl.c - Simple graphics library, based on X11. 
  146. X *
  147. X * Author:  John Sullivan, Amdahl Corporation (jjs40@cd.amdahl.com)
  148. X *
  149. X */
  150. X
  151. X/*****************************************************************************/
  152. X
  153. X#include "gl.h"
  154. X
  155. X#include <X11/Xlib.h>
  156. X#include <X11/Xutil.h>
  157. X#include <X11/Xos.h>
  158. X
  159. X#include <stdlib.h>
  160. X#include <stdio.h>
  161. X
  162. X/*****************************************************************************/
  163. X
  164. XDisplay        *gl_display;
  165. Xint             gl_screen;
  166. XWindow          gl_window;
  167. XGC              gl_gc;
  168. XGL_REDRAW_FUNC  gl_redraw_fn;
  169. XGL_EVENT_FUNC   gl_event_fn;
  170. Xint             gl_main;
  171. Xint             gl_screen_width;
  172. Xint             gl_screen_height;
  173. Xint             gl_fg;
  174. Xint             gl_bg;
  175. X
  176. X/*****************************************************************************/
  177. X
  178. Xvoid
  179. Xgl_bomb(s)
  180. X    char           *s;
  181. X{
  182. X    printf("gl_bomb(): %s\n");
  183. X    exit(1);
  184. X};
  185. X
  186. X/*****************************************************************************/
  187. X
  188. XGL_PIXEL
  189. Xgl_alloc_color(name)
  190. X    char           *name;
  191. X{
  192. X    XColor          c1, c2;
  193. X    int             res;
  194. X
  195. X    res = XAllocNamedColor(gl_display,
  196. X                   DefaultColormap(gl_display, gl_screen),
  197. X                   name, &c1, &c2);
  198. X    if (!res) {
  199. X        gl_bomb("Unable to allocate color.");
  200. X    };
  201. X    return (c1.pixel);
  202. X};
  203. X
  204. X/*****************************************************************************/
  205. X
  206. Xvoid
  207. Xgl_redraw_func(func)
  208. X    GL_REDRAW_FUNC  func;
  209. X{
  210. X    gl_redraw_fn = func;
  211. X};
  212. X
  213. X/*****************************************************************************/
  214. X
  215. Xvoid
  216. Xgl_event_func(func)
  217. X    GL_EVENT_FUNC   func;
  218. X{
  219. X    gl_event_fn = func;
  220. X};
  221. X
  222. X/*****************************************************************************/
  223. X
  224. Xchar            gl_event_str_buf[GL_BUFSIZE];
  225. X
  226. Xchar           *
  227. Xgl_event_str(gl_ev)
  228. X    GL_EVENT       *gl_ev;
  229. X{
  230. X    switch (gl_ev->type) {
  231. X    case GL_EVENT_KEY:
  232. X        sprintf(gl_event_str_buf,
  233. X            "gl_event: key '%c' at (%d,%d)",
  234. X            gl_ev->key, gl_ev->x, gl_ev->y);
  235. X        break;
  236. X    case GL_EVENT_BUTTON:
  237. X        sprintf(gl_event_str_buf,
  238. X            "gl_event: button %d at (%d,%d)",
  239. X            gl_ev->button, gl_ev->x, gl_ev->y);
  240. X    };
  241. X    return (gl_event_str_buf);
  242. X};
  243. X
  244. X/*****************************************************************************/
  245. X
  246. Xvoid
  247. Xgl_main_loop()
  248. X{
  249. X    XEvent          xev;
  250. X    XButtonEvent   *xbev;
  251. X    XKeyEvent      *xkev;
  252. X    GL_EVENT        gl_ev;
  253. X    char            buf[GL_BUFSIZE];
  254. X
  255. X    gl_main = 1;
  256. X    while (gl_main) {
  257. X        XNextEvent(gl_display, &xev);
  258. X        switch (xev.type) {
  259. X        case Expose:
  260. X            if (gl_redraw_fn != NULL) {
  261. X                (*gl_redraw_fn) ();
  262. X            };
  263. X            break;
  264. X        case KeyPress:
  265. X            gl_ev.type = GL_EVENT_KEY;
  266. X            xkev = (XKeyEvent *) & xev;
  267. X            XLookupString(xkev, buf, GL_BUFSIZE, NULL, NULL);
  268. X            gl_ev.key = buf[0];
  269. X            gl_ev.x = xkev->x;
  270. X            gl_ev.y = xkev->y;
  271. X            if (gl_event_fn != NULL) {
  272. X                (*gl_event_fn) (&gl_ev);
  273. X            };
  274. X            break;
  275. X        case ButtonPress:
  276. X            gl_ev.type = GL_EVENT_BUTTON;
  277. X            xbev = (XButtonEvent *) & xev;
  278. X            gl_ev.button = xbev->button;
  279. X            gl_ev.x = xbev->x;
  280. X            gl_ev.y = xbev->y;
  281. X            if (gl_event_fn != NULL) {
  282. X                (*gl_event_fn) (&gl_ev);
  283. X            };
  284. X            break;
  285. X        };
  286. X    };
  287. X};
  288. X
  289. X/*****************************************************************************/
  290. X
  291. Xvoid
  292. Xgl_exit_main()
  293. X{
  294. X    gl_main = 0;
  295. X};
  296. X
  297. X/*****************************************************************************/
  298. X
  299. Xvoid
  300. Xgl_set_fg(c)
  301. X    GL_PIXEL        c;
  302. X{
  303. X    XGCValues       gcv;
  304. X
  305. X    gl_fg = c;
  306. X    gcv.foreground = gl_fg;
  307. X    XChangeGC(gl_display, gl_gc, GCForeground, &gcv);
  308. X};
  309. X
  310. X/*****************************************************************************/
  311. X
  312. Xvoid
  313. Xgl_set_bg(c)
  314. X    GL_PIXEL        c;
  315. X{
  316. X    XGCValues       gcv;
  317. X
  318. X    gl_bg = c;
  319. X    gcv.background = gl_bg;
  320. X    XChangeGC(gl_display, gl_gc, GCBackground, &gcv);
  321. X};
  322. X
  323. X/*****************************************************************************/
  324. X
  325. Xvoid
  326. Xgl_set_fg_bg(c1, c2)
  327. X    GL_PIXEL        c1, c2;
  328. X{
  329. X    gl_set_fg(c1);
  330. X    gl_set_bg(c2);
  331. X};
  332. X
  333. X/*****************************************************************************/
  334. X
  335. Xvoid
  336. Xgl_draw_point(x, y)
  337. X    int             x, y;
  338. X{
  339. X    XDrawPoint(gl_display, gl_window, gl_gc, x, y);
  340. X};
  341. X
  342. X/*****************************************************************************/
  343. X
  344. Xvoid
  345. Xgl_draw_line(x1, y1, x2, y2)
  346. X    int             x1, y1;
  347. X    int             x2, y2;
  348. X{
  349. X    XDrawLine(gl_display, gl_window, gl_gc, x1, y1, x2, y2);
  350. X};
  351. X
  352. X/*****************************************************************************/
  353. X
  354. Xvoid
  355. Xgl_draw_rect(x1, y1, w, h)
  356. X    int             x1, y1;
  357. X    int             w, h;
  358. X{
  359. X    XDrawRectangle(gl_display, gl_window, gl_gc, x1, y1, w - 1, h - 1);
  360. X};
  361. X
  362. X/*****************************************************************************/
  363. X
  364. Xvoid
  365. Xgl_fill_rect(x1, y1, w, h)
  366. X    int             x1, y1;
  367. X    int             w, h;
  368. X{
  369. X    XFillRectangle(gl_display, gl_window, gl_gc, x1, y1, w, h);
  370. X};
  371. X
  372. X/*****************************************************************************/
  373. X
  374. Xvoid
  375. Xgl_draw_text(x, y, s)
  376. X    int             x, y;
  377. X    char           *s;
  378. X{
  379. X    int             len;
  380. X
  381. X    len = strlen(s);
  382. X    y = y + GL_FONT_DESCENT;
  383. X    XDrawImageString(gl_display, gl_window, gl_gc, x, y, s, len);
  384. X};
  385. X
  386. X/*****************************************************************************/
  387. X
  388. Xvoid
  389. Xgl_ring_bell()
  390. X{
  391. X    XBell(gl_display, 75);
  392. X};
  393. X
  394. X/*****************************************************************************/
  395. X
  396. XGL_BITMAP
  397. Xgl_load_bitmap(data, w, h)
  398. X    char           *data;
  399. X    int             w, h;
  400. X{
  401. X    return (XCreateBitmapFromData(gl_display, gl_window, data, w, h));
  402. X};
  403. X
  404. X/*****************************************************************************/
  405. X
  406. Xvoid
  407. Xgl_draw_bitmap(bitmap, x, y, w, h)
  408. X    GL_BITMAP       bitmap;
  409. X    int             x, y;
  410. X    int             w, h;
  411. X{
  412. X    XCopyPlane(gl_display, bitmap, gl_window, gl_gc, 0, 0, w, h, x, y,
  413. X1);
  414. X};
  415. X
  416. X/*****************************************************************************/
  417. X
  418. Xvoid
  419. Xgl_init(argc, argv, w, h)
  420. X    int             argc;
  421. X    char          **argv;
  422. X    int             w, h;
  423. X{
  424. X    XSizeHints      hints;
  425. X    XGCValues       gcv;
  426. X    unsigned long   gcvm;
  427. X
  428. X    gl_display = XOpenDisplay(NULL);
  429. X    if (!gl_display) {
  430. X        gl_bomb("Unable to connect to display.");
  431. X    };
  432. X
  433. X    gl_redraw_fn = NULL;
  434. X    gl_event_fn = NULL;
  435. X
  436. X    gl_screen_width = w;
  437. X    gl_screen_height = h;
  438. X    hints.width = gl_screen_width;
  439. X    hints.height = gl_screen_height;
  440. X    hints.flags = PSize;
  441. X
  442. X    gl_fg = gl_alloc_color(GL_FOREGROUND);
  443. X    gl_bg = gl_alloc_color(GL_BACKGROUND);
  444. X    gcv.foreground = gl_fg;
  445. X    gcv.background = gl_bg;
  446. X    gcv.font = XLoadFont(gl_display, GL_FONT);
  447. X    gcvm = GCForeground | GCBackground | GCFont;
  448. X
  449. X    gl_screen = DefaultScreen(gl_display);
  450. X    gl_window = XCreateSimpleWindow(gl_display,
  451. X               RootWindow(gl_display, gl_screen), 0, 0, hints.width,
  452. X               hints.height, 2, gcv.foreground, gcv.background);
  453. X
  454. X    XSetStandardProperties(gl_display, gl_window, "GL", "GL",
  455. X                   None, argv, argc, &hints);
  456. X    XSelectInput(gl_display, gl_window,
  457. X             ExposureMask | KeyPressMask | ButtonPressMask);
  458. X
  459. X    gl_gc = XCreateGC(gl_display, gl_window, gcvm, &gcv);
  460. X};
  461. X
  462. X/*****************************************************************************/
  463. X
  464. Xvoid
  465. Xgl_start()
  466. X{
  467. X    XMapWindow(gl_display, gl_window);
  468. X    XSync(gl_display);
  469. X};
  470. X
  471. X/*****************************************************************************/
  472. X
  473. Xvoid
  474. Xgl_exit()
  475. X{
  476. X    XCloseDisplay(gl_display);
  477. X    exit(0);
  478. X};
  479. X
  480. X/*****************************************************************************/
  481. X
  482. Xvoid
  483. Xgu_draw_border(x, y, w, h, z)
  484. X    int             x, y;
  485. X    int             w, h;
  486. X    int             z;
  487. X{
  488. X    int             i;
  489. X
  490. X    for (i = 1; i <= z; i++) {
  491. X        gl_draw_rect(x - i, y - i, w + i * 2, h + i * 2);
  492. X    };
  493. X};
  494. X
  495. X/*****************************************************************************/
  496. X
  497. Xvoid
  498. Xgu_draw_centered_text(x, y, s)
  499. X    int             x, y;
  500. X    char           *s;
  501. X{
  502. X    int             sx, sy;
  503. X
  504. X    sx = x - (strlen(s) * GL_FONT_WIDTH) / 2;
  505. X    sy = y - GL_FONT_HEIGHT / 2;
  506. X    gl_draw_text(sx, sy, s);
  507. X};
  508. X
  509. X/*****************************************************************************/
  510. X
  511. XGL_BOOL
  512. Xgu_event_in_rect(event, x, y, w, h)
  513. X    GL_EVENT       *event;
  514. X    int             x, y;
  515. X    int             w, h;
  516. X{
  517. X    x = event->x - x;
  518. X    y = event->y - y;
  519. X    return ((x >= 0) && (x < w) && (y >= 0) && (y < h));
  520. X};
  521. X
  522. X/*****************************************************************************/
  523. X
  524. Xvoid
  525. Xgb_draw_button(btn)
  526. X    GB_BUTTON      *btn;
  527. X{
  528. X    gl_set_fg(btn->border);
  529. X    gu_draw_border(btn->x, btn->y, btn->w, btn->h, 2);
  530. X    gl_set_fg(btn->background);
  531. X    gl_fill_rect(btn->x, btn->y, btn->w, btn->h);
  532. X    gl_set_fg_bg(btn->text, btn->background);
  533. X    gu_draw_centered_text(btn->x + btn->w / 2, btn->y + btn->h / 2,
  534. Xbtn->label);
  535. X};
  536. X
  537. X/*****************************************************************************/
  538. X
  539. Xvoid
  540. Xgb_draw_buttons(n, btn)
  541. X    int             n;
  542. X    GB_BUTTON      *btn;
  543. X{
  544. X    int             i;
  545. X
  546. X    for (i = 0; i < n; i++) {
  547. X        gb_draw_button(&(btn[i]));
  548. X    };
  549. X};
  550. X
  551. X/*****************************************************************************/
  552. X
  553. XGL_BOOL
  554. Xgb_event_in_button(event, btn)
  555. X    GL_EVENT       *event;
  556. X    GB_BUTTON      *btn;
  557. X{
  558. X    return (gu_event_in_rect(event, btn->x, btn->y, btn->w, btn->h));
  559. X};
  560. X
  561. X/*****************************************************************************/
  562. X
  563. Xvoid
  564. Xgb_button_press(event, btn)
  565. X    GL_EVENT       *event;
  566. X    GB_BUTTON      *btn;
  567. X{
  568. X    if (btn->event_fn != NULL) {
  569. X        (*(btn->event_fn)) (event);
  570. X    };
  571. X};
  572. X
  573. X/*****************************************************************************/
  574. X
  575. XGL_BOOL
  576. Xgb_button_event(event, n, btn)
  577. X    GL_EVENT       *event;
  578. X    int             n;
  579. X    GB_BUTTON      *btn;
  580. X{
  581. X    int             i;
  582. X
  583. X    for (i = 0; i < n; i++) {
  584. X        if (gb_event_in_button(event, &(btn[i]))) {
  585. X            gb_button_press(event, &(btn[i]));
  586. X            return (GL_TRUE);
  587. X        };
  588. X    };
  589. X    return (GL_FALSE);
  590. X};
  591. X
  592. X/*****************************************************************************/
  593. END_OF_FILE
  594. if test 9528 -ne `wc -c <'gl.c'`; then
  595.     echo shar: \"'gl.c'\" unpacked with wrong size!
  596. fi
  597. # end of 'gl.c'
  598. fi
  599. if test -f 'gl.h' -a "${1}" != "-c" ; then 
  600.   echo shar: Will not clobber existing file \"'gl.h'\"
  601. else
  602. echo shar: Extracting \"'gl.h'\" \(3085 characters\)
  603. sed "s/^X//" >'gl.h' <<'END_OF_FILE'
  604. X/*
  605. X * gl.h - Header file for gl.c graphics functions.  
  606. X *
  607. X * Note: This file can be included without including any X11 header files.
  608. X *
  609. X * Author:  John Sullivan, Amdahl Corporation (jjs40@cd.amdahl.com)
  610. X *
  611. X */
  612. X
  613. X/*****************************************************************************/
  614. X/* Some defines.                                                       
  615. X*/
  616. X/*****************************************************************************/
  617. X
  618. X#define GL_SCREEN_DEPTH        8
  619. X#define GL_FOREGROUND        "white"
  620. X#define GL_BACKGROUND        "black"
  621. X#define GL_FONT                "8x13"
  622. X#define GL_FONT_WIDTH        8
  623. X#define GL_FONT_HEIGHT        16
  624. X#define GL_FONT_DESCENT        13
  625. X#define GL_BUFSIZE            128
  626. X
  627. X/*****************************************************************************/
  628. X/* Some GL types                                                       
  629. X*/
  630. X/*****************************************************************************/
  631. X
  632. X#define GL_FALSE    0
  633. X#define GL_TRUE        1
  634. Xtypedef int     GL_BOOL;
  635. X
  636. X#define GL_EVENT_KEY    0
  637. X#define GL_EVENT_BUTTON    1
  638. Xtypedef unsigned long GL_EVENT_TYPE;
  639. X
  640. Xtypedef struct GL_EVENT_S {
  641. X    GL_EVENT_TYPE   type;
  642. X    int             x, y;
  643. X    int             button;
  644. X    char            key;
  645. X}               GL_EVENT;
  646. X
  647. Xtypedef unsigned long GL_PIXEL;
  648. Xtypedef unsigned long GL_BITMAP;
  649. X
  650. Xtypedef void    (*GL_REDRAW_FUNC) ();
  651. Xtypedef void    (*GL_EVENT_FUNC) ();
  652. X
  653. X/*****************************************************************************/
  654. X/* Function externs.                                                   
  655. X*/
  656. X/*****************************************************************************/
  657. X
  658. Xextern void     gl_bomb();
  659. Xextern GL_PIXEL gl_alloc_color();
  660. Xextern void     gl_redraw_func();
  661. Xextern void     gl_event_func();
  662. Xextern char    *gl_event_str();
  663. Xextern void     gl_main_loop();
  664. Xextern void     gl_exit_main();
  665. Xextern void     gl_set_fg();
  666. Xextern void     gl_set_bg();
  667. Xextern void     gl_set_fg_bg();
  668. Xextern void     gl_draw_point();
  669. Xextern void     gl_draw_line();
  670. Xextern void     gl_draw_rect();
  671. Xextern void     gl_fill_rect();
  672. Xextern void     gl_draw_text();
  673. Xextern void     gl_ring_bell();
  674. Xextern GL_BITMAP gl_load_bitmap();
  675. Xextern void     gl_draw_bitmap();
  676. Xextern void     gl_init();
  677. Xextern void     gl_start();
  678. Xextern void     gl_exit();
  679. X
  680. X/**********************************************************************
  681. X*******/
  682. X
  683. Xextern void     gu_draw_border();
  684. Xextern void     gu_draw_centered_text();
  685. Xextern GL_BOOL  gu_event_in_rect();
  686. X
  687. X/**********************************************************************
  688. X*******/
  689. X
  690. X#define GB_BUTTON_LABEL_LEN    16
  691. X
  692. Xtypedef struct GB_BUTTON_S {
  693. X    int             x, y;
  694. X    int             w, h;
  695. X    GL_PIXEL        border;
  696. X    GL_PIXEL        background;
  697. X    GL_PIXEL        flash;
  698. X    GL_PIXEL        text;
  699. X    char            label[GB_BUTTON_LABEL_LEN];
  700. X    GL_EVENT_FUNC   event_fn;
  701. X}               GB_BUTTON;
  702. X
  703. X/**********************************************************************
  704. X*******/
  705. X
  706. Xextern void     gb_draw_button();
  707. Xextern void     gb_draw_buttons();
  708. Xextern GL_BOOL  gb_event_in_button();
  709. Xextern void     gb_button_press();
  710. Xextern GL_BOOL  gb_button_event();
  711. END_OF_FILE
  712. if test 3085 -ne `wc -c <'gl.h'`; then
  713.     echo shar: \"'gl.h'\" unpacked with wrong size!
  714. fi
  715. # end of 'gl.h'
  716. fi
  717. echo shar: End of archive 1 \(of 2\).
  718. cp /dev/null ark1isdone
  719. MISSING=""
  720. for I in 1 2 ; do
  721.     if test ! -f ark${I}isdone ; then
  722.     MISSING="${MISSING} ${I}"
  723.     fi
  724. done
  725. if test "${MISSING}" = "" ; then
  726.     echo You have unpacked both archives.
  727.     rm -f ark[1-9]isdone
  728. else
  729.     echo You still need to unpack the following archives:
  730.     echo "        " ${MISSING}
  731. fi
  732. ##  End of shell archive.
  733. exit 0
  734.