home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume20 / xboing / part21 < prev    next >
Encoding:
Text File  |  1993-09-03  |  54.3 KB  |  1,683 lines

  1. Newsgroups: comp.sources.x
  2. From: jck@kimba.catt.citri.edu.au (Justin Kibell)
  3. Subject: v20i128:  xboing - a simple blockout type game, Part21/26
  4. Message-ID: <1993Sep3.123544.8398@sparky.sterling.com>
  5. X-Md4-Signature: 469cdfed85615cbe120986ce38999936
  6. Sender: chris@sparky.sterling.com (Chris Olson)
  7. Organization: Sterling Software
  8. Date: Fri, 3 Sep 1993 12:35:44 GMT
  9. Approved: chris@sterling.com
  10.  
  11. Submitted-by: jck@kimba.catt.citri.edu.au (Justin Kibell)
  12. Posting-number: Volume 20, Issue 128
  13. Archive-name: xboing/part21
  14. Environment: X11, xpm, color
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  audio/HPaudio.c audio/LINUXaudio.c ball.h bitmaps/flag.xpm
  21. #   bitmaps/icon.xpm bitmaps/mouse.xpm bitmaps/titleI.xpm blocks.h
  22. #   error.c level.h mess.c sounds/ballshot.au.uue sounds/boing.au.uue
  23. #   sounds/toggle.au.uue sounds/touch.au.uue
  24. # Wrapped by chris@sparky on Fri Sep  3 07:14:49 1993
  25. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  26. echo If this archive is complete, you will see the following message:
  27. echo '          "shar: End of archive 21 (of 26)."'
  28. if test -f 'audio/HPaudio.c' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'audio/HPaudio.c'\"
  30. else
  31.   echo shar: Extracting \"'audio/HPaudio.c'\" \(3547 characters\)
  32.   sed "s/^X//" >'audio/HPaudio.c' <<'END_OF_FILE'
  33. X#include "copyright.h"
  34. X
  35. X/* HP Audio - .au much the same as how LINUXaudio.c is done */
  36. X/*            I`m not sure but does the HP audio device accept .au data
  37. X *            and know what to do with the header?? Anyone know.
  38. X */
  39. X
  40. X/*
  41. X *  Include file dependencies:
  42. X */
  43. X
  44. X#include <stdio.h>
  45. X#include <fcntl.h>
  46. X
  47. X#include "audio.h"
  48. X
  49. X/*
  50. X *  Internal macro definitions:
  51. X */
  52. X
  53. X#define BUFFER_SIZE                (1024 * 32)    /* 32K */
  54. X
  55. X/*
  56. X *  Internal type declarations:
  57. X */
  58. X
  59. X/*
  60. X *  Internal variable declarations:
  61. X */
  62. X
  63. Xstatic char                *Audio_dev = "/dev/audio";
  64. Xstatic int                 Audio_fd;
  65. X/* size should depend on sample_rate */
  66. Xstatic unsigned char       buf[BUFFER_SIZE];       
  67. Xstatic char             errorString[255];
  68. Xstatic int                 parentid = 0;
  69. X
  70. X#if NeedFunctionPrototypes
  71. Xint SetUpAudioSystem(Display *display)
  72. X#else
  73. Xint SetUpAudioSystem(display)
  74. X    Display *display;
  75. X#endif
  76. X{
  77. X    /* Try to open the audio device */
  78. X     if (Audio_fd = open(Audio_dev, O_WRONLY))
  79. X      {    
  80. X        /* Success - audio device opened */
  81. X          return True;
  82. X      }
  83. X     else
  84. X      {
  85. X        ErrorMessage("Error: Cannot open audio device.");
  86. X
  87. X        /* Bummer - cannot open audio device */
  88. X          return False;
  89. X      }
  90. X}
  91. X
  92. X#if NeedFunctionPrototypes
  93. Xvoid FreeAudioSystem(void)
  94. X#else
  95. Xvoid FreeAudioSystem()
  96. X#endif
  97. X{
  98. X    flushAudioDevice();
  99. X
  100. X    /* Close the audio device */
  101. X     if (close(Audio_fd) < 0)
  102. X        ErrorMessage("Error: Cannot open audio device.");
  103. X}
  104. X
  105. X#if NeedFunctionPrototypes
  106. Xstatic void flushAudioDevice(void)
  107. X#else
  108. Xstatic void flushAudioDevice()
  109. X#endif
  110. X{
  111. X     /* Flush any audio activity - hope this works */
  112. X     if (ioctl(Audio_fd, I_FLUSH, FLUSHW) < 0)
  113. X      {
  114. X          sprintf(errorString, "Warning: Unable to flush audio device.");
  115. X          ErrorMessage(errorString);
  116. X          return;
  117. X      }
  118. X}
  119. X
  120. X#if NeedFunctionPrototypes
  121. Xvoid setNewVolume(unsigned int Volume)
  122. X#else
  123. Xvoid setNewVolume(Volume)
  124. X    unsigned int Volume;
  125. X#endif
  126. X{
  127. X    /* Do nothing here as we don't have audio support */
  128. X}
  129. X
  130. X#if NeedFunctionPrototypes
  131. Xvoid audioDeviceEvents(void)
  132. X#else
  133. Xvoid audioDeviceEvents()
  134. X#endif
  135. X{
  136. X    /* None to do */
  137. X}
  138. X
  139. X#if NeedFunctionPrototypes
  140. Xvoid playSoundFile(char *filename, int volume)
  141. X#else
  142. Xvoid playSoundFile(filename, volume)
  143. X    char *filename;
  144. X    int volume;
  145. X#endif
  146. X{
  147. X    int err, cnt, ifd;
  148. X    char soundfile[1024];
  149. X    char *str;
  150. X
  151. X    if (parentid) kill(parentid, 9);
  152. X    parentid = getpid();
  153. X
  154. X    if (fork() != 0)
  155. X    {
  156. X        if ((str = getenv("XBOING_SOUND_DIR")) != NULL)
  157. X            sprintf(soundfile, "%s/%s.au", str, filename);
  158. X        else
  159. X            sprintf(soundfile, "%s/%s.au", SOUNDS_DIR, filename);
  160. X
  161. X        /* Open the sound file for reading */
  162. X        if ((ifd = open(soundfile, O_RDONLY, 0)) < 0) 
  163. X        {
  164. X            /* Issue an error about not opening sound file */
  165. X            sprintf(errorString, 
  166. X                "Warning: Unable to open sound file %s.", soundfile);
  167. X            ErrorMessage(errorString);
  168. X
  169. X            exit(0);
  170. X        }
  171. X
  172. X        /* At this point, we're all ready to copy the data. */
  173. X        while ((cnt = read(ifd, (char *) buf, BUFFER_SIZE)) >= 0) 
  174. X        {
  175. X            /* If input EOF, write an eof marker */
  176. X            err = write(Audio_fd, (char *)buf, cnt);
  177. X
  178. X            if (err != cnt) 
  179. X            {
  180. X                sprintf(errorString, 
  181. X                    "Warning: Problem while writing to audio device");
  182. X                ErrorMessage(errorString);
  183. X                break;
  184. X            }    
  185. X
  186. X            /* End of file? */
  187. X            if (cnt == 0) break;
  188. X        }
  189. X
  190. X        if (cnt < 0) 
  191. X        {
  192. X            /* Some error - while reading - notify user */
  193. X            sprintf(errorString, 
  194. X                "Warning: Problem while reading soundfile %s", soundfile);
  195. X            ErrorMessage(errorString);
  196. X        }
  197. X     
  198. X        flushAudioDevice();
  199. X
  200. X        /* Close the sound file */
  201. X        (void) close(ifd);
  202. X
  203. X        exit(0);
  204. X    }
  205. X}
  206. X
  207. X#if NeedFunctionPrototypes
  208. Xvoid SetMaximumVolume(int Volume)
  209. X#else
  210. Xvoid SetMaximumVolume(Volume)
  211. X    int Volume;
  212. X#endif
  213. X{
  214. X}
  215. X
  216. END_OF_FILE
  217.   if test 3547 -ne `wc -c <'audio/HPaudio.c'`; then
  218.     echo shar: \"'audio/HPaudio.c'\" unpacked with wrong size!
  219.   fi
  220.   # end of 'audio/HPaudio.c'
  221. fi
  222. if test -f 'audio/LINUXaudio.c' -a "${1}" != "-c" ; then 
  223.   echo shar: Will not clobber existing file \"'audio/LINUXaudio.c'\"
  224. else
  225.   echo shar: Extracting \"'audio/LINUXaudio.c'\" \(3552 characters\)
  226.   sed "s/^X//" >'audio/LINUXaudio.c' <<'END_OF_FILE'
  227. X#include "copyright.h"
  228. X
  229. X/* Soundblaster Audio - PC LINUX - original code by 
  230. X * Peter C. Ludwig, email: urpc01@ux1.uni-dortmund.de 
  231. X */
  232. X
  233. X/*
  234. X *  Include file dependencies:
  235. X */
  236. X
  237. X#include <stdio.h>
  238. X#include <fcntl.h>
  239. X#include <linux/soundcard.h>
  240. X
  241. X#include "audio.h"
  242. X
  243. X/*
  244. X *  Internal macro definitions:
  245. X */
  246. X
  247. X#define BUFFER_SIZE                (1024 * 32)    /* 32K yup */
  248. X
  249. X/*
  250. X *  Internal type declarations:
  251. X */
  252. X
  253. X/*
  254. X *  Internal variable declarations:
  255. X */
  256. X
  257. Xstatic char                *Audio_dev = "/dev/audio";
  258. Xstatic int                 Audio_fd;
  259. X/* size should depend on sample_rate */
  260. Xstatic unsigned char       buf[BUFFER_SIZE];       
  261. Xstatic char             errorString[255];
  262. Xstatic int                 parentid = 0;
  263. X
  264. X#if NeedFunctionPrototypes
  265. Xint SetUpAudioSystem(Display *display)
  266. X#else
  267. Xint SetUpAudioSystem(display)
  268. X    Display *display;
  269. X#endif
  270. X{
  271. X    /* Try to open the audio device */
  272. X     if (Audio_fd = open(Audio_dev, O_WRONLY))
  273. X      {    
  274. X        /* Success - audio device opened */
  275. X          return True;
  276. X      }
  277. X     else
  278. X      {
  279. X        ErrorMessage("Error: Cannot open audio device.");
  280. X
  281. X        /* Bummer - cannot open audio device */
  282. X          return False;
  283. X      }
  284. X}
  285. X
  286. X#if NeedFunctionPrototypes
  287. Xvoid FreeAudioSystem(void)
  288. X#else
  289. Xvoid FreeAudioSystem()
  290. X#endif
  291. X{
  292. X    /* Make sure that the audio device is flushed and reset */
  293. X     ioctl(Audio_fd, SNDCTL_DSP_RESET, 0);
  294. X
  295. X    /* Close the audio device */
  296. X     if (close(Audio_fd) < 0)
  297. X        ErrorMessage("Error: Cannot open audio device.");
  298. X}
  299. X
  300. X#if NeedFunctionPrototypes
  301. Xstatic void flushAudioDevice(void)
  302. X#else
  303. Xstatic void flushAudioDevice()
  304. X#endif
  305. X{
  306. X     /* Flush any audio activity */
  307. X     if (ioctl(Audio_fd, SNDCTL_DSP_SYNC, 0) < 0)
  308. X      {
  309. X          sprintf(errorString, "Warning: Unable to flush audio device.");
  310. X          ErrorMessage(errorString);
  311. X          return;
  312. X      }
  313. X}
  314. X
  315. X#if NeedFunctionPrototypes
  316. Xvoid setNewVolume(unsigned int Volume)
  317. X#else
  318. Xvoid setNewVolume(Volume)
  319. X    unsigned int Volume;
  320. X#endif
  321. X{
  322. X    /* Do nothing here as we don't have audio support */
  323. X}
  324. X
  325. X#if NeedFunctionPrototypes
  326. Xvoid audioDeviceEvents(void)
  327. X#else
  328. Xvoid audioDeviceEvents()
  329. X#endif
  330. X{
  331. X    /* None to do */
  332. X}
  333. X
  334. X#if NeedFunctionPrototypes
  335. Xvoid playSoundFile(char *filename, int volume)
  336. X#else
  337. Xvoid playSoundFile(filename, volume)
  338. X    char *filename;
  339. X    int volume;
  340. X#endif
  341. X{
  342. X    int err, cnt, ifd;
  343. X    char soundfile[1024];
  344. X    char *str;
  345. X
  346. X    if (parentid) kill(parentid, 9);
  347. X    parentid = getpid();
  348. X
  349. X    if (fork() != 0)
  350. X    {
  351. X        if ((str = getenv("XBOING_SOUND_DIR")) != NULL)
  352. X            sprintf(soundfile, "%s/%s.au", str, filename);
  353. X        else
  354. X            sprintf(soundfile, "%s/%s.au", SOUNDS_DIR, filename);
  355. X
  356. X        /* Open the sound file for reading */
  357. X        if ((ifd = open(soundfile, O_RDONLY, 0)) < 0) 
  358. X        {
  359. X            /* Issue an error about not opening sound file */
  360. X            sprintf(errorString, 
  361. X                "Warning: Unable to open sound file %s.", soundfile);
  362. X            ErrorMessage(errorString);
  363. X
  364. X            exit(0);
  365. X        }
  366. X
  367. X        /* At this point, we're all ready to copy the data. */
  368. X        while ((cnt = read(ifd, (char *) buf, BUFFER_SIZE)) >= 0) 
  369. X        {
  370. X            /* If input EOF, write an eof marker */
  371. X            err = write(Audio_fd, (char *)buf, cnt);
  372. X
  373. X            if (err != cnt) 
  374. X            {
  375. X                sprintf(errorString, 
  376. X                    "Warning: Problem while writing to audio device");
  377. X                ErrorMessage(errorString);
  378. X                break;
  379. X            }    
  380. X
  381. X            /* End of file? */
  382. X            if (cnt == 0) break;
  383. X        }
  384. X
  385. X        if (cnt < 0) 
  386. X        {
  387. X            /* Some error - while reading - notify user */
  388. X            sprintf(errorString, 
  389. X                "Warning: Problem while reading soundfile %s", soundfile);
  390. X            ErrorMessage(errorString);
  391. X        }
  392. X     
  393. X        flushAudioDevice();
  394. X
  395. X        /* Close the sound file */
  396. X        (void) close(ifd);
  397. X
  398. X        exit(0);
  399. X    }
  400. X}
  401. X
  402. X#if NeedFunctionPrototypes
  403. Xvoid SetMaximumVolume(int Volume)
  404. X#else
  405. Xvoid SetMaximumVolume(Volume)
  406. X    int Volume;
  407. X#endif
  408. X{
  409. X}
  410. X
  411. END_OF_FILE
  412.   if test 3552 -ne `wc -c <'audio/LINUXaudio.c'`; then
  413.     echo shar: \"'audio/LINUXaudio.c'\" unpacked with wrong size!
  414.   fi
  415.   # end of 'audio/LINUXaudio.c'
  416. fi
  417. if test -f 'ball.h' -a "${1}" != "-c" ; then 
  418.   echo shar: Will not clobber existing file \"'ball.h'\"
  419. else
  420.   echo shar: Extracting \"'ball.h'\" \(3267 characters\)
  421.   sed "s/^X//" >'ball.h' <<'END_OF_FILE'
  422. X#ifndef _BALL_H_
  423. X#define _BALL_H_
  424. X
  425. X#include "copyright.h"
  426. X
  427. X/*
  428. X *  Dependencies on other include files:
  429. X */
  430. X
  431. X#include <X11/Xlib.h>
  432. X
  433. X/*
  434. X *  Constants and macros:
  435. X */
  436. X
  437. X#define BALL_WIDTH  20
  438. X#define BALL_HEIGHT 19
  439. X
  440. X#define BALL_WC     (BALL_WIDTH / 2)
  441. X#define BALL_HC     (BALL_HEIGHT / 2)
  442. X
  443. X#define BIRTH_SLIDES        8
  444. X#define BALL_SLIDES         5
  445. X
  446. X#define MAX_BALLS             5
  447. X
  448. X#define MAX_X_VEL           14
  449. X#define MAX_Y_VEL           14
  450. X
  451. X#define MIN_DY_BALL            2
  452. X#define MIN_DX_BALL            2
  453. X
  454. X#define BALL_ANIM_RATE      50
  455. X#define BIRTH_FRAME_RATE    5
  456. X#define BALL_FRAME_RATE     5
  457. X#define BORDER_ANIM_DELAY   15
  458. X
  459. X#define PADDLE_HIT_SCORE    10
  460. X
  461. X#define BALL_AUTO_ACTIVE_DELAY  3000
  462. X
  463. X#define DIST_BALL_OF_PADDLE 45
  464. X
  465. X#define PADDLE_BALL_FRAME_TILT  10000
  466. X
  467. X
  468. X/*
  469. X *  Type declarations:
  470. X */
  471. X
  472. Xenum BallStates 
  473. X{ 
  474. X    BALL_POP, 
  475. X    BALL_ACTIVE, 
  476. X    BALL_STOP, 
  477. X    BALL_CREATE, 
  478. X    BALL_DIE, 
  479. X    BALL_WAIT, 
  480. X    BALL_READY, 
  481. X    BALL_NONE 
  482. X};
  483. X
  484. Xtypedef struct ball
  485. X{
  486. X    int                waitMode;        /* Ball waiting mode */
  487. X    int                waitingFrame;    /* Frame to wait until */
  488. X    int                newMode;        /* Ball's new mode */
  489. X    int                nextFrame;        /* next frame for something */
  490. X    int                active;            /* True - in use, False - dead */
  491. X    int             oldx;            /* Old x coord of ball centre */
  492. X    int             oldy;            /* Old y coord of ball centre */
  493. X    int             ballx;            /* Current x coord of ball centre */
  494. X    int             bally;            /* Current y coord of ball centre */
  495. X    int             dx;                /* Change in x axis increment */
  496. X    int             dy;                /* Change in y axis increment */
  497. X    int             slide;            /* Current pixmap visible */
  498. X    int             lastPaddleHitFrame;    /* Last frame the ball hit paddle */
  499. X    enum BallStates ballState;        /* The state of the ball */
  500. X} BALL;
  501. X
  502. X/*
  503. X *  Function prototypes:
  504. X */
  505. X
  506. X#if NeedFunctionPrototypes
  507. Xvoid InitialiseBall(Display *display, Window window, Colormap colormap);
  508. Xvoid FreeBall(Display *display);
  509. Xvoid RedrawBall(Display *display, Window window);
  510. Xvoid DrawTheBall(Display *display, Window window, int x, int y, int slide);
  511. Xvoid DrawTheBallBirth(Display *display, Window window, int x, int y, int slide);
  512. Xvoid KillBallNow(Display *display, Window window, int i);
  513. Xvoid GetBallPosition(int *ballX, int *ballY, int i);
  514. Xvoid ResetBallStart(Display *display, Window window);
  515. Xint GetBallMode(int i);
  516. Xvoid ChangeBallMode(int newMode, int i);
  517. Xint AddANewBall(int x, int y, int dx, int dy);
  518. Xvoid ClearAllBalls(void);
  519. Xvoid HandleBallMode(Display *display, Window window);
  520. Xint StartAnotherBall(Display *display, Window window);
  521. Xint IsBallWaiting(void);
  522. Xvoid ClearBall(int i);
  523. Xvoid SplitBallInTwo(Display *display, Window window);
  524. Xvoid ClearBallNow(Display *display, Window window, int i);
  525. Xint GetAnActiveBall(void);
  526. Xint ActivateWaitingBall(void);
  527. X#else
  528. Xint ActivateWaitingBall();
  529. Xint GetAnActiveBall();
  530. Xvoid ClearBallNow();
  531. Xvoid SplitBallInTwo();
  532. Xvoid ClearBall();
  533. Xvoid InitialiseBall();
  534. Xvoid FreeBall();
  535. Xvoid RedrawBall();
  536. Xvoid DrawTheBall();
  537. Xvoid DrawTheBallBirth();
  538. Xvoid KillBallNow();
  539. Xvoid GetBallPosition();
  540. Xvoid ResetBallStart();
  541. Xint GetBallMode();
  542. Xvoid ChangeBallMode();
  543. Xint AddANewBall();
  544. Xvoid ClearAllBalls();
  545. Xvoid HandleBallMode();
  546. Xint StartAnotherBall();
  547. Xint IsBallWaiting();
  548. X#endif
  549. X
  550. Xextern BALL balls[MAX_BALLS];
  551. Xextern int speedLevel;
  552. Xextern int paddleDx;
  553. X
  554. X#endif
  555. END_OF_FILE
  556.   if test 3267 -ne `wc -c <'ball.h'`; then
  557.     echo shar: \"'ball.h'\" unpacked with wrong size!
  558.   fi
  559.   # end of 'ball.h'
  560. fi
  561. if test -f 'bitmaps/flag.xpm' -a "${1}" != "-c" ; then 
  562.   echo shar: Will not clobber existing file \"'bitmaps/flag.xpm'\"
  563. else
  564.   echo shar: Extracting \"'bitmaps/flag.xpm'\" \(3113 characters\)
  565.   sed "s/^X//" >'bitmaps/flag.xpm' <<'END_OF_FILE'
  566. X/* XPM */
  567. Xstatic char * flag_xpm[] = {
  568. X"71 40 4 1",
  569. X"     s None    c None",
  570. X".    c red",
  571. X"X    c white",
  572. X"o    c royalblue",
  573. X".XXXXooooooooX...XooooooooooXX.ooooooooooooooooooooooooooooooooooooooo ",
  574. X"X..XXXXooooooX...XooooooooXX..Xooooooooooooooooooooooooooooooooooooooo ",
  575. X"oXX..XXXXooooX...XooooooXX..XXXooooooooooooooooooooooooooooooooooooooo ",
  576. X"oooXX..XXXXooX...XooooXX..XXXXoooooooooooooooooooooooooooooooooooooooo ",
  577. X"oooooXX..XXXXX...XooXX..XXXXoooooooooooooooooooooooooooooooooooooooooo ",
  578. X"oooooooXX..XXX...XXX..XXXXoooooooooooooooooooooooooXoooooooooooooooooo ",
  579. X"oooooooooXX..X...X..XXXXooooooooooooooooooooooooooXXXooooooooooooooooo ",
  580. X"XXXXXXXXXXXXXX...XXXXXXXXXXXXXXooooooooooooooooooXXXXXoooooooooooooooo ",
  581. X"...............................oooooooooooooooooooXXXooooooooooooooooo ",
  582. X"...............................ooooooooooooooooooooXoooooooooooooooooo ",
  583. X"...............................ooooooooooooooooooooooooooooooooooooooo ",
  584. X"XXXXXXXXXXXXXX...XXXXXXXXXXXXXXooooooooooooooooooooooooooooooooooooooo ",
  585. X"ooooooooXXXX.X...X.XXooooooooooooooooooooooooooooooooooooooooooooooooo ",
  586. X"ooooooXXXX..XX...XX..XXooooooooooooooooooooooooooooooooooooooooooooooo ",
  587. X"ooooXXXX..XXoX...XXXX..XXooooooooooooooooooooooooooooooooooooooooooooo ",
  588. X"ooXXXX..XXoooX...XoXXXX..XXoooooooooooooooooooooooooooooooooXooooooooo ",
  589. X"XXXX..XXoooooX...XoooXXXX..XXoooooooooooooXooooooooooooooooXXXoooooooo ",
  590. X"XX..XXoooooooX...XoooooXXXX..XXooooooooooXXXooooooooooooooXXXXXooooooo ",
  591. X"..XXoooooooooX...XoooooooXXXX..oooooooooXXXXXooooooooooooooXXXoooooooo ",
  592. X"oooooooooooooooooooooooooooooooooooooooooXXXooooooooooooooooXooooooooo ",
  593. X"ooooooooooooooooooooooooooooooooooooooooooXooooooooooooooooooooooooooo ",
  594. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooXoooooooooooooooo ",
  595. X"ooooooooooooooooooooooooooooooooooooooooooooooooooooXXXooooooooooooooo ",
  596. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooXoooooooooooooooo ",
  597. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  598. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  599. X"oooooooooooooooXoooooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  600. X"oooooooooooXooXXXooXoooooooooooooooooooooooooooooooooooooooooooooooooo ",
  601. X"ooooooooooooXXXXXXXooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  602. X"ooooooooooooXXXXXXXooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  603. X"oooooooooooXXXXXXXXXoooooooooooooooooooooooooooooooooooooooooooooooooo ",
  604. X"ooooooooooXXXXXXXXXXXooooooooooooooooooooooooooooooooooooooooooooooooo ",
  605. X"oooooooooooXXXXXXXXXoooooooooooooooooooooooooooooooXoooooooooooooooooo ",
  606. X"ooooooooooooXXXXXXXoooooooooooooooooooooooooooooooXXXooooooooooooooooo ",
  607. X"ooooooooooooXXXXXXXooooooooooooooooooooooooooooooXXXXXoooooooooooooooo ",
  608. X"oooooooooooXooXXXooXooooooooooooooooooooooooooooooXXXooooooooooooooooo ",
  609. X"oooooooooooooooXoooooooooooooooooooooooooooooooooooXoooooooooooooooooo ",
  610. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  611. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ",
  612. X"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo "};
  613. END_OF_FILE
  614.   if test 3113 -ne `wc -c <'bitmaps/flag.xpm'`; then
  615.     echo shar: \"'bitmaps/flag.xpm'\" unpacked with wrong size!
  616.   fi
  617.   # end of 'bitmaps/flag.xpm'
  618. fi
  619. if test -f 'bitmaps/icon.xpm' -a "${1}" != "-c" ; then 
  620.   echo shar: Will not clobber existing file \"'bitmaps/icon.xpm'\"
  621. else
  622.   echo shar: Extracting \"'bitmaps/icon.xpm'\" \(2854 characters\)
  623.   sed "s/^X//" >'bitmaps/icon.xpm' <<'END_OF_FILE'
  624. X/* XPM */
  625. Xstatic char * icon_xpm[] = {
  626. X"50 50 8 1",
  627. X"     c black",
  628. X".    c red",
  629. X"X    c blue",
  630. X"o    c green",
  631. X"O    c yellow",
  632. X"+    c tan",
  633. X"@    c purple",
  634. X"#    c white",
  635. X"                                                  ",
  636. X"                                                  ",
  637. X"                                                  ",
  638. X"                                                  ",
  639. X"      .......   XXXXXXXX   oooooooo   OOOOOOOO    ",
  640. X"      .......   XXXXXXXX   oooooooo   OOOOOOOO    ",
  641. X"      .......   XXXXXXXX   oooooooo   OOOOOOOO    ",
  642. X"      .......   XXXXXXXX   oooooooo   OOOOOOOO    ",
  643. X"                                                  ",
  644. X"                                                  ",
  645. X"                                                  ",
  646. X"      XXXXXXX   ++++++++   ........   oooooooo    ",
  647. X"      XXXXXXX   ++++++++   ........   oooooooo    ",
  648. X"      XXXXXXX   ++++++++   ........   oooooooo    ",
  649. X"      XXXXXXX   ++++++++   ........   oooooooo    ",
  650. X"                                                  ",
  651. X"                                                  ",
  652. X"                                                  ",
  653. X"      OOOOOOO   oooooooo   XXXXXXXX   OOOOOOOO    ",
  654. X"      OOOOOOO   oooooooo   XXXXXXXX   OOOOOOOO    ",
  655. X"      OOOOOOO   oooooooo   XXXXXXXX   OOOOOOOO    ",
  656. X"      OOOOOOO   oooooooo   XXXXXXXX   OOOOOOOO    ",
  657. X"                                                  ",
  658. X"                                                  ",
  659. X"                                                  ",
  660. X"      @@@@@@@     .   .               ++++++++    ",
  661. X"      @@@@@@@   .  . . .              ++++++++    ",
  662. X"      @@@@@@@     .   .               ++++++++    ",
  663. X"      @@@@@@@    . . . .     ###      ++++++++    ",
  664. X"                            #...#                 ",
  665. X"                           #.....#                ",
  666. X"                           #.....#                ",
  667. X"      XXXXXXX              #.....#    @@@@@@@@    ",
  668. X"      XXXXXXX               #...#     @@@@@@@@    ",
  669. X"      XXXXXXX                ###      @@@@@@@@    ",
  670. X"      XXXXXXX                         @@@@@@@@    ",
  671. X"                                                  ",
  672. X"                                                  ",
  673. X"                                                  ",
  674. X"                                                  ",
  675. X"                                                  ",
  676. X"                                                  ",
  677. X"                                                  ",
  678. X"                  OOOOOOOOOOOOOO                  ",
  679. X"                 OOOOOOOOOOOOOOOO                 ",
  680. X"                  OOOOOOOOOOOOOO                  ",
  681. X"                                                  ",
  682. X"                                                  ",
  683. X"                                                  ",
  684. X"                                                  "};
  685. END_OF_FILE
  686.   if test 2854 -ne `wc -c <'bitmaps/icon.xpm'`; then
  687.     echo shar: \"'bitmaps/icon.xpm'\" unpacked with wrong size!
  688.   fi
  689.   # end of 'bitmaps/icon.xpm'
  690. fi
  691. if test -f 'bitmaps/mouse.xpm' -a "${1}" != "-c" ; then 
  692.   echo shar: Will not clobber existing file \"'bitmaps/mouse.xpm'\"
  693. else
  694.   echo shar: Extracting \"'bitmaps/mouse.xpm'\" \(2343 characters\)
  695.   sed "s/^X//" >'bitmaps/mouse.xpm' <<'END_OF_FILE'
  696. X/* XPM */
  697. Xstatic char * mouse_xpm[] = {
  698. X"35 57 4 1",
  699. X"     s None    c None",
  700. X".    c ivory",
  701. X"X    c black",
  702. X"o    c #B2B2C0C0DCDC",
  703. X"                   ..              ",
  704. X"                   ..              ",
  705. X"                  ..               ",
  706. X"                  ..               ",
  707. X"                 ..                ",
  708. X"                 ..                ",
  709. X"                 ..                ",
  710. X"                 ..                ",
  711. X"                 ..                ",
  712. X"                 ..                ",
  713. X"                 ..                ",
  714. X"               ......              ",
  715. X"               ......              ",
  716. X"               XXXXXX              ",
  717. X"   ........X............X.......   ",
  718. X" ..........X............X......... ",
  719. X" ..........X............X......... ",
  720. X"...........X............X..........",
  721. X"...........X............X..........",
  722. X"...........X............X..........",
  723. X"...........X............X..........",
  724. X"...........X............X..........",
  725. X"...........X............X..........",
  726. X"...........X............X..........",
  727. X"...........X............X..........",
  728. X"...........X............X..........",
  729. X"...........X............X..........",
  730. X"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  731. X"...................................",
  732. X"...................................",
  733. X"...................................",
  734. X"...................................",
  735. X"...................................",
  736. X"...................................",
  737. X"...................................",
  738. X"...................................",
  739. X"...................................",
  740. X"...................................",
  741. X"...................................",
  742. X"...................................",
  743. X"...................................",
  744. X"...................................",
  745. X"...................................",
  746. X"...................................",
  747. X"...................................",
  748. X"...................................",
  749. X"...................................",
  750. X"...................................",
  751. X"...................................",
  752. X"...................................",
  753. X"...................................",
  754. X"........................ooooooo....",
  755. X"........................ooooooo....",
  756. X"........................ooooooo....",
  757. X" .......................ooooooo... ",
  758. X" ................................. ",
  759. X"   .............................   "};
  760. END_OF_FILE
  761.   if test 2343 -ne `wc -c <'bitmaps/mouse.xpm'`; then
  762.     echo shar: \"'bitmaps/mouse.xpm'\" unpacked with wrong size!
  763.   fi
  764.   # end of 'bitmaps/mouse.xpm'
  765. fi
  766. if test -f 'bitmaps/titleI.xpm' -a "${1}" != "-c" ; then 
  767.   echo shar: Will not clobber existing file \"'bitmaps/titleI.xpm'\"
  768. else
  769.   echo shar: Extracting \"'bitmaps/titleI.xpm'\" \(3578 characters\)
  770.   sed "s/^X//" >'bitmaps/titleI.xpm' <<'END_OF_FILE'
  771. X/* XPM */
  772. Xstatic char * titleI_xpm[] = {
  773. X/* width height ncolors chars_per_pixel */
  774. X"41 74 8 1",
  775. X/* colors */
  776. X"     s None    c None",
  777. X".    c #802F00",
  778. X"X    c #A06000",
  779. X"o    c #903F10",
  780. X"O    c #F0D040",
  781. X"+    c #D09E20",
  782. X"@    c #F0C030",
  783. X"#    c #C07F10",
  784. X/* pixels */
  785. X"                                         ",
  786. X"                                         ",
  787. X".Xoooooooooooooooooooooooooooooooooooooo ",
  788. X"XOO+++++++++++++++++++++++++++++++++++++X",
  789. X"XOO@+++++++++++++++++++++++++++++++++++# ",
  790. X"XOOO@+++++++++++++++++++++++++++++++++#X.",
  791. X"XOOOO++++++++++++++++++++++++++++++++#XX ",
  792. X"XOOOOO@+++++++++++++++++++++++++++++#XXX.",
  793. X"XOOOOO+XXXXXXXXXXX++@@+#XXXXXXXXXX##XXXX ",
  794. X"XOOOOO#...........#OOO+Xo.o.......oXXXXXX",
  795. X"XOOO+#oo....o#####+OOO#oXoo.o.......XXXX ",
  796. X"XOOO#.......#OOOOOO@OO#ooXXX.o....o..XXX.",
  797. X"XO+#oo..o###+OOOOO@@OO#ooX.X.....o..o.XX.",
  798. X"XO#.o...#OOOOOO@@@@@OO#oooooXXXXX......X ",
  799. X" #     . #+OOO@@@@@@OO#ooooooXXXo  . . . ",
  800. X"          oO@@@@@@@@OO#ooooooooX.        ",
  801. X"          XO@@@O@@@@OO#ooooooooX.        ",
  802. X"          X@@@@@@@O+OO#ooooXXooo         ",
  803. X"          X@OO@@@@O@OO#ooooXoooX.        ",
  804. X"          X@@OO@@+OOOO#ooooXXoXX.        ",
  805. X"          XO@O@O+O@@OO+ooooXoXoX.        ",
  806. X"          XOO@@@@@@@@O+XooooXXXX.        ",
  807. X"          XO@OOO@@O@OO+XXooooXXX.        ",
  808. X"          X@@OOOOOOOOO+XXXXoXXXX.        ",
  809. X"          XOOOOOOOOOOO+XXXXoXXXX.        ",
  810. X"          XOOOOOOOOOOO+XXXXXXXXX.        ",
  811. X"          XOOOOOOOOOOO+XXXXXXXXX.        ",
  812. X"          XOOOOOOOOOOO+XXXXXXXXX.        ",
  813. X"          XO@+@OOO@+@O+XX#XXX#XX.        ",
  814. X"          XO+#+OOO+#+O+XX#XX##XX.        ",
  815. X"          XO@+OO@+++OO+X###XXX#X.        ",
  816. X"          XOOOOO+#+OOO+XX#XXXXX#.        ",
  817. X"          o+++++++OOOO+X#X#X#X##.        ",
  818. X"          o#####+OOOOO+##XX#####.        ",
  819. X"          o#####++OOOO+##X#X#X##.        ",
  820. X"          .#######+OOO+###XXXXX#.        ",
  821. X"          o++#####++@O+####X#X##.        ",
  822. X"          XO+#######+O+#########.        ",
  823. X"          o@+#######+O+#####+++#.        ",
  824. X"          .#########+O@#####+O+#.        ",
  825. X"          .##X##XX##+O+#####++++X        ",
  826. X"          .#XXX##XX#+O+#######+OX        ",
  827. X"          .+#X##XXX#+OO++##++#+OX        ",
  828. X"          .#####XXXX+OOO+#+O+#+OX        ",
  829. X"          .##XX#XXX#+OOO@+OO@+OOX        ",
  830. X"          .#XXXXXX##+OOOOOOOOOOOX        ",
  831. X"          .#XXXXXXX#+OOOOO@+@OOOX        ",
  832. X"          .XXXXXXXXX+OOOOO+#+OOOX        ",
  833. X"          .XXXXXXXXX+OOOOO@+OOOOX        ",
  834. X"          .XXXXXXXXX+OOOOOOOOOOOX        ",
  835. X"           oX.XXXXXX+OOOOOOOO@@OX        ",
  836. X"          .ooo.XXXXX+OOOOOOO@@@@X        ",
  837. X"          .oX.XXXXXo+OOOO@OOO@@OX        ",
  838. X"          .XXXXXXXoo#OOOO@OO@@@OX        ",
  839. X"          .oX.XoXXoX#OOO@@@O@O@OX        ",
  840. X"           ooooooooX+OOOO@@@OO@@X        ",
  841. X"          .ooooooooX#OO@O@@@@O@@X        ",
  842. X"           ooooooooo#OO@@OO@@@@@X        ",
  843. X"          .ooooooooo#OO@@O@@@@@OX        ",
  844. X"          .ooooooooo#O@@@@@@@@@OX        ",
  845. X".XooooooooX###Xooooo#OO@@@@@@O@O+ooooooo ",
  846. X"XOO+++++++OOOO#ooooo#OO@@@@@OOOO++++++++X",
  847. X"XOO@+++++++@+O+###Xo#O@@@O@O@@+@+++++++# ",
  848. X"XOOO@++++++++++OOO#o#OO@OOO@@+++++++++#X.",
  849. X"XOOOO++++++++++O+O+#@O@+@@+@++++++++###X ",
  850. X"XOOOOO@+++++++++++@OOO@+++++++++++++#XXX.",
  851. X"XOOOOO+XXXXXXXXXXX####XXXX#XXXXXXXX##XXX ",
  852. X"XOOOOO#.................o.........oXXXXX.",
  853. X"XOOO+#oo..........................oo.XXX.",
  854. X"XOOO#...............................oXXX ",
  855. X"XO+#oo..............................oooX.",
  856. X"XO#.o.................................oX.",
  857. X" #      .  . . . . . . . . . . . . . . . ",
  858. X"                                         "};
  859. END_OF_FILE
  860.   if test 3578 -ne `wc -c <'bitmaps/titleI.xpm'`; then
  861.     echo shar: \"'bitmaps/titleI.xpm'\" unpacked with wrong size!
  862.   fi
  863.   # end of 'bitmaps/titleI.xpm'
  864. fi
  865. if test -f 'blocks.h' -a "${1}" != "-c" ; then 
  866.   echo shar: Will not clobber existing file \"'blocks.h'\"
  867. else
  868.   echo shar: Extracting \"'blocks.h'\" \(3240 characters\)
  869.   sed "s/^X//" >'blocks.h' <<'END_OF_FILE'
  870. X#ifndef _BLOCKS_H_
  871. X#define _BLOCKS_H_
  872. X
  873. X#include "copyright.h"
  874. X
  875. X/*
  876. X *  Dependencies on other include files:
  877. X */
  878. X
  879. X#include <X11/Xlib.h>
  880. X
  881. X/*
  882. X *  Constants and macros:
  883. X */
  884. X
  885. X#define NONE_BLK        -2
  886. X#define KILL_BLK        -1
  887. X#define RED_BLK            0
  888. X#define BLUE_BLK        1
  889. X#define GREEN_BLK        2
  890. X#define TAN_BLK            3
  891. X#define YELLOW_BLK        4
  892. X#define PURPLE_BLK        5
  893. X#define BULLET_BLK        6
  894. X#define BLACK_BLK        7
  895. X#define COUNTER_BLK        8
  896. X#define BONUSX2_BLK        9
  897. X#define BONUSX4_BLK        10
  898. X#define BONUS_BLK        11
  899. X#define BOMB_BLK        12
  900. X#define DEATH_BLK        13
  901. X#define RANDOM_BLK        14
  902. X#define REVERSE_BLK        15
  903. X#define HYPERSPACE_BLK    16
  904. X#define EXTRABALL_BLK    17
  905. X#define MGUN_BLK        18
  906. X#define WALLOFF_BLK        19
  907. X#define MULTIBALL_BLK    20
  908. X#define STICKY_BLK        21
  909. X#define PAD_SHRINK_BLK    22
  910. X#define PAD_EXPAND_BLK    23
  911. X
  912. X#define MAX_ROW            18    
  913. X#define MAX_COL            9    
  914. X
  915. X#define BLOCK_WIDTH        40
  916. X#define BLOCK_HEIGHT    20
  917. X
  918. X#define SPACE            7
  919. X
  920. X#define MAX_NUM_LEVELS  50
  921. X
  922. X#define REGION_NONE        0
  923. X#define REGION_TOP        1
  924. X#define REGION_BOTTOM    2
  925. X#define REGION_LEFT        4
  926. X#define REGION_RIGHT    8
  927. X
  928. X/*
  929. X *  Type declarations:
  930. X */
  931. X
  932. Xstruct aBlock
  933. X{
  934. X    int         occupied;
  935. X    int         exploding;
  936. X    int         currentFrame;
  937. X    int         nextFrame;
  938. X    int         lastFrame;
  939. X    int            blockOffsetX;
  940. X    int            blockOffsetY;
  941. X    Region        regionTop;
  942. X    Region        regionBottom;
  943. X    Region        regionLeft;
  944. X    Region        regionRight;
  945. X    int            x;
  946. X    int            y;
  947. X    int         width;
  948. X    int         height;
  949. X    int         blockType;
  950. X    int         hitPoints;
  951. X    int         explodeStartFrame;
  952. X    int         explodeNextFrame;
  953. X    int         explodeSlide;
  954. X    int         counterSlide;        /* For counter blocks only */
  955. X    int         bonusSlide;            /* For bonus blocks only */
  956. X    int            random;
  957. X
  958. X    /* Used for splitting of the ball in multiball mode */
  959. X    int         ballHitIndex;
  960. X    int            balldx;
  961. X    int            balldy;
  962. X};
  963. X
  964. Xtypedef struct aBlock **BLOCKPTR;
  965. X
  966. X/*
  967. X *  Function prototypes:
  968. X */
  969. X
  970. X#if NeedFunctionPrototypes
  971. Xvoid FreeBlockPixmaps(Display *display);
  972. Xvoid InitialiseBlocks(Display *display, Window window, Colormap colormap);
  973. Xvoid DrawBlock(Display *display, Window window, int row, int col, 
  974. X    int blockType);
  975. Xvoid SetupStage(Display *display, Window window);
  976. Xvoid ExplodeBlocksPending(Display *display, Window window);
  977. Xvoid RedrawAllBlocks(Display *display, Window window);
  978. Xvoid DrawTheBlock(Display *display, Window window, int x, int y, 
  979. X    int blockType, int slide);
  980. Xvoid ExplodeBlockType(Display *display, Window window, int x, int y,
  981. X    int type, int slide);
  982. Xvoid AddNewBlock(Display *display, Window window, int row, int col,
  983. X    int blockType, int counterSlide);
  984. Xvoid HandlePendingAnimations(Display *display, Window window);
  985. Xvoid AddBonusBlock(Display *display, Window window, int *row, int *col,
  986. X    int type);
  987. Xvoid ClearBlockArray(void);
  988. Xint StillActiveBlocks(void);
  989. Xvoid SkipToNextLevel(Display *display, Window window);
  990. Xvoid PlaySoundForBlock(int type);
  991. X#else
  992. Xvoid PlaySoundForBlock();
  993. Xvoid FreeBlockPixmaps();
  994. Xvoid InitialiseBlocks();
  995. Xvoid DrawBlock();
  996. Xvoid SetupStage();
  997. Xvoid ExplodeBlocksPending();
  998. Xvoid RedrawAllBlocks();
  999. Xvoid DrawTheBlock();
  1000. Xvoid ExplodeBlockType();
  1001. Xvoid AddNewBlock();
  1002. Xvoid HandlePendingAnimations();
  1003. Xvoid AddBonusBlock();
  1004. Xvoid ClearBlockArray();
  1005. Xint StillActiveBlocks();
  1006. Xvoid SkipToNextLevel();
  1007. X#endif
  1008. X
  1009. Xextern struct aBlock blocks[MAX_ROW][MAX_COL];
  1010. Xextern int rowHeight;
  1011. Xextern int colWidth;
  1012. Xextern int blocksExploding;
  1013. X
  1014. X#endif
  1015. END_OF_FILE
  1016.   if test 3240 -ne `wc -c <'blocks.h'`; then
  1017.     echo shar: \"'blocks.h'\" unpacked with wrong size!
  1018.   fi
  1019.   # end of 'blocks.h'
  1020. fi
  1021. if test -f 'error.c' -a "${1}" != "-c" ; then 
  1022.   echo shar: Will not clobber existing file \"'error.c'\"
  1023. else
  1024.   echo shar: Extracting \"'error.c'\" \(1889 characters\)
  1025.   sed "s/^X//" >'error.c' <<'END_OF_FILE'
  1026. X#include "copyright.h"
  1027. X
  1028. X/*
  1029. X *  Include file dependencies:
  1030. X */
  1031. X
  1032. X#include <stdio.h>
  1033. X#include <xpm.h>
  1034. X#include "init.h"
  1035. X
  1036. X#include "error.h"
  1037. X
  1038. X/*
  1039. X *  Internal macro definitions:
  1040. X */
  1041. X
  1042. X/*
  1043. X *  Internal type declarations:
  1044. X */
  1045. X
  1046. X/*
  1047. X *  Internal variable declarations:
  1048. X */
  1049. X
  1050. X#if NeedFunctionPrototypes
  1051. Xvoid ErrorMessage(char *message)
  1052. X#else
  1053. Xvoid ErrorMessage(message)
  1054. X    char *message;
  1055. X#endif
  1056. X{
  1057. X    /* Print a standard error message to stdout */
  1058. X    fprintf(stdout, "XBoing - %s\n", message);
  1059. X    fflush(stdout);
  1060. X}
  1061. X
  1062. X#if NeedFunctionPrototypes
  1063. Xvoid HandleXPMError(Display *display, int ErrorStatus, char *tag)
  1064. X#else
  1065. Xvoid HandleXPMError(display, ErrorStatus, tag)
  1066. X    Display *display;
  1067. X    int ErrorStatus;
  1068. X    char *tag;
  1069. X#endif
  1070. X{
  1071. X    char *error = NULL;
  1072. X    char *warning = NULL;
  1073. X
  1074. X    /* Switch on the type of error returned by xpm library */
  1075. X    switch (ErrorStatus) 
  1076. X    {
  1077. X        case XpmSuccess:
  1078. X            return;
  1079. X
  1080. X        case XpmColorError:
  1081. X            /* The colour name passed was bung */
  1082. X            warning = "Could not parse or alloc requested colour";
  1083. X            break;
  1084. X
  1085. X        case XpmNoMemory:
  1086. X            /* Not enough memory for pixmap */
  1087. X            error = "Not enough memory for pixmap creation";
  1088. X            break;
  1089. X
  1090. X        case XpmColorFailed:
  1091. X            /* No more entries available in colourmap */
  1092. X            error = "Colourmap is full - cannot allocate a colour";
  1093. X            break;
  1094. X
  1095. X        case XpmOpenFailed:
  1096. X            /* Xpm could not open the pixmap file */
  1097. X            error = "Unable to open pixmap file";
  1098. X            break;
  1099. X
  1100. X        case XpmFileInvalid:
  1101. X            /* XPM file contains invalid or corrupt data */
  1102. X            error = "XPM file contains invalid or corrupt data";
  1103. X            break;
  1104. X
  1105. X        default:
  1106. X            /* Unexpected xpm error code */
  1107. X            error = "Unexpected xpm error code";
  1108. X            break;
  1109. X    }
  1110. X
  1111. X    /* If there is to be a warning then issue it */
  1112. X    if (warning)
  1113. X        fprintf(stdout, "%s - Warning: %s.\n", tag, warning);
  1114. X
  1115. X    if (error) 
  1116. X    {
  1117. X        /* Argg. An error so tell everyone */
  1118. X        fprintf(stderr, "%s - Error: %s.\n", tag, error);
  1119. X        ShutDown(display, 1, "Fatal error.");
  1120. X    }
  1121. X}
  1122. END_OF_FILE
  1123.   if test 1889 -ne `wc -c <'error.c'`; then
  1124.     echo shar: \"'error.c'\" unpacked with wrong size!
  1125.   fi
  1126.   # end of 'error.c'
  1127. fi
  1128. if test -f 'level.h' -a "${1}" != "-c" ; then 
  1129.   echo shar: Will not clobber existing file \"'level.h'\"
  1130. else
  1131.   echo shar: Extracting \"'level.h'\" \(1891 characters\)
  1132.   sed "s/^X//" >'level.h' <<'END_OF_FILE'
  1133. X#ifndef _LEVEL_H_
  1134. X#define _LEVEL_H_
  1135. X
  1136. X#include "copyright.h"
  1137. X
  1138. X/*
  1139. X *  Dependencies on other include files:
  1140. X */
  1141. X
  1142. X#include <X11/Xlib.h>
  1143. X
  1144. X/*
  1145. X *  Constants and macros:
  1146. X */
  1147. X
  1148. X/*
  1149. X *  Type declarations:
  1150. X */
  1151. X
  1152. X/*
  1153. X *  Function prototypes:
  1154. X */
  1155. X
  1156. X#if NeedFunctionPrototypes
  1157. Xvoid InitialiseLevelInfo(Display *display, Window window, Colormap colormap);
  1158. Xvoid FreeLevelInfo(Display *display);
  1159. Xvoid DisplayLevelInfo(Display *display, Window window, u_long level);
  1160. Xvoid CheckGameRules(Display *display, Window window);
  1161. Xvoid DeadBall(Display *display, Window window);
  1162. Xvoid DeleteABullet(Display *display);
  1163. Xvoid AddABullet(Display *display);
  1164. Xvoid ReDrawBulletsLeft(Display *display);
  1165. Xvoid RedrawLevelInfo(Display *display, Window window);
  1166. Xvoid SetLevelNumber(int levelNum);
  1167. Xvoid SetStartingLevel(int levelNum);
  1168. Xint GetStartingLevel(void);
  1169. Xint ReadNextLevel(Display *display, Window window, char *levelName);
  1170. Xchar *GetLevelName(void);
  1171. Xvoid DecLevelTimeBonus(Display *display, Window window);
  1172. Xvoid SetLevelTimeBonus(Display *display, Window window, int seconds);
  1173. Xint GetLevelTimeBonus(void);
  1174. Xvoid UpdateHighScores(void);
  1175. Xvoid AddExtraLife(Display *display);
  1176. Xvoid EndTheGame(Display *display, Window window);
  1177. Xvoid HandleGameTimer(Display *display, Window window);
  1178. Xvoid DecExtraLife(Display *display);
  1179. X#else
  1180. Xvoid DecExtraLife();
  1181. Xvoid HandleGameTimer();
  1182. Xvoid EndTheGame();
  1183. Xvoid AddExtraLife();
  1184. Xvoid UpdateHighScores();
  1185. Xint GetLevelTimeBonus();
  1186. Xvoid SetLevelTimeBonus();
  1187. Xvoid DecLevelTimeBonus();
  1188. Xchar *GetLevelName();
  1189. Xvoid InitialiseLevelInfo();
  1190. Xvoid FreeLevelInfo();
  1191. Xvoid DisplayLevelInfo();
  1192. Xvoid CheckGameRules();
  1193. Xvoid DeadBall();
  1194. Xvoid DeleteABullet();
  1195. Xvoid AddABullet();
  1196. Xvoid ReDrawBulletsLeft();
  1197. Xvoid RedrawLevelInfo();
  1198. Xvoid SetLevelNumber();
  1199. Xvoid SetStartingLevel();
  1200. Xint GetStartingLevel();
  1201. Xint ReadNextLevel();
  1202. X#endif
  1203. X
  1204. Xextern int bonus, livesLeft, bonusBlock;
  1205. Xextern time_t gameTime;
  1206. Xextern u_long level;
  1207. X
  1208. X#endif
  1209. END_OF_FILE
  1210.   if test 1891 -ne `wc -c <'level.h'`; then
  1211.     echo shar: \"'level.h'\" unpacked with wrong size!
  1212.   fi
  1213.   # end of 'level.h'
  1214. fi
  1215. if test -f 'mess.c' -a "${1}" != "-c" ; then 
  1216.   echo shar: Will not clobber existing file \"'mess.c'\"
  1217. else
  1218.   echo shar: Extracting \"'mess.c'\" \(2808 characters\)
  1219.   sed "s/^X//" >'mess.c' <<'END_OF_FILE'
  1220. X#include "copyright.h"
  1221. X
  1222. X/*
  1223. X *  Include file dependencies:
  1224. X */
  1225. X
  1226. X#include <stdio.h>
  1227. X#include <stdlib.h>
  1228. X#include <stddef.h>
  1229. X#include <X11/Xlib.h>
  1230. X#include <X11/Xutil.h>
  1231. X#include <X11/Xos.h>
  1232. X
  1233. X#include "error.h"
  1234. X#include "level.h"
  1235. X#include "init.h"
  1236. X#include "stage.h"
  1237. X#include "intro.h"
  1238. X#include "main.h"
  1239. X#include "misc.h"
  1240. X
  1241. X#include "mess.h"
  1242. X
  1243. X/*
  1244. X *  Internal macro definitions:
  1245. X */
  1246. X
  1247. X#define CLEAR_DELAY        2000
  1248. X
  1249. X/*
  1250. X *  Internal type declarations:
  1251. X */
  1252. X
  1253. X/*
  1254. X *  Internal variable declarations:
  1255. X */
  1256. X
  1257. Xchar currentMessage[1024];
  1258. Xint        clearFrame;
  1259. X
  1260. X#if NeedFunctionPrototypes
  1261. Xvoid InitialiseMessageSystem(Display *display, Window window, Colormap colormap)
  1262. X#else
  1263. Xvoid InitialiseMessageSystem(display, window, colormap)
  1264. X    Display *display;
  1265. X    Window window;
  1266. X    Colormap colormap;
  1267. X#endif
  1268. X{
  1269. X    /* Frame to clear message area */
  1270. X    clearFrame = 0;
  1271. X}
  1272. X
  1273. X#if NeedFunctionPrototypes
  1274. Xvoid FreeMessageSystem(Display *display)
  1275. X#else
  1276. Xvoid FreeMessageSystem(display)
  1277. X    Display *display;
  1278. X#endif
  1279. X{
  1280. X    /* Not much to free yet - maybe one day .... */
  1281. X}
  1282. X
  1283. X#if NeedFunctionPrototypes
  1284. Xvoid DrawMessage(Display *display, Window window, char *message, int clear)
  1285. X#else
  1286. Xvoid DrawMessage(display, window, message, clear)
  1287. X    Display *display; 
  1288. X    Window window;
  1289. X    char *message;
  1290. X    int clear;
  1291. X#endif
  1292. X{
  1293. X    int len = strlen(message);
  1294. X    int plen;
  1295. X
  1296. X    if (clear)
  1297. X        clearFrame = frame + CLEAR_DELAY;
  1298. X    else
  1299. X        clearFrame = frame - 1;
  1300. X
  1301. X    /* Clear the message window */
  1302. X    XClearWindow(display, window);
  1303. X
  1304. X    /* Obtain the text width so it can be centered */
  1305. X    plen = XTextWidth(textFont, message, len);
  1306. X
  1307. X    /* Draw the string in the message window */
  1308. X    DrawText(display, window, ((PLAY_WIDTH/2) - plen) / 2, 5,
  1309. X        textFont, green, message, len);
  1310. X
  1311. X    /* Just to be sure, flush the display */
  1312. X    XFlush(display);
  1313. X}
  1314. X
  1315. X#if NeedFunctionPrototypes
  1316. Xvoid SetCurrentMessage(Display *display, Window window, char *newMessage, 
  1317. X    int clear)
  1318. X#else
  1319. Xvoid SetCurrentMessage(display, window, newMessage, clear)
  1320. X    Display *display;
  1321. X    Window window;
  1322. X    char *newMessage;
  1323. X    int clear;
  1324. X#endif
  1325. X{
  1326. X    /* Draw out new message */
  1327. X    DrawMessage(display, window, newMessage, clear);
  1328. X}
  1329. X
  1330. X#if NeedFunctionPrototypes
  1331. Xvoid AddMessage(char *newMessage)
  1332. X#else
  1333. Xvoid AddMessage(newMessage)
  1334. X    char *newMessage;
  1335. X#endif
  1336. X{
  1337. X}
  1338. X
  1339. X#if NeedFunctionPrototypes
  1340. Xvoid DisplayCurrentMessage(Display *display, Window window)
  1341. X#else
  1342. Xvoid DisplayCurrentMessage(display, window)
  1343. X    Display *display;
  1344. X    Window window;
  1345. X#endif
  1346. X{
  1347. X    char str[80];
  1348. X    char str2[80];
  1349. X
  1350. X    /* Clear the frame when it's time */
  1351. X    if (frame == clearFrame)
  1352. X    {
  1353. X        /* Effectively erases message */
  1354. X        strcpy(str2, GetLevelName());
  1355. X        if (str2[0] != '\0')
  1356. X        {
  1357. X            /* Set the message to the name of the level */
  1358. X            sprintf(str, "- %s -", str2);
  1359. X            SetCurrentMessage(display, window, str, False);
  1360. X        }
  1361. X        else
  1362. X            DrawMessage(display, window, "", False);
  1363. X
  1364. X        /* To be sure to be sure */
  1365. X        XFlush(display);
  1366. X    }
  1367. X}
  1368. END_OF_FILE
  1369.   if test 2808 -ne `wc -c <'mess.c'`; then
  1370.     echo shar: \"'mess.c'\" unpacked with wrong size!
  1371.   fi
  1372.   # end of 'mess.c'
  1373. fi
  1374. if test -f 'sounds/ballshot.au.uue' -a "${1}" != "-c" ; then 
  1375.   echo shar: Will not clobber existing file \"'sounds/ballshot.au.uue'\"
  1376. else
  1377.   echo shar: Extracting \"'sounds/ballshot.au.uue'\" \(3926 characters\)
  1378.   sed "s/^X//" >'sounds/ballshot.au.uue' <<'END_OF_FILE'
  1379. Xbegin 664 ballshot.au
  1380. XM+G-N9    "    KM     0  'T     !          #G]5]:75]D:_?IVM%:
  1381. XM0U9J_.O=T+_"-478<MK?S,.Q-3#04>%:V-&O0"G+5-M?V,NN7B;&:M#EUL:M
  1382. XM5R7'8MEYWLJO-"?'3=AAS;RS)SK&;,OIO:Y/),?^SN+)LKXD1,UPS]RRN28T
  1383. XMRUC1W:_!(S_7=<_(J#TCRF3*U*RV'T[2Y<FWJB [RFC!NZD>-\92P+>K'3S&
  1384. XM7[RMO1S2[]J[I3<>N$[!N:4@+;M,O:RY&MG7W+JB+1^S3KNNK1I7R'>YHRX<
  1385. XMM4J[K*\87\S8LJ(F(;%)M:;,%KU@QJZG&S&X5*^A+!NN2K&B]!:Z;[^COQ?O
  1386. XMT-*@]QK:SLB>+1ZXT:>\'-V_IML<L[ZI'T6ML2XJJ+$R):BO,R>HL"HNH[DB
  1387. XM8*)*(:ZG)2VAS1^\HB<NGVPAJJX?S:$F-IXT**%3)J1G)J5,+*,W.*8KX*XG
  1388. XMK\TIISDZIRO'N"FJ/S.F*<NV)JA!-J8IM\0IHRY@K"6F/#NG)*Q$-Z@DJD$[
  1389. XMJ26I-F&S**4KN-TTJ2>H,,[$+ZHGJR_&XCNO*ZHLKSS(WT.T+ZLLK3*Y1^?/
  1390. XM/+<OKRVN+[4XOTS?VTW%/KDXMS6V-K<YNSO 1,Q9Y^!;ST[%1+\]NSRZ/+L]
  1391. XMO#_ 2,I0VUGX?&+F3]1(SDG,2<E&QD7%1<9(R4O(3<U.SD[/6ME=V6;>['+L
  1392. XM=]Q?UEK55-).STW23-1*TDS/3LU.SE//3L]4V5?78>1IX6;K=.AW_.UDZF7K
  1393. XM6?1A^&#H<N]LW&SI=^QLZW'B;>)N['?L<^!U]'CM?GCO9_;W;V]T:71X;GYN
  1394. XM?WCZ;&YU;OC^_O#MZNGF\.7LZ^[W?&][;&]O979B;&9G>W1Y]WS\]^SSZN?V
  1395. XMZN[J[>KQ^'1X?&_[<6QG=6UR^WWX;_I]\WES]'SUZ_?U\'KL>/MR;F=M>6IO
  1396. XM=WQX]^W\Z^U]\_[S[6A]<W/Y_VSW^?/V?>_^^.[R=>OV[G_S?7Y]]'IM=65K
  1397. XM;VEH;VSR?>[ZZNQYZ>GL]OW_:7!R=&9K:6YL<G-X^'CO_'CN[.ONX>[GY^3H
  1398. XMZV[];WAN;WIL<&1Y>6SX>V_[_7CK=7U[=/1Z]&=Z='9[>/_Z<??K\>;V[>CQ
  1399. XM\O%\</Y\=71L9VEU9GYZ=^UOY/COYOKL]_;J_/7O?O-M[&]R<6=M>FGR:WGQ
  1400. XM:^A?W5W@9?7P5]I-S4_79?CB6]!-Q4C'2\Q8Y/)CUD[)0\4_Q$+"0L%%Q4C*
  1401. XM3MA>Z/!MUU[.3\I(PT+!/;X[PSS%/\M&U%+?;/C=6<I,PD2]/[H]NCV[0;]'
  1402. XMR%'3<F'11<<]OCB[-[HVNSF_0LI/[>!,PCVZ.K4VL3:U.KI%R&1TST&]-K8O
  1403. XMLB^S,KD\QUY>Q#ZT,ZXPK3.P.[Y.;,TZMR^O+*\NN#C,6$S!-K OK"^N-KM0
  1404. XM_\ ZKRZK+:\VP&%(NB^M*JPMN$=2NBZI**HOO?$[K2BG*K1,1J\IIBNQ3S^M
  1405. XM**<KNNTTJ26H,N"X*J0GL6,RIR.H-DNM)*,MS[(GH2O$N2BD*L:\**8KV;<H
  1406. XMJ#)5KR>L0SRJ*KC1+J@S[Z\KKE<UJ"W1M2FL2S*H+.^P)JW\*Z4R.Z0J=J@F
  1407. XMPJPEMK4DKKTDJLTDJ=4EJ<8DJ[LBKJ\BMZDCUJ0G0*$O*Z)J(JZK(DN?-R6I
  1408. XMKR!3H#XBK:8F+:2T($6EP"%3I[\B4:>Z(D.HMB<UJ; Q**NQ^!^TMZ\B.[*T
  1409. XMPANV[*8_'[1MGS4AM7*@71V_5+6K)3#"XZ^G*B6W6[ZSJ!PYP%F_O:,>,L96
  1410. XMQ<JD)2B_2<#<IVP>RE3.T<"H/2?.8\KEP+'8)T[F;-/BO[% *,9>U6K1RK)'
  1411. XM*,E,U'7<X+JZ*D_G9]EGTMRTT"SE8^CH>M7\N\(T2V]N<F+=:-"^:#ED76!I
  1412. XM[>;RULOE1V-D_O+K[>[DW=CH;&EL?NKX>/ST_G3U['YZ^VQI:FAE;/%Z;W!O
  1413. XM:71R?/5VZ^[\Z>OU=?_Q>?+J[>O^_/AN:VQW_>WI[>WZ;FEG7VSZZ.'G?GEF
  1414. XM75Q47>O4TMG<ZVYB54I/T,73Z/KV:5I!.<.Y[^UEY&5<-4JKT.9L;7I2/#NM
  1415. XMP63Y46M3/3JNO5_S5F5/.3ZKR%UZ6EQ(,_JHX>MB;EA ,K6M6MI6=THW0JC(
  1416. XM6V%/4SLPMJU0XT]M1#'KI^'O85]/,T*GO%CP4E4T-JRR4^E/6S<OKJY5X%99
  1417. XM."^PK5#F45@Y+J^L5^-6>#8OJZY.]518+S>GN59O55(L2J/$75I60BJ_I6_T
  1418. XM4UTW+:NM3W-,42P^H\%C8EI#*+ND;_!.63 OI[-484Q+*-.CWO5-63,LJ*Y;
  1419. XM;4U.*-2BXNE-6S$NIK)::$I')KND8]Y*6BPZH,)J64X[)ZNI6^-(4R9ZG]WF
  1420. XM2E0O+**V7V]*122RI5G;0E4G1Y_9XTU.,RJCL67A2TTEM*18TD5;*4B?X=Q1
  1421. XM33$JHKI5^T)")+"H3LY&7"EEG^W545(P+J"[8.M*1"6NJ$K;0U G8)_WWDU0
  1422. XM,BRCMUKG3$DELZ52TTE:*CVATF]44#@IJ*Y6W$E1)L>C7]5+72\OH[QH;$Y(
  1423. XM)[:F9]9,9RPZHL)^758_)[6I8/9)5"PXI;UO8UD^*;BG].957B\UI[1G<UE$
  1424. XM*M6EU7)7430MKJU9<$](+3^FO63[5D(LQ:7?[EI4."ZNK5CT34PO.Z>[6F1/
  1425. XM22SJIM9E4E(^+;JH9G!06#HOKZQ8^%19.#6KLE!M3D\S.JJ[3V]66#-#J+]9
  1426. XM;5E4,DFIQE-E6D\P1JG'4VMA4#)#J<-7[655,SVKOE??:ETW.:VX4>1=6CHT
  1427. XMLJ]8VF9B/C&_K%OO6EA",5ZJW&-K5DPW/:R[6=]<84(WN*U=V5Q?1S-6JMEF
  1428. XM;5A..3>PM%397F9&.-JJWN]H5TT].+.W3^A.6D4W4ZO:?_%?64<XNZYCTUUE
  1429. XM33\ZK[Y:[%-<33I-K-CO^&=E3S76K6SC7E].0S*_LE7K4UU213>TLWC58_59
  1430. XM13JPN%_B6&E0/SFQOEGY4UU.03JQOEOB66141CFTNF7=66)42CBXMF+;7&I;
  1431. XM43? LF7=6V-:5#;NKW_L7V9@5SQ'K]5M;UAG6D4YMKQNW5QV6U4VS;%JW&-T
  1432. XM:&$\2*_0]NEJ?%M/-[ZZ6-]=_%QA.D^QW^-K75]82S:]NVG867]E=#U,L=;>
  1433. XM[&=U8E<URK9XVEK^6F-".[?$\.-@\UUH.$^TW=]M<6QG7#?/M^/69.AE]$LX
  1434. XMOKO@W65\6&X_.[S%]7!>:EIM/4.XQ=[I^WUN;SY+M\?B]&UC7EL[1[K,??UR
  1435. XM:VQE/DRWR-[?]G]O:CY'M\?Y]F=I7&5 0KS*;GEB8UMN1C^_O^_F>O!MZE,^
  1436. XMR;OCW7UY8GQ6/?&[X>=R8EYL73Y+O='V]&EB9GI)/\;!ZM]X\W7M6#[TN]C:
  1437. XMZGUL>FI%1\'+^_-C:VAW3S[DO>+=>GAM_6)'2<+)].UJ;%]L5$!GOMG;YNKW
  1438. XM[OI-0L["Z=S^^FSN:$A)QL[L[6=J7VY70UC V^OY_FIH=%A$^,'CWO/X;/7X
  1439. XM5$;3P-C6XNEL^VI.1-;*\>AN8UYT84U&U,OGYOKX>^QX5$O0R.'@[O9N]756
  1440. XM2>'+YNMV;V-K;%E);LS=Y.WW=O-]8$Y:SM7H[?CZ_7EE5$[GU-_>Z>_S\G-?
  1441. XM5&#<W^ON_7E^]W)@6_/8V]_O?OY[<FE<67SCZOIT;FAD9%Y;8^S?X^CK[?/P
  1442. XG]G9R_N??W^;T_F]G8F1G:'SKZ.SS_OMY;6YO=7_Z?7=O>'QU=/SZ
  1443. Xend
  1444. END_OF_FILE
  1445.   if test 3926 -ne `wc -c <'sounds/ballshot.au.uue'`; then
  1446.     echo shar: \"'sounds/ballshot.au.uue'\" unpacked with wrong size!
  1447.   fi
  1448.   # end of 'sounds/ballshot.au.uue'
  1449. fi
  1450. if test -f 'sounds/boing.au.uue' -a "${1}" != "-c" ; then 
  1451.   echo shar: Will not clobber existing file \"'sounds/boing.au.uue'\"
  1452. else
  1453.   echo shar: Extracting \"'sounds/boing.au.uue'\" \(4015 characters\)
  1454.   sed "s/^X//" >'sounds/boing.au.uue' <<'END_OF_FILE'
  1455. Xbegin 664 boing.au
  1456. XM+G-N9    "    LM     0  'T     !          #GYUMG[UO976];6T79
  1457. XMSN=;V\V]03]!4<K/OL?GJSX?19^FOQ\A+T*?GZN]71\C+#BCGZJ^21\H,TB?
  1458. XMJ:[&'Q\K-DN?IZW9'Q\N/::?I[/!(1\H-JR?J;;.'R0O.J:?J;<P'R,O/9^?
  1459. XMJ\$?'RPXOI^?K^<?(2]!J9^CNCH@)39?IJC&][=+)2$M/*V?H+/9(1\M-KZA
  1460. XMH:M!*20L/K.DHJQ&)R4J3;VJJ*]++"DN7[RLJ[=5/#(K,L&HHZO)*1\D,\2I
  1461. XMI*K"+",F-;^GI:Q&+24L/[FGIJ])*BDN=[BIJ;-%+2LR9[RLN\&Z6RPH+$B_
  1462. XMIJ2IU2DC)C;KK::LS# H*3S%K*BLQ38J*C;9M:JNYSPM+3C7LJVST6,R+"I'
  1463. XMKJ:GNS,F)2U%LJ.DKT K)2T]N::HL$(I*"Q3O:FHKU$L*2U.MJNJN6,O+"Y)
  1464. XMO+*OL+E#*BDN4:^GJ;U/*R<J/<"LJ;'1,BHK.<^MJJ[7/2TM-'>RK*W"3S M
  1465. XM.%NYKK"Y13,K-6.OJZW-,RLK.-FTJJNX0"TK,%/#K:ZX3S$O,D^[L*V[ZSDO
  1466. XM,3[+MZZUR$(R,SMKN[&LP4TN+3)3MJRMO$,O*RX]TZZKKLM%+RXR4;RPK;I-
  1467. XM-RXS/-&TKK/91S4T.F>^KJW5-"XXR;:UP%DT+S!'OJZJL-L\+2PQ5[JNKL%?
  1468. XM-C(S3L.SK[?W0C,V/=^[MKG.53<X.D/(KZS(."XN/MVPJJ_&.RXK,4/)KJJO
  1469. XMS3LQ+CE-P+*PO5<Y,#5+U[FSM\]'/#Q&7\FNL=TU,TZ^M+?W-2TP.V>VJZNY
  1470. XM33(K+C[?M:VPS#\S,3M9OJ^ONE\^,CE+U[JUN^=!.3@Y3;FJLETR+S17MZVM
  1471. XMN>\R*RPY:[NLJ['G-BTN.=^ZL+"_4S,O,DK7M[&WP4\W-SQ1SZVWTSL]7\&\
  1472. XMQ$LR,31-PK*LK[Y +BLQ1=>UK[3-/S,S/MF]LK*[9SLV/%/9O+>_TT@\-CC5
  1473. XMM*[.1#0U/=&TKK33.BTL,D+)L:RPQ%$R+C)!SK2OMM5(-#(X5<&VL[C(3#@W
  1474. XM/N>UM]%'1]>[O<\\,2XU1[^MJZW'.2XJ,C[)LJZUVT0R,CACO*^OOE<]-#E!
  1475. XMV[RXO,Q=/C8W6[.OOT8V-$3'N:ZVP44N+"]$S+6MK[AC-R\P/5N_L[*]9STR
  1476. XM-4)?PK:UO.M).CM!RKW!6U',O+G*3"\L,$')LZFMMUDO+"PYV;ROLKM?-C$T
  1477. XM2]6UK['&2S<V/%W.N;B\UTDZ+T+-K[WK/#5 =[JOM<1$-"PN.6.WKZRW=SXO
  1478. XM,#5;OK2SP-T],C,\;\FWL[S313DY2,B_QF=GRKJ\S#\O+3)/RK"KK+I.,RLM
  1479. XM,W>ZKZ^]53HP,T#3MK*RP7<[-#9#W<&VNM=?.2X]Q;3 33L[2\*XK[KC1"\L
  1480. XM+D+/M:RNM=\Y+RXY3<&RL;GK.C0Q.TS%M;&WSE$Y-43;P</3X\S!P=E&,R\T
  1481. XM/\VYK:ZZV3@M+#15R+2PM<U -C,\_\*SLK?-1CDT.TS,NKB]VTXO-].WOUD^
  1482. XM.TW1MJZROT@U*RT_6[>LJK/90"XM,DW!M["ZSC\P+S5+P[6OML1/.#,[W\.[
  1483. XMSMW7Q<C73#<P-43KN:ZMM=M#,"PT0,VXLK7'7SDS-DC-N[.VOV,\-39&U<"Z
  1484. XMO<E3+S!=M[?;/CH^X[FQKKO5.BHJ,$C1KZFLN4TO+2\_][FOL;]+."XR.O^\
  1485. XMKZ^Y[T4U-3_5N[K*V<_*UV\^-3<^=[^VL[K'3#4P,S]9Q;F[P7=#.CM)Y\"Y
  1486. XMNL)W1SP]1'?'OK_/6S\T6\.QS4HX.D;'L:RQQ3TM*2TXW[&LJ[71.2PM-G>Y
  1487. XMKZ^__S<O,#IWP;.QN-L^-C5)R+RZQ-EW;V=31$%$4__+Q,/*YTY$/D5,]]/(
  1488. XMRL_C74]/7=?)Q<O9;TY*3F?CV]/7]UM&06N_M\H_-#9%Q+2LL;U$+"HM/<NS
  1489. XMJJZX33 M,$/=M:ZPPD$O+C9/SK2OLLA(.34\4[ZQM,=50$%+7_?C_^MG75MK
  1490. XMY^/7W6=724M+7>?3RLS5=U-.5?_CU='3W6=545%;;]_7VV],_\2^YSLS.E.W
  1491. XMJJFR;S4H*3!5MJNIM5$W+3 \T;&NLME$,"\U7;VUM<1/.S<_6<:XMKY;03L]
  1492. XM3L^]O<-=/3DZ3.>_N;[71SPX05O(O;[(8T,_2?_1P\3,:TQ*5>O1R\]W64Q.
  1493. XM4UW!N[E/-BXT1[FIJ:]&*B8K/\JKJ:YG+RTO4[>MK;]-+RTP6;>NK]-!,# \
  1494. XMS[&MLM\Y-#E)W[NRM<] -C$^U;ZVO]] -C=,RKZ[SUD^.T3CP;S$[T4^0FO-
  1495. XMOK[%7T ]1G?.P\=12=G!T3PQ,E&TJJ>Y3"HG-5>QJJWK-2XVV;>LM-LW+3)/
  1496. XMO:^T[S8O-%O&LK3%2#DZ6<>\O<U103Y,[[^]R4\Z.DK/P;[91SY#[\O S6]'
  1497. XM25O/QLCK2$))X\&]QV=(/DEGS\7+8TG;O-,[,"YKM*.JU2TC*V^MJL8Y+##K
  1498. XMKJJZ/S$R7<"PP%LU.$Z_M]=..#YCO;6]6SLY3<>\PF-#/%W$N\=-/#SKQ+S=
  1499. XM2SU-V[W#5SX[8\J\R6<_0E75U=]?]]W-V5-(2/_7Q,YC3[RZ9S,L.[FBJ4\F
  1500. XM)UVLK5,K+'>LK'<P+^.NMVLS.6NWO>LZ2MF[V4<Z7[RUR4H_4^_3WV-37^O1
  1501. XMU5](2^?)S%M'2?_9T>]G7_]C44WGRLC?54]79V?OX]',U^=C6U]G[]W-SU%=
  1502. XMO=-!*T&XJ/\Q-[RP6R] QKY5/%/!Q%5&_\/=3D[_XU]CU\?/64Y765_?R\;;
  1503. XM8U=?65]CX]71_U%78__GW_?;76??W^?OW]EO3U=;8^?3U6]75UMC7V_WX]?9
  1504. XMY_=93U55X\S+;\V_73 YOKY=5[_*0UG57T19Q>M+5_==5]7(V5U96U%OV<S/
  1505. XMU^]125-KY]W/T^=C6V-=4>?-V^=W;U59V]MW_U]K8V_GW^-O9V=92U]OY^/W
  1506. XM]V=G7U]G;^O7T]/59U=.7^O7SM%WT]M,9U-CS^?=_VO_:V_W__]O66-?=^/;
  1507. XMW>MW7U-37^?3T^M?5U-;7V__Z]W;U]UC9U-GW^_=U]_9[VO_8V-K]^?W_V]W
  1508. XM:V-G=W=O9UU;8_??W?=K9U]G[]?.S]?K7UE;8V_WX^/7;UM-3%%O9^/GV=_G
  1509. XM=V]O]V_OY_]?]]WC=V-C]__K]_]W[^O_;UE94V?GV]/;[^]7:U'WY\O-U]EG
  1510. XM65%?;^?C[_]C6UU?=^/G[U--3%=WY]WC=U]776/GU\W+T=UO6V/_Y]O9U=?W
  1511. XM74U-3V_CW]G_8VM?9V-C;W?W[^_OZ]_C]VMK;W?WW^?GZ^M944QC_]W?V^?_
  1512. XM55]37>_7S=/C;U]C__?=[^?W9V=?_^O?]U]53E5=[]_=YVMG_^OO_^_;U=/3
  1513. XMW?]766O=U]]OZV=96U-C;VMO:___;V]?75]?8VOOZ^OKX^OG___K[]W;W>?O
  1514. XM;V=?7V]O=_??V^=G7V?WY]O=W>]O[V__[W=C65EG;_]W=V-?6UM?8W?W[^_W
  1515. XM[^?O_V]WW]O7U>?O;V___V=K_^_O;U]?8W=K___G=V=C:V_O9VMK_W?OV]O=
  1516. XMZ^?_9V=?;_?GZW=G9V-?9^_=W__KY^?KZ^]O_W?OX^OO[V]K7UU97W?_[V=?
  1517. XM7VMO;_]W;^_CV]_?X^/_=_?CV]W=]VM=7U]?9V]K;VMO8VMC=W=O9V=O=^_=
  1518. XMZ^]C:W?GW^/G=VMO_V_O]V=W9W?GX_=W=^___W?_X]O3XW=?5UEG_^??W?__
  1519. XM:UU=8^_O=^__[W?_=VMG9VOO=V___W?WZV]O:W?_[^OG[V]G6U]G=^_GX^_O
  1520. X-;V/_]^OO_^OOZV]K9VMG
  1521. Xend
  1522. END_OF_FILE
  1523.   if test 4015 -ne `wc -c <'sounds/boing.au.uue'`; then
  1524.     echo shar: \"'sounds/boing.au.uue'\" unpacked with wrong size!
  1525.   fi
  1526.   # end of 'sounds/boing.au.uue'
  1527. fi
  1528. if test -f 'sounds/toggle.au.uue' -a "${1}" != "-c" ; then 
  1529.   echo shar: Will not clobber existing file \"'sounds/toggle.au.uue'\"
  1530. else
  1531.   echo shar: Extracting \"'sounds/toggle.au.uue'\" \(3574 characters\)
  1532.   sed "s/^X//" >'sounds/toggle.au.uue' <<'END_OF_FILE'
  1533. Xbegin 664 toggle.au
  1534. XM+G-N9    "#_____     0  'T     !          !=74(\+4VZ75\Z2ME=
  1535. XM0SE)PM%%,ENNN-E95;2XN[2S2U7/KZTS+DC/QCHU.#0UR\5(,2JOJKI51<2O
  1536. XMM[:O44;3K:DS+#S.QCDO/S\U+\S%4RPHKZR\34RVL;RUKM-%=[*I]RH^Y\4X
  1537. XM+SD[,#G ]SPISZFT9T7)K[>[KZ]$4;JKM2@N6\'3+C9 /"XWQ=U *E>JL.M#
  1538. XMV:^YO+*W5TV]K; J,DW(63,U.S8PS\5/+"FOIJTR+["GK2HK1]/3*RY*.2]%
  1539. XMXULW)[^OMTU9NKZRKZW//]&JI4PS2MG9.4,\+BLZOL\N)3^QNME)O<7"L:^O
  1540. XMODG-KJ:]+SGWNDPQ+C0U.=E.."E5M+S_2LS*QJ^NME==LJJO-#M3S&M'1R\N
  1541. XM-\W)-RHQO,/*4]?%V:^OK^-"OZRQ:SU._UT\.SXX-#A+74$M,%&]PV-,8_^L
  1542. XMK;#13[VLJ+I%0]7/V^LO*S$_QCLM*4O1Q.]=:T.NJ*O1.=6HH\PN,__,3S@O
  1543. XM,S0Y0T5 *RKCL[I1W\G&JZROR/^^JZ[-/#UOVU-9+BPN0=D]+BM9Q;MO8]GK
  1544. XMMZROLV?1N:JP13=&QM-7,RPS.D1+0#8M3LJ\VU?GXZ^MK\)GRK*MN/=$1]?W
  1545. XM[STM,#_C638O-6?%Q6?K7]>LK+1-=[JHNCDP4\],+C,Z-C4_44HY+-VZN&=1
  1546. XMO[NVL*^ZY\6SKLY /%GK1T(X,S ]7V,U+46_O,Q?PL"]L["QTU/%K:I,,$;7
  1547. XM=S0Q.#HV/%]C.BM$MKI=3[Z\MK:SM^/5O:_$03]9V4] .#4V/UU;.S(_P;S)
  1548. XM6]/!O;6VM]=WQ;.P7SU#]U]&.SX^/#U37T4P-]&[RE?GSKVUMKG?W<.RM>=!
  1549. XM3-WC8TXW-SM1[TPV..?+R&-OX].XM+K+3<:VKU$[1-OO1T$\/CY#2U=).3K.
  1550. XMOLE;V\O"N+F]U>O&N+?C14/K_U=..CL]3N]..CM7R,?K]]?7O+J[P6O/O[/3
  1551. XM24!OUUE(/SU 0E-=1#HZV]7K255W_]/1W=-74[RZNO_CQ;K$TV]WR?_#SE<[
  1552. XM-5E9539"1F=O6V\^3$VUN>]WQ+'!=_?*Q-O/S[P^,CC?;SHV36=W5T9*1%],
  1553. XMN\O#S<RXO<OKV<C7PLWG..=)7T8[/$=?6TM90#Y&M,C.Z\:^N\OCS</&W;W#
  1554. XM1D9'[TM)-45/9U-)0D<^5[Y9X\W!O[O$U]7(OLF[ST#K74Q".SM#6U]+0$<\
  1555. XM3_?'U]&_P+O#U<W'P,_%O^LY:TQ 1#(X04Y%/40].4.[RKN]PZZRM\3'N[FV
  1556. XMO;?;0>L_-SHP-#M*/CHY.S=?N4K5M+>UMK_$N[>YQ[#*/$]&/#HR,3I&0SDU
  1557. XM2#8[W<W+N+:]K[.]PKZWM;VVU4YC:S0X-C,V13XY-SPX/;G=[[&WM+*ZPKVV
  1558. XMN+NWL49/V3,U."XT.3PV,34W+TJ]9[>NNJNNMKJWL+&OM+G?/NLU+C(M+SHY
  1559. XM,S N.#'OO4NNK:^NL[:UK["SN:SC.FL_+2TM,#4X,2TQ.# RO,SGJK"OK+&V
  1560. XMLZZNKK>OO$%13"LN,"XU-# R+S0Q/\#K6ZJMKZ^RLZ^QK["NO#];6RDP+"TU
  1561. XM.#,O,C$S+;SC=ZFOKZVOM[6QK:^RK.=;RRXN-2LO-S@T,#$O-#Y;S]^MKJ^O
  1562. XMM;6SL;*NLK7'1UTR+C M,3<U,#$Q-#)'P-7#K:ZKKK:VL:VNMJZT/?=(*C N
  1563. XM+3,V-#$O,#,Z1\[=N*NOL:^TL["PLZ^SRU%70RPN+R\U-C Q-"\Q2='?P:RR
  1564. XMK*ZTM[2OKK.QL.=?]RPP,"TR-S8T,3(O.DY?V[JNKZ^OM[2RLK.QL]/55SDN
  1565. XM+R\Q-#8S,3,P+T%9W;VPL:VNL[:UL*^TKZ_?5^<S+S$N,S<W,S$R,CE :^^_
  1566. XMLZ^RL;2VL[2UL['(]W<]-B\P,C4W-3 U-B\];^?+L;&RKK*WN+2QM+FRRE7?
  1567. XM."\U,#4X.#<U,S<X/==OUZ^TM;.VN+:WM;:SO-WO9S<S-#0X.SHU-S@W.7=G
  1568. XMU[2XLK6VNKJXMK>YL]MOUS4U.30W/#P[.3DX.D%OU^>UM;FWN+NZN[JWNKW3
  1569. XM8VLZ.3DW.ST\.CLY.SU9U^^^N;BWNKR^O+FYO;F]4>,^-CTY.CT_/CL\/#Y'
  1570. XM2]_9O+B\N[N^O;R]N[O!SW=?13H[/#Q /SP]/3P]5>?GPKN\N;N_P;Z[N[^\
  1571. XMO%G?ZS<_/CL_0D(_/CX^1T_CX\BZOKV]P;^]O,*]RVM92#@R,C8T,B\T+CXZ
  1572. XM0L'$MJ^NKZ^NK:FOJ;Z[S=<X-#$M+R\N+"LO*CHY2TB[N+"OK:ZOK*FJJ\>W
  1573. XMS]D[,C0S+RXN+BXJ*BM&.DW7MJ^NKJZNKJ^KJZR]O,[#-3,U+BXR+B\M*BXT
  1574. XM/5E(OK*OL:ZOL*^NJJZMQ,;!3#@Q,3 O,"\Q+BHM-41,2[VYK*RQKZ^QK:JN
  1575. XMMLK"R><W+RPQ,3 R,"LN+4P_6U^VL+"OL;&QL*RMKL^_U\PT,RTM+S O+BHG
  1576. XM*UU/13VMIZRMKJVMKJVII*[3Y\3W+2@H+2XN+2PJ)"M!749KM:>KK:VNK:VI
  1577. XMIJO#V\?O+RLJ+2TN+BXL)28O5W=(O*VFJZZNK:ZNJ:2HPW??T3DK)BLO+B\N
  1578. XM+"8J,V=;2..KIZJNKZZNJZ>FLE]9S.\K)2<L+"TL*B0B*.?W1&NNHZ2IK*NK
  1579. XMJJBEG[-&2+Q%)A\H+"LK*B@E("S3R4+WII^EJZNKJJFEGZ?K/M_5*2 B*BLK
  1580. XM*BDE("8^Q$@_NI^?J:NIJ:FGI)^KO$';XS,@("@L*RLI(Q\I][MO7\"@H*:K
  1581. XMJZNJI)^BOSU3RC\E'R<K+2PL*!\A-<;5/<FCGZ2LK*RLJJ*?IE$^O,,N'R L
  1582. XM+2TL+"DC(36ZT3UOI)^FKJVLK*BDG[=-/,3'+1\F+"XM+2DC("[&N55=MY^C
  1583. XMK*VLK:RGGY]W-/^Y."$@*RXN+2LJ)",NR[]?9ZR@HZRNK:RJI:&Q9SO,T3<A
  1584. XM(BHO+BTL)R KU[A?:[RCHJFMK:VMJJ.?N3Y#O_\M'R@N+BXN+"8D*EF[RE>]
  1585. XMJ:"JK["NK:>CILXU2,E+*R I+R\O+2DB*#VUVTW=IY^HKZZMK:NEH+D^/L+"
  1586. XM+Q\D+C N+BTI)2I;N-55Q:JDJ:ZOKJZKI:?!.T711# D*2XP,"\K)B0YN=-K
  1587. XMSJZEIZZPL*^NJ:&I4SG+QSDE)"TR,S(O+"8J/[/;3N^JI*JRL[*OK*BJOD]"
  1588. XMW><W*2<O-34S+B@H/,2^4_^YJJJOM;.TL:RFK>\][\P]+B<Q-C8V-3$K+#JY
  1589. XMR5=;LJBKM[BVMK*MJL))1\S/-BHL-3DX.3,N*CK?OV-?OZNMLKJXN+:NJZU/
  1590. XM.-O%/2PL.#LZ.3@V+BT\P\%?;[^LK[FZN;FXKZVW4T7WVS\O+C<\.SHX,2PZ
  1591. X'[\!O6\NMKCLZ
  1592. Xend
  1593. END_OF_FILE
  1594.   if test 3574 -ne `wc -c <'sounds/toggle.au.uue'`; then
  1595.     echo shar: \"'sounds/toggle.au.uue'\" unpacked with wrong size!
  1596.   fi
  1597.   # end of 'sounds/toggle.au.uue'
  1598. fi
  1599. if test -f 'sounds/touch.au.uue' -a "${1}" != "-c" ; then 
  1600.   echo shar: Will not clobber existing file \"'sounds/touch.au.uue'\"
  1601. else
  1602.   echo shar: Extracting \"'sounds/touch.au.uue'\" \(2333 characters\)
  1603.   sed "s/^X//" >'sounds/touch.au.uue' <<'END_OF_FILE'
  1604. Xbegin 664 touch.au
  1605. XM+G-N9    "    9I     0  'T     !          #\?'S^_7[^?GM]>WM]
  1606. XM?GAW>7AU=_[^?G[^_O]Z>/[Y]_?Y^OW\_?[_?O[Y^OW\^_GZ_7Y]?'[]^_W]
  1607. XM^?Y]>WW^?GUZ>GE\??W_>WQ^?7Q\?OW^^_CV]G]^_7]\?_WZ^W[^_/KV^WU]
  1608. XM_G]\?'I\>GI]?7AX__U_?_S\_?Y^_W]^^_G]?WQ_^_U_?'S]___^>GS[^/K]
  1609. XM?GEY?_U_?_OX^?O__OU^?G[^_/W_?WY^_/C\?'MZ?/_^?GIW>'I\?WY_?GY^
  1610. XM?O[Z^/7W_/O]?W=P=7[_?7Q[?OOZ^_GY^_W\^?M_?OY\>GAS='E]_?O\_W]^
  1611. XM_/O[_O_^?7IW=WO]^?[^]_7Z_WWAS$5)O-]F2CV_NSH^OLM07FGFS&!.V&K[
  1612. XMT6Q97,_*1%G<UM='2<+!03_$U_ME/\NZ/D:^<FC>1=J_1$_%[5/67U[+6DW/
  1613. XM>VCI:F7KXF)7W-A><VMXS'U&\\5O3^M<SLL^5[YR4VY6T<1#1\7:7W1,ZL1?
  1614. XM1N#1Z?Y-8,S83T[9SWM<5^/,=TIZSOA?;5C5SDI;SFW]X%'KREA4VVY\V%-?
  1615. XMRW%6[?3^Z5UAV.Q7=]SM87/RY>U;8-;D5&;:^'AV6-S44VC8=/3A66S1:6/D
  1616. XM7^_165;;W79F7>K/<$S]T.Q:7>[6[%)?U=Y;8/GU[6Y9Y]ME^^1@[=MD:=]_
  1617. XM[.97;M)L6??S[/%>;MKS6_CC<GEX?.S\9_GE:U_N[&IN^_[H<5SHW65PZ7CO
  1618. XM[5]^WFQWY6MYW7QK^7KVZV%>X>5>:/7J[&5>Z-YJ7_/K?7-L<>CU:^[N;>OG
  1619. XM9GOE^/?]:.G?8F/G]G)R:/CD:V+O]&SY^F_Y^G;T?6WQZ&YG[N?\<G#QXGI?
  1620. XM^N9S<W9U[?AF?NUM>>ES=^KU_W]M]^!Y9.SD=FUR\.5O7G_G>&I^^OUY<_SN
  1621. XM>'#N]FE[[7Y[='?H\F1[XO9N???K^69WY/AK]>][^WM[]W1O[_QF<NOP<F_\
  1622. XMZ.]E;>+G:6OR[OAK:^GL:W3R^?W^>?7S='S[;7/M^&UW].[T<'7H[VAL\_)Z
  1623. XM;W?M['9X[/)X?_W^]W-N^GEK_O1Y?OS^]?YP]^QZ<7_^^?5X>/+X?/M]>/3T
  1624. XM=71]>G9Q;G[R=V[^]WY[=7SK\'7][_+X<W7N['=O??[\_7;Z[/]N??GY?W)Z
  1625. XM\?EQ=O]Z??U\?/YT<WQP>/EW;GSW^OG_^^ST=OOQ_GG^^/7]=?KP=6[Y\WIV
  1626. XM_O/U<6_U\W!M__/\<G#S[/]U?WMS=GA^>W)Y]WQP_/-]?>[J]'-S\.MV;/KN
  1627. XM_F]U\?%Q;?CO?'!^]?QU<?SX<';U_W9\^?=[=?OO?W'W[?IR=_OY>7;R[GIS
  1628. XM^_=Z;WCS^7)Y\/-U<_SZ>7%[]GYL<O#S?7O]]/A[_._W?O?U_7E\^WMO=?CZ
  1629. XM;W7Q[_MZ?_3Z>'SQ\GIX_/7^<W![_W!Q_GYX??WY_WC_^/[]]O3Z?OST]'Y]
  1630. XM]O3[?_Y^>G)R?7UW?/CX>WO]_']]^O/[>O[V?WA[?'YZ>?SW^WQ\_/S]_GW_
  1631. XM_O_\^?OZ^/[_?7_\?'M^_GQX__YX<F]Y^OUZ?OGZ?WE\^?KY]?+P\O=^>7AU
  1632. XM=GI[??S^>GS^__KX?__]__[Z_'Y_>7K]?W=X_OK[?GA[?7M^^_K]^_?Z_?[Z
  1633. XM_'AX_/IZ='A^>G1Y_'UV>/WZ?WI[_/C\_/?X^_CV^/Q^^OO]^_?Z=G9]?'=S
  1634. XM>/OW_WS\^GIW>WUZ=GA^^OSY^?U[?/_]^OKY^/W^]O;[?'5]]_M[?'YX<G?]
  1635. XM?GAW_OQ\?_7W___Z^?Q]_OM^=WW[_7MZ_OU\=WA]_?[\^_W]^?;T^O[[]_Q_
  1636. XM]_IZ='1]?7AZ_GUU<GM_?7M_^/W^_/3R^OS\_7QZ>O]^>_[^>7E^___^^O/S
  1637. XM_GO\^GYZ?7]]>WIX>'A[?/[\>GEZ?'Q]_/M]?']^?OW[^/]V>OW]?G[V]?Y^
  1638. XM?_SZ^?GY_OWZ^7]V>7]Z<W5[?'EX>GQW='A\_?KV]OO]_?CY_?[]?GE\_OW[
  1639. XM^G[^^'YZ__Q^?7U^?'E\?'IU>'S^?_[^?']]?'_[_'_]??[Z?GU]?_KZ^_G\
  1640. XM_/Y_?'9W>7IY?/S]_?]^>WW_?OS\_OK\?7QU=_S]?O[Z^?O[^_S[^OK]?O_]
  1641. XM_G]]>WU^?'[]?WAV?GYU<G9]_?OW]?GY]_O]?OWX_WI]_']Y='A]>WW\^OK\
  1642. X(_OY[>GM^_WS]
  1643. Xend
  1644. END_OF_FILE
  1645.   if test 2333 -ne `wc -c <'sounds/touch.au.uue'`; then
  1646.     echo shar: \"'sounds/touch.au.uue'\" unpacked with wrong size!
  1647.   fi
  1648.   # end of 'sounds/touch.au.uue'
  1649. fi
  1650. echo shar: End of archive 21 \(of 26\).
  1651. cp /dev/null ark21isdone
  1652. MISSING=""
  1653. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ; do
  1654.     if test ! -f ark${I}isdone ; then
  1655.     MISSING="${MISSING} ${I}"
  1656.     fi
  1657. done
  1658. if test "${MISSING}" = "" ; then
  1659.     echo You have unpacked all 26 archives.
  1660.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1661.     echo "merging split files..."
  1662.     cat blocks.c[12] > blocks.c
  1663.     rm blocks.c[12]
  1664.     echo "blocks.c done"
  1665.     cat bitmaps/earth.xpm.Z.u.[ab] > bitmaps/earth.xpm.Z.uue
  1666.     rm bitmaps/earth.xpm.Z.u.[ab]
  1667.     echo "bitmaps/earth.xpm.Z.uue done"
  1668. else
  1669.     echo You still must unpack the following archives:
  1670.     echo "        " ${MISSING}
  1671. fi
  1672. exit 0
  1673. exit 0 # Just in case...
  1674. -- 
  1675.   // chris@Sterling.COM           | Send comp.sources.x submissions to:
  1676. \X/  Amiga - The only way to fly! |    sources-x@sterling.com
  1677.  "It's intuitively obvious to the |
  1678.   most casual observer..."        | GCS d+/-- p+ c++ l+ m+ s++/+ g+ w+ t+ r+ x+
  1679.