games@tekred.TEK.COM (06/21/88)
Submitted by: cvedc!opus!markh (Mark Holm) Comp.sources.games: Volume 4, Issue 50 Archive-name: mahjongg2/Part01 [OK, as they say: "You asked for it, now you're going to get it!" There was a large number of you requesting the source for the mahjongg tiles, so here it is. This version of mahjongg.c has a few patches applied to it and should completely replace the old one. Note that this is in 38 parts spread out over several days. -br] #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 38)." # Contents: README MANIFEST icons.c mahjongg.c tiles tiles/bandw # tiles/bandw/mahjongg.cursor tiles/rdrunner # Wrapped by billr@saab on Fri Jun 17 11:58:24 1988 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f README -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"README\" else echo shar: Extracting \"README\" \(1133 characters\) sed "s/^X//" >README <<'END_OF_README' XMAHJONGG Version 1.0 X XCopyright 1988 Mark A. Holm X XPermission is given to copy and distribute for non-profit purposes. X XThis game will operate on any Sun hardware that I know of with either Xa monochrome or a color bit mapped tube running Sun 3.2 UNIX or later. XMost of the development was done on a Sun 100U running Sun 3.5. X XPlease Note!! The automagic screen type determination will not recognize Xall screen types unless compiled with <sys/fbio.h> from a 3.5 OS. If Xcompiled with 3.2 not all monochrome types are recognized. Also note that I did Xnot have enough time or alternate screen types to check out the 386. X XINSTALLATION INSTRUCTIONS: X X1. Unpack this kit in an empty directory and edit the Makefile to X set MANLOC and DESTDIR to the appropriate locations. Define X TARGET as RDRUNNER, if you're on a 386i. If it's a SPARC, X you're on your own. X X2. run 'make install'. X XIf you would like the patches to iconedit so you can modify the Xicons, send a request (and possibly a small donation ;^) to the Xaddress below. X XIf you have any questions or problems/bug reports, send them to me: X XMark A. Holm Xtektronix!tessi!exc!markh END_OF_README if test 1133 -ne `wc -c <README`; then echo shar: \"README\" unpacked with wrong size! fi # end of overwriting check fi if test -f MANIFEST -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"MANIFEST\" else echo shar: Extracting \"MANIFEST\" \(5441 characters\) sed "s/^X//" >MANIFEST <<'END_OF_MANIFEST' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 X MANIFEST.BAK 4 X Makefile 23 X Makefile.net 2 X README 1 X READ_ME 4 X color.h 3 X event.c 2 X icons.c 1 X mahjongg.6 5 X mahjongg.c 1 X mahjongg.h 3 X mahjongg.icon 23 X tiles 1 X tiles/0 38 X tiles/1 37 X tiles/2 36 X tiles/3 36 X tiles/4 35 X tiles/5 35 X tiles/6 36 X tiles/7 35 X tiles/8 37 X tiles/9 37 X tiles/bam1 32 X tiles/bam2 33 X tiles/bam3 33 X tiles/bam4 33 X tiles/bam5 34 X tiles/bam6 34 X tiles/bam7 32 X tiles/bam8 32 X tiles/bam9 34 X tiles/bandw 1 X tiles/bandw/0 22 X tiles/bandw/1 22 X tiles/bandw/2 22 X tiles/bandw/3 23 X tiles/bandw/4 21 X tiles/bandw/5 20 X tiles/bandw/6 21 X tiles/bandw/7 21 X tiles/bandw/8 20 X tiles/bandw/9 20 X tiles/bandw/bam1 17 X tiles/bandw/bam2 19 X tiles/bandw/bam3 19 X tiles/bandw/bam4 19 X tiles/bandw/bam5 18 X tiles/bandw/bam6 18 X tiles/bandw/bam7 18 X tiles/bandw/bam8 17 X tiles/bandw/bam9 17 X tiles/bandw/blank 15 X tiles/bandw/c_east 8 X tiles/bandw/c_north 7 X tiles/bandw/c_south 8 X tiles/bandw/c_west 8 X tiles/bandw/char1 15 X tiles/bandw/char2 12 X tiles/bandw/char3 11 X tiles/bandw/char4 14 X tiles/bandw/char5 13 X tiles/bandw/char6 13 X tiles/bandw/char7 12 X tiles/bandw/char8 11 X tiles/bandw/char9 15 X tiles/bandw/circ1 9 X tiles/bandw/circ2 10 X tiles/bandw/circ3 11 X tiles/bandw/circ4 16 X tiles/bandw/circ5 10 X tiles/bandw/circ6 12 X tiles/bandw/circ7 14 X tiles/bandw/circ8 10 X tiles/bandw/circ9 13 X tiles/bandw/d_green 7 X tiles/bandw/d_red 14 X tiles/bandw/d_white 7 X tiles/bandw/f_bam 16 X tiles/bandw/f_mum 16 X tiles/bandw/f_orch 9 X tiles/bandw/f_plum 9 X tiles/bandw/mahjongg.cursor 1 X tiles/bandw/s_autumn 6 X tiles/bandw/s_spring 5 X tiles/bandw/s_summer 6 X tiles/bandw/s_winter 6 X tiles/blank 31 X tiles/c_east 23 X tiles/c_north 22 X tiles/c_south 22 X tiles/c_west 24 X tiles/char1 29 X tiles/char2 31 X tiles/char3 31 X tiles/char4 30 X tiles/char5 30 X tiles/char6 30 X tiles/char7 29 X tiles/char8 29 X tiles/char9 26 X tiles/circ1 28 X tiles/circ2 28 X tiles/circ3 28 X tiles/circ4 27 X tiles/circ5 27 X tiles/circ6 27 X tiles/circ7 26 X tiles/circ8 26 X tiles/circ9 25 X tiles/d_green 22 X tiles/d_red 24 X tiles/d_white 23 X tiles/f_bam 25 X tiles/f_mum 25 X tiles/f_orch 23 X tiles/f_plum 24 X tiles/mahjongg.icon 17 X tiles/rdrunner 1 X tiles/rdrunner/0 20 X tiles/rdrunner/1 19 X tiles/rdrunner/2 19 X tiles/rdrunner/3 19 X tiles/rdrunner/4 18 X tiles/rdrunner/5 18 X tiles/rdrunner/6 18 X tiles/rdrunner/7 17 X tiles/rdrunner/8 17 X tiles/rdrunner/9 20 X tiles/rdrunner/bam1 16 X tiles/rdrunner/bam2 14 X tiles/rdrunner/bam3 15 X tiles/rdrunner/bam4 15 X tiles/rdrunner/bam5 14 X tiles/rdrunner/bam6 16 X tiles/rdrunner/bam7 15 X tiles/rdrunner/bam8 14 X tiles/rdrunner/bam9 16 X tiles/rdrunner/blank 8 X tiles/rdrunner/c_east 5 X tiles/rdrunner/c_north 4 X tiles/rdrunner/c_south 4 X tiles/rdrunner/c_west 6 X tiles/rdrunner/char1 8 X tiles/rdrunner/char2 7 X tiles/rdrunner/char3 7 X tiles/rdrunner/char4 9 X tiles/rdrunner/char5 13 X tiles/rdrunner/char6 13 X tiles/rdrunner/char7 12 X tiles/rdrunner/char8 13 X tiles/rdrunner/char9 12 X tiles/rdrunner/circ1 7 X tiles/rdrunner/circ2 12 X tiles/rdrunner/circ3 11 X tiles/rdrunner/circ4 11 X tiles/rdrunner/circ5 11 X tiles/rdrunner/circ6 10 X tiles/rdrunner/circ7 6 X tiles/rdrunner/circ8 10 X tiles/rdrunner/circ9 10 X tiles/rdrunner/d_green 5 X tiles/rdrunner/d_red 9 X tiles/rdrunner/d_white 4 X tiles/rdrunner/f_bam 9 X tiles/rdrunner/f_mum 8 X tiles/rdrunner/f_orch 5 X tiles/rdrunner/f_plum 6 X tiles/rdrunner/mahjongg.icon 2 X tiles/rdrunner/s_autumn 3 X tiles/rdrunner/s_spring 3 X tiles/rdrunner/s_summer 3 X tiles/rdrunner/s_winter 2 X tiles/s_autumn 21 X tiles/s_spring 21 X tiles/s_summer 20 X tiles/s_winter 21 END_OF_MANIFEST if test 5441 -ne `wc -c <MANIFEST`; then echo shar: \"MANIFEST\" unpacked with wrong size! fi # end of overwriting check fi if test -f icons.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"icons.c\" else echo shar: Extracting \"icons.c\" \(15768 characters\) sed "s/^X//" >icons.c <<'END_OF_icons.c' X/* X * Copyright 1988, Mark Holm X * Exceptions X * X * Acknowledgments to Dorothy Robinson for her artistic X * abilities in drawing the icons and to Jim Batch for X * technical support and graphical concepts (which I abandoned in favor X * of the easy way out). X * X * Permission is given to copy and distribute for non-profit purposes. X * X */ X X/* This is the file for building the icon images for the */ X/* tiles both color and b/w. */ X X#include <sys/types.h> X#include <pixrect/pixrect.h> X#include <suntool/sunview.h> X X/* color frame closed icon */ X Xstatic short icon_cimage[] = { X#include "tiles/mahjongg.icon" X}; Xmpr_static(cicon_image, 64, 64, 8, icon_cimage); X X/* cursor icons */ X Xshort stick_image[] = { X#include "tiles/bandw/mahjongg.cursor" X}; Xmpr_static(stick, 16, 16, 1, stick_image); X Xstatic short wait_image[] = { X#include <images/hglass.cursor> X}; Xmpr_static(wait, 16, 16, 1, wait_image); X Xstatic short confirm_image[] = { X#include <images/confirm.pr> X}; Xmpr_static(confirm, 16, 16, 1, confirm_image); X X/* Number tiles (color) */ X Xstatic short NUM0_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/0" X#else X#include "tiles/0" X#endif RDRUNNER X}; Xmpr_static(cNUM0, 64, 64, 8, NUM0_cimage); X Xstatic short NUM1_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/1" X#else X#include "tiles/1" X#endif RDRUNNER X}; Xmpr_static(cNUM1, 64, 64, 8, NUM1_cimage); X Xstatic short NUM2_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/2" X#else X#include "tiles/2" X#endif RDRUNNER X}; Xmpr_static(cNUM2, 64, 64, 8, NUM2_cimage); X Xstatic short NUM3_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/3" X#else X#include "tiles/3" X#endif RDRUNNER X}; Xmpr_static(cNUM3, 64, 64, 8, NUM3_cimage); X Xstatic short NUM4_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/4" X#else X#include "tiles/4" X#endif RDRUNNER X}; Xmpr_static(cNUM4, 64, 64, 8, NUM4_cimage); X Xstatic short NUM5_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/5" X#else X#include "tiles/5" X#endif RDRUNNER X}; Xmpr_static(cNUM5, 64, 64, 8, NUM5_cimage); X Xstatic short NUM6_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/6" X#else X#include "tiles/6" X#endif RDRUNNER X}; Xmpr_static(cNUM6, 64, 64, 8, NUM6_cimage); X Xstatic short NUM7_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/7" X#else X#include "tiles/7" X#endif RDRUNNER X}; Xmpr_static(cNUM7, 64, 64, 8, NUM7_cimage); X Xstatic short NUM8_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/8" X#else X#include "tiles/8" X#endif RDRUNNER X}; Xmpr_static(cNUM8, 64, 64, 8, NUM8_cimage); X Xstatic short NUM9_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/9" X#else X#include "tiles/9" X#endif RDRUNNER X}; Xmpr_static(cNUM9, 64, 64, 8, NUM9_cimage); X X/* Number tiles (B/W) */ X Xstatic short NUM0_image[] = { X#include "tiles/bandw/0" X}; Xmpr_static(NUM0, 64, 64, 1, NUM0_image); X Xstatic short NUM1_image[] = { X#include "tiles/bandw/1" X}; Xmpr_static(NUM1, 64, 64, 1, NUM1_image); X Xstatic short NUM2_image[] = { X#include "tiles/bandw/2" X}; Xmpr_static(NUM2, 64, 64, 1, NUM2_image); X Xstatic short NUM3_image[] = { X#include "tiles/bandw/3" X}; Xmpr_static(NUM3, 64, 64, 1, NUM3_image); X Xstatic short NUM4_image[] = { X#include "tiles/bandw/4" X}; Xmpr_static(NUM4, 64, 64, 1, NUM4_image); X Xstatic short NUM5_image[] = { X#include "tiles/bandw/5" X}; Xmpr_static(NUM5, 64, 64, 1, NUM5_image); X Xstatic short NUM6_image[] = { X#include "tiles/bandw/6" X}; Xmpr_static(NUM6, 64, 64, 1, NUM6_image); X Xstatic short NUM7_image[] = { X#include "tiles/bandw/7" X}; Xmpr_static(NUM7, 64, 64, 1, NUM7_image); X Xstatic short NUM8_image[] = { X#include "tiles/bandw/8" X}; Xmpr_static(NUM8, 64, 64, 1, NUM8_image); X Xstatic short NUM9_image[] = { X#include "tiles/bandw/9" X}; Xmpr_static(NUM9, 64, 64, 1, NUM9_image); X X/* Playing Tiles (color) */ X Xstatic short BLANK_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/blank" X#else X#include "tiles/blank" X#endif RDRUNNER X}; Xmpr_static(cBLANK, 64, 64, 8, BLANK_cimage); X Xstatic short BAM1_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam1" X#else X#include "tiles/bam1" X#endif RDRUNNER X}; Xmpr_static(cBAM1, 64, 64, 8, BAM1_cimage); X Xstatic short BAM2_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam2" X#else X#include "tiles/bam2" X#endif RDRUNNER X}; Xmpr_static(cBAM2, 64, 64, 8, BAM2_cimage); X Xstatic short BAM3_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam3" X#else X#include "tiles/bam3" X#endif RDRUNNER X}; Xmpr_static(cBAM3, 64, 64, 8, BAM3_cimage); X Xstatic short BAM4_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam4" X#else X#include "tiles/bam4" X#endif RDRUNNER X}; Xmpr_static(cBAM4, 64, 64, 8, BAM4_cimage); X Xstatic short BAM5_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam5" X#else X#include "tiles/bam5" X#endif RDRUNNER X}; Xmpr_static(cBAM5, 64, 64, 8, BAM5_cimage); X Xstatic short BAM6_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam6" X#else X#include "tiles/bam6" X#endif RDRUNNER X}; Xmpr_static(cBAM6, 64, 64, 8, BAM6_cimage); X Xstatic short BAM7_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam7" X#else X#include "tiles/bam7" X#endif RDRUNNER X}; Xmpr_static(cBAM7, 64, 64, 8, BAM7_cimage); X Xstatic short BAM8_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam8" X#else X#include "tiles/bam8" X#endif RDRUNNER X}; Xmpr_static(cBAM8, 64, 64, 8, BAM8_cimage); X Xstatic short BAM9_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/bam9" X#else X#include "tiles/bam9" X#endif RDRUNNER X}; Xmpr_static(cBAM9, 64, 64, 8, BAM9_cimage); X Xstatic short DOT1_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ1" X#else X#include "tiles/circ1" X#endif RDRUNNER X}; Xmpr_static(cDOT1, 64, 64, 8, DOT1_cimage); X Xstatic short DOT2_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ2" X#else X#include "tiles/circ2" X#endif RDRUNNER X}; Xmpr_static(cDOT2, 64, 64, 8, DOT2_cimage); X Xstatic short DOT3_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ3" X#else X#include "tiles/circ3" X#endif RDRUNNER X}; Xmpr_static(cDOT3, 64, 64, 8, DOT3_cimage); X Xstatic short DOT4_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ4" X#else X#include "tiles/circ4" X#endif RDRUNNER X}; Xmpr_static(cDOT4, 64, 64, 8, DOT4_cimage); X Xstatic short DOT5_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ5" X#else X#include "tiles/circ5" X#endif RDRUNNER X}; Xmpr_static(cDOT5, 64, 64, 8, DOT5_cimage); X Xstatic short DOT6_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ6" X#else X#include "tiles/circ6" X#endif RDRUNNER X}; Xmpr_static(cDOT6, 64, 64, 8, DOT6_cimage); X Xstatic short DOT7_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ7" X#else X#include "tiles/circ7" X#endif RDRUNNER X}; Xmpr_static(cDOT7, 64, 64, 8, DOT7_cimage); X Xstatic short DOT8_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ8" X#else X#include "tiles/circ8" X#endif RDRUNNER X}; Xmpr_static(cDOT8, 64, 64, 8, DOT8_cimage); X Xstatic short DOT9_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/circ9" X#else X#include "tiles/circ9" X#endif RDRUNNER X}; Xmpr_static(cDOT9, 64, 64, 8, DOT9_cimage); X Xstatic short CHA1_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char1" X#else X#include "tiles/char1" X#endif RDRUNNER X}; Xmpr_static(cCHA1, 64, 64, 8, CHA1_cimage); X Xstatic short CHA2_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char2" X#else X#include "tiles/char2" X#endif RDRUNNER X}; Xmpr_static(cCHA2, 64, 64, 8, CHA2_cimage); X Xstatic short CHA3_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char3" X#else X#include "tiles/char3" X#endif RDRUNNER X}; Xmpr_static(cCHA3, 64, 64, 8, CHA3_cimage); X Xstatic short CHA4_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char4" X#else X#include "tiles/char4" X#endif RDRUNNER X}; Xmpr_static(cCHA4, 64, 64, 8, CHA4_cimage); X Xstatic short CHA5_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char5" X#else X#include "tiles/char5" X#endif RDRUNNER X}; Xmpr_static(cCHA5, 64, 64, 8, CHA5_cimage); X Xstatic short CHA6_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char6" X#else X#include "tiles/char6" X#endif RDRUNNER X}; Xmpr_static(cCHA6, 64, 64, 8, CHA6_cimage); X Xstatic short CHA7_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char7" X#else X#include "tiles/char7" X#endif RDRUNNER X}; Xmpr_static(cCHA7, 64, 64, 8, CHA7_cimage); X Xstatic short CHA8_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char8" X#else X#include "tiles/char8" X#endif RDRUNNER X}; Xmpr_static(cCHA8, 64, 64, 8, CHA8_cimage); X Xstatic short CHA9_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/char9" X#else X#include "tiles/char9" X#endif RDRUNNER X}; Xmpr_static(cCHA9, 64, 64, 8, CHA9_cimage); X Xstatic short EAST_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/c_east" X#else X#include "tiles/c_east" X#endif RDRUNNER X}; Xmpr_static(cEAST, 64, 64, 8, EAST_cimage); X Xstatic short WEST_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/c_west" X#else X#include "tiles/c_west" X#endif RDRUNNER X}; Xmpr_static(cWEST, 64, 64, 8, WEST_cimage); X Xstatic short SOUT_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/c_south" X#else X#include "tiles/c_south" X#endif RDRUNNER X}; Xmpr_static(cSOUT, 64, 64, 8, SOUT_cimage); X Xstatic short NORT_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/c_north" X#else X#include "tiles/c_north" X#endif RDRUNNER X}; Xmpr_static(cNORT, 64, 64, 8, NORT_cimage); X Xstatic short GRED_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/d_green" X#else X#include "tiles/d_green" X#endif RDRUNNER X}; Xmpr_static(cGRED, 64, 64, 8, GRED_cimage); X Xstatic short REDD_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/d_red" X#else X#include "tiles/d_red" X#endif RDRUNNER X}; Xmpr_static(cREDD, 64, 64, 8, REDD_cimage); X Xstatic short WHTD_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/d_white" X#else X#include "tiles/d_white" X#endif RDRUNNER X}; Xmpr_static(cWHTD, 64, 64, 8, WHTD_cimage); X Xstatic short AUT_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/s_autumn" X#else X#include "tiles/s_autumn" X#endif RDRUNNER X}; Xmpr_static( cAUT, 64, 64, 8, AUT_cimage); X Xstatic short SPR_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/s_spring" X#else X#include "tiles/s_spring" X#endif RDRUNNER X}; Xmpr_static( cSPR, 64, 64, 8, SPR_cimage); X Xstatic short SUM_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/s_summer" X#else X#include "tiles/s_summer" X#endif RDRUNNER X}; Xmpr_static( cSUM, 64, 64, 8, SUM_cimage); X Xstatic short WIN_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/s_winter" X#else X#include "tiles/s_winter" X#endif RDRUNNER X}; Xmpr_static( cWIN, 64, 64, 8, WIN_cimage); X Xstatic short BAM_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/f_bam" X#else X#include "tiles/f_bam" X#endif RDRUNNER X}; Xmpr_static( cBAM, 64, 64, 8, BAM_cimage); X Xstatic short MUM_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/f_mum" X#else X#include "tiles/f_mum" X#endif RDRUNNER X}; Xmpr_static( cMUM, 64, 64, 8, MUM_cimage); X Xstatic short ORC_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/f_orch" X#else X#include "tiles/f_orch" X#endif RDRUNNER X}; Xmpr_static( cORC, 64, 64, 8, ORC_cimage); X Xstatic short PLM_cimage[] = { X#ifdef RDRUNNER X#include "tiles/rdrunner/f_plum" X#else X#include "tiles/f_plum" X#endif RDRUNNER X}; Xmpr_static( cPLM, 64, 64, 8, PLM_cimage); X X X/* Playing Tiles (B/W) */ X Xstatic short BLANK_image[] = { X#include "tiles/bandw/blank" X}; Xmpr_static(BLANK, 64, 64, 1, BLANK_image); X Xstatic short BAM1_image[] = { X#include "tiles/bandw/bam1" X}; Xmpr_static(BAM1, 64, 64, 1, BAM1_image); X Xstatic short BAM2_image[] = { X#include "tiles/bandw/bam2" X}; Xmpr_static(BAM2, 64, 64, 1, BAM2_image); X Xstatic short BAM3_image[] = { X#include "tiles/bandw/bam3" X}; Xmpr_static(BAM3, 64, 64, 1, BAM3_image); X Xstatic short BAM4_image[] = { X#include "tiles/bandw/bam4" X}; Xmpr_static(BAM4, 64, 64, 1, BAM4_image); X Xstatic short BAM5_image[] = { X#include "tiles/bandw/bam5" X}; Xmpr_static(BAM5, 64, 64, 1, BAM5_image); X Xstatic short BAM6_image[] = { X#include "tiles/bandw/bam6" X}; Xmpr_static(BAM6, 64, 64, 1, BAM6_image); X Xstatic short BAM7_image[] = { X#include "tiles/bandw/bam7" X}; Xmpr_static(BAM7, 64, 64, 1, BAM7_image); X Xstatic short BAM8_image[] = { X#include "tiles/bandw/bam8" X}; Xmpr_static(BAM8, 64, 64, 1, BAM8_image); X Xstatic short BAM9_image[] = { X#include "tiles/bandw/bam9" X}; Xmpr_static(BAM9, 64, 64, 1, BAM9_image); X Xstatic short DOT1_image[] = { X#include "tiles/bandw/circ1" X}; Xmpr_static(DOT1, 64, 64, 1, DOT1_image); X Xstatic short DOT2_image[] = { X#include "tiles/bandw/circ2" X}; Xmpr_static(DOT2, 64, 64, 1, DOT2_image); X Xstatic short DOT3_image[] = { X#include "tiles/bandw/circ3" X}; Xmpr_static(DOT3, 64, 64, 1, DOT3_image); X Xstatic short DOT4_image[] = { X#include "tiles/bandw/circ4" X}; Xmpr_static(DOT4, 64, 64, 1, DOT4_image); X Xstatic short DOT5_image[] = { X#include "tiles/bandw/circ5" X}; Xmpr_static(DOT5, 64, 64, 1, DOT5_image); X Xstatic short DOT6_image[] = { X#include "tiles/bandw/circ6" X}; Xmpr_static(DOT6, 64, 64, 1, DOT6_image); X Xstatic short DOT7_image[] = { X#include "tiles/bandw/circ7" X}; Xmpr_static(DOT7, 64, 64, 1, DOT7_image); X Xstatic short DOT8_image[] = { X#include "tiles/bandw/circ8" X}; Xmpr_static(DOT8, 64, 64, 1, DOT8_image); X Xstatic short DOT9_image[] = { X#include "tiles/bandw/circ9" X}; Xmpr_static(DOT9, 64, 64, 1, DOT9_image); X Xstatic short CHA1_image[] = { X#include "tiles/bandw/char1" X}; Xmpr_static(CHA1, 64, 64, 1, CHA1_image); X Xstatic short CHA2_image[] = { X#include "tiles/bandw/char2" X}; Xmpr_static(CHA2, 64, 64, 1, CHA2_image); X Xstatic short CHA3_image[] = { X#include "tiles/bandw/char3" X}; Xmpr_static(CHA3, 64, 64, 1, CHA3_image); X Xstatic short CHA4_image[] = { X#include "tiles/bandw/char4" X}; Xmpr_static(CHA4, 64, 64, 1, CHA4_image); X Xstatic short CHA5_image[] = { X#include "tiles/bandw/char5" X}; Xmpr_static(CHA5, 64, 64, 1, CHA5_image); X Xstatic short CHA6_image[] = { X#include "tiles/bandw/char6" X}; Xmpr_static(CHA6, 64, 64, 1, CHA6_image); X Xstatic short CHA7_image[] = { X#include "tiles/bandw/char7" X}; Xmpr_static(CHA7, 64, 64, 1, CHA7_image); X Xstatic short CHA8_image[] = { X#include "tiles/bandw/char8" X}; Xmpr_static(CHA8, 64, 64, 1, CHA8_image); X Xstatic short CHA9_image[] = { X#include "tiles/bandw/char9" X}; Xmpr_static(CHA9, 64, 64, 1, CHA9_image); X Xstatic short EAST_image[] = { X#include "tiles/bandw/c_east" X}; Xmpr_static(EAST, 64, 64, 1, EAST_image); X Xstatic short WEST_image[] = { X#include "tiles/bandw/c_west" X}; Xmpr_static(WEST, 64, 64, 1, WEST_image); X Xstatic short SOUT_image[] = { X#include "tiles/bandw/c_south" X}; Xmpr_static(SOUT, 64, 64, 1, SOUT_image); X Xstatic short NORT_image[] = { X#include "tiles/bandw/c_north" X}; Xmpr_static(NORT, 64, 64, 1, NORT_image); X Xstatic short GRED_image[] = { X#include "tiles/bandw/d_green" X}; Xmpr_static(GRED, 64, 64, 1, GRED_image); X Xstatic short REDD_image[] = { X#include "tiles/bandw/d_red" X}; Xmpr_static(REDD, 64, 64, 1, REDD_image); X Xstatic short WHTD_image[] = { X#include "tiles/bandw/d_white" X}; Xmpr_static(WHTD, 64, 64, 1, WHTD_image); X Xstatic short AUT_image[] = { X#include "tiles/bandw/s_autumn" X}; Xmpr_static( AUT, 64, 64, 1, AUT_image); X Xstatic short SPR_image[] = { X#include "tiles/bandw/s_spring" X}; Xmpr_static( SPR, 64, 64, 1, SPR_image); X Xstatic short SUM_image[] = { X#include "tiles/bandw/s_summer" X}; Xmpr_static( SUM, 64, 64, 1, SUM_image); X Xstatic short WIN_image[] = { X#include "tiles/bandw/s_winter" X}; Xmpr_static( WIN, 64, 64, 1, WIN_image); X Xstatic short BAM_image[] = { X#include "tiles/bandw/f_bam" X}; Xmpr_static( BAM, 64, 64, 1, BAM_image); X Xstatic short MUM_image[] = { X#include "tiles/bandw/f_mum" X}; Xmpr_static( MUM, 64, 64, 1, MUM_image); X Xstatic short ORC_image[] = { X#include "tiles/bandw/f_orch" X}; Xmpr_static( ORC, 64, 64, 1, ORC_image); X Xstatic short PLM_image[] = { X#include "tiles/bandw/f_plum" X}; Xmpr_static( PLM, 64, 64, 1, PLM_image); END_OF_icons.c if test 15768 -ne `wc -c <icons.c`; then echo shar: \"icons.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f mahjongg.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"mahjongg.c\" else echo shar: Extracting \"mahjongg.c\" \(27074 characters\) sed "s/^X//" >mahjongg.c <<'END_OF_mahjongg.c' X/* X * Copyright 1988, Mark Holm X * Exceptions X * X * Acknowledgments to Dorothy Robinson for her artistic X * abilities in drawing the icons and to Jim Batch for X * technical support and graphical concepts (which I abandoned in favor X * of the easy way out). X * X * Permission is given to copy and distribute for non-profit purposes. X * X * Revision History X * ---------------- X * X * 1.0 Initial release X * X * 1.1 removed non-working reverse video cursor code X * added blank tiles for hidden tiles to stop cheating. X */ X X#ifndef lint Xstatic char *rcs = "$header$ Copyright 1988 Mark Holm"; X#endif !lint X X#include <stdio.h> X#include <sys/types.h> X#include <sys/time.h> X#include <sys/ioctl.h> X#include <sys/file.h> X#include <sun/fbio.h> X#include <suntool/sunview.h> X#include <suntool/panel.h> X#include <suntool/canvas.h> X#include <suntool/icon.h> X#include <sunwindow/notify.h> X#include <pixrect/pixrect.h> X X#include "mahjongg.h" X Xvoid die(); Xvoid build_image(); Xvoid place_tiles(); XPixrect *color_button(); X X X/* Black and white closed icon image */ X Xstatic short icon_image[] = { X#include "mahjongg.icon" X}; XDEFINE_ICON_FROM_IMAGE(icon, icon_image); /* Black and white icon */ Xstruct icon *cicon; /* storage for color icon */ X X/* externals */ X Xextern void quit_proc(); Xextern void undo_proc(); Xextern void new_proc(); Xextern void again_proc(); Xextern void help_proc(); Xextern void board_num_proc(); Xextern void play_back_proc(); Xextern void play_event_proc(); X Xextern short stick_image[]; Xextern int undo_count; X X/* overlap globals */ X X XFrame main_frame; XPanel play_panel, message_panel; XPanel_item TL_hundred; XPanel_item TL_ten; XPanel_item TL_one; XPanel_item message; XPanel_item tile[144]; XPanel_item tiles_left[3]; XCursor play_cursor; Xboolean BandW = FALSE; XTiles *board[144]; XSelected selected[2]; XSelected last_item; Xint tile_count; Xchar state[256]; X X/* local globals */ X XPixwin *frame_pw; XPanel_item tile_message; XPanel_item cp1; XPanel_item cp2; XPanel_item cp3; XPanel_item cp4; XPanel_item help; XPanel_item again; XPanel_item new; XPanel_item quit; XPanel_item undo; XPanel_item board_num; Xstruct timeval *tp; Xstruct timezone *tz; Xint seed; X X/* define color map */ X X#include "color.h" X Xmain(argc, argv) Xint argc; Xchar **argv; X{ X struct pixfont *panel_font; X struct pixfont *dummy_font; X int i; X int middle; X struct fbtype fb; X int open_stat; X X /* determine type of frame buffer and set BandW accordingly */ X X open_stat = open("/dev/fb", O_RDONLY); X (void) ioctl(open_stat, FBIOGTYPE, &fb); X X if ( (fb.fb_type == FBTYPE_SUN1BW) || X (fb.fb_type == FBTYPE_SUN2BW) || X (fb.fb_type == FBTYPE_SUN3BW) || X (fb.fb_type == FBTYPE_SUN4BW) ) X BandW = TRUE; X X /* initialize random number generator seed */ X X tp = (struct timeval *) malloc(sizeof(struct timeval)); X tz = (struct timezone *) malloc(sizeof(struct timezone)); X gettimeofday(tp, tz); X (void) initstate((unsigned) (tp->tv_sec % 255), state, 256); /* initialize random state array */ X seed = RANDOM(20011); X free(tp); X free(tz); X X /* create main frame */ X X main_frame = window_create(NULL, FRAME, X FRAME_SHOW_LABEL, FALSE, X FRAME_SUBWINDOWS_ADJUSTABLE, FALSE, X FRAME_ICON, &icon, X FRAME_ARGC_PTR_ARGV, &argc, argv, X WIN_HEIGHT, FRAME_Y_MAX, X WIN_WIDTH, FRAME_X_MAX, X 0); X X /* parse arguments */ X for(argc--, argv++; argc > 0; argc--, argv++) X if (argv[0][0] = '-') X switch (argv[0][1]) { X case 'c': /* force color */ X BandW = FALSE; X break; X case 'b': /* force black and white */ X BandW = TRUE; X break; X case 'n': /* set board number */ X if(argc-- == 0) X die("Usage: mahjongg [-b] [-c] [-n #]\n", 0); X argv++; X sscanf(argv[0] , "%d", &seed); X if (seed > 20011) { X printf("Board numbers must be < 20011"); X seed %= 20011; X } X break; X default: X die("Usage: mahjongg [-b] [-c] [-n #]\n", 0); X break; X } X else X die("Usage: mahjongg [-b] [-c] [-n #]\n", 0); X X /* if color then apply color icon to window icon */ X X if(!BandW) { X cicon = (struct icon *) window_get(main_frame, FRAME_ICON); X cicon->ic_mpr = &cicon_image; X } X X /* get pixwin to apply color maps */ X X frame_pw = (Pixwin *) window_get(main_frame, WIN_PIXWIN, 0); X X /* apply color maps to frame pixwin */ X X pw_setcmsname(frame_pw, "mahjongg"); X pw_putcolormap(frame_pw, 0, MAX_COLORS+1, red, green, blue); X if (BandW) X pw_putcolormap(frame_pw, 0, 1, &(red[WHITE]), &(green[WHITE]), &(blue[WHITE])); X X /* set inheritable colors */ X X window_set(main_frame, FRAME_INHERIT_COLORS, TRUE, 0); X X /* set up the panel on the right hand side */ X X dummy_font = pf_open("/usr/lib/fonts/fixedwidthfonts/screen.r.7"); X panel_font = pf_open("/usr/lib/fonts/fixedwidthfonts/screen.b.14"); X message_panel = window_create(main_frame, PANEL, X WIN_HEIGHT, MESS_Y_MAX, X WIN_WIDTH, MESS_X_MAX, X WIN_X, 0, X WIN_Y, 0, X WIN_FONT, dummy_font, X 0); X X /* determine middle of panel */ X X middle = (MESS_X_MAX / 2); X X /* create tile counters */ X X TL_hundred = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_IMAGE, X (BandW) ? &NUM1 : &cNUM1, X PANEL_ITEM_Y, ATTR_ROW(7), X PANEL_ITEM_X, X_LOC, X 0); X TL_ten = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_IMAGE, X (BandW) ? &NUM4 : &cNUM4, X PANEL_ITEM_Y, ATTR_ROW(7), X PANEL_ITEM_X, X_LOC + W_BASE_TILE, X 0); X TL_one = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_IMAGE, X (BandW) ? &NUM4 : &cNUM4, X PANEL_ITEM_Y, ATTR_ROW(7), X PANEL_ITEM_X, X_LOC + (W_BASE_TILE * 2), X 0); X X /* create game label messages */ X X cp1 = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_FONT, panel_font, X PANEL_LABEL_STRING, "MAHJONGG", X PANEL_ITEM_Y, ATTR_ROW(1) - 11, X PANEL_ITEM_X, middle - 65, X 0); X cp2 = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_FONT, dummy_font, X PANEL_LABEL_STRING, "Copyright 1988", X PANEL_ITEM_Y, ATTR_ROW(2), X PANEL_ITEM_X, middle - 70, X 0); X cp3 = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_FONT, dummy_font, X PANEL_LABEL_STRING, "Mark A. Holm", X PANEL_ITEM_Y, ATTR_ROW(3), X PANEL_ITEM_X, middle - 65, X 0); X cp3 = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_FONT, dummy_font, X PANEL_LABEL_STRING, "Exceptions", X PANEL_ITEM_Y, ATTR_ROW(4), X PANEL_ITEM_X, middle - 60, X 0); X tile_message = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_FONT, panel_font, X PANEL_LABEL_STRING, "Tiles Remaining", X PANEL_ITEM_Y, ATTR_ROW(5), X PANEL_ITEM_X, X_LOC + 20, X 0); X X /* create seed item */ X X board_num = panel_create_item(message_panel, PANEL_TEXT, X PANEL_LABEL_FONT, panel_font, X PANEL_VALUE_FONT, panel_font, X PANEL_LABEL_STRING, "Board Number : ", X PANEL_VALUE, "", X PANEL_ITEM_Y, ATTR_ROW(6), X PANEL_ITEM_X, middle, X PANEL_NOTIFY_PROC, board_num_proc, X 0); X X /* create control buttons */ X X help = panel_create_item(message_panel, PANEL_BUTTON, X PANEL_ITEM_Y, ATTR_ROW(8), X PANEL_ITEM_X, middle, X PANEL_LABEL_IMAGE, X color_button(panel_button_image(message_panel, X "HELP", X 6, X panel_font), X CYAN), X PANEL_NOTIFY_PROC, help_proc, X 0); X X again = panel_create_item(message_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X color_button(panel_button_image(message_panel, X "AGAIN", X 6, X panel_font), X YELLOW), X PANEL_NOTIFY_PROC, again_proc, X 0); X X new = panel_create_item(message_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X color_button(panel_button_image(message_panel, X "NEW", X 6, X panel_font), X GREEN), X PANEL_NOTIFY_PROC, new_proc, X 0); X X undo = panel_create_item(message_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X color_button(panel_button_image(message_panel, X "UNDO", X 6, X panel_font), X MAGENTA), X PANEL_NOTIFY_PROC, undo_proc, X PANEL_SHOW_ITEM, TRUE, X 0); X X quit = panel_create_item(message_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X color_button(panel_button_image(message_panel, X "QUIT", X 6, X panel_font), X RED), X PANEL_NOTIFY_PROC, quit_proc, X 0); X X /* place conceled message */ X X message = panel_create_item(message_panel, PANEL_MESSAGE, X PANEL_LABEL_FONT, panel_font, X PANEL_ITEM_Y, ATTR_ROW(10), X PANEL_ITEM_X, middle, X PANEL_LABEL_STRING, "", X PANEL_SHOW_ITEM, FALSE, X 0); X X /* create cursor for play panel*/ X X play_cursor = cursor_create(CURSOR_IMAGE, &stick, X CURSOR_XHOT, 8, X CURSOR_YHOT, 8, X 0); X X if (!BandW) { X X cursor_set(play_cursor, CURSOR_OP, X (PIX_SRC^PIX_DST) | PIX_COLOR( YELLOW ), X 0); X } X X /* set up panel for the play */ X X play_panel = window_create(main_frame, PANEL, X WIN_CONSUME_PICK_EVENTS, X WIN_NO_EVENTS, WIN_MOUSE_BUTTONS, WIN_UP_EVENTS, WIN_LEFT_KEYS, 0, X WIN_HEIGHT, PLAY_Y_MAX, X WIN_WIDTH, PLAY_X_MAX, X WIN_X, 0, X WIN_Y, MESS_Y_MAX + BORDER, X WIN_CURSOR, play_cursor, X PANEL_PAINT, PANEL_NONE, X PANEL_BACKGROUND_PROC, play_back_proc, X PANEL_EVENT_PROC, play_event_proc, X CANVAS_RETAINED, TRUE, X 0); X X window_set(message_panel, WIN_INPUT_DESIGNEE, X window_get(play_panel, WIN_DEVICE_NUMBER), X 0); X X /* build board image */ X X build_image(FALSE); X place_tiles(TRUE); X X /* start main processing */ X X window_main_loop(main_frame); X exit(0); X} X X X/* die because of some UNIX error */ Xvoid die(message, pperr) Xchar *message; Xint pperr; X{ X fprintf(stderr, message); X if (pperr) X perror("mahjongg"); X exit(1); X} X Xvoid place_tiles(newboard) Xboolean newboard; X X{ X int i; X int j; X int k; X int x_loc; X int y_loc; X X /* check if not new and destroy existing panel buttons */ X X if (!newboard) X for(i = 0; i < 144; i++) X panel_destroy_item(tile[i]); X X /* place tiles */ X X /* row 1 level 1 */ X X for(i = 0, X x_loc = COL2; X i < 12; X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW1, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* row 2 level 1 */ X X for(x_loc = COL4, X j = 0; X j < 8; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW2, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* row 3 level 1 */ X X for(x_loc = COL3, X j = 0; X j < 10; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW3, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* row 4 1/2 level 1 */ X X /* Left */ X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X COL1, X PANEL_ITEM_Y, X ROW4pt5, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X i++; /* increment tile counter */ X X /* row 4 level 1 */ X X for(x_loc = COL2, X j = 0; X j < 12; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW4, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* row 5 level 1 */ X X for(x_loc = COL2, X j = 0; X j < 12; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW5, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X /* row 4 1/2 level 1 */ X X /* Right */ X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X COL14, X PANEL_ITEM_Y, X ROW4pt5, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X i++; /* increment tile counter */ X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X COL15, X PANEL_ITEM_Y, X ROW4pt5, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X i++; /* increment tile counter */ X X /* row 6 level 1 */ X X for(x_loc = COL3, X j = 0; X j < 10; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW6, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* row 7 level 1 */ X X for(x_loc = COL4, X j = 0; X j < 8; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW7, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* row 8 level 1 */ X X for(j = 0, X x_loc = COL2; X j < 12; X j++, X i++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X ROW8, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* rows 1-6 level 2 */ X X for(y_loc = ROW2 - B_TILE_SHADOW, X j = 0; X j < 6; X j++, X y_loc += H_BASE_TILE) X X for(x_loc = COL5 - S_TILE_SHADOW, X k = 0; X k < 6; X i++, X k++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X y_loc, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* rows 1-4 level 3 */ X X for(y_loc = ROW3 - (B_TILE_SHADOW * 2), X j = 0; X j < 4; X j++, X y_loc += H_BASE_TILE) X X for(x_loc = COL6 - (S_TILE_SHADOW * 2), X k = 0; X k < 4; X i++, X k++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X (board[i]->top_free) ? X board[i]->image : X (BandW) ? &BLANK : &cBLANK, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X y_loc, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* rows 1-2 level 4 */ X X for(y_loc = ROW4 - (B_TILE_SHADOW * 3), X j = 0; X j < 2; X j++, X y_loc += H_BASE_TILE) X X for(x_loc = COL7 - (S_TILE_SHADOW * 3), X k = 0; X k < 2; X i++, X k++, X x_loc += W_BASE_TILE) X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X board[i]->image, X PANEL_ITEM_X, X x_loc, X PANEL_ITEM_Y, X y_loc, X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* Cap tile */ X X tile[i] = panel_create_item(play_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, X board[i]->image, X PANEL_ITEM_X, X COL7pt5 - (S_TILE_SHADOW * 4), X PANEL_ITEM_Y, X ROW4pt5 - (B_TILE_SHADOW * 4), X PANEL_SHOW_ITEM, X TRUE, X PANEL_CLIENT_DATA, X (caddr_t) board[i], X 0); X X /* paint panel */ X X panel_paint(play_panel, PANEL_NO_CLEAR); X X /* clear stand_by message and release input mask */ X X panel_set(message, PANEL_SHOW_ITEM, X FALSE, X 0); X X window_set(message_panel, WIN_CONSUME_PICK_EVENTS, X WIN_MOUSE_BUTTONS, 0, X 0); X window_set(message_panel, WIN_CONSUME_KBD_EVENT, X WIN_ASCII_EVENTS, 0, 0); X X cursor_set(play_cursor, CURSOR_IMAGE, &stick, 0); X window_set(play_panel, WIN_CURSOR, play_cursor, 0); X X} X Xvoid build_image(oldimage) Xboolean oldimage; X X{ Xint i; Xint j; Xint pool[42]; Xboolean ok; Xboolean dir; Xchar seed_text[80]; X X /* initialize selected structures */ X X selected[0].filled = FALSE; X selected[1].filled = FALSE; X last_item.filled = FALSE; X undo_count = -1; X X panel_set(message, PANEL_SHOW_ITEM, X FALSE, X 0); X panel_set(TL_hundred, PANEL_LABEL_IMAGE, X (BandW) ? &NUM1 : &cNUM1, X PANEL_SHOW_ITEM, X TRUE, X 0); X panel_set(TL_ten , PANEL_LABEL_IMAGE, X (BandW) ? &NUM4 : &cNUM4, X PANEL_SHOW_ITEM, X TRUE, X 0); X panel_set(TL_one , PANEL_LABEL_IMAGE, X (BandW) ? &NUM4 : &cNUM4, X 0); X X /* display current seed in text item */ X X sprintf(seed_text, "%d", seed); X panel_set(board_num, PANEL_VALUE, seed_text, 0); X X /* show stand_by message while building image and grab all input */ X X panel_set(message, PANEL_LABEL_STRING, X "Building board. Please wait.", X PANEL_SHOW_ITEM, X TRUE, 0); X X window_set(message_panel, WIN_IGNORE_PICK_EVENTS, X WIN_MOUSE_BUTTONS, 0, 0); X window_set(message_panel, WIN_IGNORE_KBD_EVENT, X WIN_ASCII_EVENTS, 0, 0); X cursor_set(play_cursor, CURSOR_IMAGE, &wait, 0); X window_set(play_panel, WIN_CURSOR, play_cursor, 0); X X /* initialize random number counter */ X X (void) srandom(seed); X X tile_count = 144; X X /* initialize tile pool */ X for(i = 0; i < 34; i++) pool[i] = 4; X for(; i < 42; i++) pool[i] = 1; X X /* assign values to each location. Board is built from upper left * X * to lower right, bottom to top. Exception are left tile for row * X * 4pt5 is before rows 4 and 5, and right tiles for row 4.5 are * X * after rows 4 and 5 */ X X for(j = 0; j < 144; j++) { X if (board[j] == NULL) /* intialize array */ X board[j] = (Tiles *) malloc(sizeof(Tiles)); X X if (!oldimage) { /* not repeating last board */ X X /* Randomly seed index into pool. Randomly * X * run up or down list until unused tile * X * is found or end of list. If end of * X * list reseed and run in opposite * X * direction in list until unused tile is * X * found. If beginning of list found, * X * start over. */ X X ok = FALSE; X while (ok == FALSE) { X i = RANDOM(41); X /* Up, up, up! */ X dir = random()&01; X while ((i < 42 || i >=0) && pool[i] == 0) (dir) ? i++ : i--; X if (i == 42 || i < 0) { /* Thud! Reverse march! */ X i = RANDOM(41); X while ((i < 42 || i >= 0) && pool[i] == 0) (dir) ? i-- : i++; X } X if (i == 42 || i < 0) continue; /* Missed! try again */ X pool[i]--; X ok = TRUE; X } X X /* all flowers and all seasons */ X X board[j]->value = (i >= 34) ? ((i >= 38) ? 35 : 34) : i; X switch(i) { X X case 0: board[j]->image = (BandW) ? &DOT1 : &cDOT1; X break; X case 1: board[j]->image = (BandW) ? &DOT2 : &cDOT2; X break; X case 2: board[j]->image = (BandW) ? &DOT3 : &cDOT3; X break; X case 3: board[j]->image = (BandW) ? &DOT4 : &cDOT4; X break; X case 4: board[j]->image = (BandW) ? &DOT5 : &cDOT5; X break; X case 5: board[j]->image = (BandW) ? &DOT6 : &cDOT6; X break; X case 6: board[j]->image = (BandW) ? &DOT7 : &cDOT7; X break; X case 7: board[j]->image = (BandW) ? &DOT8 : &cDOT8; X break; X case 8: board[j]->image = (BandW) ? &DOT9 : &cDOT9; X break; X case 9: board[j]->image = (BandW) ? &BAM1 : &cBAM1; X break; X case 10: board[j]->image = (BandW) ? &BAM2 : &cBAM2; X break; X case 11: board[j]->image = (BandW) ? &BAM3 : &cBAM3; X break; X case 12: board[j]->image = (BandW) ? &BAM4 : &cBAM4; X break; X case 13: board[j]->image = (BandW) ? &BAM5 : &cBAM5; X break; X case 14: board[j]->image = (BandW) ? &BAM6 : &cBAM6; X break; X case 15: board[j]->image = (BandW) ? &BAM7 : &cBAM7; X break; X case 16: board[j]->image = (BandW) ? &BAM8 : &cBAM8; X break; X case 17: board[j]->image = (BandW) ? &BAM9 : &cBAM9; X break; X case 18: board[j]->image = (BandW) ? &CHA1 : &cCHA1; X break; X case 19: board[j]->image = (BandW) ? &CHA2 : &cCHA2; X break; X case 20: board[j]->image = (BandW) ? &CHA3 : &cCHA3; X break; X case 21: board[j]->image = (BandW) ? &CHA4 : &cCHA4; X break; X case 22: board[j]->image = (BandW) ? &CHA5 : &cCHA5; X break; X case 23: board[j]->image = (BandW) ? &CHA6 : &cCHA6; X break; X case 24: board[j]->image = (BandW) ? &CHA7 : &cCHA7; X break; X case 25: board[j]->image = (BandW) ? &CHA8 : &cCHA8; X break; X case 26: board[j]->image = (BandW) ? &CHA9 : &cCHA9; X break; X case 27: board[j]->image = (BandW) ? &GRED : &cGRED; X break; X case 28: board[j]->image = (BandW) ? &REDD : &cREDD; X break; X case 29: board[j]->image = (BandW) ? &WHTD : &cWHTD; X break; X case 30: board[j]->image = (BandW) ? &EAST : &cEAST; X break; X case 31: board[j]->image = (BandW) ? &WEST : &cWEST; X break; X case 32: board[j]->image = (BandW) ? &SOUT : &cSOUT; X break; X case 33: board[j]->image = (BandW) ? &NORT : &cNORT; X break; X case 34: board[j]->image = (BandW) ? &AUT : &cAUT; X break; X case 35: board[j]->image = (BandW) ? &SUM : &cSUM; X break; X case 36: board[j]->image = (BandW) ? &SPR : &cSPR; X break; X case 37: board[j]->image = (BandW) ? &WIN : &cWIN; X break; X case 38: board[j]->image = (BandW) ? &ORC : &cORC; X break; X case 39: board[j]->image = (BandW) ? &MUM : &cMUM; X break; X case 40: board[j]->image = (BandW) ? &BAM : &cBAM; X break; X case 41: board[j]->image = (BandW) ? &PLM : &cPLM; X break; X } X X } X /* establish default values */ X X board[j]->left_free = FALSE; X board[j]->right_free = FALSE; X board[j]->top_free = TRUE; X board[j]->left_next[0] = j - 1; X board[j]->left_next[1] = 999; X board[j]->right_next[0] = j + 1; X board[j]->right_next[1] = 999; X board[j]->covered[0] = 999; X board[j]->covered[1] = 999; X board[j]->covered[2] = 999; X board[j]->covered[3] = 999; X board[j]->removed = FALSE; X X /* setup special cases */ X X switch (j) { X case 139: X case 141: X board[j]->top_free = FALSE; X case 0: X case 12: X case 20: X case 30: X case 57: X case 67: X case 75: X case 87: X case 93: X case 99: X case 105: X case 111: X case 117: X case 123: X case 127: X case 131: X case 135: X board[j]->left_free = TRUE; X board[j]->left_next[0] = 999; X break; X case 140: X case 142: X board[j]->top_free = FALSE; X case 11: X case 19: X case 29: X case 56: X case 66: X case 74: X case 86: X case 92: X case 98: X case 104: X case 110: X case 116: X case 122: X case 126: X case 130: X case 134: X case 138: X board[j]->right_free = TRUE; X board[j]->right_next[0] = 999; X break; X case 143: X board[j]->right_free = TRUE; X board[j]->left_next[0] = 999; X board[j]->left_free = TRUE; X board[j]->right_next[0] = 999; X board[j]->covered[0] = 139; X board[j]->covered[1] = 140; X board[j]->covered[2] = 141; X board[j]->covered[3] = 142; X break; X case 42: X board[j]->right_next[0] = 55; X break; X case 43: X board[j]->left_next[0] = 30; X break; X case 55: X board[j]->left_next[1] = 42; X break; X } X X } X X /* special case (did not fit in above) */ X X board[30]->right_next[1] = 43; X X /* set top_free flags and covered pointers */ X X for(i = 87, j = 13; i < 143; i++, j++) { X board[i]->covered[0] = j; X board[j]->top_free = FALSE; X switch(j) { X case 97: X case 103: X case 109: X case 129: X j += 2; X break; X case 18: X case 64: X j += 3; X break; X case 27: X case 39: X j += 6; X break; X case 51: X j += 7; X break; X case 73: X j += 20; X break; X case 115: X j += 12; X break; X } X } X} X X/* This is the routine that returns the colored button image */ X XPixrect *color_button(pr,color) X struct pixrect *pr; X int color; X{ X struct pixrect *color_pr; X X if(pr == NULL) X return(NULL); X X /* if running in b/w mode return same pixrect */ X if (BandW) X return(pr); X X /* make new pixrect */ X color_pr = mem_create(pr->pr_size.x, pr->pr_size.y, 8); X X /* copy pr to color_pr with color added */ X pr_rop(color_pr, 0, 0, pr->pr_size.x, pr->pr_size.y, X PIX_SRC | PIX_COLOR( color ), X pr,0,0); X X return(color_pr); X} END_OF_mahjongg.c if test 27074 -ne `wc -c <mahjongg.c`; then echo shar: \"mahjongg.c\" unpacked with wrong size! fi # end of overwriting check fi if test ! -d tiles ; then echo shar: Creating directory \"tiles\" mkdir tiles fi if test ! -d tiles/bandw ; then echo shar: Creating directory \"tiles/bandw\" mkdir tiles/bandw fi if test -f tiles/bandw/mahjongg.cursor -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"tiles/bandw/mahjongg.cursor\" else echo shar: Extracting \"tiles/bandw/mahjongg.cursor\" \(315 characters\) sed "s/^X//" >tiles/bandw/mahjongg.cursor <<'END_OF_tiles/bandw/mahjongg.cursor' X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16 X * Copyright 1988, Mark Holm X * Exceptions X * X * Permission is given to copy and distribute for non-profit purposes. X * X */ X 0xF800,0xFC00,0xC600,0xDB00,0xD980,0x66C0,0x3660,0x1830, X 0x0C18,0x066C,0x0366,0x019B,0x00DB,0x0063,0x003F,0x001F END_OF_tiles/bandw/mahjongg.cursor if test 315 -ne `wc -c <tiles/bandw/mahjongg.cursor`; then echo shar: \"tiles/bandw/mahjongg.cursor\" unpacked with wrong size! fi # end of overwriting check fi if test ! -d tiles/rdrunner ; then echo shar: Creating directory \"tiles/rdrunner\" mkdir tiles/rdrunner fi echo shar: End of archive 1 \(of 38\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 38 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0