home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!ogicse!zephyr.ens.tek.com!master!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v15i006: gtetris2 - Generic Tetris for X11, V1.8, Part02/02
- Message-ID: <3734@master.CNA.TEK.COM>
- Date: 9 Oct 92 00:50:13 GMT
- Article-I.D.: master.3734
- Sender: news@master.CNA.TEK.COM
- Lines: 689
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: "Qiang Alex Zhao" <azhao@cs.arizona.edu>
- Posting-number: Volume 15, Issue 6
- Archive-name: gtetris2/Part02
- Supersedes: gtetris: Volume 15, Issue 1-2
- Environment: X11R4/5, Xlib
-
-
- #! /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 2 (of 2)."
- # Contents: COPYRIGHT Imakefile Makefile.std die.c tetris.c tetris.man
- # Wrapped by billr@saab on Thu Oct 8 17:46:30 1992
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'COPYRIGHT' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'COPYRIGHT'\"
- else
- echo shar: Extracting \"'COPYRIGHT'\" \(848 characters\)
- sed "s/^X//" >'COPYRIGHT' <<'END_OF_FILE'
- X# GENERIC X-WINDOW-BASED TETRIS
- X#
- X# Copyright (C) 1992 Qiang Alex Zhao
- X# Computer Science Dept, University of Arizona
- X# azhao@cs.arizona.edu
- X#
- X# All Rights Reserved
- X#
- X# Permission to use, copy, modify, and distribute this software and
- X# its documentation for any purpose and without fee is hereby granted,
- X# provided that the above copyright notice appear in all copies and
- X# that both that copyright notice and this permission notice appear in
- X# supporting documentation, and that the name of the author not be
- X# used in advertising or publicity pertaining to distribution of the
- X# software without specific, written prior permission.
- X#
- X# This program is distributed in the hope that it will be "playable",
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X#
- X
- END_OF_FILE
- if test 848 -ne `wc -c <'COPYRIGHT'`; then
- echo shar: \"'COPYRIGHT'\" unpacked with wrong size!
- fi
- # end of 'COPYRIGHT'
- fi
- if test -f 'Imakefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Imakefile'\"
- else
- echo shar: Extracting \"'Imakefile'\" \(1496 characters\)
- sed "s/^X//" >'Imakefile' <<'END_OF_FILE'
- X/*
- X+ GENERIC X-WINDOW-BASED TETRIS
- X+
- X+ Imakefile
- X+
- X+++
- X+
- X+ Copyright (C) 1992 Qiang Alex Zhao
- X+ Computer Science Dept, University of Arizona
- X+ azhao@cs.arizona.edu
- X+
- X+ All Rights Reserved
- X+
- X+ Permission to use, copy, modify, and distribute this software and
- X+ its documentation for any purpose and without fee is hereby granted,
- X+ provided that the above copyright notice appear in all copies and
- X+ that both that copyright notice and this permission notice appear in
- X+ supporting documentation, and that the name of the author not be
- X+ used in advertising or publicity pertaining to distribution of the
- X+ software without specific, written prior permission.
- X+
- X+ This program is distributed in the hope that it will be "playable",
- X+ but WITHOUT ANY WARRANTY; without even the implied warranty of
- X+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X+
- X*/
- X
- X/* set OS to empty or HPUX or AIX, if you know what system you are using ;o) */
- X OS =
- X DEST = /r/cas/usr/azhao/pub
- X SCOREFILE = $(DEST)/.tetris.scores
- X
- X DEFINES = -DSCOREFILE=\"$(SCOREFILE)\" $(OsNameDefines)
- XLOCAL_LIBRARIES = $(XLIB)
- X SYS_LIBRARIES = -lm
- X SRCS = tetris.c die.c utils.c
- X OBJS = tetris.o die.o utils.o
- X PROGRAMS = tetris tscores
- X
- XComplexProgramTarget(tetris)
- X
- Xall :: tetris tscores
- X
- Xtscores: tetris
- X ln -s tetris tscores
- X
- Xtetris.o: tetris.c tetris.h
- Xdie.o: die.c tetris.h
- Xutils.o: utils.c tetris.h data.h
- X
- XInstallMultiple($(PROGRAMS), $(DEST))
- X
- END_OF_FILE
- if test 1496 -ne `wc -c <'Imakefile'`; then
- echo shar: \"'Imakefile'\" unpacked with wrong size!
- fi
- # end of 'Imakefile'
- fi
- if test -f 'Makefile.std' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile.std'\"
- else
- echo shar: Extracting \"'Makefile.std'\" \(2497 characters\)
- sed "s/^X//" >'Makefile.std' <<'END_OF_FILE'
- X# GENERIC X-WINDOW-BASED TETRIS
- X#
- X# Makefile
- X#
- X###
- X#
- X# Copyright (C) 1992 Qiang Alex Zhao
- X# Computer Science Dept, University of Arizona
- X# azhao@cs.arizona.edu
- X#
- X# All Rights Reserved
- X#
- X# Permission to use, copy, modify, and distribute this software and
- X# its documentation for any purpose and without fee is hereby granted,
- X# provided that the above copyright notice appear in all copies and
- X# that both that copyright notice and this permission notice appear in
- X# supporting documentation, and that the name of the author not be
- X# used in advertising or publicity pertaining to distribution of the
- X# software without specific, written prior permission.
- X#
- X# This program is distributed in the hope that it will be "playable",
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X#
- X
- X
- X###########################################################################
- X### Configurable Settings
- X
- X# destination directory
- XDEST = /r/cas/usr/azhao/pub
- X
- X# score file
- XSCOREFILE = $(DEST)/.tetris.scores
- X
- X# path to X header files
- XXINCLUDE = /usr/include/X11
- X
- X# path to X library files
- XXLIBS = /usr/lib/X11
- X
- X# the C compiler, used as linker ;o)
- XCC = cc
- X
- X# local settings (blank means no change)
- X# System: LOCAL_DEFS LOCAL_LIBS LINK_LIBS
- X#--------------------------------------------------------------------------
- X#
- X# HP-UX -DHPUX -L $(XLIBS)
- X#
- X# AIX -DAIX -lbsd
- X#
- X
- XLOCAL_DEFS =
- XLOCAL_LIBS =
- XLINK_LIBS = -L$(XLIBS)
- X
- X###########################################################################
- X### Fixed settings
- X
- XMAKEFILE = Makefile
- X
- XPROGT = tetris
- XPROGS = tscores
- X
- XHDRS = tetris.h \
- X data.h
- X
- XCFLAGS = -O -I$(XINCLUDE) -DSCOREFILE='"$(SCOREFILE)"' $(LOCAL_DEFS)
- XLDFLAGS = -O $(LINK_LIBS) $(LOCAL_LIBS)
- X
- XLDLIBS = -lX11 -lm
- X
- XSRCS = tetris.c \
- X die.c \
- X utils.c
- X
- XOBJT = tetris.o \
- X utils.o \
- X die.o
- X
- XPRINT = enscript -2rG
- X
- X
- X### Dependencies/Actions
- X
- Xall: $(PROGT) $(PROGS)
- X
- X$(PROGT): $(OBJT)
- X @echo -n "Linking $(PROGT) ... "
- X @$(CC) $(LDFLAGS) $(OBJT) $(LDLIBS) -o $(PROGT)
- X @echo "Done."
- X
- X$(PROGS): $(OBJS)
- X @echo -n "Linking $(PROGS) ... "
- X ln -s $(PROGT) $(PROGS)
- X @echo "Done."
- X
- Xclean:
- X rm -rf *.o $(PROGT) $(PROGS)
- X
- Xinstall: $(PROGT) $(PROGS)
- X @echo Installing $(PROGT) and $(PROGS) in $(DEST)
- X install -s $(PROGT) $(PROGS) $(DEST)
- X
- Xprint:
- X $(PRINT) $(HDRS) $(SRCS)
- X
- X### dependencies for each object
- Xtetris.o: tetris.c tetris.h
- Xutils.o: utils.c tetris.h data.h
- Xdie.o: die.c tetris.h
- X
- END_OF_FILE
- if test 2497 -ne `wc -c <'Makefile.std'`; then
- echo shar: \"'Makefile.std'\" unpacked with wrong size!
- fi
- # end of 'Makefile.std'
- fi
- if test -f 'die.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'die.c'\"
- else
- echo shar: Extracting \"'die.c'\" \(4442 characters\)
- sed "s/^X//" >'die.c' <<'END_OF_FILE'
- X/*
- X# GENERIC X-WINDOW-BASED TETRIS
- X#
- X# die.c
- X#
- X###
- X#
- X# Copyright (C) 1992 Qiang Alex Zhao
- X# Computer Science Dept, University of Arizona
- X# azhao@cs.arizona.edu
- X#
- X# All Rights Reserved
- X#
- X# Permission to use, copy, modify, and distribute this software and
- X# its documentation for any purpose and without fee is hereby granted,
- X# provided that the above copyright notice appear in all copies and
- X# that both that copyright notice and this permission notice appear in
- X# supporting documentation, and that the name of the author not be
- X# used in advertising or publicity pertaining to distribution of the
- X# software without specific, written prior permission.
- X#
- X# This program is distributed in the hope that it will be "playable",
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X#
- X*/
- X
- X#include "tetris.h"
- X
- Xvoid
- Xbanner(field, str)
- X field_t *field;
- X char *str;
- X{
- X int mlen = strlen(str);
- X int x, y, w, ascent, descent;
- X
- X ascent = field->tfont->ascent;
- X descent = field->tfont->descent;
- X w = XTextWidth(field->tfont, str, mlen);
- X x = (field->winwidth - w) / 2;
- X y = (field->winheight - ascent - descent) / 2;
- X
- X XFillRectangle(disp, field->win, gc_w2, x - 5, y - ascent - 5,
- X w + 10, ascent + descent + 10);
- X XDrawString(disp, field->win, gc_ttx, x, y, str, mlen);
- X}
- X
- Xvoid
- Xdie(field)
- X field_t *field;
- X{
- X time_t tloc;
- X score_t myscore;
- X struct passwd *tmp;
- X
- X time(&tloc);
- X
- X banner(field, DIE_MESG);
- X XFlush(disp);
- X sleep(1);
- X
- X gethostname(myscore.myhost, NAMELEN);
- X myscore.myhost[NAMELEN-1] = '\0';
- X setpwent();
- X tmp = getpwuid(getuid());
- X if (tmp == NULL) /* should not occur */
- X sprintf(myscore.myname, "%d", getuid());
- X else
- X strncpy(myscore.myname, tmp->pw_name, NAMELEN);
- X endpwent();
- X myscore.myname[NAMELEN-1] = '\0';
- X
- X sprintf(myscore.score, "%9d", field->score);
- X sprintf(myscore.level, "%3d", field->level);
- X sprintf(myscore.lines, "%4d", field->lines);
- X strcpy(myscore.mytime, asctime(localtime(&tloc)));
- X fprintf(stderr, "\t%s", myscore.mytime);
- X fprintf(stderr, "Your final score is %d, at level %d with %d rows.\n\n",
- X field->score, field->level, field->lines);
- X
- X addHighScore(&myscore, field->score);
- X showHighScores(SHOWNSCORES);
- X
- X XCloseDisplay(disp);
- X exit(0);
- X}
- X
- Xvoid
- XaddHighScore(myscore, snum)
- X score_t *myscore;
- X long int snum;
- X{
- X char buff[2][SCORELEN];
- X int fd;
- X int tmp, ptmp, s1;
- X int mycount = 0;
- X Bool saved = False, trickle = False;
- X
- X fd = open(SCOREFILE, O_CREAT | O_RDWR, 0644);
- X if (fd == -1) {
- X fprintf(stderr, "Cannot write the score-file!\n");
- X return;
- X }
- X LOCK(fd);
- X
- X tmp = 0;
- X ptmp = 1;
- X bcopy((char *) myscore, buff[1], SCORELEN);
- X
- X while (read(fd, buff[tmp], SCORELEN) == SCORELEN) {
- X sscanf(((score_t *)buff[tmp])->score, " %d", &s1);
- X if (!saved && (s1 <= snum)) {
- X trickle = True;
- X saved = True;
- X mycount++;
- X }
- X if (!strncmp(myscore->myname,
- X ((score_t *)buff[tmp])->myname, NAMELEN)) {
- X mycount++;
- X }
- X /* Then check if we should trickle the score */
- X if (trickle) {
- X lseek(fd, (off_t) -SCORELEN, L_INCR);
- X write(fd, buff[ptmp], SCORELEN);
- X ptmp = tmp;
- X tmp = (tmp + 1) % 2;
- X }
- X /*
- X * As we trickle, we add up records owned by me. Once we hit max,
- X * we throw it away, and stop trickling.
- X */
- X if ((mycount > MAXSCORES) || ((mycount == MAXSCORES) && !trickle)) {
- X trickle = False;
- X break;
- X }
- X } /* while */
- X
- X if (trickle) {
- X write(fd, buff[ptmp], SCORELEN);
- X }
- X if (!saved && (mycount < MAXSCORES)) {
- X write(fd, (char *) myscore, SCORELEN);
- X }
- X
- X ULOCK(fd);
- X close(fd);
- X}
- X
- Xvoid
- XshowHighScores(ub)
- X int ub;
- X{
- X int fd, i;
- X score_t curs;
- X
- X fd = open(SCOREFILE, O_RDONLY, 0644);
- X if (fd == -1)
- X return;
- X
- X i = 0;
- X fprintf(stderr, " # USER SCORE L R HOST DATE\n");
- X
- X while (read(fd, (char *) &curs, SCORELEN) == SCORELEN) {
- X i++;
- X if ((ub == 0) || (i<= ub))
- X fprintf(stderr, "%4d %-12s%9s %3s %4s %-12s %-s",
- X i, curs.myname, curs.score, curs.level, curs.lines,
- X curs.myhost, curs.mytime);
- X }
- X close(fd);
- X fprintf(stderr, "There are %d scores to date\n", i);
- X}
- X
- END_OF_FILE
- if test 4442 -ne `wc -c <'die.c'`; then
- echo shar: \"'die.c'\" unpacked with wrong size!
- fi
- # end of 'die.c'
- fi
- if test -f 'tetris.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'tetris.c'\"
- else
- echo shar: Extracting \"'tetris.c'\" \(5240 characters\)
- sed "s/^X//" >'tetris.c' <<'END_OF_FILE'
- X/*
- X# GENERIC X-WINDOW-BASED TETRIS
- X#
- X# tetris.c
- X#
- X###
- X#
- X# Copyright (C) 1992 Qiang Alex Zhao
- X# Computer Science Dept, University of Arizona
- X# azhao@cs.arizona.edu
- X#
- X# All Rights Reserved
- X#
- X# Permission to use, copy, modify, and distribute this software and
- X# its documentation for any purpose and without fee is hereby granted,
- X# provided that the above copyright notice appear in all copies and
- X# that both that copyright notice and this permission notice appear in
- X# supporting documentation, and that the name of the author not be
- X# used in advertising or publicity pertaining to distribution of the
- X# software without specific, written prior permission.
- X#
- X# This program is distributed in the hope that it will be "playable",
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X#
- X*/
- X
- X#include "tetris.h"
- X
- Xvoid
- Xmain(argc, argv)
- X int argc;
- X char *argv[];
- X{
- X int start_level = 0, lines_full = 0;
- X field_t *field;
- X thing_t *thing = NULL;
- X int readfds, writefds, exceptfds;
- X struct timeval nextfall, now, delay;
- X struct timezone tzone;
- X Bool reset_time = True;
- X XEvent ev;
- X
- X if (!strcmp(argv[0], "tscores")) {
- X fprintf(stderr, " GENERIC TETRIS HALL OF FAME\n\n");
- X showHighScores(0);
- X exit(0);
- X }
- X
- X fprintf(stderr, "\t\tGENERIC TETRIS V1.8\n");
- X fprintf(stderr, "\tCopyright (C) 1992 Qiang Alex Zhao\n\n");
- X fprintf(stderr, "GENERIC TETRIS comes with ABSOLUTELY NO WARRANTY.\n");
- X fprintf(stderr, "Send bug-reports/fixes/comments to:\n");
- X fprintf(stderr, "\tQiang Alex Zhao, azhao@cs.arizona.edu\n");
- X fprintf(stderr, "\tComputer Science Dept, University of Arizona, Tucson\n\n");
- X
- X /* initialization */
- X
- X start_level = 3;
- X lines_full = 0;
- X
- X if (argc > 3) {
- X Usage(argv);
- X }
- X
- X if (argc > 1) {
- X if (sscanf(argv[1], "%d", &start_level) < 1) {
- X Usage(argv);
- X }
- X }
- X if (argc > 2) {
- X if (sscanf(argv[2], "%d", &lines_full) < 1) {
- X Usage(argv);
- X }
- X }
- X
- X if (start_level < 0) start_level = 0;
- X if (start_level >= NUM_LEVELS) start_level = NUM_LEVELS - 1;
- X if (lines_full < 0) lines_full = 0;
- X if (lines_full >= DEF_HEIGHT - 2) lines_full = DEF_HEIGHT - 3;
- X
- X srandom((int) time(NULL));
- X
- X if ((disp = XOpenDisplay(NULL)) == NULL) {
- X fprintf(stderr, "Error: can't open display \"%s\".\n\n",
- X XDisplayName(NULL));
- X exit(1);
- X }
- X rootScreen = DefaultScreen(disp);
- X rootDepth = DefaultDepth(disp, rootScreen);
- X
- X /* rebinding keypad */
- X XRebindKeysym(disp, XK_R7, NULL, 0, "j", sizeof(char));
- X XRebindKeysym(disp, XK_R10, NULL, 0, "j", sizeof(char));
- X XRebindKeysym(disp, XK_R13, NULL, 0, "j", sizeof(char));
- X XRebindKeysym(disp, XK_Left, NULL, 0, "j", sizeof(char));
- X XRebindKeysym(disp, XK_R8, NULL, 0, "k", sizeof(char));
- X XRebindKeysym(disp, XK_R11, NULL, 0, "k", sizeof(char));
- X XRebindKeysym(disp, XK_R14, NULL, 0, "k", sizeof(char));
- X XRebindKeysym(disp, XK_Up, NULL, 0, "k", sizeof(char));
- X XRebindKeysym(disp, XK_Down, NULL, 0, "k", sizeof(char));
- X XRebindKeysym(disp, XK_R9, NULL, 0, "l", sizeof(char));
- X XRebindKeysym(disp, XK_R12, NULL, 0, "l", sizeof(char));
- X XRebindKeysym(disp, XK_R15, NULL, 0, "l", sizeof(char));
- X XRebindKeysym(disp, XK_Right, NULL, 0, "l", sizeof(char));
- X
- X /* setting color */
- X if (rootDepth == 1) {
- X bgcolor.pixel = WhitePixel(disp, rootScreen);
- X bdcolor.pixel = BlackPixel(disp, rootScreen);
- X titlecolor.pixel = BlackPixel(disp, rootScreen);
- X textcolor.pixel = BlackPixel(disp, rootScreen);
- X } else {
- X cmap = DefaultColormap(disp, rootScreen);
- X XParseColor(disp, cmap, BG_COLOR, &bgcolor);
- X XAllocColor(disp, cmap, &bgcolor);
- X XParseColor(disp, cmap, BD_COLOR, &bdcolor);
- X XAllocColor(disp, cmap, &bdcolor);
- X XParseColor(disp, cmap, TITLE_COLOR, &titlecolor);
- X XAllocColor(disp, cmap, &titlecolor);
- X XParseColor(disp, cmap, TEXT_COLOR, &textcolor);
- X XAllocColor(disp, cmap, &textcolor);
- X }
- X
- X /* initialize the playground */
- X
- X field = initField(DEF_WIDTH, DEF_HEIGHT, lines_full, argc, argv);
- X field->level = start_level;
- X
- X /* wait till mapped */
- X XNextEvent(disp, &ev);
- X
- X initPixmaps(field);
- X
- X drawField(field);
- X
- X while (True) {
- X if (reset_time) {
- X gettimeofday(&nextfall, &tzone);
- X nextfall.tv_usec += 10000 * speeds[field->level];
- X normTimeVal(&nextfall);
- X }
- X if (XPending(disp))
- X handleEvents(field, &thing, False);
- X gettimeofday(&now, &tzone);
- X delay.tv_sec = nextfall.tv_sec - now.tv_sec;
- X delay.tv_usec = nextfall.tv_usec - now.tv_usec;
- X normTimeVal(&delay);
- X if (delay.tv_sec >= 0) {
- X writefds = exceptfds = 0;
- X readfds = 1 << ConnectionNumber(disp);
- X (void) select(sizeof(int) * 8, (fd_set *) &readfds, (fd_set *)
- X &writefds, (fd_set *) &exceptfds, &delay);
- X }
- X gettimeofday(&now, &tzone);
- X if ((now.tv_sec > nextfall.tv_sec) ||
- X ((now.tv_sec == nextfall.tv_sec) &&
- X (now.tv_usec > nextfall.tv_usec))) {
- X handleEvents(field, &thing, True);
- X reset_time = True;
- X } else {
- X handleEvents(field, &thing, False);
- X reset_time = False;
- X }
- X }
- X /* never come to here */
- X}
- X
- END_OF_FILE
- if test 5240 -ne `wc -c <'tetris.c'`; then
- echo shar: \"'tetris.c'\" unpacked with wrong size!
- fi
- # end of 'tetris.c'
- fi
- if test -f 'tetris.man' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'tetris.man'\"
- else
- echo shar: Extracting \"'tetris.man'\" \(1881 characters\)
- sed "s/^X//" >'tetris.man' <<'END_OF_FILE'
- X.TH TETRIS 1 "04 Oct 1992, V1.8" "University of Arizona"
- X.SH NAME
- XGENERIC TETRIS \- Yet Another Tetris Game on X
- X.SH SYNOPSIS
- X.B tetris
- X[ \fIstarting_level\fP [ \fIrows_pre-filled\fP ] ]
- X.br
- X.B tscores
- X.SH DESCRIPTION
- X.LP
- X"Tetris" is the game. It only lists the top 15 players at the end,
- Xeach player may has at most three scores. "Tscores" lists all
- Xthe players/scores.
- X.LP
- XKey "\fIj\fP" moves the block left; "\fIl\fP" moves right;
- X"\fIk\fP" rotates. Left-handed
- Xpeople may want to use "\fIs\fP", "\fId\fP", "\fIf\fP"
- Xrespectively. The space bar drops a block quickly.
- X.LP
- XUse \fICTRL-L\fP key combination to redraw \- in case it mess somthing up.
- X.LP
- XAs usual, "\fI+\fP" and "\fI\-\fP" speed up or lower down the speed. Note
- Xthat you don't need to press the \fISHIFT\fP key \- "\fI=\fP" and "\fI_\fP" also
- Xwork. The "\fIb\fP" toggles the "beep".
- X.LP
- XIf you press \fICTRL-S\fP or "\fIp\fP", the game will be paused, and the window
- Xwill be iconified \- just in case your boss suddenly appears at
- Xyour door. ;o)
- X.SH SEE ALSO
- X.LP
- Xxtetris(1), xmris(1)
- X.SH BUG REPORTS
- X.LP
- XSend bugs (or their reports, or fixes) to the author:
- X.RS
- XQiang Alex Zhao, <\fIazhao@cs.arizona.edu\fP>
- X.br
- XComputer Science Department
- X.br
- XUniversity of Arizona
- X.br
- XTucson, AZ 85721
- X.RE
- X.LP
- XAnd note: my first name is NOT spelled as "Quiang".
- X.SH UPDATES
- XThe most updated source could be found on \fIexport.lcs.mit.edu\fP under
- X\fI/contrib\fP.
- X.SH ACKNOWLEDGEMENTS
- X.LP
- XI studied an old tetris game for X10, wrote by Wayne Christopher
- X<\fIfaustus@cs.berkeley.edu\fP> in 1988; then I adopted the ideas in
- Xrepresenting those "blocks" and rotating them, and added X11
- Xstuff. Also I learned a lot from Nathan Sidwell's great game
- X"\fIxmris\fP", e.g. the "iconifying pause".
- X.LP
- XThanks go to people who helped me in improving the program.
- X.SH COPYRIGHTS
- X.LP
- X\*R Copyright 1992, Qiang A. Zhao, University of Arizona.
- X
- END_OF_FILE
- if test 1881 -ne `wc -c <'tetris.man'`; then
- echo shar: \"'tetris.man'\" unpacked with wrong size!
- fi
- # end of 'tetris.man'
- fi
- echo shar: End of archive 2 \(of 2\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-