home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume18 / xmris / patch1.05 < prev    next >
Internet Message Format  |  1992-07-29  |  32KB

  1. Path: uunet!uunet!dtix!darwin.sura.net!gatech!swrinde!mips!msi!dcmartin
  2. From: nathan@inmos.co.uk (Nathan Sidwell)
  3. Newsgroups: comp.sources.x
  4. Subject: v18i076: xmris version 2.00, Patch1, Part05/05
  5. Message-ID: <1992Jul29.181143.15766@msi.com>
  6. Date: 29 Jul 92 18:11:43 GMT
  7. References: <csx-18i072-xmris@uunet.UU.NET>
  8. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  9. Organization: Molecular Simulations, Inc.
  10. Lines: 993
  11. Approved: dcmartin@msi.com
  12. Originator: dcmartin@fascet
  13.  
  14. Submitted-by: Nathan Sidwell <nathan@inmos.co.uk>
  15. Posting-number: Volume 18, Issue 76
  16. Archive-name: xmris/patch1.05
  17. Patch-To: xmris: Volume XXX, Issue XXX
  18.  
  19. #!/bin/sh
  20. # this is part.05 (part 5 of a multipart archive)
  21. # do not concatenate these parts, unpack them in order with /bin/sh
  22. # file patch.v2.00 continued
  23. #
  24. if test ! -r _shar_seq_.tmp; then
  25.     echo 'Please unpack part 1 first!'
  26.     exit 1
  27. fi
  28. (read Scheck
  29.  if test "$Scheck" != 5; then
  30.     echo Please unpack part "$Scheck" next!
  31.     exit 1
  32.  else
  33.     exit 0
  34.  fi
  35. ) < _shar_seq_.tmp || exit 1
  36. if test ! -f _shar_wnt_.tmp; then
  37.     echo 'x - still skipping patch.v2.00'
  38. else
  39. echo 'x - continuing file patch.v2.00'
  40. sed 's/^X//' << 'SHAR_EOF' >> 'patch.v2.00' &&
  41. X                        
  42. X        XLookupString(&event.xkey, &chr, 1, &symbol, &status);
  43. !       if(isupper(chr))
  44. !         chr = tolower(chr);
  45. !       if(chr == 'p' && pausable)
  46. !         paused++;
  47. !       else if(paused && chr == ' ')
  48. !         player.motionevent = paused = 0;
  49. !       else if((paused || !pausable) && chr == 'q')
  50. X          {
  51. !           paused = 0;
  52. !           quit = 1;
  53. X          }
  54. !       else if(global.state > 5)
  55. !         player.keyboard = player.button = 1;
  56. !       else if(!paused && player.keyboard)
  57. !         {
  58. !           int       index;
  59. !                     
  60. !           for(index = 5; index--;)
  61. !         if(chr == keystrokes[index])
  62. !           {
  63. !             if(index == 4)
  64. !               player.button = 1;
  65. X              else
  66. !               player.pressed |= 1 << index;
  67. !             break;
  68. !           }
  69. !         }
  70. X        break;
  71. X      }
  72. X      /*}}}*/
  73. --- 654,696 ----
  74. X       * a control key. If so, then we set the relevant pressed bit.
  75. X       */
  76. X      {
  77. X        KeySym    symbol;
  78. !       char      chr;
  79. !       XComposeStatus  status;
  80. !       unsigned  index;
  81. X                        
  82. X        XLookupString(&event.xkey, &chr, 1, &symbol, &status);
  83. !       if(!global.key)
  84. X          {
  85. !           global.key = symbol;
  86. !           if(global.state == MODE_KEY_DEF)
  87. !         paused = 0;
  88. X          }
  89. !       if(global.state != MODE_KEY_DEF)
  90. !         for(index = KEYS; index--;)
  91. !           if(symbol == keystrokes[index])
  92. !         {
  93. !           if(index == KEY_ICONIZE)
  94. !             XIconifyWindow(display.display, display.window, 
  95. !             display.screen);
  96. !           else if(index == KEY_PAUSE && pausable)
  97. !             paused++;
  98. !           else if(index == KEY_THROW)
  99. !             if(paused)
  100. !               paused = 0;
  101. X              else
  102. !               player.button = 1;
  103. !           else if((paused || !pausable) && index == KEY_QUIT)
  104. !             {
  105. !               paused = 0;
  106. !               quit = 1;
  107. !             }
  108. !           else if(index == KEY_KEYBOARD && global.state == MODE_DEMO)
  109. !             player.button = 2;
  110. !           else if(index < 4)
  111. !             player.pressed |= 1 << index;
  112. !           break;
  113. !         }
  114. X        break;
  115. X      }
  116. X      /*}}}*/
  117. ***************
  118. *** 674,727 ****
  119. X       * the controlling direction key. If so, then we stop
  120. X       */
  121. X      {
  122. !       if(player.keyboard)
  123. !         {
  124. !           char      chr;
  125. !           KeySym    symbol;
  126. !           XComposeStatus status;
  127. !           unsigned  index;
  128. !                         
  129. !           XLookupString(&event.xkey, &chr, 1, &symbol, &status);
  130. !           if(isupper(chr))
  131. !         chr = tolower(chr);
  132. !           for(index = 5; index--;)
  133. !         if(chr == keystrokes[index])
  134. !           {
  135. !             if(index == 4)
  136. !               player.button = 0;
  137. !             else
  138. !               player.pressed &= ~(1 << index);
  139. !             break;
  140. !           }
  141. !           break;
  142. !         }
  143. !     }
  144. !     /*}}}*/
  145. !     /*{{{  case MotionNotify:*/
  146. !     case MotionNotify:
  147. !     /*
  148. !      * for mouse motion, we save the coordinate and process the
  149. !      * final one only
  150. !      */
  151. !     {
  152. !       player.raw_mouse.x = event.xmotion.x;
  153. !       player.raw_mouse.y = event.xmotion.y;
  154. !       player.motionevent = 1;
  155. X        break;
  156. X      }
  157. X      /*}}}*/
  158. -     /*{{{  case ButtonPress:*/
  159. -     case ButtonPress:
  160. -       if(!player.keyboard)
  161. -         player.button = 1;
  162. -       break;
  163. -     /*}}}*/
  164. -     /*{{{  case ButtonRelease:*/
  165. -     case ButtonRelease:
  166. -       if(!player.keyboard && player.throw)
  167. -         player.button = 0;
  168. -       break;
  169. -     /*}}}*/
  170. X      /*{{{  case Expose:*/
  171. X      case Expose:
  172. X        refresh_window();
  173. --- 701,726 ----
  174. X       * the controlling direction key. If so, then we stop
  175. X       */
  176. X      {
  177. !       char      chr;
  178. !       KeySym    symbol;
  179. !       XComposeStatus status;
  180. !       unsigned  index;
  181. !                                 
  182. !       XLookupString(&event.xkey, &chr, 1, &symbol, &status);
  183. !       if(symbol == global.key)
  184. !         global.key = 0;
  185. !       for(index = KEY_THROW + 1; index--;)
  186. !         if(symbol == keystrokes[index])
  187. !           {
  188. !         if(index == KEY_THROW)
  189. !           player.button = 0;
  190. !         else
  191. !           player.pressed &= ~(1 << index);
  192. !         break;
  193. !           }
  194. X        break;
  195. X      }
  196. X      /*}}}*/
  197. X      /*{{{  case Expose:*/
  198. X      case Expose:
  199. X        refresh_window();
  200. ***************
  201. *** 744,775 ****
  202. X          paused++;
  203. X        break;
  204. X      /*}}}*/
  205. !     default:
  206. X        break;
  207. X        }
  208. -       /*{{{  started to pause?*/
  209. -       if(paused == 1)
  210. -     {
  211. -       char const *text = "Space to continue, Q to quit";
  212. -       TEXT      info;
  213. -       unsigned  length;
  214. -         
  215. -       paused++;
  216. -       length = strlen(text);
  217. -       text_size(text, length, &info);
  218. -       add_background(0, PIXELY(CELLS_DOWN, 0), WINDOW_WIDTH, CELL_HEIGHT);
  219. -       XFillRectangle(display.display, display.copy, GCN(GC_CLEAR),
  220. -           0, PIXELY(CELLS_DOWN, 0), WINDOW_WIDTH, CELL_HEIGHT);
  221. -       XDrawImageString(display.display, display.copy, GCN(GC_TEXT),
  222. -           WINDOW_WIDTH / 2 - info.width / 2,
  223. -           PIXELY(CELLS_DOWN, CELL_HEIGHT / 2) +
  224. -           (info.ascent - info.descent) / 2, text, length);
  225. -       XCopyArea(display.display, display.copy, display.window, GCN(GC_COPY),
  226. -           0, PIXELY(CELLS_DOWN, 0), WINDOW_WIDTH, CELL_HEIGHT,
  227. -           0, PIXELY(CELLS_DOWN, 0));
  228. -       XSync(display.display, False);
  229. -     }
  230. -       /*}}}*/
  231. X      }
  232. X    /*}}}*/
  233. X    return quit;
  234. --- 743,763 ----
  235. X          paused++;
  236. X        break;
  237. X      /*}}}*/
  238. !     /*{{{  case EnterNotify:*/
  239. !     case EnterNotify:
  240. !       XSetInputFocus(display.display, display.window, 
  241. !           RevertToParent, event.xcrossing.time);
  242. !       outside = 0;
  243. X        break;
  244. +     /*}}}*/
  245. +     /*{{{  case LeaveNotify:*/
  246. +     case LeaveNotify:
  247. +       outside = 1;
  248. +       if(pausable)
  249. +         paused++;
  250. +       break;
  251. +     /*}}}*/
  252. X        }
  253. X      }
  254. X    /*}}}*/
  255. X    return quit;
  256. ***************
  257. *** 791,795 ****
  258. --- 779,798 ----
  259. X    bits = ((seed >> 3) ^ seed) & 0xFF;
  260. X    seed = (seed >> 8) | (bits << 23);
  261. X    return bits;
  262. + }
  263. + /*}}}*/
  264. + /*{{{  int xio_error(dptr)*/
  265. + static int xio_error FUNCARGLIST((dptr))
  266. + Display *dptr FUNCARGTERM
  267. + {
  268. +   static before = 0;
  269. +   
  270. +   if(!before)
  271. +     {
  272. +       before = 1;
  273. +       release_resources();
  274. +     }
  275. +   exit(0);
  276. +   return 0;
  277. X  }
  278. X  /*}}}*/
  279. Only in exp.v2.00: xmris.def
  280. diff -c -r exp.v1.01/xmris.h exp.v2.00/xmris.h
  281. *** exp.v1.01/xmris.h    Fri Jul 24 09:55:59 1992
  282. --- exp.v2.00/xmris.h    Fri Jul 24 13:43:05 1992
  283. ***************
  284. *** 1,21 ****
  285. ! /*{{{  (C) 1992 Nathan Sidwell*/
  286. ! /*****************************************************************************
  287. !             X M R I S V1.01
  288. !             ---------------
  289. !             (C) 1992 Nathan Sidwell
  290. ! This program is copyright (C) 1992 Nathan Sidwell. This software and documentation
  291. ! is in the public domain. Permission is granted to distribute and compile
  292. ! verbatim copies of this software for non-commercial, non-profit use,
  293. ! without fee. The software may be modified, provided that both the above copyright
  294. ! notice and this permission notice appear.
  295. ! No guarantee is given as to the robustness or suitability of this
  296. ! software for your computer.
  297. ! Nathan Sidwell  INMOS UK |                 | nathan@inmos.co.uk       DoD#0390
  298. ! *****************************************************************************/
  299. ! /*}}}*/
  300. X  #include "patchlevel.h"
  301. X  #ifndef EXTERN
  302. X  #define EXTERN extern
  303. --- 1,4 ----
  304. ! /* (C) 1992 Nathan Sidwell */
  305. X  #include "patchlevel.h"
  306. X  #ifndef EXTERN
  307. X  #define EXTERN extern
  308. ***************
  309. *** 46,52 ****
  310. X  #ifndef DATE
  311. X  #define DATE "July 1992"
  312. X  #endif /* DATE */
  313. ! #define memmove memcpy /* K&R doesn't have memmove, but memcpy is a superset */
  314. X  #endif /* __STDC__ */
  315. X  /*}}}*/
  316. X  /*{{{  include*/
  317. --- 29,36 ----
  318. X  #ifndef DATE
  319. X  #define DATE "July 1992"
  320. X  #endif /* DATE */
  321. ! /* K&R doesn't have memmove, but memcpy is a superset */
  322. ! #define memmove(to, from, len) memcpy(to, from, len)
  323. X  #endif /* __STDC__ */
  324. X  /*}}}*/
  325. X  /*{{{  include*/
  326. ***************
  327. *** 55,64 ****
  328. --- 39,66 ----
  329. X  #include <stdio.h>
  330. X  #include <assert.h>
  331. X  #include <string.h>
  332. + #include <errno.h>
  333. X  #include <ctype.h>
  334. X  #include <X11/Xlib.h>
  335. X  #include <X11/Xutil.h>
  336. + #include <X11/keysym.h>
  337. X  /*}}}*/
  338. + /*{{{  no memmove?*/
  339. + #ifdef USEBCOPY
  340. + #undef memmove
  341. + #define memmove(to, from, len) bcopy(from, to, len)
  342. + #else
  343. + #ifdef USEMEMCPY
  344. + #undef memmove
  345. + #define memmove(to, from, len) memcpy(to, from, len)
  346. + #endif /* USEMEMCPY */
  347. + #endif /* !USEBCOPY */
  348. + /*}}}*/
  349. + /*{{{  file lock functions*/
  350. + #include <unistd.h>
  351. + #define lock_file(stream) lockf(fileno(stream), F_LOCK, 0L)
  352. + #define unlock_file(stream) lockf(fileno(stream), F_ULOCK, 0L)
  353. + /*}}}*/
  354. X  /*{{{  defines*/
  355. X  /*{{{  board sizes*/
  356. X  #define CELLS_ACROSS  12  /* size of the board */
  357. ***************
  358. *** 96,101 ****
  359. --- 98,104 ----
  360. X  #define FRAME_RATE    37000
  361. X  #endif
  362. X  #define ZOOM_RATE (FRAME_RATE / 4)
  363. + #define SCORE_RATE (FRAME_RATE / 4)
  364. X  /*}}}*/
  365. X  /*{{{  font name*/
  366. X  #ifndef FONT_NAME
  367. ***************
  368. *** 102,107 ****
  369. --- 105,146 ----
  370. X  #define FONT_NAME "-*-courier-*-r-*-*-18-*-*-*-*-*-*-*"
  371. X  #endif
  372. X  /*}}}*/
  373. + /*{{{  score file*/
  374. + #ifndef SCORE_FILE
  375. + #define SCORE_FILE NULL
  376. + #else
  377. + #define HIGH_SCORE_FILE 1
  378. + #endif
  379. + /*}}}*/
  380. + /*{{{  key symbols*/
  381. + #ifndef KEYSYM_UP
  382. + #define KEYSYM_UP XK_apostrophe
  383. + #endif
  384. + #ifndef KEYSYM_DOWN
  385. + #define KEYSYM_DOWN XK_slash
  386. + #endif
  387. + #ifndef KEYSYM_LEFT
  388. + #define KEYSYM_LEFT XK_z
  389. + #endif
  390. + #ifndef KEYSYM_RIGHT
  391. + #define KEYSYM_RIGHT XK_x
  392. + #endif
  393. + #ifndef KEYSYM_THROW
  394. + #define KEYSYM_THROW XK_space
  395. + #endif
  396. + #ifndef KEYSYM_PAUSE
  397. + #define KEYSYM_PAUSE XK_p
  398. + #endif
  399. + #ifndef KEYSYM_QUIT
  400. + #define KEYSYM_QUIT XK_q
  401. + #endif
  402. + #ifndef KEYSYM_ICONIZE
  403. + #define KEYSYM_ICONIZE XK_i
  404. + #endif
  405. + #ifndef KEYSYM_KEY
  406. + #define KEYSYM_KEY XK_k
  407. + #endif
  408. + /*}}}*/
  409. X  /*{{{  game gender*/
  410. X  #ifndef GAME_GENDER
  411. X  #define GAME_GENDER (random() & 1)
  412. ***************
  413. *** 122,127 ****
  414. --- 161,167 ----
  415. X  #define BALL_EY         (CELL_HEIGHT / 2)
  416. X  #define ZOOM_X          VEL_X                 /* how fast the zoom is */
  417. X  #define ZOOM_Y          VEL_Y
  418. + #define STEP_OFF        1                     /* steps taken for granted */
  419. X  /*}}}*/
  420. X  /*{{{  ball stuff*/
  421. X  #define BALL_EXPLODE    (BOARD_WIDTH / BALL_EX) /* how much we explode */
  422. ***************
  423. *** 150,158 ****
  424. X  #define PUSH_TURN_PROB    64    /* muncher turns around when pushing */
  425. X  #define GO_MUNCH_DELAY    16    /* pause when we start munching */
  426. X  #define STOP_MUNCH_DELAY  16    /* pause when we stop munching */
  427. X  /*}}}*/
  428. X  /*{{{  xtra & drone*/
  429. ! #define XTRA_INC_PROB     2     /* next xtra monster is selected */
  430. X  #define XTRA_BIRTH_DELAY  ((CELL_WIDTH + GAP_WIDTH) / VEL_X + 4)    /* pause while giving birth to drones */
  431. X  #define XTRA_CONT_OFF_PROB 16   /* that xtra stops continuing */
  432. X  #define NEXT_XTRA_PROB    1     /* probability that the extra changes */
  433. --- 190,199 ----
  434. X  #define PUSH_TURN_PROB    64    /* muncher turns around when pushing */
  435. X  #define GO_MUNCH_DELAY    16    /* pause when we start munching */
  436. X  #define STOP_MUNCH_DELAY  16    /* pause when we stop munching */
  437. + #define PANIC_UP_COUNT    (CELL_HEIGHT / VEL_Y / 2)
  438. X  /*}}}*/
  439. X  /*{{{  xtra & drone*/
  440. ! #define XTRA_INC_PROB     4     /* next xtra monster is selected */
  441. X  #define XTRA_BIRTH_DELAY  ((CELL_WIDTH + GAP_WIDTH) / VEL_X + 4)    /* pause while giving birth to drones */
  442. X  #define XTRA_CONT_OFF_PROB 16   /* that xtra stops continuing */
  443. X  #define NEXT_XTRA_PROB    1     /* probability that the extra changes */
  444. ***************
  445. *** 182,187 ****
  446. --- 223,236 ----
  447. X      (&board[(CY) * CELL_STRIDE + (CX) + CELL_LEFT + CELL_TOP * CELL_STRIDE])
  448. X  /*}}}*/
  449. X  /*{{{  structs*/
  450. + /*{{{  typedef struct Title*/
  451. + typedef struct Title
  452. + /* title text */
  453. + {
  454. +   char const *text;       /* the text */
  455. +   unsigned  index;        /*  key index */
  456. + } TITLE;
  457. + /*}}}*/
  458. X  /*{{{  typedef struct Cell*/
  459. X  typedef struct Cell
  460. X  /* information about 1 cell on the board */
  461. ***************
  462. *** 200,205 ****
  463. --- 249,262 ----
  464. X    int       y;
  465. X  } COORD;
  466. X  /*}}}*/
  467. + /*{{{  typedef struct Size*/
  468. + typedef struct Size
  469. + /* general size store */
  470. + {
  471. +   unsigned  x;
  472. +   unsigned  y;
  473. + } SIZE;
  474. + /*}}}*/
  475. X  /*{{{  typedef struct Sprite*/
  476. X  typedef struct Sprite
  477. X  /* sprite definition */
  478. ***************
  479. *** 206,214 ****
  480. X  {
  481. X    char *image_bits;           /* image bitmap */
  482. X    char *mask_bits;            /* mask bitmap */
  483. !   unsigned  width;            /* width of sprite */
  484. !   unsigned  height;           /* height of sprite */
  485. !   COORD     expected;         /* expected size */
  486. X    unsigned  copy;             /* generated from this sprite */
  487. X    unsigned  reflect;          /* reflection 1 = v axis, 2 = h axis */
  488. X    Pixmap    image;            /* image pixmap */
  489. --- 263,270 ----
  490. X  {
  491. X    char *image_bits;           /* image bitmap */
  492. X    char *mask_bits;            /* mask bitmap */
  493. !   SIZE      size;             /* size of sprite */
  494. !   SIZE      expected;         /* expected size */
  495. X    unsigned  copy;             /* generated from this sprite */
  496. X    unsigned  reflect;          /* reflection 1 = v axis, 2 = h axis */
  497. X    Pixmap    image;            /* image pixmap */
  498. ***************
  499. *** 238,244 ****
  500. X  /* area to update from back to copy to window */
  501. X  {
  502. X    COORD   place;  /* top left area */
  503. !   COORD   size;   /* size of area */
  504. X  } BACKGROUND;
  505. X  /*}}}*/
  506. X  /*{{{  typedef struct Score*/
  507. --- 294,300 ----
  508. X  /* area to update from back to copy to window */
  509. X  {
  510. X    COORD   place;  /* top left area */
  511. !   SIZE    size;   /* size of area */
  512. X  } BACKGROUND;
  513. X  /*}}}*/
  514. X  /*{{{  typedef struct Score*/
  515. ***************
  516. *** 300,318 ****
  517. X  /*{{{  typedef struct Apple_Size*/
  518. X  typedef struct Apple_Size
  519. X  {
  520. !   COORD size;
  521. !   COORD offset;
  522. X  } APPLE_SIZE;
  523. X  /*}}}*/
  524. - /*{{{  typedef struct Text*/
  525. - typedef struct Text
  526. - /* how we say text sizes */
  527. - {
  528. -   int       ascent;
  529. -   int       descent;
  530. -   int       width;
  531. - } TEXT;
  532. - /*}}}*/
  533. X  /*{{{  typedef struct Monster*/
  534. X  typedef struct Monster
  535. X  /* monster information */
  536. --- 356,365 ----
  537. X  /*{{{  typedef struct Apple_Size*/
  538. X  typedef struct Apple_Size
  539. X  {
  540. !   SIZE    size;
  541. !   COORD   offset;
  542. X  } APPLE_SIZE;
  543. X  /*}}}*/
  544. X  /*{{{  typedef struct Monster*/
  545. X  typedef struct Monster
  546. X  /* monster information */
  547. ***************
  548. *** 349,354 ****
  549. --- 396,402 ----
  550. X    unsigned  cont;     /* continue */
  551. X    unsigned  chew;     /* chewing */
  552. X    unsigned  count;    /* counter */
  553. +   unsigned  panic;    /* help I'm about to be squashed */
  554. X    unsigned  shot;     /* has been shot */
  555. X    unsigned  cycle;    /* image cycler */
  556. X    unsigned  image;    /* which image to display */
  557. ***************
  558. *** 370,376 ****
  559. X    Colormap  colormap; /* color map for display */
  560. X    Window    root;     /* its root window */
  561. X    Window    window;   /* game window */
  562. !   int       depth;    /* bitplanes */
  563. X    unsigned  long black; /* black pixel index */
  564. X    unsigned  long white; /* white pixel index */
  565. X    unsigned  long xor;   /* black xor white */
  566. --- 418,424 ----
  567. X    Colormap  colormap; /* color map for display */
  568. X    Window    root;     /* its root window */
  569. X    Window    window;   /* game window */
  570. !   unsigned  depth;    /* bitplanes */
  571. X    unsigned  long black; /* black pixel index */
  572. X    unsigned  long white; /* white pixel index */
  573. X    unsigned  long xor;   /* black xor white */
  574. ***************
  575. *** 389,394 ****
  576. --- 437,446 ----
  577. X  {
  578. X    char const *name;   /* name of font */
  579. X    Font      font;     /* font handle */
  580. +   unsigned  width;    /* width of a character */
  581. +   int       ascent;   /* max ascent */
  582. +   int       descent;  /* max descent */
  583. +   int       center;   /* center offset to add */
  584. X  } font;
  585. X  /*}}}*/
  586. X  EXTERN CELL board[(CELLS_DOWN + CELL_TOP * 2) * CELL_STRIDE];
  587. ***************
  588. *** 421,451 ****
  589. X  /*{{{  player*/
  590. X  EXTERN struct
  591. X  /* player specific information
  592. !  * note, the playe place info is stored as monster 0
  593. X   */
  594. X  {
  595. X    unsigned  screen;     /* current screen number */
  596. X    unsigned  score;      /* our score */
  597. X    unsigned  lives;      /* lives we have left (including on screen) */
  598. -   COORD     mouse;      /* mouse destination square */
  599. X    unsigned  throw;      /* throw the ball */
  600. X    unsigned  button;     /* throw button state */
  601. -   unsigned  mouse_dir;  /* mouse direction */
  602. X    unsigned  next_dir;   /* direction at next intersection */
  603. X    unsigned  pressed;    /* keys we have pressed */
  604. X    unsigned  bashed;     /* we bashed into a wall */
  605. X    BALL      old_ball;   /* what was the ball */
  606. X    BALL      ball;       /* ball information */
  607. -   unsigned  keyboard;   /* use keyboard */
  608. X    unsigned  cherry;     /* consecutive cherry count */
  609. X    unsigned  distance;   /* distance to next cherry */
  610. -   COORD     raw_mouse;  /* the raw mouse input */
  611. X    unsigned  old_pressed; /* old keys pressed */
  612. -   unsigned  motionevent; /* the mouse moved */
  613. X  } player;
  614. X  /*}}}*/
  615. ! EXTERN unsigned long seed; /* random number seed */
  616. ! EXTERN char const *game_name; /* name of the game */
  617. X  /*{{{  global*/
  618. X  EXTERN struct
  619. X  {
  620. --- 473,499 ----
  621. X  /*{{{  player*/
  622. X  EXTERN struct
  623. X  /* player specific information
  624. !  * note, the player place info is stored as monster 0
  625. X   */
  626. X  {
  627. X    unsigned  screen;     /* current screen number */
  628. X    unsigned  score;      /* our score */
  629. X    unsigned  lives;      /* lives we have left (including on screen) */
  630. X    unsigned  throw;      /* throw the ball */
  631. X    unsigned  button;     /* throw button state */
  632. X    unsigned  next_dir;   /* direction at next intersection */
  633. X    unsigned  pressed;    /* keys we have pressed */
  634. X    unsigned  bashed;     /* we bashed into a wall */
  635. X    BALL      old_ball;   /* what was the ball */
  636. X    BALL      ball;       /* ball information */
  637. X    unsigned  cherry;     /* consecutive cherry count */
  638. X    unsigned  distance;   /* distance to next cherry */
  639. X    unsigned  old_pressed; /* old keys pressed */
  640. X  } player;
  641. X  /*}}}*/
  642. ! EXTERN unsigned long seed;      /* random number seed */
  643. ! EXTERN char const *game_name;   /* name of the game */
  644. ! EXTERN char const *score_file;  /* score file */
  645. X  /*{{{  global*/
  646. X  EXTERN struct
  647. X  {
  648. ***************
  649. *** 458,469 ****
  650. X                   * 2 - xtras & drone running around
  651. X                   * 3 - done xtras
  652. X                   * 4 - end game
  653. !                  * 5 - extra life
  654. X                   * 6 - demo
  655. !                  * 7 - high scores
  656. !                  * 8 - history
  657. X                   */
  658. X    unsigned  missed;         /* missed interrupt count */
  659. X  } global;
  660. X  /*}}}*/
  661. X  /*{{{  extra*/
  662. --- 506,520 ----
  663. X                   * 2 - xtras & drone running around
  664. X                   * 3 - done xtras
  665. X                   * 4 - end game
  666. !                  * 5 - mid game demo
  667. X                   * 6 - demo
  668. !                  * 7 - defining keys
  669. X                   */
  670. + #define MODE_GAME_DEMO 5
  671. + #define MODE_DEMO      6
  672. + #define MODE_KEY_DEF   7
  673. X    unsigned  missed;         /* missed interrupt count */
  674. +   KeySym    key;            /*  last key pressed */
  675. X  } global;
  676. X  /*}}}*/
  677. X  /*{{{  extra*/
  678. ***************
  679. *** 568,581 ****
  680. X  extern APPLE_SIZE const apple_sizes[6];
  681. X  #define BOARDS 10
  682. X  extern BOARD const boards[BOARDS];
  683. ! extern char keystrokes[5];
  684. X  extern COORD const ball_hold[16];
  685. X  extern COORD const ball_throw[8];
  686. ! extern int const ball_dir[8];
  687. ! extern int const player_dies[8];
  688. ! extern char const *title_text[];
  689. X  #define SQUISH_SCORES 7
  690. ! extern int const squish_scores[SQUISH_SCORES];
  691. X  /*}}}*/
  692. X  /*{{{  prototypes*/
  693. X  /*{{{  apple*/
  694. --- 619,640 ----
  695. X  extern APPLE_SIZE const apple_sizes[6];
  696. X  #define BOARDS 10
  697. X  extern BOARD const boards[BOARDS];
  698. ! /*{{{  keys*/
  699. ! #define KEY_THROW     4
  700. ! #define KEY_PAUSE     5
  701. ! #define KEY_QUIT      6
  702. ! #define KEY_ICONIZE   7
  703. ! #define KEY_KEYBOARD  8
  704. ! #define KEYS          9
  705. ! extern KeySym keystrokes[KEYS];
  706. ! /*}}}*/
  707. X  extern COORD const ball_hold[16];
  708. X  extern COORD const ball_throw[8];
  709. ! extern unsigned const ball_dir[8];
  710. ! extern unsigned const player_dies[8];
  711. ! extern TITLE const title_text[];
  712. X  #define SQUISH_SCORES 7
  713. ! extern unsigned const squish_scores[SQUISH_SCORES];
  714. X  /*}}}*/
  715. X  /*{{{  prototypes*/
  716. X  /*{{{  apple*/
  717. ***************
  718. *** 583,610 ****
  719. X  extern int apple_stop PROTOARGLIST((MONSTER *, CELL *));
  720. X  extern void apple_under PROTOARGLIST((MONSTER *, CELL *));
  721. X  extern void move_apples PROTOARGLIST((void));
  722. X  extern APPLE *spawn_apple PROTOARGLIST((int, int, int, int));
  723. X  /*}}}*/
  724. X  /*{{{  create*/
  725. X  extern void create_resources PROTOARGLIST((int, char **));
  726. ! extern void create_xtra_monster PROTOARGLIST((int));
  727. ! extern void draw_extra_letter PROTOARGLIST((int));
  728. X  extern void release_resources PROTOARGLIST((void));
  729. X  /*}}}*/
  730. X  /*{{{  demo*/
  731. X  extern int demo_mode PROTOARGLIST((void));
  732. X  extern void extra_life PROTOARGLIST((void));
  733. X  extern void show_history PROTOARGLIST((void));
  734. X  /*}}}*/
  735. X  /*{{{  draw*/
  736. ! extern void add_background PROTOARGLIST((int, int, int, int));
  737. X  extern void bounding_box PROTOARGLIST((int, int, unsigned, unsigned));
  738. ! extern void draw_center PROTOARGLIST((int));
  739. X  extern void draw_extra PROTOARGLIST((void));
  740. X  extern void new_board PROTOARGLIST((void));
  741. X  extern void refresh_window PROTOARGLIST((void));
  742. X  extern void show_updates PROTOARGLIST((void));
  743. - extern void text_size PROTOARGLIST((char const *, unsigned, TEXT *));
  744. X  extern void zoom_board PROTOARGLIST((void));
  745. X  /*}}}*/
  746. X  /*{{{  monster*/
  747. --- 642,672 ----
  748. X  extern int apple_stop PROTOARGLIST((MONSTER *, CELL *));
  749. X  extern void apple_under PROTOARGLIST((MONSTER *, CELL *));
  750. X  extern void move_apples PROTOARGLIST((void));
  751. + extern void panic_monsters PROTOARGLIST((int, int, CELL *));
  752. X  extern APPLE *spawn_apple PROTOARGLIST((int, int, int, int));
  753. X  /*}}}*/
  754. X  /*{{{  create*/
  755. X  extern void create_resources PROTOARGLIST((int, char **));
  756. ! extern void create_xtra_monster PROTOARGLIST((unsigned));
  757. ! extern void draw_extra_letter PROTOARGLIST((unsigned));
  758. ! extern void read_xdefaults PROTOARGLIST((void));
  759. X  extern void release_resources PROTOARGLIST((void));
  760. X  /*}}}*/
  761. X  /*{{{  demo*/
  762. X  extern int demo_mode PROTOARGLIST((void));
  763. X  extern void extra_life PROTOARGLIST((void));
  764. + extern void high_score PROTOARGLIST((unsigned, unsigned));
  765. + extern void init_scores PROTOARGLIST((void));
  766. X  extern void show_history PROTOARGLIST((void));
  767. X  /*}}}*/
  768. X  /*{{{  draw*/
  769. ! extern void add_background PROTOARGLIST((int, int, unsigned, unsigned));
  770. X  extern void bounding_box PROTOARGLIST((int, int, unsigned, unsigned));
  771. ! extern void draw_center PROTOARGLIST((unsigned));
  772. X  extern void draw_extra PROTOARGLIST((void));
  773. X  extern void new_board PROTOARGLIST((void));
  774. X  extern void refresh_window PROTOARGLIST((void));
  775. X  extern void show_updates PROTOARGLIST((void));
  776. X  extern void zoom_board PROTOARGLIST((void));
  777. X  /*}}}*/
  778. X  /*{{{  monster*/
  779. ***************
  780. *** 612,618 ****
  781. X  extern void fall_monsters PROTOARGLIST((void));
  782. X  extern void move_monsters PROTOARGLIST((void));
  783. X  extern void new_xtra PROTOARGLIST((void));
  784. ! extern MONSTER *spawn_monster PROTOARGLIST((int, int, int, int, int, int, int));
  785. X  /*}}}*/
  786. X  /*{{{  move*/
  787. X  extern unsigned choose_direction PROTOARGLIST((unsigned));
  788. --- 674,680 ----
  789. X  extern void fall_monsters PROTOARGLIST((void));
  790. X  extern void move_monsters PROTOARGLIST((void));
  791. X  extern void new_xtra PROTOARGLIST((void));
  792. ! extern MONSTER *spawn_monster PROTOARGLIST((unsigned, unsigned, unsigned, int, int, int, int));
  793. X  /*}}}*/
  794. X  /*{{{  move*/
  795. X  extern unsigned choose_direction PROTOARGLIST((unsigned));
  796. ***************
  797. *** 625,630 ****
  798. --- 687,693 ----
  799. X  /*}}}*/
  800. X  /*{{{  player*/
  801. X  extern void bounce_ball PROTOARGLIST((void));
  802. + extern void killed_player PROTOARGLIST((void));
  803. X  extern void move_player PROTOARGLIST((void));
  804. X  /*}}}*/
  805. X  /*{{{  timer*/
  806. ***************
  807. *** 635,644 ****
  808. X  extern void timer_wait PROTOARGLIST((void));
  809. X  /*}}}*/
  810. X  /*{{{  xmris*/
  811. ! extern void add_score PROTOARGLIST((int, int, int));
  812. X  extern void calc_distances PROTOARGLIST((void));
  813. X  extern void fatal_error PROTOARGLIST((char const *, ...));
  814. ! extern int itoa PROTOARGLIST((char *, int, int));
  815. X  extern int main PROTOARGLIST((int, char **));
  816. X  extern int process_xevents PROTOARGLIST((int));
  817. X  extern unsigned random PROTOARGLIST((void));
  818. --- 698,707 ----
  819. X  extern void timer_wait PROTOARGLIST((void));
  820. X  /*}}}*/
  821. X  /*{{{  xmris*/
  822. ! extern void add_score PROTOARGLIST((unsigned, int, int));
  823. X  extern void calc_distances PROTOARGLIST((void));
  824. X  extern void fatal_error PROTOARGLIST((char const *, ...));
  825. ! extern unsigned itoa PROTOARGLIST((char *, unsigned, unsigned));
  826. X  extern int main PROTOARGLIST((int, char **));
  827. X  extern int process_xevents PROTOARGLIST((int));
  828. X  extern unsigned random PROTOARGLIST((void));
  829. diff -c -r exp.v1.01/xmris.man exp.v2.00/xmris.man
  830. *** exp.v1.01/xmris.man    Fri Jul 24 09:55:55 1992
  831. --- exp.v2.00/xmris.man    Fri Jul 24 13:43:01 1992
  832. ***************
  833. *** 56,74 ****
  834. X  continues towards the previous destination, before turning towards the
  835. X  new one. Mouse control is not that accurate for fine control of the
  836. X  gnome (I don't use it). Keyboard control is by 'z' and 'x' for left and
  837. ! right, and '\'' and '/' for up and down. The ball is thrown with the
  838. X  space bar. Pressing more than one key, will turn the gnome
  839. X  appropriately at the next intersection, so you can go round corners by
  840. X  pressing the new direction key before releasing the old one. If you try
  841. X  to go in a direction not possible, the gnome will move towards the
  842. X  nearest intersection or in the direction it was going, depending on how
  843. ! near to an intersection it was.
  844. X  .PP
  845. ! The game can be paused by iconifying it (when your boss walks in), or
  846. ! by pressing 'p'. When de-iconified, the game remains paused. To
  847. X  continue press space. When paused, you can abort the game by pressing
  848. X  'q'. If the game is displaying the demo screens, 'q' will quit the game
  849. X  entirely.
  850. X  .SH OPTIONS
  851. X  .TP 4
  852. X  .B \-help
  853. --- 56,88 ----
  854. X  continues towards the previous destination, before turning towards the
  855. X  new one. Mouse control is not that accurate for fine control of the
  856. X  gnome (I don't use it). Keyboard control is by 'z' and 'x' for left and
  857. ! right, and '\'' and '/' for up and down, (but these can be changed).
  858. ! The ball is thrown with the
  859. X  space bar. Pressing more than one key, will turn the gnome
  860. X  appropriately at the next intersection, so you can go round corners by
  861. X  pressing the new direction key before releasing the old one. If you try
  862. X  to go in a direction not possible, the gnome will move towards the
  863. X  nearest intersection or in the direction it was going, depending on how
  864. ! near to an intersection it was. As an example suppose you're going left
  865. ! and want to go up at the next intersection, the sequence would be
  866. X  .PP
  867. ! .nf
  868. !         left pressed, because that's the way you're going
  869. !         up pressed, before the intersection
  870. !         left released, when you've gon round the corner
  871. ! .fi
  872. ! .PP
  873. ! The game can be paused by iconizing it (when your boss walks in), or
  874. ! moving the pointer out of the window, or
  875. ! by pressing 'p'. When de-iconizied, the game remains paused. To
  876. X  continue press space. When paused, you can abort the game by pressing
  877. X  'q'. If the game is displaying the demo screens, 'q' will quit the game
  878. X  entirely.
  879. + .PP
  880. + The keys can be changed by using the 'k' key. Each direction control is
  881. + prompted for and you can select a new key by pressing it. Space will keep
  882. + the current key (except for throw). You cannot map one key onto two
  883. + functions, xmris will wait until you give an unambigous set of keys.
  884. X  .SH OPTIONS
  885. X  .TP 4
  886. X  .B \-help
  887. ***************
  888. *** 96,104 ****
  889. --- 110,154 ----
  890. X  The gender of the game is taken from the program name (mris or msit)
  891. X  but may be over ridden by these two switches. The game is known as Mr
  892. X  Is because the arcade game was masculine.
  893. + .TP 4
  894. + .B \-scores \fIscore-file\fP
  895. + Use a different score file. This will override the
  896. + default and the one found in your Xdefaults.
  897. X  .PP
  898. X  The argument list is also fed to XSetStandardProperties, I don't know what
  899. X  this does.
  900. + .SH X DEFAULTS
  901. + Xmris reads the X defaults for changes to the setup. Xdefault items start
  902. + with 'Xmris'. The following items are used.
  903. + .TP 4
  904. + .B up, down, left, right, throw
  905. + These are the keynames for the direction control keys. The defaults are
  906. + Apostrophe, Slash, z, x and Space. If the keyname is unknown, the default
  907. + will be used, no warning is given.
  908. + .TP 4
  909. + .B pause, quit, iconize, keyboard
  910. + These are the keynames for the other keys. The defaults are p, q, i and k.
  911. + .TP 4
  912. + .B font
  913. + The name of the text font to use (over ridden by -fn command line arg).
  914. + .TP 4
  915. + .B scores
  916. + The name of the high score file.
  917. + .PP
  918. + To always use the arrow keys, the following will work
  919. + .PP
  920. + .nf
  921. +         Xmris.up:       Up
  922. +         Xmris.down:     Down
  923. +         Xmris.left:     Left
  924. +         Xmris.right:    Right
  925. + .fi
  926. + .SH FILES
  927. + .TP 4
  928. + .B .../xmris.scores
  929. + The high score file. The directory is system dependent, and may be
  930. + changed by Xdefaults or command line argument. This file must exist
  931. + to be used, (by touching it), and writable to by xmris.
  932. X  .SH SEE ALSO
  933. X  xchomp(6)
  934. X  .SH BUGS
  935. ***************
  936. *** 105,116 ****
  937. X  .PP
  938. X  The game is always in black and white, I haven't got round to doing
  939. X  colour sprites yet, so the -bw argument is superfluous.
  940. - .PP
  941. - The -iconic argument has no effect. (I don't know how to get it to work.)
  942. - .PP
  943. - Fatal XIO errors are not handled gracefully. Quiting the game by using
  944. - your window manager results in big error message. I don't know how to
  945. - trap this.
  946. X  .PP
  947. X  The program was written with a folding editor, it might be hard to find
  948. X  your way around without one.
  949. --- 155,160 ----
  950. Common subdirectories: exp.v1.01/bitmaps/apple and exp.v2.00/bitmaps/apple
  951. Common subdirectories: exp.v1.01/bitmaps/board and exp.v2.00/bitmaps/board
  952. Common subdirectories: exp.v1.01/bitmaps/chomp and exp.v2.00/bitmaps/chomp
  953. Common subdirectories: exp.v1.01/bitmaps/drone and exp.v2.00/bitmaps/drone
  954. Common subdirectories: exp.v1.01/bitmaps/icon and exp.v2.00/bitmaps/icon
  955. Common subdirectories: exp.v1.01/bitmaps/munch and exp.v2.00/bitmaps/munch
  956. Common subdirectories: exp.v1.01/bitmaps/normal and exp.v2.00/bitmaps/normal
  957. Common subdirectories: exp.v1.01/bitmaps/player and exp.v2.00/bitmaps/player
  958. Common subdirectories: exp.v1.01/bitmaps/prize and exp.v2.00/bitmaps/prize
  959. Common subdirectories: exp.v1.01/bitmaps/xtra and exp.v2.00/bitmaps/xtra
  960. SHAR_EOF
  961. echo 'File patch.v2.00 is complete' &&
  962. chmod 0644 patch.v2.00 ||
  963. echo 'restore of patch.v2.00 failed'
  964. Wc_c="`wc -c < 'patch.v2.00'`"
  965. test 222994 -eq "$Wc_c" ||
  966.     echo 'patch.v2.00: original size 222994, current size' "$Wc_c"
  967. rm -f _shar_wnt_.tmp
  968. fi
  969. # ============= xmris.def ==============
  970. if test -f 'xmris.def' -a X"$1" != X"-c"; then
  971.     echo 'x - skipping xmris.def (File already exists)'
  972.     rm -f _shar_wnt_.tmp
  973. else
  974. > _shar_wnt_.tmp
  975. echo 'x - extracting xmris.def (Text)'
  976. sed 's/^X//' << 'SHAR_EOF' > 'xmris.def' &&
  977. XXmris.up:            Up
  978. XXmris.down:            Down
  979. XXmris.left:            Left
  980. XXmris.right:            Right
  981. XXmris.throw:            space
  982. XXmris.pause:            p
  983. XXmris.quit:            q
  984. XXmris.iconize:            i
  985. XXmris.keyboard:            k
  986. XXmris.font:            -*-courier-*-r-*-*-18-*-*-*-*-*-*-*
  987. XXmris.scores:            /u/nathan/games/xmris.scores
  988. SHAR_EOF
  989. chmod 0644 xmris.def ||
  990. echo 'restore of xmris.def failed'
  991. Wc_c="`wc -c < 'xmris.def'`"
  992. test 262 -eq "$Wc_c" ||
  993.     echo 'xmris.def: original size 262, current size' "$Wc_c"
  994. rm -f _shar_wnt_.tmp
  995. fi
  996. rm -f _shar_seq_.tmp
  997. echo You have unpacked the last part
  998. exit 0
  999. -- 
  1000. Senior Systems Scientist        mail: dcmartin@msi.com
  1001. Molecular Simulations, Inc.        uucp: uunet!dcmartin
  1002. 796 North Pastoria Avenue        at&t: 408/522-9236
  1003. Sunnyvale, California 94086        fax: 408/732-0831
  1004.