home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume5 / xchomp / part02 < prev    next >
Encoding:
Internet Message Format  |  1989-10-14  |  59.0 KB

  1. Path: uunet!island!argv
  2. From: argv@island.uu.net (Dan Heller)
  3. Newsgroups: comp.sources.x
  4. Subject: v05i011: Xchomp -- Pac-Man(tm) game for X Windows, Part02/03
  5. Message-ID: <1134@island.uu.net>
  6. Date: 13 Oct 89 19:41:03 GMT
  7. Organization: Island Graphics, Marin County, California
  8. Lines: 1532
  9. Approved: island!argv@sun.com
  10.  
  11. Submitted-by: Jerry Shekhel <eddie.mit.edu!polygen!jerry>
  12. Posting-number: Volume 5, Issue 11
  13. Archive-name: xchomp/part02
  14.  
  15.  
  16.  
  17. #! /bin/sh
  18. # This is a shell archive.  Remove anything before this line, then feed it
  19. # into a shell via "sh file" or similar.  To overwrite existing files,
  20. # type "sh file -c".
  21. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  22. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  23. # If this archive is complete, you will see the following message at the end:
  24. #        "End of archive 2 (of 3)."
  25. # Contents:  xchomp/NOTES xchomp/README xchomp/bitmaps/demo/bigc.h
  26. #   xchomp/bitmaps/demo/bigh.h xchomp/bitmaps/demo/bigm.h
  27. #   xchomp/bitmaps/demo/bigo.h xchomp/bitmaps/demo/bigp.h
  28. #   xchomp/bitmaps/demo/icon.h xchomp/bitmaps/fruit/fapple.h
  29. #   xchomp/bitmaps/fruit/fcherry.h xchomp/bitmaps/fruit/fclock.h
  30. #   xchomp/bitmaps/fruit/ff2.h xchomp/bitmaps/fruit/ff3.h
  31. #   xchomp/bitmaps/fruit/ff4.h xchomp/bitmaps/fruit/ff5.h
  32. #   xchomp/bitmaps/fruit/ff6.h xchomp/bitmaps/fruit/ff7.h
  33. #   xchomp/bitmaps/fruit/ff8.h xchomp/bitmaps/fruit/ff9.h
  34. #   xchomp/bitmaps/fruit/fgrape.h xchomp/bitmaps/fruit/fwater.h
  35. #   xchomp/demo.c xchomp/maze.c xchomp/props.c xchomp/status.c
  36. #   xchomp/xchomp.h
  37. # Wrapped by argv@island on Fri Oct 13 12:17:33 1989
  38. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  39. if test -f 'xchomp/NOTES' -a "${1}" != "-c" ; then 
  40.   echo shar: Will not clobber existing file \"'xchomp/NOTES'\"
  41. else
  42. echo shar: Extracting \"'xchomp/NOTES'\" \(3756 characters\)
  43. sed "s/^X//" >'xchomp/NOTES' <<'END_OF_FILE'
  44. X
  45. X            Xchomp, Version 1.0
  46. X            -------------------
  47. X
  48. XCOMPILING THE PROGRAM
  49. X
  50. XXchomp has been tested on the following machines:
  51. X
  52. X    -- Sun 3/50, 3/75, 3/60, 386i
  53. X    -- DEC VAXstation 2000, VAXstation 3100
  54. X    -- Stellar
  55. X
  56. XHere is a performance chart:
  57. X
  58. XMachine            Monochrome            Color
  59. X-------            ----------            -----
  60. X
  61. XSun 3/50, 3/75       -->  A BIT SLOW            N/A
  62. XSun 3/60       -->  RUNS NICELY            N/A
  63. XSun 386i        N/A                too slow
  64. X
  65. XVAXstation 2000        too slow            too slow
  66. XVAXstation 3100    -->    SCREAMS!           -->    SCREAMS!
  67. X
  68. XStellar            N/A               -->    SCREAMS!
  69. X
  70. X
  71. XThe program can be compiled in two ways -- the normal way, which
  72. Xresults in the program running at maximum speed, which is way too
  73. Xfast on systems like the Stellar and the VAXstation 3100, but just
  74. Xright for the Sun 3/60.  The other way is to add "-DFRAME_DELAY=xxxxx"
  75. Xto the CFLAGS in the Makefile.  This causes a delay of the specified
  76. Xnumber of microseconds between each frame of motion.  This delay should
  77. Xbe 20,000 microseconds or under.  Adding "-DFRAME_DELAY=20000" works
  78. Xbeautifully for the VAXstation 3100 and the Stellar.
  79. X
  80. XIf you're porting xchomp to another machine, I suggest you compile it
  81. Xwithout the "-DFRAME_DELAY=xxxxx", and if the result is too fast, then
  82. Xtry several values for the delay.
  83. X
  84. XRUNNING THE PROGRAM
  85. X
  86. XFirst off, let me just state that this program is to be run with ALL
  87. XOTHER PROCESSES ASLEEP!  Even so, on my 3/60, there are times when
  88. Xthe animation gets choppy and uneven for a while.  This is probably
  89. Xdue to some background process waking up and doing something.  Don't
  90. Xexpect perfectly smooth motion under the X Window System, and don't
  91. Xeven try to play the game while compiling something in the background.
  92. XAnd if you're a perfectionist, then get rid of the second hand on your
  93. Xxclock!  I'm serious.
  94. X
  95. XIf you're using a window manager such as TWM, in which the input focus
  96. Xbelongs to the window containing the pointer, there's something to consider.
  97. XOn monochrome Suns, it's best to force the focus on the xchomp window and
  98. Xget the pointer out of there before playing the game.  This is because if
  99. Xthe pointer is in the middle of the window, it'll blink during each motion
  100. Xcycle and cut the performance in half.  Another solution is to place the
  101. Xpointer at the VERY BOTTOM of the window, below the little icons representing
  102. Xthe number of lives left.  If you iconify xchomp, and bring it back, it comes
  103. Xback in a paused state, so you can place the pointer back at the bottom of
  104. Xthe window before you continue.  This whole thing doesn't seem to be a
  105. Xproblem on monochrome VAXstations and color systems.  I'll try to find
  106. Xa better solution for the next posting.
  107. X
  108. XNOTES TO PROGRAMMERS
  109. X
  110. XXchomp uses pure Xlib, without toolkits, widgets, etc.  This is mainly
  111. Xbecause I don't know anything about toolkits, widgets, etc.  In fact,
  112. Xthis program started out as an experiment in X Window System programming;
  113. XI didn't know anything about that either.  While making this game, I always
  114. Xhad an open copy of the Xlib Reference Manual and the Xlib Programming Manual
  115. Xat my side.
  116. X
  117. XIf you're going to be reading or modifying my code, I must apologize for
  118. Xsome of the 1- and 2-letter global variable names.  This whole thing started
  119. Xas a tiny program which bounced circles around in a window.  I wasn't too
  120. Xcareful with the variable names, but otherwise the code should be fairly
  121. Xclear.  Sorry about the goto's in main().
  122. X
  123. X---
  124. X+--------------------+-----------------------+-------------------------------+
  125. X|                    |  Polygen Corporation  |           UUCP:               |
  126. X|  Jerry J. Shekhel  |   Waltham, MA 02254   |  {princeton, mit-eddie,       |
  127. X|                    |    (617) 890-2888     |  buita, sunne}!polygen!jerry  |
  128. X+--------------------+-----------------------+-------------------------------+
  129. END_OF_FILE
  130. if test 3756 -ne `wc -c <'xchomp/NOTES'`; then
  131.     echo shar: \"'xchomp/NOTES'\" unpacked with wrong size!
  132. fi
  133. # end of 'xchomp/NOTES'
  134. fi
  135. if test -f 'xchomp/README' -a "${1}" != "-c" ; then 
  136.   echo shar: Will not clobber existing file \"'xchomp/README'\"
  137. else
  138. echo shar: Extracting \"'xchomp/README'\" \(4647 characters\)
  139. sed "s/^X//" >'xchomp/README' <<'END_OF_FILE'
  140. X
  141. X            Xchomp, Version 1.0
  142. X            -------------------
  143. X
  144. XINTRODUCTION
  145. X
  146. XHello, and welcome to xchomp.  Xchomp is a game closely patterned after
  147. XPac-Man(tm) that runs under the X window system.  I've tried to make the
  148. Xgame as close as possible to the original Pac-Man.  However, I have not
  149. Xseen a Pac-Man arcade machine for years, so all the elements of the game
  150. Xhave been recalled from memory.  Also, I've added something which I
  151. Xalways felt was missing from Pac-Man, namely several different mazes.
  152. X
  153. XINSTRUCTIONS FOR PLAYING
  154. X
  155. XThe point of this game, as in all arcade-style games, is to amass the
  156. Xhighest possible score.  However, some may find that the fun in the game
  157. Xis in trying to reach the highest possible level.  At least, that's what
  158. XI thought was fun about the original.  You, the player, are the circular
  159. Xmouth moving around the maze.  Your opponents are the four ghosts following
  160. Xyou around.  Touching a ghost will cost you a life.  When you start each
  161. Xlevel, the maze is filled with dots.  Eating these dots (by simply going
  162. Xover them), gives you 10 points for each.  You must eat all the dots on a
  163. Xmaze to advance to the next level.
  164. X
  165. XOn each maze, you will also find several large flashing dots; these are
  166. Xthe power-dots.  Eating one of these will add 50 points to your score,
  167. Xand temporarily give you the ability to eat the ghosts.  While the ghosts
  168. Xcan be eaten, they are white (transparent), they move at a reduced speed,
  169. Xand they try to run away from you.  When they turn back to a solid color,
  170. Xthey are back to their normal state, and they return to following you
  171. Xaround.  They won't become solid suddenly; they will flash for a couple
  172. Xof seconds to warn you.  While they're flashing, you can still eat them.
  173. X
  174. XEating a ghost adds points to your score, and the number of points is
  175. Xmomentarily displayed on the screen.  This action turns the ghost into
  176. Xa harmless pair of eyes.  In this state, the ghost moves very quickly,
  177. Xseeking return to the ghost box in the center of the maze.  Once it gets
  178. Xthere, it is "reborn", and goes back to chasing you around the maze.
  179. X
  180. XThe levels of the game are designated by symbols.  The first few levels
  181. Xare "fruit" levels, that is, they are designated by little pictures of
  182. Xfruit on the bottom of the xchomp window.  For example, the first level
  183. Xis the "cherry" level.  Once in a while (twice on every level), the
  184. Xsymbol corresponding to the current level appears in the maze.  It will
  185. Xstay there only for a few seconds; eating it adds a number of points to
  186. Xyour score.  At the higher levels, this is a very significant number.
  187. XIn any case, when you eat a fruit, or other such symbol, the corresponding
  188. Xpoint value is briefly displayed on the screen.
  189. X
  190. XReaching a score of 10,000 awards you an extra life.
  191. X
  192. XGAME CONTROLS
  193. X
  194. XThis is strictly a keyboard-controlled game.  The arcade game had very
  195. Xsimple controls -- one four-directional joystick.  In xchomp, all control
  196. Xis through the arrow keys.  Hitting an arrow key in xchomp is equivalent
  197. Xto pushing the joystick in the corresponding direction and holding it down;
  198. Xthe player on the screen will continue moving in its current direction
  199. Xuntil motion in the specified direction is possible, in which case it will
  200. Xswitch to that direction, or until it hits a wall, in which case it will
  201. Xstop and wait for a key press corresponding to a valid direction.  If this
  202. Xsounds complex, forget it, and just play the game.  I believe you'll find
  203. Xthe controls pretty natural.  It can be thought of like this: the player
  204. Xon the screen will always try to move in the direction of the last key
  205. Xpressed, and if it can't, it'll keep moving in the direction it's moving
  206. Xuntil it can.  Only one key press is remembered -- the last one.  Don't
  207. Xhold down the keys; just hit them; otherwise, there may be times when
  208. Xyou're pressing two keys at a time and the second one won't register.
  209. X
  210. XThe game can be paused by pressing the space bar or by iconifying the xchomp
  211. Xwindow (the latter definitely works on Sun and DECwindows servers).  While
  212. Xthe game is paused, you can abort it by pressing 'R'.  This will return
  213. Xyou to the title screen.  Pressing 'Q' will cause xchomp to terminate.  If
  214. Xyou iconify the xchomp window, the game will be in the paused state when
  215. Xyou de-iconify it.
  216. X
  217. X---
  218. X+--------------------+-----------------------+-------------------------------+
  219. X|                    |  Polygen Corporation  |           UUCP:               |
  220. X|  Jerry J. Shekhel  |   Waltham, MA 02254   |  {princeton, mit-eddie,       |
  221. X|                    |    (617) 890-2888     |  buita, sunne}!polygen!jerry  |
  222. X+--------------------+-----------------------+-------------------------------+
  223. END_OF_FILE
  224. if test 4647 -ne `wc -c <'xchomp/README'`; then
  225.     echo shar: \"'xchomp/README'\" unpacked with wrong size!
  226. fi
  227. # end of 'xchomp/README'
  228. fi
  229. if test -f 'xchomp/bitmaps/demo/bigc.h' -a "${1}" != "-c" ; then 
  230.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/demo/bigc.h'\"
  231. else
  232. echo shar: Extracting \"'xchomp/bitmaps/demo/bigc.h'\" \(1918 characters\)
  233. sed "s/^X//" >'xchomp/bitmaps/demo/bigc.h' <<'END_OF_FILE'
  234. X#define bigc_width 48
  235. X#define bigc_height 48
  236. X#define bigc_x_hot -1
  237. X#define bigc_y_hot -1
  238. Xstatic char bigc_bits[] = {
  239. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  240. X   0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
  241. X   0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
  242. X   0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00,
  243. X   0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x00,
  244. X   0x80, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x1f, 0x00,
  245. X   0xe0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x07, 0x00,
  246. X   0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00,
  247. X   0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00,
  248. X   0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00,
  249. X   0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x00,
  250. X   0xfc, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00,
  251. X   0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00,
  252. X   0xfc, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, 0x00,
  253. X   0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00,
  254. X   0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00,
  255. X   0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0x00,
  256. X   0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x07, 0x00,
  257. X   0xe0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xc0, 0xdf, 0xff, 0xff, 0x1f, 0x00,
  258. X   0x80, 0x9f, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x7f, 0x00,
  259. X   0x00, 0x7e, 0xfc, 0xff, 0xff, 0x00, 0x00, 0xfc, 0xe1, 0xff, 0x7f, 0x00,
  260. X   0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
  261. X   0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
  262. X   0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  263. END_OF_FILE
  264. if test 1918 -ne `wc -c <'xchomp/bitmaps/demo/bigc.h'`; then
  265.     echo shar: \"'xchomp/bitmaps/demo/bigc.h'\" unpacked with wrong size!
  266. fi
  267. # end of 'xchomp/bitmaps/demo/bigc.h'
  268. fi
  269. if test -f 'xchomp/bitmaps/demo/bigh.h' -a "${1}" != "-c" ; then 
  270.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/demo/bigh.h'\"
  271. else
  272. echo shar: Extracting \"'xchomp/bitmaps/demo/bigh.h'\" \(1918 characters\)
  273. sed "s/^X//" >'xchomp/bitmaps/demo/bigh.h' <<'END_OF_FILE'
  274. X#define bigh_width 48
  275. X#define bigh_height 48
  276. X#define bigh_x_hot -1
  277. X#define bigh_y_hot -1
  278. Xstatic char bigh_bits[] = {
  279. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  280. X   0xe0, 0x07, 0x00, 0x00, 0xc0, 0x0f, 0xf8, 0x1f, 0x00, 0x00, 0xf0, 0x3f,
  281. X   0xf8, 0x1f, 0x00, 0x00, 0xf0, 0x3f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
  282. X   0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
  283. X   0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
  284. X   0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
  285. X   0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
  286. X   0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f,
  287. X   0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0xfc, 0xfd, 0x01, 0x00, 0xff, 0x7f,
  288. X   0xfc, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xf9, 0xff, 0xff, 0xff, 0x7f,
  289. X   0xfc, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xf3, 0xff, 0xff, 0xff, 0x7f,
  290. X   0xfc, 0xc7, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0x1f, 0xfc, 0xff, 0xff, 0x7f,
  291. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  292. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  293. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  294. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  295. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  296. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  297. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  298. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  299. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  300. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  301. X   0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f,
  302. X   0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  303. END_OF_FILE
  304. if test 1918 -ne `wc -c <'xchomp/bitmaps/demo/bigh.h'`; then
  305.     echo shar: \"'xchomp/bitmaps/demo/bigh.h'\" unpacked with wrong size!
  306. fi
  307. # end of 'xchomp/bitmaps/demo/bigh.h'
  308. fi
  309. if test -f 'xchomp/bitmaps/demo/bigm.h' -a "${1}" != "-c" ; then 
  310.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/demo/bigm.h'\"
  311. else
  312. echo shar: Extracting \"'xchomp/bitmaps/demo/bigm.h'\" \(1918 characters\)
  313. sed "s/^X//" >'xchomp/bitmaps/demo/bigm.h' <<'END_OF_FILE'
  314. X#define bigm_width 48
  315. X#define bigm_height 48
  316. X#define bigm_x_hot -1
  317. X#define bigm_y_hot -1
  318. Xstatic char bigm_bits[] = {
  319. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  320. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x60,
  321. X   0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x78,
  322. X   0x7c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7e,
  323. X   0xfc, 0x01, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x03, 0x00, 0x00, 0x80, 0x7f,
  324. X   0xfc, 0x07, 0x00, 0x00, 0xc0, 0x7f, 0xfc, 0x0f, 0x00, 0x00, 0xe0, 0x7f,
  325. X   0xfc, 0x1f, 0x00, 0x00, 0xf0, 0x7f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x7f,
  326. X   0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0xfc, 0xff, 0x00, 0x00, 0xfe, 0x7f,
  327. X   0xfc, 0xff, 0x01, 0x00, 0xff, 0x7f, 0xfc, 0xff, 0x03, 0x80, 0xff, 0x7f,
  328. X   0xfc, 0xff, 0x07, 0xc0, 0xff, 0x7f, 0xfc, 0xff, 0x0f, 0xe0, 0xff, 0x7f,
  329. X   0xfc, 0xff, 0x1f, 0xf0, 0xff, 0x7f, 0xfc, 0x7f, 0x3f, 0xf8, 0xff, 0x7f,
  330. X   0xfc, 0x7f, 0x7e, 0xfc, 0xff, 0x7f, 0xfc, 0xff, 0xfc, 0xfe, 0xff, 0x7f,
  331. X   0xfc, 0xff, 0xf9, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xf3, 0xff, 0xff, 0x7f,
  332. X   0xfc, 0xff, 0xe7, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xcf, 0xff, 0xff, 0x7f,
  333. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  334. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  335. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  336. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  337. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  338. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  339. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  340. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  341. X   0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f,
  342. X   0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  343. END_OF_FILE
  344. if test 1918 -ne `wc -c <'xchomp/bitmaps/demo/bigm.h'`; then
  345.     echo shar: \"'xchomp/bitmaps/demo/bigm.h'\" unpacked with wrong size!
  346. fi
  347. # end of 'xchomp/bitmaps/demo/bigm.h'
  348. fi
  349. if test -f 'xchomp/bitmaps/demo/bigo.h' -a "${1}" != "-c" ; then 
  350.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/demo/bigo.h'\"
  351. else
  352. echo shar: Extracting \"'xchomp/bitmaps/demo/bigo.h'\" \(1918 characters\)
  353. sed "s/^X//" >'xchomp/bitmaps/demo/bigo.h' <<'END_OF_FILE'
  354. X#define bigo_width 48
  355. X#define bigo_height 48
  356. X#define bigo_x_hot -1
  357. X#define bigo_y_hot -1
  358. Xstatic char bigo_bits[] = {
  359. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  360. X   0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
  361. X   0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
  362. X   0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x7f, 0x00,
  363. X   0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01,
  364. X   0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x07,
  365. X   0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f,
  366. X   0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f,
  367. X   0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f,
  368. X   0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f,
  369. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  370. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  371. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  372. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f,
  373. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f,
  374. X   0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f,
  375. X   0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f,
  376. X   0xf0, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f,
  377. X   0xe0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0xdf, 0xff, 0xff, 0xff, 0x07,
  378. X   0x80, 0x9f, 0xff, 0xff, 0xff, 0x03, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x01,
  379. X   0x00, 0x7e, 0xfc, 0xff, 0xff, 0x00, 0x00, 0xfc, 0xe1, 0xff, 0x7f, 0x00,
  380. X   0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00,
  381. X   0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00,
  382. X   0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  383. END_OF_FILE
  384. if test 1918 -ne `wc -c <'xchomp/bitmaps/demo/bigo.h'`; then
  385.     echo shar: \"'xchomp/bitmaps/demo/bigo.h'\" unpacked with wrong size!
  386. fi
  387. # end of 'xchomp/bitmaps/demo/bigo.h'
  388. fi
  389. if test -f 'xchomp/bitmaps/demo/bigp.h' -a "${1}" != "-c" ; then 
  390.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/demo/bigp.h'\"
  391. else
  392. echo shar: Extracting \"'xchomp/bitmaps/demo/bigp.h'\" \(1918 characters\)
  393. sed "s/^X//" >'xchomp/bitmaps/demo/bigp.h' <<'END_OF_FILE'
  394. X#define bigp_width 48
  395. X#define bigp_height 48
  396. X#define bigp_x_hot -1
  397. X#define bigp_y_hot -1
  398. Xstatic char bigp_bits[] = {
  399. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  400. X   0xe0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00,
  401. X   0xf8, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00,
  402. X   0xfc, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0xff, 0xf8, 0x3f, 0x00,
  403. X   0xfc, 0xff, 0xff, 0xe3, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0xcf, 0x7f, 0x00,
  404. X   0xfc, 0xff, 0xff, 0x9f, 0xff, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0xff, 0x01,
  405. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03,
  406. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03,
  407. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x07,
  408. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x07,
  409. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x07,
  410. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x07,
  411. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03,
  412. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03,
  413. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01,
  414. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x00,
  415. X   0xfc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0x00,
  416. X   0xfc, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x07, 0x00,
  417. X   0xfc, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00,
  418. X   0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00,
  419. X   0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00,
  420. X   0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00,
  421. X   0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00,
  422. X   0xe0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  423. END_OF_FILE
  424. if test 1918 -ne `wc -c <'xchomp/bitmaps/demo/bigp.h'`; then
  425.     echo shar: \"'xchomp/bitmaps/demo/bigp.h'\" unpacked with wrong size!
  426. fi
  427. # end of 'xchomp/bitmaps/demo/bigp.h'
  428. fi
  429. if test -f 'xchomp/bitmaps/demo/icon.h' -a "${1}" != "-c" ; then 
  430.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/demo/icon.h'\"
  431. else
  432. echo shar: Extracting \"'xchomp/bitmaps/demo/icon.h'\" \(919 characters\)
  433. sed "s/^X//" >'xchomp/bitmaps/demo/icon.h' <<'END_OF_FILE'
  434. X#define icon_width 32
  435. X#define icon_height 32
  436. X#define icon_x_hot -1
  437. X#define icon_y_hot -1
  438. Xstatic char icon_bits[] = {
  439. X   0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x02, 0x00, 0x00, 0x40,
  440. X   0xfa, 0xff, 0xff, 0x5f, 0xfa, 0xff, 0xff, 0x5f, 0x7a, 0xff, 0xff, 0x5f,
  441. X   0x3a, 0xfe, 0xff, 0x5f, 0x7a, 0xff, 0xff, 0x5f, 0xfa, 0xff, 0xff, 0x5f,
  442. X   0xfa, 0xff, 0xff, 0x5f, 0x7a, 0xff, 0xff, 0x5f, 0x3a, 0xfe, 0x83, 0x5f,
  443. X   0x7a, 0xff, 0x00, 0x5e, 0xfa, 0xff, 0x01, 0x5c, 0xfa, 0xff, 0x03, 0x58,
  444. X   0x3a, 0xfe, 0x07, 0x58, 0x1a, 0xfc, 0x0f, 0x50, 0x0a, 0xb8, 0x1f, 0x50,
  445. X   0x0a, 0x18, 0x3f, 0x50, 0x0a, 0xb8, 0x1f, 0x50, 0x1a, 0xfc, 0x0f, 0x50,
  446. X   0x3a, 0xfe, 0x07, 0x58, 0xfa, 0xff, 0x03, 0x58, 0xfa, 0xff, 0x01, 0x5c,
  447. X   0xfa, 0xff, 0x00, 0x5e, 0xfa, 0xff, 0x83, 0x5f, 0xfa, 0xff, 0xff, 0x5f,
  448. X   0xfa, 0xff, 0xff, 0x5f, 0xfa, 0xff, 0xff, 0x5f, 0x02, 0x00, 0x00, 0x40,
  449. X   0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00};
  450. END_OF_FILE
  451. if test 919 -ne `wc -c <'xchomp/bitmaps/demo/icon.h'`; then
  452.     echo shar: \"'xchomp/bitmaps/demo/icon.h'\" unpacked with wrong size!
  453. fi
  454. # end of 'xchomp/bitmaps/demo/icon.h'
  455. fi
  456. if test -f 'xchomp/bitmaps/fruit/fapple.h' -a "${1}" != "-c" ; then 
  457.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/fapple.h'\"
  458. else
  459. echo shar: Extracting \"'xchomp/bitmaps/fruit/fapple.h'\" \(329 characters\)
  460. sed "s/^X//" >'xchomp/bitmaps/fruit/fapple.h' <<'END_OF_FILE'
  461. X#define fapple_width 16
  462. X#define fapple_height 16
  463. X#define fapple_x_hot -1
  464. X#define fapple_y_hot -1
  465. Xstatic char fapple_bits[] = {
  466. X   0x00, 0x01, 0x98, 0x18, 0xfc, 0x3e, 0xfc, 0x3f, 0xee, 0x7f, 0xc6, 0x7f,
  467. X   0xee, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfc, 0x3f,
  468. X   0xfc, 0x3f, 0xfc, 0x3f, 0xf8, 0x1f, 0x70, 0x0e};
  469. END_OF_FILE
  470. if test 329 -ne `wc -c <'xchomp/bitmaps/fruit/fapple.h'`; then
  471.     echo shar: \"'xchomp/bitmaps/fruit/fapple.h'\" unpacked with wrong size!
  472. fi
  473. # end of 'xchomp/bitmaps/fruit/fapple.h'
  474. fi
  475. if test -f 'xchomp/bitmaps/fruit/fcherry.h' -a "${1}" != "-c" ; then 
  476.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/fcherry.h'\"
  477. else
  478. echo shar: Extracting \"'xchomp/bitmaps/fruit/fcherry.h'\" \(334 characters\)
  479. sed "s/^X//" >'xchomp/bitmaps/fruit/fcherry.h' <<'END_OF_FILE'
  480. X#define fcherry_width 16
  481. X#define fcherry_height 16
  482. X#define fcherry_x_hot -1
  483. X#define fcherry_y_hot -1
  484. Xstatic char fcherry_bits[] = {
  485. X   0x80, 0x01, 0x80, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, 0x04, 0x00, 0x08,
  486. X   0x00, 0x0c, 0x3c, 0x0b, 0xf2, 0x08, 0x1a, 0x08, 0xce, 0x0b, 0x2e, 0x07,
  487. X   0xac, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xc0, 0x03};
  488. END_OF_FILE
  489. if test 334 -ne `wc -c <'xchomp/bitmaps/fruit/fcherry.h'`; then
  490.     echo shar: \"'xchomp/bitmaps/fruit/fcherry.h'\" unpacked with wrong size!
  491. fi
  492. # end of 'xchomp/bitmaps/fruit/fcherry.h'
  493. fi
  494. if test -f 'xchomp/bitmaps/fruit/fclock.h' -a "${1}" != "-c" ; then 
  495.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/fclock.h'\"
  496. else
  497. echo shar: Extracting \"'xchomp/bitmaps/fruit/fclock.h'\" \(329 characters\)
  498. sed "s/^X//" >'xchomp/bitmaps/fruit/fclock.h' <<'END_OF_FILE'
  499. X#define fclock_width 16
  500. X#define fclock_height 16
  501. X#define fclock_x_hot -1
  502. X#define fclock_y_hot -1
  503. Xstatic char fclock_bits[] = {
  504. X   0x00, 0x00, 0xc0, 0x07, 0x70, 0x1d, 0x18, 0x31, 0x2c, 0x68, 0x04, 0x41,
  505. X   0x0e, 0xe1, 0x02, 0x81, 0x0e, 0xe1, 0x02, 0x82, 0x0e, 0xe4, 0x04, 0x40,
  506. X   0x2c, 0x68, 0x18, 0x31, 0x70, 0x1d, 0xc0, 0x07};
  507. END_OF_FILE
  508. if test 329 -ne `wc -c <'xchomp/bitmaps/fruit/fclock.h'`; then
  509.     echo shar: \"'xchomp/bitmaps/fruit/fclock.h'\" unpacked with wrong size!
  510. fi
  511. # end of 'xchomp/bitmaps/fruit/fclock.h'
  512. fi
  513. if test -f 'xchomp/bitmaps/fruit/ff2.h' -a "${1}" != "-c" ; then 
  514.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff2.h'\"
  515. else
  516. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff2.h'\" \(413 characters\)
  517. sed "s/^X//" >'xchomp/bitmaps/fruit/ff2.h' <<'END_OF_FILE'
  518. X#define ff2_width 20
  519. X#define ff2_height 16
  520. X#define ff2_x_hot -1
  521. X#define ff2_y_hot -1
  522. Xstatic char ff2_bits[] = {
  523. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc6, 0x00,
  524. X   0x48, 0x29, 0x01, 0x40, 0x29, 0x01, 0x40, 0x29, 0x01, 0x20, 0x29, 0x01,
  525. X   0x10, 0x29, 0x01, 0x08, 0x29, 0x01, 0x08, 0x29, 0x01, 0x78, 0xc6, 0x00,
  526. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  527. END_OF_FILE
  528. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff2.h'`; then
  529.     echo shar: \"'xchomp/bitmaps/fruit/ff2.h'\" unpacked with wrong size!
  530. fi
  531. # end of 'xchomp/bitmaps/fruit/ff2.h'
  532. fi
  533. if test -f 'xchomp/bitmaps/fruit/ff3.h' -a "${1}" != "-c" ; then 
  534.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff3.h'\"
  535. else
  536. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff3.h'\" \(413 characters\)
  537. sed "s/^X//" >'xchomp/bitmaps/fruit/ff3.h' <<'END_OF_FILE'
  538. X#define ff3_width 20
  539. X#define ff3_height 16
  540. X#define ff3_x_hot -1
  541. X#define ff3_y_hot -1
  542. Xstatic char ff3_bits[] = {
  543. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc6, 0x00,
  544. X   0x48, 0x29, 0x01, 0x40, 0x29, 0x01, 0x40, 0x29, 0x01, 0x20, 0x29, 0x01,
  545. X   0x40, 0x29, 0x01, 0x40, 0x29, 0x01, 0x48, 0x29, 0x01, 0x30, 0xc6, 0x00,
  546. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  547. END_OF_FILE
  548. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff3.h'`; then
  549.     echo shar: \"'xchomp/bitmaps/fruit/ff3.h'\" unpacked with wrong size!
  550. fi
  551. # end of 'xchomp/bitmaps/fruit/ff3.h'
  552. fi
  553. if test -f 'xchomp/bitmaps/fruit/ff4.h' -a "${1}" != "-c" ; then 
  554.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff4.h'\"
  555. else
  556. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff4.h'\" \(413 characters\)
  557. sed "s/^X//" >'xchomp/bitmaps/fruit/ff4.h' <<'END_OF_FILE'
  558. X#define ff4_width 20
  559. X#define ff4_height 16
  560. X#define ff4_x_hot -1
  561. X#define ff4_y_hot -1
  562. Xstatic char ff4_bits[] = {
  563. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xc6, 0x00,
  564. X   0x08, 0x29, 0x01, 0x08, 0x29, 0x01, 0x38, 0x29, 0x01, 0x40, 0x29, 0x01,
  565. X   0x40, 0x29, 0x01, 0x40, 0x29, 0x01, 0x48, 0x29, 0x01, 0x30, 0xc6, 0x00,
  566. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  567. END_OF_FILE
  568. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff4.h'`; then
  569.     echo shar: \"'xchomp/bitmaps/fruit/ff4.h'\" unpacked with wrong size!
  570. fi
  571. # end of 'xchomp/bitmaps/fruit/ff4.h'
  572. fi
  573. if test -f 'xchomp/bitmaps/fruit/ff5.h' -a "${1}" != "-c" ; then 
  574.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff5.h'\"
  575. else
  576. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff5.h'\" \(413 characters\)
  577. sed "s/^X//" >'xchomp/bitmaps/fruit/ff5.h' <<'END_OF_FILE'
  578. X#define ff5_width 20
  579. X#define ff5_height 16
  580. X#define ff5_x_hot -1
  581. X#define ff5_y_hot -1
  582. Xstatic char ff5_bits[] = {
  583. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xc6, 0x00,
  584. X   0x40, 0x29, 0x01, 0x40, 0x29, 0x01, 0x40, 0x29, 0x01, 0x20, 0x29, 0x01,
  585. X   0x20, 0x29, 0x01, 0x10, 0x29, 0x01, 0x10, 0x29, 0x01, 0x10, 0xc6, 0x00,
  586. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  587. END_OF_FILE
  588. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff5.h'`; then
  589.     echo shar: \"'xchomp/bitmaps/fruit/ff5.h'\" unpacked with wrong size!
  590. fi
  591. # end of 'xchomp/bitmaps/fruit/ff5.h'
  592. fi
  593. if test -f 'xchomp/bitmaps/fruit/ff6.h' -a "${1}" != "-c" ; then 
  594.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff6.h'\"
  595. else
  596. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff6.h'\" \(413 characters\)
  597. sed "s/^X//" >'xchomp/bitmaps/fruit/ff6.h' <<'END_OF_FILE'
  598. X#define ff6_width 20
  599. X#define ff6_height 16
  600. X#define ff6_x_hot -1
  601. X#define ff6_y_hot -1
  602. Xstatic char ff6_bits[] = {
  603. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x8c, 0x01,
  604. X   0x94, 0x52, 0x02, 0x94, 0x52, 0x02, 0x94, 0x52, 0x02, 0x94, 0x52, 0x02,
  605. X   0x94, 0x52, 0x02, 0x94, 0x52, 0x02, 0x94, 0x52, 0x02, 0x64, 0x8c, 0x01,
  606. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  607. END_OF_FILE
  608. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff6.h'`; then
  609.     echo shar: \"'xchomp/bitmaps/fruit/ff6.h'\" unpacked with wrong size!
  610. fi
  611. # end of 'xchomp/bitmaps/fruit/ff6.h'
  612. fi
  613. if test -f 'xchomp/bitmaps/fruit/ff7.h' -a "${1}" != "-c" ; then 
  614.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff7.h'\"
  615. else
  616. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff7.h'\" \(413 characters\)
  617. sed "s/^X//" >'xchomp/bitmaps/fruit/ff7.h' <<'END_OF_FILE'
  618. X#define ff7_width 20
  619. X#define ff7_height 16
  620. X#define ff7_x_hot -1
  621. X#define ff7_y_hot -1
  622. Xstatic char ff7_bits[] = {
  623. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x31, 0x06,
  624. X   0x52, 0x4a, 0x09, 0x50, 0x4a, 0x09, 0x50, 0x4a, 0x09, 0x48, 0x4a, 0x09,
  625. X   0x44, 0x4a, 0x09, 0x42, 0x4a, 0x09, 0x42, 0x4a, 0x09, 0x9e, 0x31, 0x06,
  626. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  627. END_OF_FILE
  628. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff7.h'`; then
  629.     echo shar: \"'xchomp/bitmaps/fruit/ff7.h'\" unpacked with wrong size!
  630. fi
  631. # end of 'xchomp/bitmaps/fruit/ff7.h'
  632. fi
  633. if test -f 'xchomp/bitmaps/fruit/ff8.h' -a "${1}" != "-c" ; then 
  634.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff8.h'\"
  635. else
  636. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff8.h'\" \(413 characters\)
  637. sed "s/^X//" >'xchomp/bitmaps/fruit/ff8.h' <<'END_OF_FILE'
  638. X#define ff8_width 20
  639. X#define ff8_height 16
  640. X#define ff8_x_hot -1
  641. X#define ff8_y_hot -1
  642. Xstatic char ff8_bits[] = {
  643. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x31, 0x06,
  644. X   0x52, 0x4a, 0x09, 0x50, 0x4a, 0x09, 0x50, 0x4a, 0x09, 0x48, 0x4a, 0x09,
  645. X   0x50, 0x4a, 0x09, 0x50, 0x4a, 0x09, 0x52, 0x4a, 0x09, 0x8c, 0x31, 0x06,
  646. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  647. END_OF_FILE
  648. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff8.h'`; then
  649.     echo shar: \"'xchomp/bitmaps/fruit/ff8.h'\" unpacked with wrong size!
  650. fi
  651. # end of 'xchomp/bitmaps/fruit/ff8.h'
  652. fi
  653. if test -f 'xchomp/bitmaps/fruit/ff9.h' -a "${1}" != "-c" ; then 
  654.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/ff9.h'\"
  655. else
  656. echo shar: Extracting \"'xchomp/bitmaps/fruit/ff9.h'\" \(413 characters\)
  657. sed "s/^X//" >'xchomp/bitmaps/fruit/ff9.h' <<'END_OF_FILE'
  658. X#define ff9_width 20
  659. X#define ff9_height 16
  660. X#define ff9_x_hot -1
  661. X#define ff9_y_hot -1
  662. Xstatic char ff9_bits[] = {
  663. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x31, 0x06,
  664. X   0x42, 0x4a, 0x09, 0x42, 0x4a, 0x09, 0x4e, 0x4a, 0x09, 0x50, 0x4a, 0x09,
  665. X   0x50, 0x4a, 0x09, 0x50, 0x4a, 0x09, 0x52, 0x4a, 0x09, 0x8c, 0x31, 0x06,
  666. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  667. END_OF_FILE
  668. if test 413 -ne `wc -c <'xchomp/bitmaps/fruit/ff9.h'`; then
  669.     echo shar: \"'xchomp/bitmaps/fruit/ff9.h'\" unpacked with wrong size!
  670. fi
  671. # end of 'xchomp/bitmaps/fruit/ff9.h'
  672. fi
  673. if test -f 'xchomp/bitmaps/fruit/fgrape.h' -a "${1}" != "-c" ; then 
  674.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/fgrape.h'\"
  675. else
  676. echo shar: Extracting \"'xchomp/bitmaps/fruit/fgrape.h'\" \(329 characters\)
  677. sed "s/^X//" >'xchomp/bitmaps/fruit/fgrape.h' <<'END_OF_FILE'
  678. X#define fgrape_width 16
  679. X#define fgrape_height 16
  680. X#define fgrape_x_hot -1
  681. X#define fgrape_y_hot -1
  682. Xstatic char fgrape_bits[] = {
  683. X   0x00, 0x10, 0x80, 0x11, 0xc0, 0x16, 0xd8, 0x0b, 0xac, 0x15, 0x7c, 0x26,
  684. X   0x98, 0x2b, 0x60, 0x1f, 0xb0, 0x36, 0xf0, 0x59, 0x60, 0x7b, 0xa0, 0x35,
  685. X   0xf0, 0x07, 0x58, 0x03, 0x78, 0x00, 0x30, 0x00};
  686. END_OF_FILE
  687. if test 329 -ne `wc -c <'xchomp/bitmaps/fruit/fgrape.h'`; then
  688.     echo shar: \"'xchomp/bitmaps/fruit/fgrape.h'\" unpacked with wrong size!
  689. fi
  690. # end of 'xchomp/bitmaps/fruit/fgrape.h'
  691. fi
  692. if test -f 'xchomp/bitmaps/fruit/fwater.h' -a "${1}" != "-c" ; then 
  693.   echo shar: Will not clobber existing file \"'xchomp/bitmaps/fruit/fwater.h'\"
  694. else
  695. echo shar: Extracting \"'xchomp/bitmaps/fruit/fwater.h'\" \(329 characters\)
  696. sed "s/^X//" >'xchomp/bitmaps/fruit/fwater.h' <<'END_OF_FILE'
  697. X#define fwater_width 16
  698. X#define fwater_height 16
  699. X#define fwater_x_hot -1
  700. X#define fwater_y_hot -1
  701. Xstatic char fwater_bits[] = {
  702. X   0x00, 0x00, 0x10, 0x00, 0x38, 0x00, 0x4c, 0x00, 0x8c, 0x00, 0x26, 0x01,
  703. X   0x06, 0x02, 0x26, 0x04, 0x06, 0x09, 0x46, 0x10, 0x0c, 0x24, 0x9c, 0x60,
  704. X   0x38, 0x38, 0xf0, 0x1f, 0xc0, 0x07, 0x00, 0x00};
  705. END_OF_FILE
  706. if test 329 -ne `wc -c <'xchomp/bitmaps/fruit/fwater.h'`; then
  707.     echo shar: \"'xchomp/bitmaps/fruit/fwater.h'\" unpacked with wrong size!
  708. fi
  709. # end of 'xchomp/bitmaps/fruit/fwater.h'
  710. fi
  711. if test -f 'xchomp/demo.c' -a "${1}" != "-c" ; then 
  712.   echo shar: Will not clobber existing file \"'xchomp/demo.c'\"
  713. else
  714. echo shar: Extracting \"'xchomp/demo.c'\" \(3619 characters\)
  715. sed "s/^X//" >'xchomp/demo.c' <<'END_OF_FILE'
  716. X
  717. X#include "xchomp.h"
  718. X
  719. X/*
  720. X * This file contains the code which implements the title screen
  721. X * for the game.
  722. X */
  723. X
  724. Xdemo_seq()
  725. X{
  726. X   int             i, xx, yy, direction, ascent, descent, len;
  727. X   XCharStruct     chars;
  728. X   char            *string, c_buf;
  729. X   XEvent          event;
  730. X   Bool            done = False;
  731. X   long           sc;
  732. X   XComposeStatus  status;
  733. X
  734. X  /* clear the entire window and the map */
  735. X   XFillRectangle(display, window, clearGC, 0, 0, WIN_WIDTH,
  736. X      WIN_HEIGHT + GHOST_SIZE + 2);
  737. X   XFillRectangle(display, map, clearGC, 0, 0, WIN_WIDTH, WIN_HEIGHT);
  738. X
  739. X   /* draw the big title (on the map) */
  740. X   xx = (WIN_WIDTH - (48 * 5 - 10)) / 2;
  741. X   yy = 48;
  742. X   for (i = 0; i < 5; i++) {
  743. X      XCopyPlane(display, demo_map[i], map, orGC, 0, 0, 48, 48, xx, yy, 1);
  744. X      xx += (i ? 48 : 42);      /* compensate for the 'c' cut-off */
  745. X   }
  746. X
  747. X   /* programmer credits */
  748. X   string = "Programmed by Jerry J. Shekhel";
  749. X   len = strlen(string);
  750. X   XQueryTextExtents(display, font, string, len, &direction, &ascent,
  751. X      &descent, &chars);
  752. X   xx = (WIN_WIDTH - chars.width) / 2;
  753. X   yy = 108 + ascent;
  754. X   XDrawImageString(display, map, fullcopyGC, xx, yy, string, len);
  755. X
  756. X   /* draw the two types of dots and their point values */
  757. X   XCopyPlane(display, maze['.'], map, fullcopyGC, 0, 0, GHOST_SIZE,
  758. X      GHOST_SIZE, WIN_WIDTH / 2 - 32, 145, 1);
  759. X   XCopyPlane(display, maze['O'], map, fullcopyGC, 0, 0, GHOST_SIZE,
  760. X      GHOST_SIZE, WIN_WIDTH / 2 - 32, 165, 1);
  761. X   XDrawImageString(display, map, fullcopyGC, WIN_WIDTH / 2 + 16,
  762. X      146 + ascent, "10", 2);
  763. X   XDrawImageString(display, map, fullcopyGC, WIN_WIDTH / 2 + 16,
  764. X      166 + ascent, "50", 2);
  765. X
  766. X   /* draw the high score */
  767. X   string = "High Score: 000000";
  768. X   sc = high_score;
  769. X   for (i = 5; i >= 0; i--) {
  770. X      string[12 + i] = '0' + (sc % 10);
  771. X      sc /= 10;
  772. X   }
  773. X   len = strlen(string);
  774. X   XQueryTextExtents(display, font, string, len, &direction, &ascent,
  775. X      &descent, &chars);
  776. X   xx = (WIN_WIDTH - chars.width) / 2;
  777. X   yy = WIN_HEIGHT -  2 * GHOST_SIZE - descent - 1;
  778. X   XDrawImageString(display, map, fullcopyGC, xx, yy, string, len);
  779. X
  780. X   /* draw some text */
  781. X   string = "Press \'Q\' To Quit";
  782. X   len = strlen(string);
  783. X   XQueryTextExtents(display, font, string, len, &direction, &ascent,
  784. X      &descent, &chars);
  785. X   xx = (WIN_WIDTH - chars.width) / 2;
  786. X   yy = WIN_HEIGHT - GHOST_SIZE - descent - 1;
  787. X   XDrawImageString(display, map, fullcopyGC, xx, yy, string, len);
  788. X
  789. X   /* draw some more text */
  790. X   string = "Any Other Key To Begin";
  791. X   len = strlen(string);
  792. X   XQueryTextExtents(display, font, string, len, &direction, &ascent,
  793. X      &descent, &chars);
  794. X   xx = (WIN_WIDTH - chars.width) / 2;
  795. X   yy = WIN_HEIGHT - descent - 1;
  796. X   XDrawImageString(display, map, fullcopyGC, xx, yy, string, len);
  797. X
  798. X   /* now copy the whole thing to the screen */
  799. X   XCopyArea(display, map, window, fullcopyGC, 0, 0,
  800. X      WIN_WIDTH, WIN_HEIGHT, 0, 0);
  801. X   XSync(display, True);
  802. X
  803. X   /* wait until the user hits a key */
  804. X   while (!done) {
  805. X      XNextEvent(display, &event);
  806. X      if (event.xany.window != window) continue;
  807. X      switch (event.type) {
  808. X         case KeyPress:
  809. X        XLookupString(&event, &c_buf, 1, &last_key, &status);
  810. X        if ((last_key == XK_q) || (last_key == XK_Q))
  811. X           do_exit();
  812. X        XFillRectangle(display, window, clearGC, 0, 0, WIN_WIDTH,
  813. X           WIN_HEIGHT + GHOST_SIZE + 2);
  814. X            XSync(display, True);
  815. X            done = True;
  816. X            break;
  817. X         case Expose:
  818. X            XCopyArea(display, map, window, fullcopyGC, 0, 0,
  819. X               WIN_WIDTH, WIN_HEIGHT, 0, 0);
  820. X            break;
  821. X         default: break;
  822. X      }
  823. X   }
  824. X}
  825. X
  826. END_OF_FILE
  827. if test 3619 -ne `wc -c <'xchomp/demo.c'`; then
  828.     echo shar: \"'xchomp/demo.c'\" unpacked with wrong size!
  829. fi
  830. # end of 'xchomp/demo.c'
  831. fi
  832. if test -f 'xchomp/maze.c' -a "${1}" != "-c" ; then 
  833.   echo shar: Will not clobber existing file \"'xchomp/maze.c'\"
  834. else
  835. echo shar: Extracting \"'xchomp/maze.c'\" \(8447 characters\)
  836. sed "s/^X//" >'xchomp/maze.c' <<'END_OF_FILE'
  837. X
  838. X#include "xchomp.h"
  839. X
  840. X/*
  841. X * The following are the maze data arrays.  In order to avoid confusion,
  842. X * and to ensure that nothing goes wrong, each maze should have the
  843. X * following structure at the center.  This structure defines the
  844. X * ghost box, the starting ghost positions, and the player/fruit
  845. X * position:
  846. X *
  847. X *            q-]D[-e
  848. X *            |+++++|
  849. X *            |GGGG+|
  850. X *            z-----c
  851. X *               P
  852. X *
  853. X *
  854. X * Most of the characters in the maze data are used as indeces into
  855. X * an array of pixmaps which define the images at the corresponding
  856. X * location.
  857. X */
  858. X
  859. Xstatic mazedata   mazes[] = {
  860. X        { "q---------w---------e",
  861. X          "|         |         |",
  862. X          "|O[-] [w] | [-] [-]O|",
  863. X          "|      |  |         |",
  864. X          "a-] [e v [x] [] ^ ^ |",
  865. X          "|    |          | | |",
  866. X          "| tu | q-]D[-e [c v |",
  867. X          "| gj v |+++++|      |",
  868. X          "| gj   |GGGG+| tyyu |",
  869. X          "| bm ^ z-----c bnnm |",
  870. X          "|    |    P         |",
  871. X          "a-] [c [--w--] ^ o [d",
  872. X          "|         |    |    |",
  873. X          "|O[-----] v [--x--]O|",
  874. X          "|                   |",
  875. X          "z-------------------c" },
  876. X
  877. X        { "q---------w---------e",
  878. X          "|         |         |",
  879. X          "|O[] q--] v [--e []O|",
  880. X          "|    |         |    |",
  881. X          "| tu v [-----] v tu |",
  882. X          "| gj             gj |",
  883. X          "| gj ^ q-]D[-e ^ gj |",
  884. X          "| bm | |+++++| | bm |",
  885. X          "|    | |GGGG+| |    |",
  886. X          "| [] v z-----c v tu |",
  887. X          "|         P      gj |",
  888. X          "a--] ^ [-----] ^ bm |",
  889. X          "|    |         |    |",
  890. X          "|O[--x--] ^ [--x--]O|",
  891. X          "|         |         |",
  892. X          "z---------x---------c" },
  893. X
  894. X        { "q-------------------e",
  895. X          "|                   |",
  896. X          "|O[--] ^ [-] ^ [--]O|",
  897. X          "|      |     |      |",
  898. X          "a--] [-x-] [-x-] [--d",
  899. X          "|                   |",
  900. X          "| tu ^ q-]D[-e ^ tu |",
  901. X          "| gj | |+++++| | gj |",
  902. X          "| gj | |GGGG+| | gj |",
  903. X          "| bm v z-----c v bm |",
  904. X          "|         P         |",
  905. X          "| [-] q-] ^ [-e [-e |",
  906. X          "|     |   |   |   | |",
  907. X          "|O[-] | [-x-] | o vO|",
  908. X          "|     |       |     |",
  909. X          "z-----x-------x-----c" },
  910. X
  911. X        { "q-------------------e",
  912. X          "|                   |",
  913. X          "|O[--] ^ [-] ^ [--]O|",
  914. X          "|      |     |      |",
  915. X          "a-] tu z-----c tu [-d",
  916. X          "|   gj         gj   |",
  917. X          "| ^ gj q-]D[-e gj ^ |",
  918. X          "| | bm |+++++| bm | |",
  919. X          "| |    |GGGG+|    | |",
  920. X          "| v [e z-----c q] v |",
  921. X          "|    |    P    |    |",
  922. X          "a--] v [-----] v [--d",
  923. X          "|                   |",
  924. X          "|O[--] ^ [-] ^ [--]O|",
  925. X          "|      |     |      |",
  926. X          "z------x-----x------c" },
  927. X
  928. X        { "q---------w---------e",
  929. X          "|         |         |",
  930. X          "|O^ [w] ^ v ^ [w] ^O|",
  931. X          "| |  |  |   |  |  | |",
  932. X          "| z] v [x] [x] v [c |",
  933. X          "|                   |",
  934. X          "| [e ^ q-]D[-e ^ q] |",
  935. X          "|  v v |+++++| v v  |",
  936. X          "a]     |GGGG+|     [d",
  937. X          "|  ^ ^ z-----c ^ ^  |",
  938. X          "| [c |    P    | z] |",
  939. X          "|    z-] [w] [-c    |",
  940. X          "| tu      |      tu |",
  941. X          "|Obm [] ^ v ^ [] bmO|",
  942. X          "|       |   |       |",
  943. X          "z-------x---x-------c" },
  944. X
  945. X        { "q---------w---------e",
  946. X          "|         |         |",
  947. X          "|O[-] [-] | [-] [-]O|",
  948. X          "|         |         |",
  949. X          "a-] [-] [-x-] [-] [-d",
  950. X          "|                   |",
  951. X          "| tyyu q-]D[-e tyyu |",
  952. X          "| bnnm |+++++| bnnm |",
  953. X          "|      |GGGG+|      |",
  954. X          "| [-w] z-----c [w-] |",
  955. X          "|   |     P     |   |",
  956. X          "| ^ v q-] ^ [-e v ^ |",
  957. X          "| |   |   |   |   | |",
  958. X          "|Ov ^ v ^ v ^ v ^ vO|",
  959. X          "|   |   |   |   |   |",
  960. X          "z---x---x---x---x---c" } };
  961. X
  962. X
  963. Xread_maze(num)
  964. Xint num;
  965. X{
  966. X   int          i, xx, yy, k = NUM_FIGURES, g = 0;
  967. X   int        l = NUM_FIGURES + MAX_POWER_DOTS;
  968. X
  969. X   for (i = 0; i < BLOCK_HEIGHT; i++)
  970. X      strncpy(md[i], mazes[num][i], BLOCK_WIDTH);
  971. X
  972. X   /*
  973. X    * The following is desperate initialization, designed so that
  974. X    * if any vital components are missing from the maze description,
  975. X    * the program doesn't die from access violations.
  976. X    */
  977. X   for (i = 0; i < (NUM_FIGURES + MAX_POWER_DOTS + 1); i++) {
  978. X      rectangle[i].x = rectangle[i].y = GHOST_SIZE;
  979. X      rectangle[i].width = rectangle[i].height = 0;
  980. X   }
  981. X   for (i = 0; i < NUM_FIGURES; i++) {
  982. X      start_x[i] = GHOST_SIZE;
  983. X      start_y[i] = GHOST_SIZE;
  984. X   }
  985. X   fruit_x = GHOST_SIZE;
  986. X   fruit_y = GHOST_SIZE;
  987. X   door_x = 1;
  988. X   door_y = 1;
  989. X
  990. X   /*
  991. X    * The rest of this function analyzes the maze data array,
  992. X    * and builds the maze image, as well as the dot information
  993. X    * array (dd[]).  The image is created on the background map (save),
  994. X    * and the power-dot images are created on the power-dot map (powermap).
  995. X    */
  996. X
  997. X   numdots = 0;
  998. X   powerdots = 0;
  999. X   for (yy = 0; yy < BLOCK_HEIGHT; yy++)
  1000. X      for (xx = 0; xx < BLOCK_WIDTH; xx++) {
  1001. X         dd[yy][xx] = '\0';
  1002. X         switch (md[yy][xx]) {
  1003. X
  1004. X            case ' ':
  1005. X
  1006. X        /* wherever there's a space, we'll put a dot */
  1007. X                md[yy][xx] = '\0';
  1008. X                dd[yy][xx] = '.';
  1009. X                numdots++;
  1010. X                break;
  1011. X
  1012. X            case 'O':
  1013. X
  1014. X        /* there is a power-dot here */
  1015. X                md[yy][xx] = '\0';
  1016. X                if (powerdots < MAX_POWER_DOTS) {
  1017. X                   dd[yy][xx] = 'O';
  1018. X                   rectangle[k].x = xx * GHOST_SIZE;
  1019. X                   rectangle[k].y = yy * GHOST_SIZE;
  1020. X                   rectangle[k].width = GHOST_SIZE;
  1021. X                   rectangle[k++].height = GHOST_SIZE;
  1022. X                   powerdots++;
  1023. X                   numdots++;
  1024. X                   XCopyPlane(display, maze['O'], powermap, fullcopyGC, 0, 0,
  1025. X                      GHOST_SIZE, GHOST_SIZE, xx * GHOST_SIZE,
  1026. X                      yy * GHOST_SIZE, 1);
  1027. X                }
  1028. X                break;
  1029. X
  1030. X            case 'P':
  1031. X
  1032. X        /*
  1033. X         * This is the starting position of the player, as well
  1034. X         * as the location of the fruit when it appears.
  1035. X         */
  1036. X                md[yy][xx] = '\0';
  1037. X                start_x[PAC_SLOT] = fruit_x = xx * GHOST_SIZE;
  1038. X                start_y[PAC_SLOT] = fruit_y = yy * GHOST_SIZE;
  1039. X        rectangle[l].x = fruit_x - 2;
  1040. X        rectangle[l].y = fruit_y;
  1041. X        rectangle[l].width = FRUIT_WIDTH;
  1042. X        rectangle[l].height = FRUIT_HEIGHT;
  1043. X                break;
  1044. X
  1045. X            case 'G':
  1046. X
  1047. X        /*
  1048. X         * This is the starting position of a ghost.  It had
  1049. X         * better be somewhere at the bottom of the ghost box,
  1050. X         * and not in the rightmost position.  This is because
  1051. X         * initially, the ghosts will be sent to the right.
  1052. X         */
  1053. X                md[yy][xx] = '\0';
  1054. X                if (g < PAC_SLOT) {
  1055. X                   start_x[g] = xx * GHOST_SIZE;
  1056. X                   start_y[g++] = yy * GHOST_SIZE;
  1057. X                }
  1058. X                break;
  1059. X
  1060. X            case 'D':
  1061. X
  1062. X        /*
  1063. X         * This is the position of the ghost box door.  It
  1064. X         * had better be placed correctly.
  1065. X         */
  1066. X                door_x = xx;
  1067. X                door_y = yy;
  1068. X                break;
  1069. X
  1070. X            case '+':
  1071. X
  1072. X        /* this space should be left blank */
  1073. X                md[yy][xx] = '\0';
  1074. X                break;
  1075. X
  1076. X            default: break;
  1077. X         }
  1078. X      }
  1079. X
  1080. X   /*
  1081. X    * The graphics context used to flash the power-dots will be loaded
  1082. X    * with clipping information which defines only those areas of the
  1083. X    * maze which contain the power-dots.
  1084. X    */
  1085. X   XSetClipRectangles(display, powerGC, 0, 0, rectangle + NUM_FIGURES,
  1086. X      powerdots, Unsorted);
  1087. X
  1088. X   /* build the maze image */
  1089. X   for (yy = 0; yy < BLOCK_HEIGHT; yy++)
  1090. X      for (xx = 0; xx < BLOCK_WIDTH; xx++) {
  1091. X         if (dd[yy][xx])
  1092. X            XCopyPlane(display, maze[dd[yy][xx]], save, fullcopyGC, 0, 0,
  1093. X               GHOST_SIZE, GHOST_SIZE, xx * GHOST_SIZE,
  1094. X               yy * GHOST_SIZE, 1);
  1095. X         else
  1096. X            XCopyPlane(display, maze[md[yy][xx]], save, fullcopyGC, 0, 0,
  1097. X               GHOST_SIZE, GHOST_SIZE, xx * GHOST_SIZE,
  1098. X               yy * GHOST_SIZE, 1);
  1099. X      }
  1100. X}
  1101. X
  1102. X
  1103. X/*
  1104. X * The function which follows is used at the beginning of each level to
  1105. X * set up the initial parameters for all of the moving figures.
  1106. X */
  1107. Xposition_players()
  1108. X{
  1109. X   int i;
  1110. X
  1111. X   for (i = 0; i < PAC_SLOT; i++) {
  1112. X      x[i] = start_x[i];
  1113. X      y[i] = start_y[i];
  1114. X      ix[i] = 2;
  1115. X      iy[i] = 0;
  1116. X      ghost[i] = bghost;
  1117. X      drive[i] = hover;
  1118. X      loops[i] = 0;
  1119. X      contact[i] = die;
  1120. X      rectangle[i].x = x[i] - 2;
  1121. X      rectangle[i].y = y[i] - 2;
  1122. X      rectangle[i].width = GHOST_SIZE + 4;
  1123. X      rectangle[i].height = GHOST_SIZE + 4;
  1124. X   }
  1125. X
  1126. X   x[PAC_SLOT] = start_x[PAC_SLOT];
  1127. X   y[PAC_SLOT] = start_y[PAC_SLOT];
  1128. X   ix[PAC_SLOT] = (-2);
  1129. X   iy[PAC_SLOT] = 0;
  1130. X   rectangle[PAC_SLOT].x = x[PAC_SLOT] - 2;
  1131. X   rectangle[PAC_SLOT].y = y[PAC_SLOT] - 2;
  1132. X   rectangle[PAC_SLOT].width = GHOST_SIZE + 4;
  1133. X   rectangle[PAC_SLOT].height = GHOST_SIZE + 4;
  1134. X   pac = lpac;
  1135. X}
  1136. X
  1137. END_OF_FILE
  1138. if test 8447 -ne `wc -c <'xchomp/maze.c'`; then
  1139.     echo shar: \"'xchomp/maze.c'\" unpacked with wrong size!
  1140. fi
  1141. # end of 'xchomp/maze.c'
  1142. fi
  1143. if test -f 'xchomp/props.c' -a "${1}" != "-c" ; then 
  1144.   echo shar: Will not clobber existing file \"'xchomp/props.c'\"
  1145. else
  1146. echo shar: Extracting \"'xchomp/props.c'\" \(3433 characters\)
  1147. sed "s/^X//" >'xchomp/props.c' <<'END_OF_FILE'
  1148. X
  1149. X#include "xchomp.h"
  1150. X
  1151. X
  1152. X/*
  1153. X * This file contains code which implements several special
  1154. X * sequences in the game.
  1155. X */
  1156. X
  1157. X
  1158. X/* the get-ready sequence */
  1159. Xget_ready()
  1160. X{
  1161. X   int          xx, yy, i;
  1162. X   int          direction, ascent, descent;
  1163. X   XCharStruct  chars;
  1164. X   char         *string = "READY!";
  1165. X
  1166. X   XQueryTextExtents(display, font, string, 6, &direction, &ascent,
  1167. X      &descent, &chars);
  1168. X
  1169. X   xx = (WIN_WIDTH - chars.width) / 2;
  1170. X   yy = start_y[PAC_SLOT] + 1 + ascent;
  1171. X
  1172. X   XDrawImageString(display, window, fullcopyGC, xx, yy, string, 6);
  1173. X   XSync(display, False);
  1174. X   sleep(2);
  1175. X   XCopyPlane(display, lpac[0], map, orGC, 0, 0, GHOST_SIZE,
  1176. X      GHOST_SIZE, x[PAC_SLOT], y[PAC_SLOT], 1);
  1177. X   for (i = 0; i < PAC_SLOT; i++)
  1178. X      XCopyPlane(display, bghost[0], map, orGC, 0, 0, GHOST_SIZE,
  1179. X         GHOST_SIZE, x[i], y[i], 1);
  1180. X   XCopyArea(display, map, window, fullcopyGC, 0, 0, WIN_WIDTH,
  1181. X      WIN_HEIGHT, 0, 0);
  1182. X   XSync(display, False);
  1183. X   sleep(2);
  1184. X}
  1185. X
  1186. X
  1187. X/* the game-over sequence */
  1188. Xgame_over()
  1189. X{
  1190. X   int          xx, yy;
  1191. X   int          direction, ascent, descent;
  1192. X   XCharStruct  chars;
  1193. X   char         *string = "GAME OVER";
  1194. X
  1195. X   XQueryTextExtents(display, font, string, 9, &direction, &ascent,
  1196. X      &descent, &chars);
  1197. X
  1198. X   xx = (WIN_WIDTH - chars.width) / 2;
  1199. X   yy = start_y[PAC_SLOT] + 1 + ascent;
  1200. X
  1201. X   sleep(1);
  1202. X   XDrawImageString(display, window, fullcopyGC, xx, yy, string, 9);
  1203. X   XSync(display, False);
  1204. X   if (score > high_score)
  1205. X      high_score = score;
  1206. X   sleep(3);
  1207. X}
  1208. X
  1209. X
  1210. X/* the end-of-level sequence -- the screen flashes a few times */
  1211. Xfinish()
  1212. X{
  1213. X   int i;
  1214. X
  1215. X   /* erase the fruit */
  1216. X   XFillRectangle(display, save, clearGC, fruit_x - 2, fruit_y,
  1217. X      FRUIT_WIDTH, FRUIT_HEIGHT);
  1218. X
  1219. X   XCopyArea(display, save, map, fullcopyGC, 0, 0,
  1220. X      WIN_WIDTH, WIN_HEIGHT, 0, 0);
  1221. X   XCopyPlane(display, lpac[0], map, orGC, 0, 0,
  1222. X      GHOST_SIZE, GHOST_SIZE, x[PAC_SLOT], y[PAC_SLOT], 1);
  1223. X   XCopyArea(display, map, window, fullcopyGC, 0, 0,
  1224. X      WIN_WIDTH, WIN_HEIGHT, 0, 0);
  1225. X   XSync(display, False);
  1226. X   print_score(100L * (level + 1));
  1227. X   sleep(2);
  1228. X
  1229. X   XCopyArea(display, save, window, fullcopyGC, 0, 0,
  1230. X      WIN_WIDTH, WIN_HEIGHT, 0, 0);
  1231. X   for (i = 0; i < 7; i++) {
  1232. X      XFillRectangle(display, window, invertGC, 0, 0, WIN_WIDTH, WIN_HEIGHT);
  1233. X      XSync(display, False);
  1234. X      usleep(350000);
  1235. X   }
  1236. X   XFillRectangle(display, window, clearGC, 0, 0, WIN_WIDTH, WIN_HEIGHT);
  1237. X   XSync(display, False);
  1238. X   sleep(2);
  1239. X}
  1240. X
  1241. X
  1242. X/* the paused-game sequence */
  1243. XBool pause_seq()
  1244. X{
  1245. X   XEvent        event;
  1246. X   char            c_buf;
  1247. X   XComposeStatus    status;
  1248. X
  1249. X   XDrawImageString(display, window, fullcopyGC, 60,
  1250. X      WIN_HEIGHT + ascent + 2, "Paused", 6);
  1251. X   XSync(display, False);
  1252. X
  1253. X   while (True) {
  1254. X      XNextEvent(display, &event);
  1255. X      if (event.xany.window != window) continue;
  1256. X      switch (event.type) {
  1257. X     case KeyPress:
  1258. X        XLookupString(&event, &c_buf, 1, &last_key, &status);
  1259. X        if ((last_key == XK_q) || (last_key == XK_Q))
  1260. X           do_exit();
  1261. X        if ((last_key == XK_r) || (last_key == XK_R))
  1262. X           return False;
  1263. X        XDrawImageString(display, window, fullcopyGC, 60,
  1264. X           WIN_HEIGHT + ascent + 2, "      ", 6);
  1265. X        XSync(display, False);
  1266. X        return True;
  1267. X     case Expose:
  1268. X        XCopyArea(display, map, window, fullcopyGC, 0, 0,
  1269. X           WIN_WIDTH, WIN_HEIGHT, 0, 0);
  1270. X        restore_status();
  1271. X        XDrawImageString(display, window, fullcopyGC, 60,
  1272. X           WIN_HEIGHT + ascent + 2, "Paused", 6);
  1273. X        break;
  1274. X     default: break;
  1275. X      }
  1276. X   }
  1277. X}
  1278. END_OF_FILE
  1279. if test 3433 -ne `wc -c <'xchomp/props.c'`; then
  1280.     echo shar: \"'xchomp/props.c'\" unpacked with wrong size!
  1281. fi
  1282. # end of 'xchomp/props.c'
  1283. fi
  1284. if test -f 'xchomp/status.c' -a "${1}" != "-c" ; then 
  1285.   echo shar: Will not clobber existing file \"'xchomp/status.c'\"
  1286. else
  1287. echo shar: Extracting \"'xchomp/status.c'\" \(1703 characters\)
  1288. sed "s/^X//" >'xchomp/status.c' <<'END_OF_FILE'
  1289. X
  1290. X#include "xchomp.h"
  1291. X
  1292. X
  1293. X/*
  1294. X * This file contains functions which are used to maintain the
  1295. X * status line of the game window.  The status line contains the
  1296. X * score, the fruit level, and the number of lives remaining.
  1297. X */
  1298. X
  1299. Xprint_score(incr)
  1300. Xlong incr;
  1301. X{
  1302. X   static char          string[6];
  1303. X   register long        sc;
  1304. X   register int         j;
  1305. X
  1306. X   if (score < 10000L) {
  1307. X      if ((sc = score += incr) >= 10000)
  1308. X     (void)set_lives(lives + 1);
  1309. X   }
  1310. X   else sc = score += incr;
  1311. X
  1312. X   for (j = 5; j >= 0; j--) {
  1313. X      string[j] = '0' + (sc % 10);
  1314. X      sc /= 10;
  1315. X   }
  1316. X   XDrawImageString(display, window, fullcopyGC, 6,
  1317. X      WIN_HEIGHT + ascent + 2, string, 6);
  1318. X}
  1319. X
  1320. X
  1321. Xint set_lives(num)
  1322. Xint num;
  1323. X{
  1324. X   int i;
  1325. X
  1326. X   if (lives = num)
  1327. X      for (i = 1; i < lives; i++)
  1328. X         XCopyPlane(display, small_pac, window, orGC, 0, 0,
  1329. X            GHOST_SIZE, GHOST_SIZE, WIN_WIDTH - 6 - i * 12,
  1330. X            WIN_HEIGHT + 1, 1);
  1331. X   XFillRectangle(display, window, clearGC, 14 * GHOST_SIZE,
  1332. X      WIN_HEIGHT + 1, (WIN_WIDTH - 5 - (i - 1) * 12) -
  1333. X      14 * GHOST_SIZE, GHOST_SIZE);
  1334. X   return lives;
  1335. X}
  1336. X
  1337. X
  1338. Xdisplay_level(slowly)
  1339. XBool slowly;
  1340. X{
  1341. X   int i, xx;
  1342. X
  1343. X   XFillRectangle(display, window, clearGC, 7 * GHOST_SIZE,
  1344. X      WIN_HEIGHT + 1, 7 * GHOST_SIZE, GHOST_SIZE);
  1345. X   XSync(display, False);
  1346. X
  1347. X   xx = 13 - (i = level);
  1348. X   if (xx < 7) xx = 7;
  1349. X
  1350. X   while (xx < 14) {
  1351. X      if (slowly)
  1352. X     usleep(100000);
  1353. X      XCopyPlane(display, fruit_pix[(i > 13) ? 13 : i], window, fullcopyGC,
  1354. X     0, 0, GHOST_SIZE, GHOST_SIZE, (xx++) * GHOST_SIZE, WIN_HEIGHT + 1, 1);
  1355. X      --i;
  1356. X      XSync(display, False);
  1357. X   }
  1358. X   if (slowly)
  1359. X      usleep(100000);
  1360. X}
  1361. X
  1362. X
  1363. Xrestore_status()
  1364. X{
  1365. X   print_score(0L);
  1366. X   (void)set_lives(lives);
  1367. X   display_level(False);
  1368. X}
  1369. END_OF_FILE
  1370. if test 1703 -ne `wc -c <'xchomp/status.c'`; then
  1371.     echo shar: \"'xchomp/status.c'\" unpacked with wrong size!
  1372. fi
  1373. # end of 'xchomp/status.c'
  1374. fi
  1375. if test -f 'xchomp/xchomp.h' -a "${1}" != "-c" ; then 
  1376.   echo shar: Will not clobber existing file \"'xchomp/xchomp.h'\"
  1377. else
  1378. echo shar: Extracting \"'xchomp/xchomp.h'\" \(4325 characters\)
  1379. sed "s/^X//" >'xchomp/xchomp.h' <<'END_OF_FILE'
  1380. X
  1381. X#ifndef EXTERN
  1382. X#define EXTERN extern
  1383. X#endif
  1384. X
  1385. X#include <signal.h>
  1386. X
  1387. X#include <X11/Xlib.h>
  1388. X#include <X11/Xutil.h>
  1389. X#include <X11/Xatom.h>
  1390. X#include <X11/keysym.h>
  1391. X
  1392. X#ifndef NULL
  1393. X#define NULL        0L
  1394. X#endif
  1395. X
  1396. X#define sgn(x)          ((x) ? (((x) > 0) ? 1 : -1) : 0)
  1397. X#define abs(x)          (((x) < 0) ? -(x) : (x))
  1398. X
  1399. X
  1400. X/*-- MACHINE DEPENDENCIES ----------------------------------------------------*/
  1401. X
  1402. X#ifdef VMS
  1403. XEXTERN float            vms_delay;
  1404. X#define random()        (rand() >> 16)
  1405. X#define usleep(x)       { vms_delay = (x) * 0.000001; lib$wait(&vms_delay); }
  1406. X#endif
  1407. X
  1408. X#ifdef ULTRIX
  1409. X#include <sys/time.h>
  1410. XEXTERN struct timeval    st_delay;
  1411. X#define usleep(x)    { st_delay.tv_usec = (x); st_delay.tv_sec = 0; \
  1412. X              select(32, NULL, NULL, NULL, &st_delay); }
  1413. X#endif
  1414. X
  1415. X#ifdef stellar
  1416. X#include <sys/time.h>
  1417. XEXTERN struct timeval    st_delay;
  1418. X#define usleep(x)    { st_delay.tv_usec = (x); st_delay.tv_sec = 0; \
  1419. X              select(32, NULL, NULL, NULL, &st_delay); }
  1420. X#endif
  1421. X
  1422. X/*----------------------------------------------------------------------------*/
  1423. X
  1424. X
  1425. X#define GHOST_SIZE      16    /* width and height of a ghost (pixels) */
  1426. X
  1427. X#define BLOCK_WIDTH     21    /* width of the maze (16x16-pixel blocks) */
  1428. X#define BLOCK_HEIGHT    16    /* height of the maze (16x16-pixel blocks) */
  1429. X
  1430. X#define WIN_WIDTH       GHOST_SIZE * BLOCK_WIDTH   /* maze width (pixels) */
  1431. X#define WIN_HEIGHT      GHOST_SIZE * BLOCK_HEIGHT  /* maze height (pixels) */
  1432. X
  1433. X#define FRUIT_WIDTH    20    /* width of the fruit area (pixels) */
  1434. X#define FRUIT_HEIGHT    16    /* height of the fruit area (pixels) */
  1435. X
  1436. X#define ICON_WIDTH      32    /* width of the icon (pixels) */
  1437. X#define ICON_HEIGHT     32    /* height of the icon (pixels) */
  1438. X
  1439. X#define NUM_FIGURES     5    /* number of moving figures */
  1440. X#define PAC_SLOT        4    /* array index of the player */
  1441. X#define MAX_POWER_DOTS  4    /* maximum number of power dots */
  1442. X
  1443. Xtypedef int             intm[8];
  1444. Xtypedef char            charm[BLOCK_WIDTH];
  1445. Xtypedef charm        mazedata[BLOCK_HEIGHT];
  1446. Xtypedef int             (*funcptr)();
  1447. X            
  1448. XEXTERN Atom             DEC_icon_atom;
  1449. X
  1450. X/* Xlib parameters */
  1451. XEXTERN Display *        display;
  1452. XEXTERN Window           root;
  1453. XEXTERN Window           window;
  1454. XEXTERN int              screen;
  1455. XEXTERN int              depth;
  1456. XEXTERN int              black;
  1457. XEXTERN int              white;
  1458. XEXTERN Bool             normal;
  1459. XEXTERN Font             font;
  1460. XEXTERN int              ascent, descent;
  1461. X
  1462. X/* graphics contexts */
  1463. XEXTERN GC               copyGC;
  1464. XEXTERN GC               orGC;
  1465. XEXTERN GC               clearGC;
  1466. XEXTERN GC               powerGC;
  1467. XEXTERN GC               invertGC;
  1468. XEXTERN GC               fullcopyGC;
  1469. XEXTERN GC               bitmapGC;
  1470. X
  1471. X/* bitmaps */
  1472. XEXTERN Pixmap           icon;
  1473. XEXTERN Pixmap           map;
  1474. XEXTERN Pixmap           save;
  1475. XEXTERN Pixmap           powermap;
  1476. XEXTERN Pixmap           demo_map[5];
  1477. XEXTERN Pixmap           bghost[16];
  1478. XEXTERN Pixmap           eghost[16];
  1479. XEXTERN Pixmap           fghost[16];
  1480. XEXTERN Pixmap           gghost[16];
  1481. XEXTERN Pixmap           lpac[16], rpac[16], upac[16], dpac[16];
  1482. XEXTERN Pixmap           *pac;
  1483. XEXTERN Pixmap           maze[128];
  1484. XEXTERN Pixmap           dead_prot[11], deadpac[11];
  1485. XEXTERN Pixmap           small_pac;
  1486. XEXTERN Pixmap           eat_pix[4];
  1487. XEXTERN Pixmap        fval_pix[14];
  1488. XEXTERN Pixmap        fruit_pix[14];
  1489. X
  1490. XEXTERN intm             x, y, ix, iy, start_x, start_y;
  1491. XEXTERN int              grey_tick, flash_tick, off_tick;
  1492. XEXTERN int        count_sync;
  1493. XEXTERN Bool        eat_mode;
  1494. XEXTERN int              door_x, door_y;
  1495. XEXTERN int        fruit_count;
  1496. XEXTERN int        fruit_times;
  1497. XEXTERN int        fruit_x, fruit_y;
  1498. XEXTERN Bool        fruit_shown;
  1499. XEXTERN int              eat_index;
  1500. XEXTERN mazedata         md, dd;
  1501. XEXTERN funcptr          drive[NUM_FIGURES - 1];
  1502. XEXTERN funcptr          contact[NUM_FIGURES - 1];
  1503. XEXTERN Pixmap           *ghost[NUM_FIGURES - 1];
  1504. XEXTERN int              loops[NUM_FIGURES - 1];
  1505. X
  1506. XEXTERN XRectangle       rectangle[NUM_FIGURES + MAX_POWER_DOTS + 1];
  1507. XEXTERN int              numdots;
  1508. XEXTERN int              powerdots;
  1509. XEXTERN int        level, plevel;
  1510. XEXTERN int              lives;
  1511. XEXTERN int              count;
  1512. XEXTERN long             score;
  1513. XEXTERN long        high_score;
  1514. XEXTERN KeySym           last_key;
  1515. XEXTERN Bool             dead, completed;
  1516. X
  1517. Xextern                  follow(), hover(), hover2(), run(), go_home();
  1518. Xextern                  die(), eat(), noop();
  1519. Xextern Bool        pause_seq();
  1520. END_OF_FILE
  1521. if test 4325 -ne `wc -c <'xchomp/xchomp.h'`; then
  1522.     echo shar: \"'xchomp/xchomp.h'\" unpacked with wrong size!
  1523. fi
  1524. # end of 'xchomp/xchomp.h'
  1525. fi
  1526. echo shar: End of archive 2 \(of 3\).
  1527. cp /dev/null ark2isdone
  1528. MISSING=""
  1529. for I in 1 2 3 ; do
  1530.     if test ! -f ark${I}isdone ; then
  1531.     MISSING="${MISSING} ${I}"
  1532.     fi
  1533. done
  1534. if test "${MISSING}" = "" ; then
  1535.     echo You have unpacked all 3 archives.
  1536.     rm -f ark[1-9]isdone
  1537. else
  1538.     echo You still need to unpack the following archives:
  1539.     echo "        " ${MISSING}
  1540. fi
  1541. ##  End of shell archive.
  1542. exit 0
  1543.