home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume18 / gtetris4 / part02 < prev    next >
Encoding:
Internet Message Format  |  1993-09-13  |  57.4 KB

  1. Path: uunet!news.tek.com!news.cna.tek.com!not-for-mail
  2. From: billr@saab.cna.tek.com (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v18i054:  gtetris4 - Generic Tetris for X11, V3.0.1, Part02/03 (REPOST)
  5. Date: 30 Aug 1993 07:53:23 -0700
  6. Organization: Tektronix, Inc., Redmond, OR
  7. Lines: 1716
  8. Approved: billr@saab.CNA.TEK.COM
  9. Message-ID: <25t493$f6g@saab.cna.tek.com>
  10. NNTP-Posting-Host: saab.cna.tek.com
  11. Xref: uunet comp.sources.games:1854
  12.  
  13. Submitted-by: "Q. Alex Zhao" <azhao@cc.gatech.edu>
  14. Posting-number: Volume 18, Issue 54
  15. Archive-name: gtetris4/part02
  16. Supersedes: tetris3: Volume 15, Issue 44-45
  17. Environment: X11R4/5, Xlib
  18.  
  19.  
  20.  
  21. #! /bin/sh
  22. # This is a shell archive.  Remove anything before this line, then unpack
  23. # it by saving it into a file and typing "sh file".  To overwrite existing
  24. # files, type "sh file -c".  You can also feed this as standard input via
  25. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  26. # will see the following message at the end:
  27. #        "End of archive 2 (of 3)."
  28. # Contents:  Imakefile Makefile.std Revisions X11/Xfuncproto.h
  29. #   X11/Xos.h X11/Xosdefs.h bm-plain/rop00.xbm bm-plain/rop01.xbm
  30. #   bm-plain/rop02.xbm bm-plain/rop03.xbm bm-plain/rop04.xbm
  31. #   bm-plain/rop05.xbm bm-plain/rop06.xbm bm-plain/rop07.xbm
  32. #   bm-plain/rop08.xbm bm-plain/rop09.xbm bm-plain/rop10.xbm
  33. #   bm-plain/rop11.xbm bm-plain/rop12.xbm bm-plain/rop13.xbm
  34. #   bm-plain/rop14.xbm playing.c tetris.man ticon.xbm
  35. # Wrapped by billr@saab on Fri Aug 27 12:06:40 1993
  36. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  37. if test -f 'Imakefile' -a "${1}" != "-c" ; then 
  38.   echo shar: Will not clobber existing file \"'Imakefile'\"
  39. else
  40. echo shar: Extracting \"'Imakefile'\" \(1564 characters\)
  41. sed "s/^X//" >'Imakefile' <<'END_OF_FILE'
  42. X/**/# GENERIC X-WINDOW-BASED TETRIS
  43. X/**/#
  44. X/**/#    Imakefile
  45. X/**/#
  46. X/**/###
  47. X/**/#
  48. X/**/#  Copyright (C) 1992 - 93              Q. Alex Zhao, azhao@cc.gatech.edu
  49. X/**/#
  50. X/**/#            All Rights Reserved
  51. X/**/#
  52. X/**/#  Permission to use, copy, modify, and distribute this software and
  53. X/**/#  its documentation for any purpose and without fee is hereby granted,
  54. X/**/#  provided that the above copyright notice appear in all copies and
  55. X/**/#  that both that copyright notice and this permission notice appear in
  56. X/**/#  supporting documentation, and that the name of the author not be
  57. X/**/#  used in advertising or publicity pertaining to distribution of the
  58. X/**/#  software without specific, written prior permission.
  59. X/**/#
  60. X/**/#  This program is distributed in the hope that it will be "playable",
  61. X/**/#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  62. X/**/#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  63. X/**/#
  64. X
  65. XSCOREFILE    = ./tetris.scores
  66. X
  67. X/**/# Set "RANDOM" to:
  68. X/**/#    -DHAS_48    if has lrand48() and srand48()
  69. X/**/#    -DHAS_RANDOM    if has random() and srandom()
  70. X/**/#            otherwise, set to empty
  71. X
  72. XRANDOM        = -DHAS_48
  73. X
  74. X/**/# Set your C compiler
  75. X
  76. XCC        = gcc
  77. X
  78. X/**/##############################################################
  79. X
  80. XDEFINES        = -I. -DSCOREFILE=\"${SCOREFILE}\" ${RANDOM}
  81. XSYS_LIBRARIES    = ${XLIB} -lm
  82. XSRCS        = tetris.c playing.c utils.c
  83. XOBJS        = tetris.o playing.o utils.o
  84. XMYPROGRAM    = tetris
  85. X
  86. XComplexProgramTarget(${MYPROGRAM})
  87. X
  88. Xtetris.o: tetris.c tetris.h
  89. Xplaying.o: playing.c tetris.h
  90. Xutils.o: utils.c tetris.h
  91. X
  92. Xclean.all::    clean
  93. X    ${RM} Makefile ${SCOREFILE}
  94. END_OF_FILE
  95. if test 1564 -ne `wc -c <'Imakefile'`; then
  96.     echo shar: \"'Imakefile'\" unpacked with wrong size!
  97. fi
  98. # end of 'Imakefile'
  99. fi
  100. if test -f 'Makefile.std' -a "${1}" != "-c" ; then 
  101.   echo shar: Will not clobber existing file \"'Makefile.std'\"
  102. else
  103. echo shar: Extracting \"'Makefile.std'\" \(1640 characters\)
  104. sed "s/^X//" >'Makefile.std' <<'END_OF_FILE'
  105. X# GENERIC X-WINDOW-BASED TETRIS
  106. X#
  107. X#    Makefile.std
  108. X#
  109. X###
  110. X#
  111. X#  Copyright (C) 1992 - 93              Q. Alex Zhao, azhao@cc.gatech.edu
  112. X#
  113. X#            All Rights Reserved
  114. X#
  115. X#  Permission to use, copy, modify, and distribute this software and
  116. X#  its documentation for any purpose and without fee is hereby granted,
  117. X#  provided that the above copyright notice appear in all copies and
  118. X#  that both that copyright notice and this permission notice appear in
  119. X#  supporting documentation, and that the name of the author not be
  120. X#  used in advertising or publicity pertaining to distribution of the
  121. X#  software without specific, written prior permission.
  122. X#
  123. X#  This program is distributed in the hope that it will be "playable",
  124. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  125. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  126. X#
  127. X
  128. XSCOREFILE    = ./tetris.scores
  129. X
  130. X# Set "RANDOM" to:
  131. X#    -DHAS_48    if has lrand48() and srand48()
  132. X#    -DHAS_RANDOM    if has random() and srandom()
  133. X#            otherwise, set to empty
  134. XRANDOM        = -DHAS_48
  135. X
  136. X# Set your C compiler
  137. XCC        = cc
  138. X
  139. X# X include files
  140. XXINCLUDEPATH    = /usr/local/include
  141. X
  142. X# X libraries
  143. XXLIBPATH    = /usr/local/lib
  144. X
  145. X##############################################################
  146. X
  147. XDEFINES        = -I${XINCLUDEPATH} -I. -DSCOREFILE=\"${SCOREFILE}\" ${RANDOM}
  148. XSYS_LIBRARIES    = -lX11 -lm
  149. XSRCS        = tetris.c playing.c utils.c
  150. XOBJS        = tetris.o playing.o utils.o
  151. XMYPROGRAM    = tetris
  152. X
  153. XCFLAGS        = -O ${DEFINES}
  154. X
  155. X${MYPROGRAM}:    ${OBJS}
  156. X    ${CC} ${CFLAGS} -o ${MYPROGRAM} ${OBJS} -L${XLIBPATH} ${SYS_LIBRARIES}
  157. X
  158. Xtetris.o: tetris.c tetris.h
  159. Xplaying.o: playing.c tetris.h
  160. Xutils.o: utils.c tetris.h
  161. X
  162. Xclean.all::
  163. X    rm -f Makefile ${SCOREFILE}
  164. END_OF_FILE
  165. if test 1640 -ne `wc -c <'Makefile.std'`; then
  166.     echo shar: \"'Makefile.std'\" unpacked with wrong size!
  167. fi
  168. # end of 'Makefile.std'
  169. fi
  170. if test -f 'Revisions' -a "${1}" != "-c" ; then 
  171.   echo shar: Will not clobber existing file \"'Revisions'\"
  172. else
  173. echo shar: Extracting \"'Revisions'\" \(4161 characters\)
  174. sed "s/^X//" >'Revisions' <<'END_OF_FILE'
  175. X  [Aug 24, 93]    V3.0.1 --
  176. X
  177. X    utils.c, checkUp and checkDown for the new bitmap #15.
  178. X
  179. X    tetris.c, size hints.
  180. X
  181. X  [Aug 22, 93]    V3.0.0 --
  182. X
  183. X    In general: added a "bonus mode" inspired by an unofficial
  184. X    patch from David Bagley <bagleyd@source.asset.com>.
  185. X
  186. X    Imakefile, "SYS_LIBRARIES" changed to include "$(XLIB)".
  187. X    Suggested by Dr. Horst Spandl <spandl@uisu00.lfu-bw.de>.
  188. X
  189. X    tetris.c, correct resource lookup for "startLevel",
  190. X    "preFilledLines", "showNext", and "beep". Suggested by Reuben
  191. X    Worley <reuben@bugs.merit-tech.com>.
  192. X
  193. X    playing.c, destroying window before closing connection.
  194. X    Suggested by Elwood C. Downey <ecdowney@hwking.cca.cr.rockwell.com>.
  195. X
  196. X    utils.c, tetris.c, brought back the old "plain" bitmaps.
  197. X    Suggested by David W. Sanderson <dws@ssec.wisc.edu>.
  198. X
  199. X    utils.c, better rotation (looks more "natural"). Suggested by
  200. X    Alberto Hernandez <alberto@TITAN.tid.es>.
  201. X
  202. X    Many minor changes...
  203. X
  204. X  [Feb 27, 93]  V2.1.4: HP time structure problem resulting "hanging
  205. X        blocks". By Marcus Leech <mleech@bnr.ca>. New set of
  206. X        bitmaps contributed by Atsuhiko Yamanaka
  207. X        <yamanaka@ecip.tohoku.ac.jp>.
  208. X
  209. X  [Jan 21, 93]  V2.1.3: Two bugs in finding user environment:
  210. X        "endpwent()" by Jari Tavi <jpt@rixrax.enet.dec.com>;
  211. X        "gethostname()" by Johan Vromans <jv@mh.nl>. Added two
  212. X        more arrow keys.
  213. X
  214. X  [Jan 19, 93]  V2.1.2: Improved "paused" mode - so it won't take too
  215. X        much CPU time - suggested by Philip JENNINGS
  216. X        <P.Jennings@frcl.bull.fr>.
  217. X
  218. X  [Jan 18, 93]  V2.1.1: Fixed a resource look-up bug found by Peter
  219. X        Kabal <kabal@inrs-telecom.uquebec.ca>, and Imakefile
  220. X        problem found by Tong Zhou <tzhou@cse.ogi.edu>.
  221. X
  222. X  [Jan 15, 93]  V2.1.0: Fixed a resource look-up bug found by Kiyotaka
  223. X        Sakai <ksakai@mtl.t.u-tokyo.ac.jp>. Added "-u" option.
  224. X        New feature: when a row is deleted, remaining blocks
  225. X        remains rounded -- suggested by Elwood C. Downey
  226. X        <ecdowney@hwking.cca.cr.rockwell.com> and Bill Leue
  227. X        <leue@crd.ge.com>.
  228. X
  229. X  [Jan 12, 93]  V2.0.1: added arrow keys. Changed error handling method
  230. X        in locking score file, suggested by Hellmut Golde
  231. X        <golde@cs.washington.edu>.
  232. X
  233. X  [Jan 10, 93]  V2.0.0: Complete rewrite. Enhanced layout. Added
  234. X        resource management and "next piece". Changes made for
  235. X        Sony workstations, suggested by Masato Ogawa
  236. X        <ogawa@sm.sony.co.jp>. Included four X11 header files
  237. X        in case some system doesn't have them. Fixed block
  238. X        clearing bug found by Benjamin Kroop
  239. X        <bkroop@sunlab.cit.cornell.edu>.
  240. X
  241. X    Since the days of V1.8, I have got many responses over the net.
  242. X    Thanks go to people who helped me in improving the program.
  243. X
  244. X  [Nov 13, 92]  Black Friday -- V1.8.1: numerious minor changes. Made
  245. X        score listing built in.
  246. X
  247. X  [Oct 08, 92]  V1.8: Corrected some typos, <herbison@erlang.enet.dec.com>.
  248. X        Added man-page.  Gregg Townsend <gmt@cs.arizona.edu>
  249. X        provided hints for some problems on HP-UX. Imakefile.
  250. X        Richard van Denzel suggest modifications for HP-UX.
  251. X
  252. X  [Sep 30, 92]    V1.7: Richard van Denzel <raet-sh!richard@relay.nluug.nl>
  253. X        reported bugs on HP-UX 8.0.
  254. X
  255. X  [Sep 27, 92]  V1.6: Changed speed coefficients. Improved window
  256. X        manager hints. Several rows at once worth more points.
  257. X
  258. X  [Sep 25, 92]  V1.5: HP-UX fixes by "Richard van Denzel"
  259. X        <raet-sh!richard@relay.nluug.nl>. Added 'b' to toggle
  260. X        "beep". Rewrote window creation/initialization to fix
  261. X        the "losing input focus" problem.
  262. X
  263. X  [Sep 24, 92]  V1.4: Added <sys/select.h> and -lbsd for AIX (by "Daryl
  264. X        Green" <darylg@amex-trs.com>).
  265. X
  266. X  [Sep 23, 92]  V1.3: Scoring -- a line in a higher level worth more
  267. X        points; "tscores" program. Submitted to
  268. X        comp.sources.games (volumn 15, issues 1-2; it has
  269. X        nothing to do with GNU, but it was called "gtetris",
  270. X        pronounced as "Gee, tetris", by the newsgroup
  271. X        moderator).
  272. X
  273. X  [Sep ??, 92]  First set of versions, 1.0 through 1.2 -- developed and
  274. X        tested at the University of Arizona. Put on
  275. X        export.lcs.mit.edu.
  276. X
  277. X        I studied an old tetris game for X10, wrote by Wayne
  278. X        Christopher <faustus@cs.berkeley.edu> in 1988; then I
  279. X        adopted the ideas in representing those "blocks" and
  280. X        rotating them, and added X11 stuff.  Also I learned a
  281. X        lot from Nathan Sidwell's great game "xmris", e.g.  the
  282. X        "iconifying pause".
  283. X
  284. END_OF_FILE
  285. if test 4161 -ne `wc -c <'Revisions'`; then
  286.     echo shar: \"'Revisions'\" unpacked with wrong size!
  287. fi
  288. # end of 'Revisions'
  289. fi
  290. if test -f 'X11/Xfuncproto.h' -a "${1}" != "-c" ; then 
  291.   echo shar: Will not clobber existing file \"'X11/Xfuncproto.h'\"
  292. else
  293. echo shar: Extracting \"'X11/Xfuncproto.h'\" \(2263 characters\)
  294. sed "s/^X//" >'X11/Xfuncproto.h' <<'END_OF_FILE'
  295. X/* $XConsortium: Xfuncproto.h,v 1.7 91/05/13 20:49:21 rws Exp $ */
  296. X/* 
  297. X * Copyright 1989, 1991 by the Massachusetts Institute of Technology
  298. X *
  299. X * Permission to use, copy, modify, and distribute this software and its
  300. X * documentation for any purpose and without fee is hereby granted, provided 
  301. X * that the above copyright notice appear in all copies and that both that 
  302. X * copyright notice and this permission notice appear in supporting 
  303. X * documentation, and that the name of M.I.T. not be used in advertising
  304. X * or publicity pertaining to distribution of the software without specific, 
  305. X * written prior permission. M.I.T. makes no representations about the 
  306. X * suitability of this software for any purpose.  It is provided "as is"
  307. X * without express or implied warranty.
  308. X *
  309. X */
  310. X
  311. X/* Definitions to make function prototypes manageable */
  312. X
  313. X#ifndef _XFUNCPROTO_H_
  314. X#define _XFUNCPROTO_H_
  315. X
  316. X#ifndef NeedFunctionPrototypes
  317. X#if defined(FUNCPROTO) || __STDC__ || defined(__cplusplus) || defined(c_plusplus)
  318. X#define NeedFunctionPrototypes 1
  319. X#else
  320. X#define NeedFunctionPrototypes 0
  321. X#endif
  322. X#endif /* NeedFunctionPrototypes */
  323. X
  324. X#ifndef NeedVarargsPrototypes
  325. X#if __STDC__ || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&2)
  326. X#define NeedVarargsPrototypes 1
  327. X#else
  328. X#define NeedVarargsPrototypes 0
  329. X#endif
  330. X#endif /* NeedVarargsPrototypes */
  331. X
  332. X#if NeedFunctionPrototypes
  333. X
  334. X#ifndef NeedNestedPrototypes
  335. X#if __STDC__ || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&8)
  336. X#define NeedNestedPrototypes 1
  337. X#else
  338. X#define NeedNestedPrototypes 0
  339. X#endif
  340. X#endif /* NeedNestedPrototypes */
  341. X
  342. X#ifndef _Xconst
  343. X#if __STDC__ || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&4)
  344. X#define _Xconst const
  345. X#else
  346. X#define _Xconst
  347. X#endif
  348. X#endif /* _Xconst */
  349. X
  350. X#ifndef NeedWidePrototypes
  351. X#ifdef NARROWPROTO
  352. X#define NeedWidePrototypes 0
  353. X#else
  354. X#define NeedWidePrototypes 1        /* default to make interropt. easier */
  355. X#endif
  356. X#endif /* NeedWidePrototypes */
  357. X
  358. X#endif /* NeedFunctionPrototypes */
  359. X
  360. X#ifndef _XFUNCPROTOBEGIN
  361. X#ifdef __cplusplus            /* for C++ V2.0 */
  362. X#define _XFUNCPROTOBEGIN extern "C" {    /* do not leave open across includes */
  363. X#define _XFUNCPROTOEND }
  364. X#else
  365. X#define _XFUNCPROTOBEGIN
  366. X#define _XFUNCPROTOEND
  367. X#endif
  368. X#endif /* _XFUNCPROTOBEGIN */
  369. X
  370. X#endif /* _XFUNCPROTO_H_ */
  371. END_OF_FILE
  372. if test 2263 -ne `wc -c <'X11/Xfuncproto.h'`; then
  373.     echo shar: \"'X11/Xfuncproto.h'\" unpacked with wrong size!
  374. fi
  375. # end of 'X11/Xfuncproto.h'
  376. fi
  377. if test -f 'X11/Xos.h' -a "${1}" != "-c" ; then 
  378.   echo shar: Will not clobber existing file \"'X11/Xos.h'\"
  379. else
  380. echo shar: Extracting \"'X11/Xos.h'\" \(3217 characters\)
  381. sed "s/^X//" >'X11/Xos.h' <<'END_OF_FILE'
  382. X/*
  383. X * $XConsortium: Xos.h,v 1.47 91/08/17 17:14:38 rws Exp $
  384. X * 
  385. X * Copyright 1987 by the Massachusetts Institute of Technology
  386. X *
  387. X * Permission to use, copy, modify, and distribute this software and its
  388. X * documentation for any purpose and without fee is hereby granted, provided 
  389. X * that the above copyright notice appear in all copies and that both that 
  390. X * copyright notice and this permission notice appear in supporting 
  391. X * documentation, and that the name of M.I.T. not be used in advertising
  392. X * or publicity pertaining to distribution of the software without specific, 
  393. X * written prior permission. M.I.T. makes no representations about the 
  394. X * suitability of this software for any purpose.  It is provided "as is"
  395. X * without express or implied warranty.
  396. X *
  397. X * The X Window System is a Trademark of MIT.
  398. X *
  399. X */
  400. X
  401. X/* This is a collection of things to try and minimize system dependencies
  402. X * in a "signficant" number of source files.
  403. X */
  404. X
  405. X#ifndef _XOS_H_
  406. X#define _XOS_H_
  407. X
  408. X#include <X11/Xosdefs.h>
  409. X
  410. X/*
  411. X * Get major data types (esp. caddr_t)
  412. X */
  413. X
  414. X#ifdef USG
  415. X#ifndef __TYPES__
  416. X#ifdef CRAY
  417. X#define word word_t
  418. X#endif /* CRAY */
  419. X#include <sys/types.h>            /* forgot to protect it... */
  420. X#define __TYPES__
  421. X#endif /* __TYPES__ */
  422. X#else /* USG */
  423. X#if defined(_POSIX_SOURCE) && defined(MOTOROLA)
  424. X#undef _POSIX_SOURCE
  425. X#include <sys/types.h>
  426. X#define _POSIX_SOURCE
  427. X#else
  428. X#include <sys/types.h>
  429. X#endif
  430. X#endif /* USG */
  431. X
  432. X
  433. X/*
  434. X * Just about everyone needs the strings routines.  We provide both forms here,
  435. X * index/rindex and strchr/strrchr, so any systems that don't provide them all
  436. X * need to have #defines here.
  437. X */
  438. X
  439. X#ifndef X_NOT_STDC_ENV
  440. X#include <string.h>
  441. X#define index strchr
  442. X#define rindex strrchr
  443. X#else
  444. X#ifdef SYSV
  445. X#include <string.h>
  446. X#define index strchr
  447. X#define rindex strrchr
  448. X#else
  449. X#include <strings.h>
  450. X#define strchr index
  451. X#define strrchr rindex
  452. X#endif
  453. X#endif
  454. X
  455. X
  456. X/*
  457. X * Get open(2) constants
  458. X */
  459. X#ifdef X_NOT_POSIX
  460. X#include <fcntl.h>
  461. X#ifdef USL
  462. X#include <unistd.h>
  463. X#endif /* USL */
  464. X#ifdef CRAY
  465. X#include <unistd.h>
  466. X#endif /* CRAY */
  467. X#ifdef MOTOROLA
  468. X#include <unistd.h>
  469. X#endif /* MOTOROLA */
  470. X#ifdef SYSV386
  471. X#include <unistd.h>
  472. X#endif /* SYSV386 */
  473. X#include <sys/file.h>
  474. X#else /* X_NOT_POSIX */
  475. X#if !defined(_POSIX_SOURCE) && defined(macII)
  476. X#define _POSIX_SOURCE
  477. X#include <fcntl.h>
  478. X#undef _POSIX_SOURCE
  479. X#else
  480. X#include <fcntl.h>
  481. X#endif
  482. X#include <unistd.h>
  483. X#endif /* X_NOT_POSIX else */
  484. X
  485. X/*
  486. X * Get struct timeval
  487. X */
  488. X
  489. X#ifdef SYSV
  490. X
  491. X#ifndef USL
  492. X#include <sys/time.h>
  493. X#endif
  494. X#include <time.h>
  495. X#ifdef CRAY
  496. X#undef word
  497. X#endif /* CRAY */
  498. X#if defined(USG) && !defined(CRAY) && !defined(MOTOROLA)
  499. Xstruct timeval {
  500. X    long tv_sec;
  501. X    long tv_usec;
  502. X};
  503. X#ifndef USL_SHARELIB
  504. Xstruct timezone {
  505. X    int tz_minuteswest;
  506. X    int tz_dsttime;
  507. X};
  508. X#endif /* USL_SHARELIB */
  509. X#endif /* USG */
  510. X
  511. X#else /* not SYSV */
  512. X
  513. X#if defined(_POSIX_SOURCE) && defined(SVR4)
  514. X/* need to omit _POSIX_SOURCE in order to get what we want in SVR4 */
  515. X#undef _POSIX_SOURCE
  516. X#include <sys/time.h>
  517. X#define _POSIX_SOURCE
  518. X#else
  519. X#include <sys/time.h>
  520. X#endif
  521. X
  522. X#endif /* SYSV */
  523. X
  524. X/* use POSIX name for signal */
  525. X#if defined(X_NOT_POSIX) && defined(SYSV) && !defined(SIGCHLD)
  526. X#define SIGCHLD SIGCLD
  527. X#endif
  528. X
  529. X#ifdef ISC
  530. X#include <sys/bsdtypes.h>
  531. X#endif
  532. X
  533. X#endif /* _XOS_H_ */
  534. END_OF_FILE
  535. if test 3217 -ne `wc -c <'X11/Xos.h'`; then
  536.     echo shar: \"'X11/Xos.h'\" unpacked with wrong size!
  537. fi
  538. # end of 'X11/Xos.h'
  539. fi
  540. if test -f 'X11/Xosdefs.h' -a "${1}" != "-c" ; then 
  541.   echo shar: Will not clobber existing file \"'X11/Xosdefs.h'\"
  542. else
  543. echo shar: Extracting \"'X11/Xosdefs.h'\" \(2394 characters\)
  544. sed "s/^X//" >'X11/Xosdefs.h' <<'END_OF_FILE'
  545. X/*
  546. X * O/S-dependent (mis)feature macro definitions
  547. X *
  548. X * $XConsortium: Xosdefs.h,v 1.7 91/07/19 23:22:19 rws Exp $
  549. X *
  550. X * Copyright 1991 Massachusetts Institute of Technology
  551. X *
  552. X * Permission to use, copy, modify, distribute, and sell this software and its
  553. X * documentation for any purpose is hereby granted without fee, provided that
  554. X * the above copyright notice appear in all copies and that both that
  555. X * copyright notice and this permission notice appear in supporting
  556. X * documentation, and that the name of M.I.T. not be used in advertising or
  557. X * publicity pertaining to distribution of the software without specific,
  558. X * written prior permission.  M.I.T. makes no representations about the
  559. X * suitability of this software for any purpose.  It is provided "as is"
  560. X * without express or implied warranty.
  561. X *
  562. X * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  563. X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
  564. X * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  565. X * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  566. X * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
  567. X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  568. X */
  569. X
  570. X#ifndef _XOSDEFS_H_
  571. X#define _XOSDEFS_H_
  572. X
  573. X/*
  574. X * X_NOT_STDC_ENV means does not have ANSI C header files.  Lack of this
  575. X * symbol does NOT mean that the system has stdarg.h.
  576. X *
  577. X * X_NOT_POSIX means does not have POSIX header files.  Lack of this
  578. X * symbol does NOT mean that the POSIX environment is the default.
  579. X * You may still have to define _POSIX_SOURCE to get it.
  580. X */
  581. X
  582. X#ifdef NOSTDHDRS
  583. X#define X_NOT_POSIX
  584. X#define X_NOT_STDC_ENV
  585. X#endif
  586. X
  587. X#ifdef sony
  588. X#ifndef SYSTYPE_SYSV
  589. X#define X_NOT_POSIX
  590. X#endif
  591. X#endif
  592. X
  593. X#ifdef UTEK
  594. X#define X_NOT_POSIX
  595. X#define X_NOT_STDC_ENV
  596. X#endif
  597. X
  598. X#ifdef CRAY
  599. X#define X_NOT_POSIX
  600. X#endif
  601. X
  602. X#ifdef vax
  603. X#ifndef ultrix            /* assume vanilla BSD */
  604. X#define X_NOT_POSIX
  605. X#define X_NOT_STDC_ENV
  606. X#endif
  607. X#endif
  608. X
  609. X#ifdef luna
  610. X#define X_NOT_POSIX
  611. X#define X_NOT_STDC_ENV
  612. X#endif
  613. X
  614. X#ifdef Mips
  615. X#define X_NOT_POSIX
  616. X#define X_NOT_STDC_ENV
  617. X#endif
  618. X  
  619. X#ifdef USL
  620. X#ifdef SYSV /* (release 3.2) */
  621. X#define X_NOT_POSIX
  622. X#define X_NOT_STDC_ENV
  623. X#endif
  624. X#endif
  625. X
  626. X#ifdef SYSV386
  627. X#ifdef SYSV
  628. X#define X_NOT_POSIX
  629. X#define X_NOT_STDC_ENV
  630. X#endif
  631. X#endif
  632. X
  633. X#ifdef MOTOROLA
  634. X#ifdef SYSV
  635. X#define X_NOT_STDC_ENV
  636. X#endif
  637. X#endif
  638. X
  639. X#endif /* _XOSDEFS_H_ */
  640. END_OF_FILE
  641. if test 2394 -ne `wc -c <'X11/Xosdefs.h'`; then
  642.     echo shar: \"'X11/Xosdefs.h'\" unpacked with wrong size!
  643. fi
  644. # end of 'X11/Xosdefs.h'
  645. fi
  646. if test -f 'bm-plain/rop00.xbm' -a "${1}" != "-c" ; then 
  647.   echo shar: Will not clobber existing file \"'bm-plain/rop00.xbm'\"
  648. else
  649. echo shar: Extracting \"'bm-plain/rop00.xbm'\" \(828 characters\)
  650. sed "s/^X//" >'bm-plain/rop00.xbm' <<'END_OF_FILE'
  651. X#define rop00_width 30
  652. X#define rop00_height 30
  653. Xstatic char rop00_bits[] = {
  654. X   0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x03, 0xf8, 0xff, 0xff, 0x07,
  655. X   0x5c, 0x55, 0x55, 0x0f, 0xae, 0xaa, 0xaa, 0x1e, 0x56, 0x55, 0x55, 0x1d,
  656. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  657. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  658. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0x6a, 0xaa, 0x1a,
  659. X   0x56, 0x95, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  660. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  661. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  662. X   0xae, 0xaa, 0xaa, 0x1a, 0x5e, 0x55, 0x55, 0x1d, 0xbc, 0xaa, 0xaa, 0x0e,
  663. X   0xf8, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00};
  664. X
  665. END_OF_FILE
  666. if test 828 -ne `wc -c <'bm-plain/rop00.xbm'`; then
  667.     echo shar: \"'bm-plain/rop00.xbm'\" unpacked with wrong size!
  668. fi
  669. # end of 'bm-plain/rop00.xbm'
  670. fi
  671. if test -f 'bm-plain/rop01.xbm' -a "${1}" != "-c" ; then 
  672.   echo shar: Will not clobber existing file \"'bm-plain/rop01.xbm'\"
  673. else
  674. echo shar: Extracting \"'bm-plain/rop01.xbm'\" \(828 characters\)
  675. sed "s/^X//" >'bm-plain/rop01.xbm' <<'END_OF_FILE'
  676. X#define rop01_width 30
  677. X#define rop01_height 30
  678. Xstatic char rop01_bits[] = {
  679. X   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x07,
  680. X   0x55, 0x55, 0x55, 0x0f, 0xaa, 0xaa, 0xaa, 0x1e, 0x55, 0x55, 0x55, 0x1d,
  681. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  682. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  683. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0x6a, 0xaa, 0x1a,
  684. X   0x55, 0x95, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  685. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  686. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  687. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x0e,
  688. X   0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00};
  689. X
  690. END_OF_FILE
  691. if test 828 -ne `wc -c <'bm-plain/rop01.xbm'`; then
  692.     echo shar: \"'bm-plain/rop01.xbm'\" unpacked with wrong size!
  693. fi
  694. # end of 'bm-plain/rop01.xbm'
  695. fi
  696. if test -f 'bm-plain/rop02.xbm' -a "${1}" != "-c" ; then 
  697.   echo shar: Will not clobber existing file \"'bm-plain/rop02.xbm'\"
  698. else
  699. echo shar: Extracting \"'bm-plain/rop02.xbm'\" \(828 characters\)
  700. sed "s/^X//" >'bm-plain/rop02.xbm' <<'END_OF_FILE'
  701. X#define rop02_width 30
  702. X#define rop02_height 30
  703. Xstatic char rop02_bits[] = {
  704. X   0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x03, 0xf8, 0xff, 0xff, 0x07,
  705. X   0x5c, 0x55, 0x55, 0x0f, 0xae, 0xaa, 0xaa, 0x1e, 0x56, 0x55, 0x55, 0x1d,
  706. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  707. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  708. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0x6a, 0xaa, 0x1a,
  709. X   0x56, 0x95, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  710. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  711. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  712. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  713. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d};
  714. X
  715. END_OF_FILE
  716. if test 828 -ne `wc -c <'bm-plain/rop02.xbm'`; then
  717.     echo shar: \"'bm-plain/rop02.xbm'\" unpacked with wrong size!
  718. fi
  719. # end of 'bm-plain/rop02.xbm'
  720. fi
  721. if test -f 'bm-plain/rop03.xbm' -a "${1}" != "-c" ; then 
  722.   echo shar: Will not clobber existing file \"'bm-plain/rop03.xbm'\"
  723. else
  724. echo shar: Extracting \"'bm-plain/rop03.xbm'\" \(828 characters\)
  725. sed "s/^X//" >'bm-plain/rop03.xbm' <<'END_OF_FILE'
  726. X#define rop03_width 30
  727. X#define rop03_height 30
  728. Xstatic char rop03_bits[] = {
  729. X   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x07,
  730. X   0x55, 0x55, 0x55, 0x0f, 0xaa, 0xaa, 0xaa, 0x1e, 0x55, 0x55, 0x55, 0x1d,
  731. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  732. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  733. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0x6a, 0xaa, 0x1a,
  734. X   0x55, 0x95, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  735. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  736. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  737. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  738. X   0x57, 0x55, 0x55, 0x1d, 0xaf, 0xaa, 0xaa, 0x1a, 0x57, 0x55, 0x55, 0x1d};
  739. X
  740. END_OF_FILE
  741. if test 828 -ne `wc -c <'bm-plain/rop03.xbm'`; then
  742.     echo shar: \"'bm-plain/rop03.xbm'\" unpacked with wrong size!
  743. fi
  744. # end of 'bm-plain/rop03.xbm'
  745. fi
  746. if test -f 'bm-plain/rop04.xbm' -a "${1}" != "-c" ; then 
  747.   echo shar: Will not clobber existing file \"'bm-plain/rop04.xbm'\"
  748. else
  749. echo shar: Extracting \"'bm-plain/rop04.xbm'\" \(828 characters\)
  750. sed "s/^X//" >'bm-plain/rop04.xbm' <<'END_OF_FILE'
  751. X#define rop04_width 30
  752. X#define rop04_height 30
  753. Xstatic char rop04_bits[] = {
  754. X   0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0x3f,
  755. X   0x5c, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  756. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  757. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  758. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0x6a, 0xaa, 0x2a,
  759. X   0x56, 0x95, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  760. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  761. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  762. X   0xae, 0xaa, 0xaa, 0x2a, 0x5e, 0x55, 0x55, 0x15, 0xbc, 0xaa, 0xaa, 0x2a,
  763. X   0xf8, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00};
  764. X
  765. END_OF_FILE
  766. if test 828 -ne `wc -c <'bm-plain/rop04.xbm'`; then
  767.     echo shar: \"'bm-plain/rop04.xbm'\" unpacked with wrong size!
  768. fi
  769. # end of 'bm-plain/rop04.xbm'
  770. fi
  771. if test -f 'bm-plain/rop05.xbm' -a "${1}" != "-c" ; then 
  772.   echo shar: Will not clobber existing file \"'bm-plain/rop05.xbm'\"
  773. else
  774. echo shar: Extracting \"'bm-plain/rop05.xbm'\" \(828 characters\)
  775. sed "s/^X//" >'bm-plain/rop05.xbm' <<'END_OF_FILE'
  776. X#define rop05_width 30
  777. X#define rop05_height 30
  778. Xstatic char rop05_bits[] = {
  779. X   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f,
  780. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  781. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  782. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  783. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0x6a, 0xaa, 0x2a,
  784. X   0x55, 0x95, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  785. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  786. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  787. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  788. X   0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00};
  789. X
  790. END_OF_FILE
  791. if test 828 -ne `wc -c <'bm-plain/rop05.xbm'`; then
  792.     echo shar: \"'bm-plain/rop05.xbm'\" unpacked with wrong size!
  793. fi
  794. # end of 'bm-plain/rop05.xbm'
  795. fi
  796. if test -f 'bm-plain/rop06.xbm' -a "${1}" != "-c" ; then 
  797.   echo shar: Will not clobber existing file \"'bm-plain/rop06.xbm'\"
  798. else
  799. echo shar: Extracting \"'bm-plain/rop06.xbm'\" \(828 characters\)
  800. sed "s/^X//" >'bm-plain/rop06.xbm' <<'END_OF_FILE'
  801. X#define rop06_width 30
  802. X#define rop06_height 30
  803. Xstatic char rop06_bits[] = {
  804. X   0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0x3f,
  805. X   0x5c, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  806. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  807. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  808. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0x6a, 0xaa, 0x2a,
  809. X   0x56, 0x95, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  810. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  811. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  812. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  813. X   0x56, 0x55, 0x55, 0x3d, 0xae, 0xaa, 0xaa, 0x3a, 0x56, 0x55, 0x55, 0x3d};
  814. X
  815. END_OF_FILE
  816. if test 828 -ne `wc -c <'bm-plain/rop06.xbm'`; then
  817.     echo shar: \"'bm-plain/rop06.xbm'\" unpacked with wrong size!
  818. fi
  819. # end of 'bm-plain/rop06.xbm'
  820. fi
  821. if test -f 'bm-plain/rop07.xbm' -a "${1}" != "-c" ; then 
  822.   echo shar: Will not clobber existing file \"'bm-plain/rop07.xbm'\"
  823. else
  824. echo shar: Extracting \"'bm-plain/rop07.xbm'\" \(828 characters\)
  825. sed "s/^X//" >'bm-plain/rop07.xbm' <<'END_OF_FILE'
  826. X#define rop07_width 30
  827. X#define rop07_height 30
  828. Xstatic char rop07_bits[] = {
  829. X   0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f,
  830. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  831. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  832. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  833. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0x6a, 0xaa, 0x2a,
  834. X   0x55, 0x95, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  835. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  836. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  837. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  838. X   0x57, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0x3a, 0x57, 0x55, 0x55, 0x3d};
  839. X
  840. END_OF_FILE
  841. if test 828 -ne `wc -c <'bm-plain/rop07.xbm'`; then
  842.     echo shar: \"'bm-plain/rop07.xbm'\" unpacked with wrong size!
  843. fi
  844. # end of 'bm-plain/rop07.xbm'
  845. fi
  846. if test -f 'bm-plain/rop08.xbm' -a "${1}" != "-c" ; then 
  847.   echo shar: Will not clobber existing file \"'bm-plain/rop08.xbm'\"
  848. else
  849. echo shar: Extracting \"'bm-plain/rop08.xbm'\" \(828 characters\)
  850. sed "s/^X//" >'bm-plain/rop08.xbm' <<'END_OF_FILE'
  851. X#define rop08_width 30
  852. X#define rop08_height 30
  853. Xstatic char rop08_bits[] = {
  854. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  855. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  856. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  857. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  858. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0x6a, 0xaa, 0x1a,
  859. X   0x56, 0x95, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  860. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  861. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  862. X   0xae, 0xaa, 0xaa, 0x1a, 0x5e, 0x55, 0x55, 0x1d, 0xbc, 0xaa, 0xaa, 0x0e,
  863. X   0xf8, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00};
  864. X
  865. END_OF_FILE
  866. if test 828 -ne `wc -c <'bm-plain/rop08.xbm'`; then
  867.     echo shar: \"'bm-plain/rop08.xbm'\" unpacked with wrong size!
  868. fi
  869. # end of 'bm-plain/rop08.xbm'
  870. fi
  871. if test -f 'bm-plain/rop09.xbm' -a "${1}" != "-c" ; then 
  872.   echo shar: Will not clobber existing file \"'bm-plain/rop09.xbm'\"
  873. else
  874. echo shar: Extracting \"'bm-plain/rop09.xbm'\" \(828 characters\)
  875. sed "s/^X//" >'bm-plain/rop09.xbm' <<'END_OF_FILE'
  876. X#define rop09_width 30
  877. X#define rop09_height 30
  878. Xstatic char rop09_bits[] = {
  879. X   0xaf, 0xaa, 0xaa, 0x1a, 0x57, 0x55, 0x55, 0x1d, 0xaf, 0xaa, 0xaa, 0x1a,
  880. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  881. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  882. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  883. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0x6a, 0xaa, 0x1a,
  884. X   0x55, 0x95, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  885. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  886. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  887. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x0e,
  888. X   0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00};
  889. X
  890. END_OF_FILE
  891. if test 828 -ne `wc -c <'bm-plain/rop09.xbm'`; then
  892.     echo shar: \"'bm-plain/rop09.xbm'\" unpacked with wrong size!
  893. fi
  894. # end of 'bm-plain/rop09.xbm'
  895. fi
  896. if test -f 'bm-plain/rop10.xbm' -a "${1}" != "-c" ; then 
  897.   echo shar: Will not clobber existing file \"'bm-plain/rop10.xbm'\"
  898. else
  899. echo shar: Extracting \"'bm-plain/rop10.xbm'\" \(828 characters\)
  900. sed "s/^X//" >'bm-plain/rop10.xbm' <<'END_OF_FILE'
  901. X#define rop10_width 30
  902. X#define rop10_height 30
  903. Xstatic char rop10_bits[] = {
  904. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  905. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  906. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  907. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  908. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0x6a, 0xaa, 0x1a,
  909. X   0x56, 0x95, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  910. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  911. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d,
  912. X   0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a,
  913. X   0x56, 0x55, 0x55, 0x1d, 0xae, 0xaa, 0xaa, 0x1a, 0x56, 0x55, 0x55, 0x1d};
  914. X
  915. END_OF_FILE
  916. if test 828 -ne `wc -c <'bm-plain/rop10.xbm'`; then
  917.     echo shar: \"'bm-plain/rop10.xbm'\" unpacked with wrong size!
  918. fi
  919. # end of 'bm-plain/rop10.xbm'
  920. fi
  921. if test -f 'bm-plain/rop11.xbm' -a "${1}" != "-c" ; then 
  922.   echo shar: Will not clobber existing file \"'bm-plain/rop11.xbm'\"
  923. else
  924. echo shar: Extracting \"'bm-plain/rop11.xbm'\" \(828 characters\)
  925. sed "s/^X//" >'bm-plain/rop11.xbm' <<'END_OF_FILE'
  926. X#define rop11_width 30
  927. X#define rop11_height 30
  928. Xstatic char rop11_bits[] = {
  929. X   0xaf, 0xaa, 0xaa, 0x1a, 0x57, 0x55, 0x55, 0x1d, 0xaf, 0xaa, 0xaa, 0x1a,
  930. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  931. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  932. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  933. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0x6a, 0xaa, 0x1a,
  934. X   0x55, 0x95, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  935. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  936. X   0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d,
  937. X   0xaa, 0xaa, 0xaa, 0x1a, 0x55, 0x55, 0x55, 0x1d, 0xaa, 0xaa, 0xaa, 0x1a,
  938. X   0x57, 0x55, 0x55, 0x1d, 0xaf, 0xaa, 0xaa, 0x1a, 0x57, 0x55, 0x55, 0x1d};
  939. X
  940. END_OF_FILE
  941. if test 828 -ne `wc -c <'bm-plain/rop11.xbm'`; then
  942.     echo shar: \"'bm-plain/rop11.xbm'\" unpacked with wrong size!
  943. fi
  944. # end of 'bm-plain/rop11.xbm'
  945. fi
  946. if test -f 'bm-plain/rop12.xbm' -a "${1}" != "-c" ; then 
  947.   echo shar: Will not clobber existing file \"'bm-plain/rop12.xbm'\"
  948. else
  949. echo shar: Extracting \"'bm-plain/rop12.xbm'\" \(828 characters\)
  950. sed "s/^X//" >'bm-plain/rop12.xbm' <<'END_OF_FILE'
  951. X#define rop12_width 30
  952. X#define rop12_height 30
  953. Xstatic char rop12_bits[] = {
  954. X   0xae, 0xaa, 0xaa, 0x3a, 0x56, 0x55, 0x55, 0x3d, 0xae, 0xaa, 0xaa, 0x3a,
  955. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  956. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  957. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  958. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0x6a, 0xaa, 0x2a,
  959. X   0x56, 0x95, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  960. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  961. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  962. X   0xae, 0xaa, 0xaa, 0x2a, 0x5e, 0x55, 0x55, 0x15, 0xbc, 0xaa, 0xaa, 0x2a,
  963. X   0xf8, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00};
  964. X
  965. END_OF_FILE
  966. if test 828 -ne `wc -c <'bm-plain/rop12.xbm'`; then
  967.     echo shar: \"'bm-plain/rop12.xbm'\" unpacked with wrong size!
  968. fi
  969. # end of 'bm-plain/rop12.xbm'
  970. fi
  971. if test -f 'bm-plain/rop13.xbm' -a "${1}" != "-c" ; then 
  972.   echo shar: Will not clobber existing file \"'bm-plain/rop13.xbm'\"
  973. else
  974. echo shar: Extracting \"'bm-plain/rop13.xbm'\" \(828 characters\)
  975. sed "s/^X//" >'bm-plain/rop13.xbm' <<'END_OF_FILE'
  976. X#define rop13_width 30
  977. X#define rop13_height 30
  978. Xstatic char rop13_bits[] = {
  979. X   0xaf, 0xaa, 0xaa, 0x3a, 0x57, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0x3a,
  980. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  981. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  982. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  983. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0x6a, 0xaa, 0x2a,
  984. X   0x55, 0x95, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  985. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  986. X   0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15,
  987. X   0xaa, 0xaa, 0xaa, 0x2a, 0x55, 0x55, 0x55, 0x15, 0xaa, 0xaa, 0xaa, 0x2a,
  988. X   0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00};
  989. X
  990. END_OF_FILE
  991. if test 828 -ne `wc -c <'bm-plain/rop13.xbm'`; then
  992.     echo shar: \"'bm-plain/rop13.xbm'\" unpacked with wrong size!
  993. fi
  994. # end of 'bm-plain/rop13.xbm'
  995. fi
  996. if test -f 'bm-plain/rop14.xbm' -a "${1}" != "-c" ; then 
  997.   echo shar: Will not clobber existing file \"'bm-plain/rop14.xbm'\"
  998. else
  999. echo shar: Extracting \"'bm-plain/rop14.xbm'\" \(828 characters\)
  1000. sed "s/^X//" >'bm-plain/rop14.xbm' <<'END_OF_FILE'
  1001. X#define rop14_width 30
  1002. X#define rop14_height 30
  1003. Xstatic char rop14_bits[] = {
  1004. X   0xae, 0xaa, 0xaa, 0x3a, 0x56, 0x55, 0x55, 0x3d, 0xae, 0xaa, 0xaa, 0x3a,
  1005. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  1006. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  1007. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  1008. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0x6a, 0xaa, 0x2a,
  1009. X   0x56, 0x95, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  1010. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  1011. X   0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15,
  1012. X   0xae, 0xaa, 0xaa, 0x2a, 0x56, 0x55, 0x55, 0x15, 0xae, 0xaa, 0xaa, 0x2a,
  1013. X   0x56, 0x55, 0x55, 0x3d, 0xae, 0xaa, 0xaa, 0x3a, 0x56, 0x55, 0x55, 0x3d};
  1014. X
  1015. END_OF_FILE
  1016. if test 828 -ne `wc -c <'bm-plain/rop14.xbm'`; then
  1017.     echo shar: \"'bm-plain/rop14.xbm'\" unpacked with wrong size!
  1018. fi
  1019. # end of 'bm-plain/rop14.xbm'
  1020. fi
  1021. if test -f 'playing.c' -a "${1}" != "-c" ; then 
  1022.   echo shar: Will not clobber existing file \"'playing.c'\"
  1023. else
  1024. echo shar: Extracting \"'playing.c'\" \(10788 characters\)
  1025. sed "s/^X//" >'playing.c' <<'END_OF_FILE'
  1026. X/*
  1027. X# GENERIC X-WINDOW-BASED TETRIS
  1028. X#
  1029. X#    playing.c
  1030. X#
  1031. X###
  1032. X#
  1033. X#  Copyright (C) 1992 - 93              Q. Alex Zhao, azhao@cc.gatech.edu
  1034. X#
  1035. X#            All Rights Reserved
  1036. X#
  1037. X#  Permission to use, copy, modify, and distribute this software and
  1038. X#  its documentation for any purpose and without fee is hereby granted,
  1039. X#  provided that the above copyright notice appear in all copies and
  1040. X#  that both that copyright notice and this permission notice appear in
  1041. X#  supporting documentation, and that the name of the author not be
  1042. X#  used in advertising or publicity pertaining to distribution of the
  1043. X#  software without specific, written prior permission.
  1044. X#
  1045. X#  This program is distributed in the hope that it will be "playable",
  1046. X#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1047. X#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  1048. X#
  1049. X*/
  1050. X
  1051. X#include    "tetris.h"
  1052. X
  1053. Xstatic Bool     paused = False;
  1054. Xstatic Bool     firstFall = False;
  1055. X
  1056. Xstatic int      speeds[NUM_LEVELS] = {
  1057. X100, 92, 84, 76, 68, 60, 53, 46, 39, 32, 26, 20, 15, 10, 6, 3, 1, 0};
  1058. Xstatic int      thresh[NUM_LEVELS] = {
  1059. X    10, 20, 30, 40, 50, 60, 70, 80, 90,
  1060. X100, 110, 120, 130, 140, 150, 160, 170, 180};
  1061. X
  1062. Xstatic struct timeval nextFall, now, delay, oldsample;
  1063. Xstatic struct timezone tzone = {0, 0};
  1064. X
  1065. Xstatic Bool     moveOne();
  1066. X
  1067. X/* ------------------------------------------------------------------ */
  1068. X
  1069. Xvoid
  1070. Xplaying()
  1071. X{
  1072. X    Bool            resetTime = True;
  1073. X    int             conNum = ConnectionNumber(display);
  1074. X    int             oldscore = 0;
  1075. X
  1076. X    drawTitle();
  1077. X    drawStatus();
  1078. X    drawField();
  1079. X    XFlush(display);
  1080. X    sleep(1);
  1081. X
  1082. X    (void) gettimeofday(&oldsample, &tzone);
  1083. X    score = prefilled * level * 10;
  1084. X    while (True) {
  1085. X    if (resetTime) {
  1086. X        (void) gettimeofday(&nextFall, &tzone);
  1087. X        nextFall.tv_usec += 10000 * speeds[level];
  1088. X        realTime(&nextFall);
  1089. X    } else {
  1090. X        int             writefd = 0, exceptfd = 0;
  1091. X        int             readfd = (unsigned) 1 << conNum;
  1092. X
  1093. X        (void) gettimeofday(&now, &tzone);
  1094. X        delay.tv_sec = nextFall.tv_sec - now.tv_sec;
  1095. X        delay.tv_usec = nextFall.tv_usec - now.tv_usec;
  1096. X        realTime(&delay);
  1097. X        if (((long) delay.tv_sec > 0) ||
  1098. X            (((long) delay.tv_sec == 0) &&
  1099. X             ((long) delay.tv_usec > 0))) {
  1100. X        /* sleep */
  1101. X        (void) select(conNum + 1, (fd_set *) & readfd,
  1102. X               (fd_set *) & writefd, (fd_set *) & exceptfd, &delay);
  1103. X        }
  1104. X    }
  1105. X
  1106. X    (void) gettimeofday(&now, &tzone);
  1107. X    delay.tv_sec = now.tv_sec - oldsample.tv_sec;
  1108. X    delay.tv_usec = now.tv_usec - oldsample.tv_usec - SAMPLERATE;
  1109. X    realTime(&delay);
  1110. X
  1111. X    if (((long) delay.tv_sec > 0) ||
  1112. X        (((long) delay.tv_sec == 0) &&
  1113. X         ((long) delay.tv_usec > 0))) {
  1114. X        oldsample.tv_sec = now.tv_sec;
  1115. X        oldsample.tv_usec = now.tv_usec;
  1116. X        if (bonusMode) {
  1117. X        if (score - oldscore < BONUSOUT) {
  1118. X            bonusMode = False;
  1119. X            range = NUM_THINGS;
  1120. X        }
  1121. X        } else {
  1122. X        if (score - oldscore > BONUSIN) {
  1123. X            bonusMode = True;
  1124. X            range = NUM_THINGS + NUM_BTHINGS;
  1125. X        }
  1126. X        }
  1127. X        oldscore = score;
  1128. X    }
  1129. X
  1130. X    if ((now.tv_sec > nextFall.tv_sec) ||
  1131. X        ((now.tv_sec == nextFall.tv_sec) &&
  1132. X         (now.tv_usec > nextFall.tv_usec))) {
  1133. X        (void) evGotNewThing(True);
  1134. X        resetTime = True;
  1135. X        firstFall = True;
  1136. X    } else {
  1137. X        resetTime = evGotNewThing(False);
  1138. X    }
  1139. X    }
  1140. X    /* never come to here */
  1141. X}
  1142. X
  1143. X/* ------------------------------------------------------------------ */
  1144. X
  1145. XBool
  1146. XevGotNewThing(falldown)
  1147. X    Bool            falldown;
  1148. X{
  1149. X    XEvent          ev;
  1150. X    Bool            gotNew = False, flag;
  1151. X    char            buf[4];
  1152. X
  1153. X    if (!paused && falldown)
  1154. X    gotNew = moveOne(FALL) || gotNew;
  1155. X
  1156. X    while (XPending(display)) {
  1157. X    XNextEvent(display, &ev);
  1158. X    flag = True;
  1159. X    while (flag) {
  1160. X        switch (ev.type) {
  1161. X        case KeyPress:
  1162. X        if (!XLookupString(&ev.xkey, buf, 4, NULL, NULL))
  1163. X            break;
  1164. X
  1165. X        switch (buf[0]) {
  1166. X        case 'j':
  1167. X        case 's':
  1168. X            if (!paused)
  1169. X            gotNew = moveOne(LEFT) || gotNew;
  1170. X            break;
  1171. X
  1172. X        case 'k':
  1173. X        case 'd':
  1174. X            if (!paused)
  1175. X            gotNew = moveOne(ROTATE) || gotNew;
  1176. X            break;
  1177. X
  1178. X        case 'l':
  1179. X        case 'f':
  1180. X            if (!paused)
  1181. X            gotNew = moveOne(RIGHT) || gotNew;
  1182. X            break;
  1183. X
  1184. X        case ' ':
  1185. X        case '\n':
  1186. X            if (!paused)
  1187. X            gotNew = moveOne(DROP) || gotNew;
  1188. X            break;
  1189. X
  1190. X        case 'q':
  1191. X        case 'Q':
  1192. X            gameOver();
  1193. X            break;
  1194. X
  1195. X        case '+':
  1196. X        case '=':
  1197. X            if (!paused)
  1198. X            if (level < NUM_LEVELS - 1) {
  1199. X                level++;
  1200. X                drawStatus();
  1201. X            }
  1202. X            break;
  1203. X
  1204. X        case '-':
  1205. X        case '_':
  1206. X            if (!paused)
  1207. X            if (level > 0) {
  1208. X                level--;
  1209. X                drawStatus();
  1210. X            }
  1211. X            bonusMode = False;
  1212. X            range = NUM_THINGS;
  1213. X            break;
  1214. X
  1215. X        case 'b':
  1216. X        case 'B':
  1217. X            beep = !beep;
  1218. X            if (beep)
  1219. X            XBell(display, BVOLUME);
  1220. X            break;
  1221. X
  1222. X        case 'p':
  1223. X        case 'P':
  1224. X            if (beep)
  1225. X            XBell(display, BVOLUME);
  1226. X            paused = !paused;
  1227. X            if (paused) {
  1228. X            /* "... Hi boss, I'm working hard as usual ..." */
  1229. X            banner(MSG_PAUSED);
  1230. X            (void) XIconifyWindow(display, mainWin, screen_num);
  1231. X            } else {
  1232. X            clearNext();
  1233. X            if (showNext)
  1234. X                drawNext();
  1235. X            }
  1236. X            XSync(display, False);
  1237. X            break;
  1238. X
  1239. X        case '\014':
  1240. X            XClearWindow(display, mainWin);
  1241. X            XClearWindow(display, blockWin);
  1242. X            redrawAll();
  1243. X            if (paused)
  1244. X            banner(MSG_PAUSED);
  1245. X            XSync(display, False);
  1246. X            break;
  1247. X
  1248. X        case 'n':
  1249. X        case 'N':
  1250. X            if (!paused) {
  1251. X            showNext = !showNext;
  1252. X            if (showNext) {
  1253. X                drawNext();
  1254. X            } else {
  1255. X                clearNext();
  1256. X            }
  1257. X            XSync(display, False);
  1258. X            }
  1259. X            break;
  1260. X
  1261. X        default:
  1262. X            XBell(display, 0);
  1263. X            XSync(display, False);
  1264. X            break;
  1265. X        }
  1266. X
  1267. X        break;
  1268. X
  1269. X        case UnmapNotify:
  1270. X        paused = True;
  1271. X        break;
  1272. X
  1273. X        case FocusOut:
  1274. X        if (firstFall) {
  1275. X            paused = True;
  1276. X            banner(MSG_PAUSED);
  1277. X        }
  1278. X        break;
  1279. X
  1280. X        case Expose:
  1281. X        if (ev.xexpose.count == 0) {
  1282. X            redrawAll();
  1283. X            if (paused)
  1284. X            banner(MSG_PAUSED);
  1285. X        }
  1286. X        break;
  1287. X
  1288. X        case ClientMessage:
  1289. X        if ((Atom) ev.xclient.data.l[0] == delw)
  1290. X            gameOver();
  1291. X        break;
  1292. X
  1293. X        case DestroyNotify:
  1294. X        exit(0);
  1295. X        break;
  1296. X        }
  1297. X        if (paused) {
  1298. X        XNextEvent(display, &ev);
  1299. X        flag = True;
  1300. X        gotNew = True;        /* for reseting time */
  1301. X        (void) gettimeofday(&oldsample, &tzone);
  1302. X        } else
  1303. X        flag = False;
  1304. X    }
  1305. X    }
  1306. X
  1307. X    XSync(display, False);
  1308. X    return gotNew;
  1309. X}
  1310. X
  1311. X/* ------------------------------------------------------------------ */
  1312. X
  1313. Xvoid
  1314. XredrawAll()
  1315. X{
  1316. X    drawTitle();
  1317. X    drawStatus();
  1318. X    drawField();
  1319. X    drawThing();
  1320. X    if (showNext)
  1321. X    drawNext();
  1322. X}
  1323. X
  1324. X/* ------------------------------------------------------------------ */
  1325. X
  1326. Xstatic Bool
  1327. XmoveOne(move)
  1328. X    move_t          move;
  1329. X{
  1330. X    int             lines;
  1331. X
  1332. X    if ((move == DROP) || ((move == FALL) && atBottom())) {
  1333. X    tryMove(move);
  1334. X    putBox();
  1335. X    lines = checkLines();
  1336. X    score += (prefilled + level + lines) * (bonusMode ? 1 : 3);
  1337. X    score += (showNext ? 3 : 5) * level * level * lines * lines *
  1338. X        (bonusMode ? 1 : 2);
  1339. X    rows += lines;
  1340. X    if (rows > thresh[level])
  1341. X        level++;
  1342. X    drawStatus();
  1343. X    newThing();
  1344. X    if (showNext) {
  1345. X        clearNext();
  1346. X        drawNext();
  1347. X    }
  1348. X    XSync(display, True);    /* discard all events */
  1349. X    if (overlapping())
  1350. X        gameOver();
  1351. X    drawThing();
  1352. X    return True;
  1353. X    } else {
  1354. X    tryMove(move);
  1355. X    if (rows > thresh[level]) {
  1356. X        level++;
  1357. X        drawStatus();
  1358. X    }
  1359. X    return False;
  1360. X    }
  1361. X}
  1362. X
  1363. X/* ------------------------------------------------------------------ */
  1364. X
  1365. Xstatic void
  1366. XaddScore()
  1367. X{
  1368. X    time_t          tloc;
  1369. X    char            buff[2][SCORESIZE];
  1370. X    char            lockfile[FILENAMELEN];
  1371. X    int             fd, lfd;
  1372. X    int             tmp, ptmp, s1;
  1373. X    int             mycount = 0;
  1374. X    Bool            saved = False, trickle = False;
  1375. X
  1376. X    time(&tloc);
  1377. X    (void) strcpy(myscore.mydate, asctime(localtime(&tloc)));
  1378. X    (void) sprintf(myscore.score, "%9d", score);
  1379. X    (void) sprintf(myscore.level, "%3d", level);
  1380. X    (void) sprintf(myscore.rows, "%4d", rows);
  1381. X
  1382. X    (void) fprintf(stderr, "\n- %s", myscore.mydate);
  1383. X    (void) fprintf(stderr, "- Your final score is %d,", score);
  1384. X    (void) fprintf(stderr, " at level %d with %d rows.\n\n", level, rows);
  1385. X
  1386. X    if ((fd = open(SCOREFILE, O_CREAT | O_RDWR, 0644)) < 0) {
  1387. X    (void) fprintf(stderr, "Cannot write the score-file!\n");
  1388. X    return;
  1389. X    }
  1390. X    /* lock */
  1391. X    (void) strcpy(lockfile, SCOREFILE);
  1392. X    (void) strcat(lockfile, ".lock");
  1393. X    while (((lfd = open(lockfile, O_CREAT | O_EXCL, 0644)) < 0) &&
  1394. X        errno == EEXIST)
  1395. X    sleep(1);
  1396. X
  1397. X    if (lfd < 0) {
  1398. X    (void) perror("Error in creating the score-file lock-file");
  1399. X    (void) fprintf(stderr, "Score not recorded - sorry.\n");
  1400. X    return;
  1401. X    }
  1402. X    tmp = 0;
  1403. X    ptmp = 1;
  1404. X    bcopy((char *) &myscore, buff[1], SCORESIZE);
  1405. X
  1406. X    while (read(fd, buff[tmp], SCORESIZE) == SCORESIZE) {
  1407. X    sscanf(((score_t *) buff[tmp])->score, " %d", &s1);
  1408. X    if (!saved && (s1 <= score)) {
  1409. X        trickle = True;
  1410. X        saved = True;
  1411. X        mycount++;
  1412. X    }
  1413. X    if (!strncmp(myscore.myname, ((score_t *) buff[tmp])->myname,
  1414. X             NAMELEN)) {
  1415. X        mycount++;
  1416. X    }
  1417. X    /* Then check if we should trickle the score */
  1418. X    if (trickle) {
  1419. X        lseek(fd, (off_t) - SCORESIZE, SEEK_CUR);
  1420. X        write(fd, buff[ptmp], SCORESIZE);
  1421. X        ptmp = tmp;
  1422. X        tmp = (tmp + 1) % 2;
  1423. X    }
  1424. X
  1425. X    /*
  1426. X     * As we trickle, we add up records owned by me. Once we hit max, we
  1427. X     * throw it away, and stop trickling.
  1428. X     */
  1429. X    if ((mycount > MAXSCORES) || ((mycount == MAXSCORES) && !trickle)) {
  1430. X        trickle = False;
  1431. X        break;
  1432. X    }
  1433. X    }                /* while */
  1434. X
  1435. X    if (trickle) {
  1436. X    write(fd, buff[ptmp], SCORESIZE);
  1437. X    }
  1438. X    if (!saved && (mycount < MAXSCORES)) {
  1439. X    write(fd, (char *) &myscore, SCORESIZE);
  1440. X    }
  1441. X    /* unlock */
  1442. X    close(lfd);
  1443. X    (void) unlink(lockfile);
  1444. X    close(fd);
  1445. X}
  1446. X
  1447. X/* ------------------------------------------------------------------ */
  1448. X
  1449. Xvoid
  1450. XgameOver()
  1451. X{
  1452. X    int             i, j;
  1453. X
  1454. X    banner(MSG_END);
  1455. X    XSync(display, True);
  1456. X
  1457. X    for (j = 0; j <= ROWS / 2; j ++) {
  1458. X    for (i = 0; i < COLS; i ++) {
  1459. X        drawBox(blockWin, 0, nrand(NUM_THINGS), i * BOXSIZE, j * BOXSIZE);
  1460. X        drawBox(blockWin, 0, nrand(NUM_THINGS), i * BOXSIZE,
  1461. X            (ROWS - j - 1) * BOXSIZE);
  1462. X        }
  1463. X    XSync(display, True);
  1464. X    }
  1465. X
  1466. X    addScore();
  1467. X    showScores(SHOWSCORES);
  1468. X    XDestroyWindow(display, mainWin);
  1469. X    XCloseDisplay(display);
  1470. X    exit(0);
  1471. X}
  1472. X
  1473. X/* ------------------------------------------------------------------ */
  1474. X
  1475. Xvoid
  1476. XshowScores(num)
  1477. X    int             num;
  1478. X{
  1479. X    int             fd, i = 0;
  1480. X    score_t         curs;
  1481. X
  1482. X    if ((fd = open(SCOREFILE, O_RDONLY, 0644)) < 0)
  1483. X    return;
  1484. X
  1485. X    (void) fprintf(stderr, "            GENERIC TETRIS  HALL OF FAME\n\n");
  1486. X    (void) fprintf(stderr,
  1487. X        "   # USER            SCORE   L    R  HOST         DATE\n");
  1488. X
  1489. X    while (read(fd, (char *) &curs, SCORESIZE) == SCORESIZE) {
  1490. X    i++;
  1491. X    if ((num == 0) || (i <= num))
  1492. X        (void) fprintf(stderr, "%4d %-12s%9s %3s %4s  %-12s %-s",
  1493. X               i, curs.myname, curs.score, curs.level, curs.rows,
  1494. X               curs.myhost, curs.mydate);
  1495. X    }
  1496. X    close(fd);
  1497. X    (void) fprintf(stderr, "There are %d scores to date.\n", i);
  1498. X}
  1499. X
  1500. X/* ------------------------------------------------------------------ */
  1501. END_OF_FILE
  1502. if test 10788 -ne `wc -c <'playing.c'`; then
  1503.     echo shar: \"'playing.c'\" unpacked with wrong size!
  1504. fi
  1505. # end of 'playing.c'
  1506. fi
  1507. if test -f 'tetris.man' -a "${1}" != "-c" ; then 
  1508.   echo shar: Will not clobber existing file \"'tetris.man'\"
  1509. else
  1510. echo shar: Extracting \"'tetris.man'\" \(4142 characters\)
  1511. sed "s/^X//" >'tetris.man' <<'END_OF_FILE'
  1512. X.TH TETRIS 6 "24 Aug 93, V3.0" "Georgia Tech"
  1513. X.SH NAME
  1514. XGENERIC TETRIS \- Yet Another Tetris Game on X
  1515. X.SH SYNOPSIS
  1516. X.B tetris
  1517. X[-s] [-l <start level>] [-p <prefilled lines>] [-showNext] [-beep]
  1518. X[-plain] [-u <name>]
  1519. X[-display <display>] [-geometry <geometry>] [-iconGeometry <geometry>]
  1520. X[-{background | bg} <color>] [-{foreground | fg} <color>] [-bigFont
  1521. X<font>] [-tinyFont <font>] [-xrm <resource specification>]
  1522. X.SH DESCRIPTION
  1523. X.LP
  1524. XOne of the motivations of this tetris program is simplicity. It does
  1525. Xnot have many fancy features but the blocks are big enough so player
  1526. Xcan feel comfortable.
  1527. X.LP
  1528. XThe program lists the top 15 players at the end, each player may has at
  1529. Xmost three scores. With the option \fB\-s\fP, it shows all the players
  1530. Xand scores.
  1531. X.LP
  1532. XKey "\fBj\fP" moves the block left, "\fBl\fP" moves right,
  1533. X"\fBk\fP" rotates. Left-handed people may want to use "\fBs\fP",
  1534. X"\fBd\fP", "\fBf\fP" respectively. Or maybe someone wants to try the
  1535. Xarrow keys...  The space bar drops a block quickly. Use "\fBCTRL-L\fP"
  1536. Xkey combination to redraw \- in case the program messes somthing up.
  1537. X.LP
  1538. XAs usual, "\fB+\fP" and "\fB\-\fP" speed up or lower down the speed. Note
  1539. Xthat you don't need to press the "\fISHIFT\fP" key \- "\fB=\fP" and
  1540. X"\fB_\fP" also work. The "\fBb\fP" key toggles "beep", and "\fBn\fP"
  1541. Xtoggles "show next".
  1542. X.LP
  1543. XIf you press "\fBp\fP", the game will be paused, and the window
  1544. Xwill be iconified \- just in case your boss suddenly appears at your
  1545. Xdoor ;o). When the tetris window loses its focus, it also goes to
  1546. X"paused" mode except it doesn't iconify itself.
  1547. X.LP
  1548. XTo get high scores, don't use "show next" mode, try starting at a
  1549. Xhigher level and try to let "tetris" eat more than one line at a time.
  1550. XPlay \fIfast\fP and see how well you can do in the \fIbonus\fP mode
  1551. X(what is that? ;-).
  1552. X.SH OPTIONS
  1553. X.PP
  1554. X.TP 8
  1555. X.B \-s
  1556. X.br
  1557. XThis option lets the program only list all the recorded scores then exit.
  1558. X.TP 8
  1559. X.B \-l \fIlevel\fP
  1560. X.br
  1561. XThis option starts the program at the specified level (resource name
  1562. X"\fIstartLevel\fP").
  1563. X.TP 8
  1564. X.B \-p \fIlines\fP
  1565. X.br
  1566. XThis option indicates that the program should start with some of the lines
  1567. Xbeing randomly filled (resource name "\fIpreFilledLines\fP").
  1568. X.TP 8
  1569. X.B \-showNext
  1570. X.br
  1571. XThis option tells the program start in "show next" mode (resource name
  1572. X"\fIshowNext\fP").
  1573. X.TP 8
  1574. X.B \-beep
  1575. X.br
  1576. XThis option turns the sound on (resource name "\fIbeep\fP").
  1577. X.TP 8
  1578. X.B \-plain
  1579. X.br
  1580. XUses the old "plain" bitmaps instead of the default 3D ones (resource
  1581. Xname "\fIplain\fP").
  1582. X.TP 8
  1583. X.B \-u \fIname\fP
  1584. X.br
  1585. XThis option sets an alternative player name (resource name
  1586. X"\fIplayerName\fP").
  1587. X.TP 8
  1588. X.B \-display \fIhost\fP:\fIdpy\fP
  1589. X.br
  1590. XThis option specifies the X server to contact.
  1591. X.TP 8
  1592. X.B \-geometry {+|\-}\fIX\fP{+|\-}\fIY\fP
  1593. X.br
  1594. XThis option sets the initial position of the tetris window (resource
  1595. Xname "\fIgeometry\fP").
  1596. X.TP 8
  1597. X.B \-iconGeometry {+|\-}\fIX\fP{+|\-}\fIY\fP
  1598. X.br
  1599. XThis option sets the position of the icon (resource name "\fIiconGeometry\fP").
  1600. X.TP 8
  1601. X.B \-{background | bg} \fIcolor\fP
  1602. X.br
  1603. XThis option specifies the background of the tetris window (resource name
  1604. X"\fIbackground\fP").
  1605. X.TP 8
  1606. X.B \-{foreground | fg} \fIcolor\fP
  1607. X.br
  1608. XThis option specifies the foreground of the tetris window (resource name
  1609. X"\fIforeground\fP").
  1610. X.TP 8
  1611. X.B \-bigFont \fIfont\fP
  1612. X.br
  1613. XThis option sets the font used in drawing titles and important messages
  1614. X(resource name "\fIbigFont\fP").
  1615. X.TP 8
  1616. X.B \-tinyFont \fIfont\fP
  1617. X.br
  1618. XThis option sets the font used in drawing status information
  1619. X(resource name "\fItinyFont\fP").
  1620. X.TP 8
  1621. X.B \-xrm <\fIresource specification\fP>
  1622. X.br
  1623. XAnother method of specifying preferences.
  1624. X.PP
  1625. X.SH SEE ALSO
  1626. X.LP
  1627. XX(1), xtetris(1), xmris(1)
  1628. X.SH COPYRIGHTS
  1629. X.LP
  1630. X\*R Copyright 1992-93, Q. Alex Zhao, <\fIazhao@cc.gatech.edu\fP>.
  1631. X.SH BUG REPORTS AND PROGRAM UPDATES
  1632. X.LP
  1633. XSend bug reports (or fixes) to the author:
  1634. X.RS
  1635. XQ. Alex Zhao,    <\fIazhao@cc.gatech.edu\fP>
  1636. X.br
  1637. XCollege of Computing
  1638. X.br
  1639. XGeorgia Institute of Technology
  1640. X.br
  1641. XAtlanta, GA 30332-0280
  1642. X.RE
  1643. X.LP
  1644. XThe most updated source could be found on \fIftp.x.org\fP under
  1645. X\fI/contrib\fP.
  1646. X.SH ACKNOWLEDGEMENTS
  1647. X.LP
  1648. XThanks go to people who helped me in improving the program.
  1649. END_OF_FILE
  1650. if test 4142 -ne `wc -c <'tetris.man'`; then
  1651.     echo shar: \"'tetris.man'\" unpacked with wrong size!
  1652. fi
  1653. # end of 'tetris.man'
  1654. fi
  1655. if test -f 'ticon.xbm' -a "${1}" != "-c" ; then 
  1656.   echo shar: Will not clobber existing file \"'ticon.xbm'\"
  1657. else
  1658. echo shar: Extracting \"'ticon.xbm'\" \(3278 characters\)
  1659. sed "s/^X//" >'ticon.xbm' <<'END_OF_FILE'
  1660. X#define ticon_width 64
  1661. X#define ticon_height 64
  1662. Xstatic char ticon_bits[] = {
  1663. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1664. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1665. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1666. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1667. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1668. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
  1669. X   0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
  1670. X   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x3c, 0x00, 0x00, 0x00,
  1671. X   0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
  1672. X   0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x01, 0x00,
  1673. X   0x00, 0x00, 0x00, 0x38, 0x00, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x7c,
  1674. X   0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x40, 0x00, 0x00,
  1675. X   0x00, 0x00, 0x00, 0x01, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
  1676. X   0x02, 0x10, 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x02, 0x10, 0x01, 0x00,
  1677. X   0x00, 0x00, 0x80, 0x10, 0x02, 0x10, 0x01, 0x00, 0x00, 0x00, 0x80, 0x10,
  1678. X   0x02, 0x10, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x08, 0x02, 0x00,
  1679. X   0x00, 0x00, 0x00, 0x01, 0x01, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x83,
  1680. X   0x01, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x08, 0x02, 0x00,
  1681. X   0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x44,
  1682. X   0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 0x44, 0x00, 0x00, 0xc0, 0x00,
  1683. X   0x00, 0xc0, 0x01, 0x44, 0x00, 0x00, 0x80, 0x00, 0x00, 0x70, 0x00, 0x44,
  1684. X   0x00, 0x00, 0x80, 0x00, 0x00, 0x18, 0x00, 0x44, 0x00, 0x00, 0x80, 0x00,
  1685. X   0x00, 0x0c, 0x00, 0x44, 0x7c, 0x3e, 0x9f, 0x00, 0x00, 0x06, 0x00, 0x44,
  1686. X   0x44, 0x22, 0x91, 0x00, 0x00, 0x03, 0x00, 0x44, 0x44, 0x22, 0x91, 0x00,
  1687. X   0x00, 0x81, 0x0f, 0x44, 0x44, 0x22, 0x91, 0x00, 0x00, 0xe1, 0x3f, 0x44,
  1688. X   0x44, 0x22, 0x91, 0x00, 0x00, 0x31, 0x60, 0x44, 0x44, 0x22, 0x91, 0x00,
  1689. X   0x00, 0x19, 0xc0, 0x44, 0x44, 0x22, 0x91, 0x00, 0x00, 0x09, 0x80, 0x44,
  1690. X   0x44, 0x22, 0x91, 0x00, 0x00, 0x89, 0x88, 0x44, 0x44, 0x22, 0x91, 0x00,
  1691. X   0x00, 0xc9, 0x98, 0x44, 0x44, 0x22, 0x91, 0x00, 0x00, 0x09, 0x80, 0x44,
  1692. X   0x44, 0x22, 0x91, 0x00, 0x00, 0x09, 0x80, 0x44, 0x44, 0x22, 0x91, 0x00,
  1693. X   0x00, 0xc9, 0x98, 0x44, 0x44, 0x22, 0x91, 0x00, 0x00, 0x09, 0x80, 0x44,
  1694. X   0x7c, 0x3e, 0x9f, 0x00, 0x00, 0x09, 0x80, 0x44, 0x7c, 0x3e, 0x9f, 0x00,
  1695. X   0x00, 0xc9, 0x98, 0x44, 0x00, 0x00, 0x80, 0x00, 0x00, 0x89, 0x88, 0x44,
  1696. X   0x00, 0x00, 0x80, 0x00, 0x00, 0x09, 0x80, 0x44, 0x00, 0x00, 0x80, 0x00,
  1697. X   0x00, 0x09, 0x80, 0x44, 0x00, 0x00, 0x80, 0x00, 0x00, 0xf9, 0xff, 0x44,
  1698. X   0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x00, 0x80, 0x00,
  1699. X   0x00, 0x01, 0x00, 0x44, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff,
  1700. X   0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1701. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1702. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1703. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1704. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  1705. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  1706. END_OF_FILE
  1707. if test 3278 -ne `wc -c <'ticon.xbm'`; then
  1708.     echo shar: \"'ticon.xbm'\" unpacked with wrong size!
  1709. fi
  1710. # end of 'ticon.xbm'
  1711. fi
  1712. echo shar: End of archive 2 \(of 3\).
  1713. cp /dev/null ark2isdone
  1714. MISSING=""
  1715. for I in 1 2 3 ; do
  1716.     if test ! -f ark${I}isdone ; then
  1717.     MISSING="${MISSING} ${I}"
  1718.     fi
  1719. done
  1720. if test "${MISSING}" = "" ; then
  1721.     echo You have unpacked all 3 archives.
  1722.     rm -f ark[1-9]isdone
  1723. else
  1724.     echo You still need to unpack the following archives:
  1725.     echo "        " ${MISSING}
  1726. fi
  1727. ##  End of shell archive.
  1728. exit 0
  1729.