games-request@tekred.UUCP (06/11/87)
Submitted by: Larry Wall <lwall%sdcrdcf.UUCP@jove.cam.unisys.com> Comp.sources.games: Volume 1, Issue 50 Archive-name: warp7/Part06 #! /bin/sh # Make a new directory for the warp sources, cd to it, and run kits 1 # thru 7 through sh. When all 7 kits have been run, read README. echo "This is warp 7.0 kit 6 (of 7). If kit 6 is complete, the line" echo '"'"End of kit 6 (of 7)"'" will echo at the end.' echo "" export PATH || (echo "You didn't use sh, you clunch." ; kill $$) echo Extracting Makefile.SH sed >Makefile.SH <<'!STUFFY!FUNK!' -e 's/X//' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac Xecho "Extracting Makefile (with variable substitutions)" X: This section of the file will have variable substitutions done on it. X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!. X: Protect any dollar signs and backticks that you do not want interpreted X: by putting a backslash in front. X$spitshell >Makefile <<!GROK!THIS! X# $Header: Makefile.SH,v 7.0.1.1 86/12/12 16:54:03 lwall Exp $ X# X# $Log: Makefile.SH,v $ X# Revision 7.0.1.1 86/12/12 16:54:03 lwall X# Frozen for net release. X# X# Revision 7.0 86/10/08 15:11:42 lwall X# Split into separate files. Added amoebas and pirates. X# X# XCC = $cc Xbin = $bin Xmansrc = $mansrc Xmanext = $manext XCFLAGS = $ccflags -O XLDFLAGS = $ldflags XCHOWNER = $chowner Xprivlib = $privlib XNDIRC = $ndirc XNDIRO = $ndiro XLARGE = $large $split XSMALL = $small X Xlibs = $ndirlib $termlib $jobslib $libnm -lm X!GROK!THIS! X X: In the following dollars and backticks do not need the extra backslash. X$spitshell >>Makefile <<'!NO!SUBS!' X Xpublic = warp Xprivate = warp.doc smap.0 smap.1 smap.2 smap.3 smap.4 smap.5 smap.6 smap.7 Xmanpages = warp.man Xutil = Makefile makedepend makedir smap.0 smap.1 smap.2 smap.3 smap.4 smap.5 smap.6 smap.7 X Xsh = Makefile.SH makedepend.SH makedir.SH X Xh1 = bang.h init.h intrp.h move.h ndir.h Xh2 = patchlevel.h object.h play.h score.h Xh3 = sig.h term.h them.h us.h Xh4 = util.h version.h warp.h weapon.h X Xh = $(h1) $(h2) $(h3) $(h4) X Xc1 = bang.c init.c intrp.c move.c Xc2 = object.c play.c score.c Xc3 = sig.c term.c them.c us.c Xc4 = util.c version.c warp.c weapon.c X Xc = $(c1) $(c2) $(c3) $(c4) $(NDIRC) X Xobj1 = bang.o init.o intrp.o move.o Xobj2 = object.o play.o score.o Xobj3 = sig.o term.o them.o us.o Xobj4 = util.o version.o warp.o weapon.o X Xobj = $(obj1) $(obj2) $(obj3) $(obj4) $(NDIRO) X Xlintflags = -phbvxac X Xadd1 = Makefile.old Xadd2 = bsd config.h config.sh eunice filexp Xadd3 = loc makedepend Xadd4 = Xadd5 = pdp11 warp usg v7 X Xaddedbyconf = $(add1) $(add2) $(add3) $(add4) $(add5) X X# grrr XSHELL = /bin/sh X X.c.o: X $(CC) -c $(CFLAGS) $(LARGE) $*.c X Xall: $(public) $(private) $(util) X touch all X Xwarp: $(obj) X $(CC) $(LDFLAGS) $(obj) $(LARGE) $(libs) -o warp X X# if a .h file depends on another .h file... X$(h): X touch $@ X Xinstall: warp X# won't work with csh X export PATH || exit 1 X - mv $(bin)/warp $(bin)/warp.old X - if test `pwd` != $(bin); then cp $(public) $(bin); fi X - cd $(bin); chmod 755 $(public); chown '$(CHOWNER)' $(public) X - chmod 4711 $(bin)/warp X - chmod 755 makedir X - ./makedir `./filexp $(privlib)` X - \ Xif test `pwd` != `./filexp $(privlib)`; then \ Xcp $(private) `./filexp $(privlib)`; \ Xfi X - \ Xcd `./filexp $(privlib)`; \ Xchmod 755 $(private); \ Xchown '$(CHOWNER)' . $(private) \ Xcp /dev/null save.blurfl X - \ Xif test ! -f `./filexp $(privlib)/warp.news`; then \ Xcp warp.news `./filexp $(privlib)`; \ Xfi X - \ Xif test `pwd` != $(mansrc); then \ Xfor page in $(manpages); do \ Xcp $$page $(mansrc)/`basename $$page .man`.$(manext); \ Xdone; \ Xfi X Xclean: X rm -f core *.o X Xrealclean: X rm -f warp *.o core $(addedbyconf) $(util) X X# The following lint has practically everything turned on. Unfortunately, X# you have to wade through a lot of mumbo jumbo that can't be suppressed. X# If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message X# for that spot. X Xlint: X lint $(lintflags) $(defs) $(c) > warp.fuzz X Xsmap.0: smp.0 sm X sm <smp.0 >smap.0 Xsmap.1: smp.1 sm X sm <smp.1 >smap.1 Xsmap.2: smp.2 sm X sm <smp.2 >smap.2 Xsmap.3: smp.3 sm X sm <smp.3 >smap.3 Xsmap.4: smp.4 sm X sm <smp.4 >smap.4 Xsmap.5: smp.5 sm X sm <smp.5 >smap.5 Xsmap.6: smp.6 sm X sm <smp.6 >smap.6 Xsmap.7: smp.7 sm X sm <smp.7 >smap.7 Xsm: sm.c X cc sm.c $(SMALL) -o sm X Xdepend: makedepend X makedepend X Xclist: X echo $(c) | tr ' ' '\012' >.clist X Xhlist: X echo $(h) | tr ' ' '\012' >.hlist X Xshlist: X echo $(sh) | tr ' ' '\012' >.shlist X X# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE X$(obj): X @ echo "You haven't done a "'"make depend" yet!'; exit 1 Xmakedepend: makedepend.SH X /bin/sh makedepend.SH X!NO!SUBS! X$eunicefix Makefile !STUFFY!FUNK! echo Extracting makedepend.SH sed >makedepend.SH <<'!STUFFY!FUNK!' -e 's/X//' Xcase $CONFIG in X'') X if test ! -f config.sh; then X ln ../config.sh . || \ X ln ../../config.sh . || \ X ln ../../../config.sh . || \ X (echo "Can't find config.sh."; exit 1) X fi X . config.sh X ;; Xesac Xcase "$0" in X*/*) cd `expr X$0 : 'X\(.*\)/'` ;; Xesac Xecho "Extracting makedepend (with variable substitutions)" X$spitshell >makedepend <<!GROK!THIS! X$startsh X# $Header: makedepend.SH,v 7.0.1.1 86/12/12 17:00:05 lwall Exp $ X# X# $Log: makedepend.SH,v $ X# Revision 7.0.1.1 86/12/12 17:00:05 lwall X# Baseline for net release. X# X# Revision 4.3.1.2 85/05/13 15:53:42 lwall X# Made cpp look in /usr/local/include too. X# X# Revision 4.3.1.1 85/05/10 11:35:10 lwall X# Branch for patches. X# X# Revision 4.3 85/05/01 11:42:26 lwall X# Baseline for release with 4.3bsd. X# X Xexport PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$) X Xcat='$cat' Xcp='$cp' Xcpp='$cpp' Xecho='$echo' Xegrep='$egrep' Xexpr='$expr' Xmv='$mv' Xrm='$rm' Xsed='$sed' Xsort='$sort' Xtest='$test' Xtr='$tr' Xuniq='$uniq' X!GROK!THIS! X X$spitshell >>makedepend <<'!NO!SUBS!' X X$cat /dev/null >.deptmp X$echo "(Note: this is going to take a while.)" X$rm -f *.c.c c/*.c.c Xif test -f Makefile; then X mf=Makefile Xelse X mf=makefile Xfi Xif test -f $mf; then X defrule=`<$mf sed -n \ X -e '/^\.c\.o:.*;/{' \ X -e 's/\$\*\.c//' \ X -e 's/^[^;]*;[ ]*//p' \ X -e q \ X -e '}' \ X -e '/^\.c\.o: *$/{' \ X -e N \ X -e 's/\$\*\.c//' \ X -e 's/^.*\n[ ]*//p' \ X -e q \ X -e '}'` Xfi Xcase "$defrule" in X'') defrule='$(CC) -c $(CFLAGS)' ;; Xesac X Xmake clist || ($echo "Searching for .c files..."; \ X $echo *.c */*.c | $tr ' ' '\012' | $egrep -v '\*' >.clist) Xfor file in `$cat .clist`; do X# for file in `cat /dev/null`; do X filebase=`basename $file .c` X $echo "Finding dependencies for $filebase.o." X $sed -n <$file >$file.c \ X -e "/^${filebase}_init(/q" \ X -e '/^#/{' \ X -e 's|/\*.*$||' \ X -e 's|\\$||' \ X -e p \ X -e '}' X $cpp -I/usr/local/include -I. -I./h $file.c | \ X $sed \ X -e '/^# *[0-9]/!d' \ X -e 's/^.*"\(.*\)".*$/'$filebase'.o: \1/' \ X -e 's|: \./|: |' \ X -e 's|\.c\.c|.c|' | \ X $uniq | $sort | $uniq >> .deptmp Xdone X X$sed <Makefile >Makefile.new -e '1,/^# AUTOMATICALLY/!d' X Xmake shlist || ($echo "Searching for .SH files..."; \ X $echo *.SH */*.SH | $tr ' ' '\012' | $egrep -v '\*' >.shlist) Xif $test -s .deptmp; then X for file in `cat .shlist`; do X $echo `$expr X$file : 'X\(.*\).SH`: $file config.sh \; \ X /bin/sh $file >> .deptmp X done X $echo "Updating Makefile..." X $echo "# If this runs make out of memory, delete /usr/include lines." \ X >> Makefile.new X $sed 's|^\(.*\.o:\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \ X >>Makefile.new Xelse X make hlist || ($echo "Searching for .h files..."; \ X $echo *.h */*.h | $tr ' ' '\012' | $egrep -v '\*' >.hlist) X $echo "You don't seem to have a proper C preprocessor. Using grep instead." X $egrep '^#include ' `cat .clist` `cat .hlist` >.deptmp X $echo "Updating Makefile..." X <.clist $sed -n \ X -e '/\//{' \ X -e 's|^\(.*\)/\(.*\)\.c|\2.o: \1/\2.c; '"$defrule \1/\2.c|p" \ X -e d \ X -e '}' \ X -e 's|^\(.*\)\.c|\1.o: \1.c|p' >> Makefile.new X <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed X <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \ X $sed 's|^[^;]*/||' | \ X $sed -f .hsed >> Makefile.new X <.deptmp $sed -n 's|c:#include <\(.*\)>.*$|o: /usr/include/\1|p' \ X >> Makefile.new X <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \ X $sed -f .hsed >> Makefile.new X <.deptmp $sed -n 's|h:#include <\(.*\)>.*$|h: /usr/include/\1|p' \ X >> Makefile.new X for file in `$cat .shlist`; do X $echo `$expr X$file : 'X\(.*\).SH`: $file config.sh \; \ X /bin/sh $file >> Makefile.new X done Xfi X$rm -f Makefile.old X$cp Makefile Makefile.old X$cp Makefile.new Makefile X$rm Makefile.new X$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> Makefile X$rm -f .deptmp `sed 's/\.c/.c.c/' .clist` .shlist .clist .hlist .hsed X X!NO!SUBS! X$eunicefix makedepend Xchmod 755 makedepend Xcase `pwd` in X*SH) X $rm -f ../makedepend X ln makedepend ../makedepend X ;; Xesac !STUFFY!FUNK! echo Extracting play.c sed >play.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: play.c,v 7.0.1.1 86/10/16 10:52:39 lwall Exp $ */ X X/* $Log: play.c,v $ X * Revision 7.0.1.1 86/10/16 10:52:39 lwall X * Added Damage. Fixed random bugs. X * X * Revision 7.0 86/10/08 15:13:09 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#include "EXTERN.h" X#include "warp.h" X#include "bang.h" X#include "score.h" X#include "object.h" X#include "move.h" X#include "term.h" X#include "them.h" X#include "us.h" X#include "util.h" X#include "weapon.h" X#include "INTERN.h" X#include "play.h" X Xvoid Xplay_init() X{ X ; X} X Xvoid Xplay() X{ X bool done = FALSE; X Reg1 OBJECT *curobj; X Reg2 OBJECT *to; X Reg3 int i; X Reg4 int x; X Reg5 int y; X X display_status(); X#ifdef TIOCOUTQ X while (output_pending() > charsperhalfsec) X sleep(1); /* allow buffers to empty */ X#endif X sleep(3); X do { X timer++; X nxtbang = 0; X banging = FALSE; X display_status(); X#ifdef TIOCOUTQ X while (output_pending() > charsperhalfsec) X sleep(1); X#endif X if (lowspeed) X roundsleep(2); X else X roundsleep(1); X if (ent) { X evely = ent->vely; X evelx = ent->velx; X if (cloaking && ent->energy >= 250 && !damflag[NOCLOAKING]) { X if (!rand_mod(300)) { X damage++; X damflag[NOCLOAKING] = rand_mod(smarts+1)+2; X } X ent->energy -= ent->energy/40; X } X else X cloaking = FALSE; X cloaked = cloaking; X } X if (base) { X bvely = base->vely; X bvelx = base->velx; X } X get_commands(&done); X if (done) X break; X their_smarts(); X apolloflag = 0; X if (ent) { X if (numapollos) { X if (numstars) { X if (realapollo) { X if (lookfor(realapollo->posy,realapollo->posx, X Enterprise)) { X apolloflag = 1; X } X } X else if (lookfor(root.next->posy,root.next->posx, X Enterprise)) { X apolloflag = 1; X realapollo = root.next; X mvaddch(realapollo->posy+1,realapollo->posx*2, X 'A'); X realapollo->image = 'A'; X realapollo->mass = 6000; X inumapollos = 1; X numenemies++; X inumenemies++; X possiblescore += 5000; X } X if (apolloflag) { X if (blast[realapollo->posy][realapollo->posx] <= 32000) X evely = evelx = 0; X realapollo->energy = 32000; X } X } X else X numapollos = 0; X } X ent->vely = evely; X ent->velx = evelx; X } X if (base) { X if (numapollos) { X if (numstars) { X if (realapollo) { X if (lookfor(realapollo->posy,realapollo->posx, X Base)) { X apolloflag |= 2; X } X } X else if (lookfor(root.next->posy,root.next->posx, X Base)) { X apolloflag |= 2; X realapollo = root.next; X mvaddch(realapollo->posy+1,realapollo->posx*2, X 'A'); X realapollo->image = 'A'; X realapollo->mass = 6000; X inumapollos = 1; X numenemies++; X inumenemies++; X possiblescore += 5000; X } X if (apolloflag & 2) { X if (blast[realapollo->posy][realapollo->posx] <= 32000) X bvely = bvelx = 0; X realapollo->energy = 32000; X } X } X else X numapollos = 0; X } X base->vely = bvely; X base->velx = bvelx; X } X if (aretorps) { X aretorps = 0; X for (i=0;i<2;i++) for (y=0;y<3;y++) for (x=0;x<3;x++) { X if (curobj = isatorp[i][y][x]) { X to = occupant[(curobj->posy+curobj->vely+YSIZE00)%YSIZE] X [(curobj->posx+curobj->velx+XSIZE00)%XSIZE]; X if (to && !to->vely && !to->velx) { X unmake_object(curobj); X if (i) X btorp++; X else X etorp++; X } X isatorp[i][y][x]=0; X } X } X } X move_universe(); X if (finish) { X finish--; X if (!finish && (!(numenemies || numos) || (!ent && !base))) { X done = TRUE; X timer -= 5; X } X } X else if (!banging && (!(numenemies || numos) || (!ent && !base))) X finish = 5; X } while (!done); X} !STUFFY!FUNK! echo Extracting sig.c sed >sig.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: sig.c,v 7.0.1.1 86/12/12 17:02:44 lwall Exp $ */ X X/* $Log: sig.c,v $ X * Revision 7.0.1.1 86/12/12 17:02:44 lwall X * Baseline for net release. X * X * Revision 7.0 86/10/08 15:13:24 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#include "EXTERN.h" X#include "warp.h" X#include "play.h" X#include "score.h" X#include "term.h" X#include "util.h" X#include "INTERN.h" X#include "sig.h" X Xvoid Xsig_init() X{ X#ifdef lint X ; X#else X sigignore(SIGINT); /* for inquiry of existence via kill call */ X#ifdef SIGTTOU X sigignore(SIGTTOU); X#endif X X sigset(SIGHUP, sig_catcher); X if (!debugging) { X sigset(SIGQUIT, sig_catcher); X sigset(SIGILL, sig_catcher); X sigset(SIGFPE, sig_catcher); X sigset(SIGBUS, sig_catcher); X sigset(SIGSEGV, sig_catcher); X sigset(SIGSYS, sig_catcher); X sigset(SIGTERM, sig_catcher); X } X#ifdef SIGXCPU X sigset(SIGXCPU, sig_catcher); X#endif X#ifdef SIGCONT X sigset(SIGCONT, cont_catcher); X#endif X#ifdef SIGTSTP X sigset(SIGTSTP, stop_catcher); X sigset(SIGSTOP, stop_catcher); X#endif X#endif /* lint */ X} X X#ifdef SIGTSTP Xvoid Xcont_catcher() X{ X#ifndef lint X sigset(SIGCONT,cont_catcher); X#endif X savetty(); X crmode(); X raw(); X noecho(); X nonl(); X} X#endif X Xvoid Xmytstp() X{ X resetty(); X#ifdef SIGTSTP X kill(0,SIGTSTP); X#else X if (fork()) X wait(0); X else { X char *shell = getenv("SHELL"); X X setuid(getuid()); X if (!*shell) X shell = "/bin/sh"; X execl(shell,shell,0); X exit(1); X } X#endif X rewrite(); X} X Xvoid /* very much void */ Xfinalize(status) Xint status; X{ X if (bizarre) X resetty(); X if (status < 0) { X chdir("/usr/tmp"); X sigset(SIGILL,SIG_DFL); X abort(); X } X exit(status); X} X X/* come here on signal other than interrupt, stop, or cont */ X Xvoid Xsig_catcher(signo) X{ X#ifdef VERBOSE X static char *signame[] = { X "", X "HUP", X "INT", X "QUIT", X "ILL", X "TRAP", X "IOT", X "EMT", X "FPE", X "KILL", X "BUS", X "SEGV", X "SYS", X "PIPE", X "ALRM", X "TERM", X "???" X#ifdef SIGTSTP X ,"STOP", X "TSTP", X "CONT", X "CHLD", X "TTIN", X "TTOU", X "TINT", X "XCPU", X "XFSZ" X#ifdef SIGPROF X ,"VTALARM", X "PROF" X#endif X#endif X }; X#endif X X#ifdef SIGTTOU X#ifndef lint X sigignore(SIGTTOU); X#endif /* lint */ X#endif X#ifdef DEBUGGING X if (debug) { X printf("\r\nSIG%s--game not saved in debug\r\n",signame[signo]); X finalize(-1); X } X#endif X panic++; X if (panic >= 2) { X if (panic >= 3) X abort(); X chdir(SAVEDIR); X kill(0,SIGIOT); X } X (void) sigset(SIGILL,SIG_DFL); X if (signo == SIGHUP && (timer < 10 || didkill)) X signo = SIGQUIT; X if (signo == SIGQUIT) { /* can't let them bomb out without penalty */ X if (smarts < 20) X smarts += 4; X else if (smarts < 35) X smarts += 2; X else X smarts++; X totalscore -= possiblescore / 2; X } X save_game(); X if (signo != SIGHUP && signo != SIGQUIT) X#ifdef VERBOSE X IF(verbose) X printf("\r\nCaught %s%s--%s\r\n", X signo ? "a SIG" : "an internal error", signame[signo], X experimenting ? "game saved" : "bye bye"); X ELSE X#endif X#ifdef TERSE X printf("\r\nSignal %d--bye bye\r\n",signo); X#endif X switch (signo) { X case SIGBUS: X case SIGILL: X case SIGSEGV: X finalize(-signo); X } X finalize(1); /* and blow up */ X} X X#ifdef SIGTSTP X/* come here on stop signal */ X Xvoid Xstop_catcher() X{ X if (!waiting) { X resetty(); /* this is the point of all this */ X#ifdef DEBUGGING X if (debug) X write(2,"stop_catcher\r\n",13); X#endif X sigset(SIGTSTP,SIG_DFL); /* enable stop */ X#ifdef BSD42 X sigsetmask(sigblock(0) & ~(1 << (SIGTSTP-1))); X#endif X kill(0,SIGTSTP); /* and do the stop */ X } X#ifndef lint X sigset(SIGTSTP,stop_catcher); /* unenable the stop */ X#endif X} X#endif !STUFFY!FUNK! echo Extracting bang.c sed >bang.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: bang.c,v 7.0.1.3 86/12/12 16:57:00 lwall Exp $ */ X X/* $Log: bang.c,v $ X * Revision 7.0.1.3 86/12/12 16:57:00 lwall X * Made circular explosions. X * X * Revision 7.0.1.2 86/10/20 14:36:02 lwall X * Picked some lint. X * X * Revision 7.0.1.1 86/10/16 10:49:45 lwall X * Added Damage. Fixed random bugs. X * X * Revision 7.0 86/10/08 15:11:57 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#include "EXTERN.h" X#include "warp.h" X#include "object.h" X#include "move.h" X#include "sig.h" X#include "term.h" X#include "them.h" X#include "INTERN.h" X#include "bang.h" X Xvoid Xbang_init() X{ X ; X} X Xvoid Xmake_plink(y,x) XReg1 int x; XReg2 int y; X{ X Reg3 OBJECT *obj; X X move(y+1,x*2,0); X beg_qwrite(); X *filler = '@'; X qwrite(); X obj = occupant[y][x]; X if (obj) { X if (numamoebas && obj->image == ' ') X qaddc(amb[y][x]); X else X qaddc(obj->image); X } X else if (numamoebas) X qaddc(amb[y][x]); X else X qaddspace(); X end_qwrite(); X} X Xvoid Xmake_blast(y,x,mass,size) XReg1 int x; XReg2 int y; Xint size; Xlong mass; X{ X bangy[nxtbang] = y; X bangx[nxtbang] = x; X bangm[nxtbang] = mass; X bangs[nxtbang++] = size; X assert(nxtbang <= XSIZE * YSIZE); X if (numamoebas && amb[y][x] == '~') { X if (mass > 10000) X modify_amoeba(y,x,1,'~', 10); X else if (mass > 100) X modify_amoeba(y,x,1,'~', 5); X bangs[nxtbang-1] = 0; /* don't propagate */ X return; X } X else if (mass >= 0) { X Reg3 OBJECT *obj; X X move(y+1,x*2,0); X beg_qwrite(); X *filler = '@'; X qwrite(); X *filler = '#'; X qwrite(); X *filler = '@'; X qwrite(); X *filler = '#'; X qwrite(); X *filler = '@'; X qwrite(); X obj = occupant[y][x]; X if (obj) { X if (numamoebas && obj->image == ' ') X qaddc(amb[y][x]); X else X qaddc(obj->image); X } X else if (numamoebas) X qaddc(amb[y][x]); X else X qaddspace(); X end_qwrite(); X } X} X Xvoid Xdo_bangs() X{ X Reg1 int x; X Reg2 int y; X Reg3 int i; X Reg4 int j; X Reg7 int k; X Reg5 int lastxy; X Reg6 OBJECT *obj; X X /* read blast list and update blast array */ X assert(nxtbang >= 0 && nxtbang <= XSIZE * YSIZE); X for (i=0; i<nxtbang; i++) { X if (bangm[i] != 32767) X bangm[i] *= 4; X lastxy = bangs[i] << 1; X if (lastxy >= MAXBDIST) X lastxy = MAXBDIST - 1; X for (y=bangy[i]-bangs[i],x=bangx[i]-bangs[i],j=lastxy; X j>=0; X y++,x++,--j) { X yblasted[yy[j] = (y+YSIZE00) % YSIZE] |= 1; X xblasted[xx[j] = (x+XSIZE00) % XSIZE] |= 1; X } X blasted = TRUE; X for (y=lastxy;y>=0;--y) { X for (x=lastxy;x>=0;--x) { X if (lastxy > 2) { X j = abs(y-bangs[i]); X k = abs(x-bangs[i]); X if (j < k) /* distance is long + 1/2 short */ X j += k + k; X else X j += j + k; X if (--j > lastxy) X continue; X } X if (bangm[i] != 32767 || X !(obj=occupant[yy[y]][xx[x]]) || obj->type != Web) X blast[yy[y]][xx[x]] += bangm[i]; X } X } X } X} !STUFFY!FUNK! echo Extracting config.H sed >config.H <<'!STUFFY!FUNK!' -e 's/X//' X/* config.h X * This file was produced by running the Configure script. X * X * Feel free to modify any of this as the need arises. Note, however, X * that running Configure again will wipe out any changes you've made. X */ X X X#/*undef EUNICE /* no file linking? */ X#/*undef VMS /* other assorted ickies? */ X X/* how to cancel an article */ X#define CANCEL "/usr/lib/news/inews -h <%h" /**/ X X#define FCNTL /* should we include fcntl.h? */ X X#define FTIMER /* do we have the ftime() routine? */ X X#define GETHOSTNAME /* do we have a gethostname function? */ X#/*undef DOUNAME /* do we have a uname function? */ X#/*undef PHOSTNAME "hostname" /* how to get host name with popen */ X X#/*undef GETPWENT /* need we include slow getpwent? */ X X#define HAVETERMLIB /* do we have termlib-style routines? */ X X#/*undef index strchr /* cultural */ X#/*undef rindex strrchr /* differences? */ X X#define IOCTL /* are ioctl args all defined in one place? */ X X#define NORMSIG /* use signal rather than sigset? */ X X#/*undef PORTABLE /* do we do extra lookups to start up? */ X X#/*undef SCOREFULL /* keep scoreboard by fullname? */ X X#/*undef TERMIO /* is this a termio system? */ X X#/*undef USENDIR /* include ndir.c? */ X#/*undef LIBNDIR /* include /usr/include/ndir.h? */ X X#/*undef vfork fork /* is vfork too virtual? */ X X#/*undef void int /* is void to be avoided? */ X X#define WHOAMI /* should we include whoami.h? */ X X#define PASSNAMES /* do names come from the passwd file? */ X /* (undef to take name from ~/.fullname) */ X#define BERKNAMES /* if so, are they Berkeley format? */ X /* (that is, ":name,stuff:") */ X#/*undef USGNAMES /* or are they USG format? */ X /* (that is, ":stuff-name(stuff):") */ X X/* news library, may use only ~ and %l expansion */ X#define NEWSLIB "/usr/lib/news" /**/ X X/* default shell--ok to be a slow shell like csh */ X#define PREFSHELL "/bin/csh" /**/ X X/* warp private library, may use ~ expansion, %x and %l */ X#define PRIVLIB "/a/lwall/src/warp" /**/ X X/* bits produced by the rand() function */ X#define RANDBITS 31 /**/ X X/* How many register declarations are paid attention to? */ X X#define Reg1 register /**/ X#define Reg2 register /**/ X#define Reg3 register /**/ X#define Reg4 register /**/ X#define Reg5 register /**/ X#define Reg6 register /**/ X#define Reg7 /**/ X#define Reg8 /**/ X#define Reg9 /**/ X#define Reg10 /**/ X#define Reg11 /**/ X#define Reg12 /**/ X#define Reg13 /**/ X#define Reg14 /**/ X#define Reg15 /**/ X#define Reg16 /**/ X X/* root uid */ X#define ROOTID 0 /**/ X X/* name of the site. May be overridden by gethostname, uname, etc. */ X#define SITENAME "sdcrdcf" /**/ X !STUFFY!FUNK! echo Extracting ndir.c sed >ndir.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: ndir.c,v 7.0.1.1 86/12/12 17:01:02 lwall Exp $ X * X * $Log: ndir.c,v $ X * Revision 7.0.1.1 86/12/12 17:01:02 lwall X * Baseline for net release. X * X * Revision 7.0 86/10/08 15:12:48 lwall X * Split into separate files. Added amoebas and pirates. X * X * Revision 4.3.1.3 85/05/23 11:19:24 lwall X * Oops, shouldn't have included sys/types.h again. X * X * Revision 4.3.1.2 85/05/15 14:46:00 lwall X * Changed short to ino_t, which may be ushort on some systems. X * X * Revision 4.3.1.1 85/05/10 11:35:34 lwall X * Branch for patches. X * X * Revision 4.3 85/05/01 11:42:55 lwall X * Baseline for release with 4.3bsd. X * X */ X X#include "EXTERN.h" X#include "warp.h" X#include "INTERN.h" X#include "ndir.h" X X#ifdef USENDIR X/* X * support for Berkeley directory reading routine on a V7 file system X */ X X/* X * open a directory. X */ XDIR * Xopendir(name) Xchar *name; X{ X register DIR *dirp; X register int fd; X X if ((fd = open(name, 0)) == -1) X return NULL; X if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) { X close (fd); X return NULL; X } X dirp->dd_fd = fd; X dirp->dd_loc = 0; X return dirp; X} X X/* X * read an old style directory entry and present it as a new one X */ X#ifndef pyr X#define ODIRSIZ 14 X Xstruct olddirect { X ino_t od_ino; X char od_name[ODIRSIZ]; X}; X#else /* a Pyramid in the ATT universe */ X#define ODIRSIZ 248 X Xstruct olddirect { X long od_ino; X short od_fill1, od_fill2; X char od_name[ODIRSIZ]; X}; X#endif X X/* X * get next entry in a directory. X */ Xstruct direct * Xreaddir(dirp) Xregister DIR *dirp; X{ X register struct olddirect *dp; X static struct direct dir; X X for (;;) { X if (dirp->dd_loc == 0) { X dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, X DIRBLKSIZ); X if (dirp->dd_size <= 0) X return NULL; X } X if (dirp->dd_loc >= dirp->dd_size) { X dirp->dd_loc = 0; X continue; X } X dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc); X dirp->dd_loc += sizeof(struct olddirect); X if (dp->od_ino == 0) X continue; X dir.d_ino = dp->od_ino; X strncpy(dir.d_name, dp->od_name, ODIRSIZ); X dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */ X dir.d_namlen = strlen(dir.d_name); X dir.d_reclen = DIRSIZ(&dir); X return (&dir); X } X} X X/* X * close a directory. X */ Xvoid Xclosedir(dirp) Xregister DIR *dirp; X{ X close(dirp->dd_fd); X dirp->dd_fd = -1; X dirp->dd_loc = 0; X free(dirp); X} X#endif /* USENDIR */ !STUFFY!FUNK! echo Extracting util.h sed >util.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: util.h,v 7.0 86/10/08 15:14:37 lwall Exp $ */ X X/* $Log: util.h,v $ X * Revision 7.0 86/10/08 15:14:37 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#if RANDBITS < 15 || defined(lint) X#define rand_mod(m) getpid() X#define RANDRAND 0.0 X#define HALFRAND 0 X#define myrand() getpid() X#else X#if RANDBITS == 15 /* 15 bits of rand()? */ X#define RANDRAND 268435456.0 /* that's 2**28 */ X#define HALFRAND 0x4000 /* that's 2**14 */ Xint rand(); X#define myrand() (rand()&32767) X#define rand_mod(m) ((int)((double)myrand() / 32768.0 * ((double)(m)))) X/* pick number in 0..m-1 */ X X#else X X#if RANDBITS < 31 /* 16 bits of rand()? */ X#define RANDRAND 1073741824.0 /* that's 2**30 */ X#define HALFRAND 0x8000 /* that's 2**15 */ Xunsigned rand(); X#define myrand() (rand()&65535) X#define rand_mod(m) ((int)((double)myrand() / 65536.0 * ((double)(m)))) X/* pick number in 0..m-1 */ X X#else /* assume 31 bits */ X#define RANDRAND 1152921504606846976.0 /* that's 2**60 */ X#define HALFRAND 0x40000000 /* that's 2**30 */ Xlong rand(); X#define myrand() rand() X#define rand_mod(m) ((myrand() / 37) % (m)) /* pick number in 0..m-1 */ X/* X * The reason for the /37 above is that our random number generator yields X * successive evens and odds, for some reason. This makes strange star maps. X */ X#endif X#endif X#endif X X X /* we get fractions of seconds from calling ftime on timebuf */ X X#ifdef FTIMER XEXT struct timeb timebuf; X#define roundsleep(x) (ftime(&timebuf),sleep(timebuf.millitm > 500?x+1:x)) X#else X#define roundsleep(x) sleep(x) X#endif X Xvoid movc3(); Xvoid no_can_do(); Xint exdis(); X XEXT bool waiting INIT(FALSE); /* are we waiting for subprocess (in doshell)? */ X X#ifdef NOTDEF XEXT int len_last_line_got INIT(0); X /* strlen of some_buf after */ X /* some_buf = get_a_line(bufptr,buffersize,fp) */ X#endif X X#ifdef NOTDEF X/* is the string for makedir a directory name or a filename? */ X X#define MD_DIR 0 X#define MD_FILE 1 X#endif X Xvoid util_init(); Xchar *safemalloc(); Xchar *safecpy(); Xchar *cpytill(); Xchar *instr(); X#ifdef SETUIDGID X int eaccess(); X#endif Xchar *getwd(); Xvoid cat(); Xvoid prexit(); Xchar *savestr(); Xchar *getval(); !STUFFY!FUNK! echo Extracting smp.0 sed >smp.0 <<'!STUFFY!FUNK!' -e 's/X//' X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * !STUFFY!FUNK! echo Extracting smp.1 sed >smp.1 <<'!STUFFY!FUNK!' -e 's/X//' X * * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * !STUFFY!FUNK! echo Extracting smp.6 sed >smp.6 <<'!STUFFY!FUNK!' -e 's/X//' X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * !STUFFY!FUNK! echo Extracting ndir.h sed >ndir.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: ndir.h,v 7.0 86/10/08 15:12:52 lwall Exp $ X * X * $Log: ndir.h,v $ X * Revision 7.0 86/10/08 15:12:52 lwall X * Split into separate files. Added amoebas and pirates. X * X * Revision 4.3.1.1 85/05/10 11:35:37 lwall X * Branch for patches. X * X * Revision 4.3 85/05/01 11:43:00 lwall X * Baseline for release with 4.3bsd. X * X */ X X#ifdef LIBNDIR X# include <ndir.h> X#else X# ifndef USENDIR X# include <sys/dir.h> X# else X X#ifndef DEV_BSIZE X#define DEV_BSIZE 512 X#endif X#define DIRBLKSIZ DEV_BSIZE X#define MAXNAMLEN 255 X Xstruct direct { X long d_ino; /* inode number of entry */ X short d_reclen; /* length of this record */ X short d_namlen; /* length of string in d_name */ X char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */ X}; X X/* X * The DIRSIZ macro gives the minimum record length which will hold X * the directory entry. This requires the amount of space in struct direct X * without the d_name field, plus enough space for the name with a terminating X * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary. X */ X#undef DIRSIZ X#define DIRSIZ(dp) \ X ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) X X/* X * Definitions for library routines operating on directories. X */ Xtypedef struct _dirdesc { X int dd_fd; X long dd_loc; X long dd_size; X char dd_buf[DIRBLKSIZ]; X} DIR; X#ifndef NULL X#define NULL 0 X#endif Xextern DIR *opendir(); Xextern struct direct *readdir(); Xextern long telldir(); Xextern void seekdir(); X#define rewinddir(dirp) seekdir((dirp), (long)0) Xextern void closedir(); X X# endif X#endif !STUFFY!FUNK! echo Extracting object.h sed >object.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: object.h,v 7.0.1.2 86/12/12 17:01:38 lwall Exp $ */ X X/* $Log: object.h,v $ X * Revision 7.0.1.2 86/12/12 17:01:38 lwall X * Baseline for net release. X * X * Revision 7.0.1.1 86/10/16 10:52:30 lwall X * Added Damage. Fixed random bugs. X * X * Revision 7.0 86/10/08 15:13:04 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#define Root 0 X#define Base 1 X#define Enterprise 2 X#define Star 3 X#define Torp 4 X#define Enemy 5 X#define Web 6 X#define Crusher 7 X Xtypedef struct object { X char posx, posy; X#ifdef SIGNEDCHAR X char velx, vely; X#else X short velx, vely; X#endif X struct object *next, *prev, *contend; X long energy; X long mass; X char type; X char image; X char strategy; X char flags; X} OBJECT; X X#define PIRATE 1 /* we may mutiny */ X#define FRIENDLY 2 /* we aren't really an enemy, for now */ X#define STATIC 4 /* we are not in the movers list at the moment */ X#define COUNTDOWN 8 /* we are counting down for something */ X#define CLOAKS 16 /* we can cloak */ X X#ifdef DOINIT XOBJECT root = {0, 0, 0, 0, &root, &root, 0, 0, 0, Root, '?', 0, 0}; X#else XEXT OBJECT root; X#endif X X#ifdef DOINIT XOBJECT free_root = {0, 0, 0, 0, &free_root, &free_root, 0, 0, 0, Root, '?', 0, 0}; X#else XEXT OBJECT free_root; X#endif X XEXT OBJECT *ent; XEXT OBJECT *base; XEXT OBJECT *enemies; XEXT OBJECT *movers; XEXT OBJECT *realapollo; XEXT OBJECT *nuke; X XEXT OBJECT *occupant[YSIZE][XSIZE]; X XOBJECT *make_object(); X Xvoid unmake_object(); Xvoid free_object(); Xvoid object_init(); !STUFFY!FUNK! echo Extracting object.c sed >object.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: object.c,v 7.0 86/10/08 15:12:55 lwall Exp $ */ X X/* $Log: object.c,v $ X * Revision 7.0 86/10/08 15:12:55 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#include "EXTERN.h" X#include "warp.h" X#include "INTERN.h" X#include "object.h" X Xvoid Xobject_init() X{ X ; X} X XOBJECT * Xmake_object(typ, img, py, px, vy, vx, energ, mas, where) Xchar typ; Xchar img; Xint px, py, vx, vy; Xlong energ, mas; XOBJECT *where; X{ X Reg1 OBJECT *obj; X X if (free_root.next == &free_root) X#ifndef lint X obj = (OBJECT *) malloc(sizeof root); X#else X obj = Null(OBJECT*); X#endif X else { X obj = free_root.next; X free_root.next = obj->next; X obj->next->prev = &free_root; X } X obj->type = typ; X obj->image = img; X obj->next = where; X obj->prev = where->prev; X where->prev = obj; X obj->prev->next = obj; X obj->velx = vx; X obj->vely = vy; X obj->contend = 0; X obj->strategy = 0; X obj->flags = 0; X obj->posx = px; X obj->posy = py; X if (typ != Torp && typ != Web) { X occupant[py][px] = obj; X } X obj->energy = energ; X obj->mass = mas; X return(obj); X} X Xvoid Xunmake_object(curobj) XReg1 OBJECT *curobj; X{ X curobj->prev->next = curobj->next; X curobj->next->prev = curobj->prev; X if (curobj == movers) { X movers = curobj->next; X } X free_object(curobj); X} X Xvoid Xfree_object(curobj) XReg1 OBJECT *curobj; X{ X curobj->next = free_root.next; X curobj->prev = &free_root; X free_root.next->prev = curobj; X free_root.next = curobj; X} !STUFFY!FUNK! echo Extracting sm.c sed >sm.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: sm.c,v 7.0 86/10/08 15:13:35 lwall Exp $ */ X X/* $Log: sm.c,v $ X * Revision 7.0 86/10/08 15:13:35 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#include <stdio.h> X#include <ctype.h> X#include "config.h" X Xmain() X{ X char screen[23][90], buf[10]; X Reg1 int y; X Reg2 int x; X int tmpy, tmpx; X X for (x=0; x<79; x++) X screen[0][x] = ' '; X screen[0][79] = '\0'; X X fgets(screen[0],90,stdin); X if (isdigit(screen[0][0])) { X int numstars = atoi(screen[0]); X X for (y=0; y<23; y++) { X for (x=0; x<79; x++) X screen[y][x] = ' '; X screen[y][79] = '\0'; X } X X for ( ; numstars; numstars--) { X scanf("%d %d\n",&tmpy,&tmpx); X y = tmpy; X x = tmpx; X screen[y][x+x] = '*'; X } X X for (y=0; y<23; y++) { X printf("%s\n",screen[y]); X } X } X else { X Reg3 int numstars = 0; X X for (y=1; y<23; y++) { X for (x=0; x<79; x++) X screen[y][x] = ' '; X screen[y][79] = '\0'; X } X X for (y=1; y<23; y++) { X fgets(screen[y],90,stdin); X } X X for (y=0; y<23; y++) { X for (x=0; x<80; x += 2) { X if (screen[y][x] == '*') { X numstars++; X } X else if (screen[y][x] == '\t' || screen[y][x+1] == '\t') { X fprintf(stderr,"Cannot have tabs in starmap--please expand.\n"); X exit(1); X } X } X } X X printf("%d\n",numstars); X X for (y=0; y<23; y++) { X for (x=0; x<80; x += 2) { X if (screen[y][x] == '*') { X printf("%d %d\n",y,x/2); X } X } X } X } X exit(0); X} !STUFFY!FUNK! echo Extracting smp.4 sed >smp.4 <<'!STUFFY!FUNK!' -e 's/X//' X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X !STUFFY!FUNK! echo Extracting makedir.SH sed >makedir.SH <<'!STUFFY!FUNK!' -e 's/X//' Xcase $CONFIG in X '') . config.sh ;; Xesac Xecho "Extracting makedir (with variable substitutions)" X$spitshell >makedir <<!GROK!THIS! X$startsh X# $Header: makedir.SH,v 7.0 86/10/08 15:12:34 lwall Exp $ X# X# $Log: makedir.SH,v $ X# Revision 7.0 86/10/08 15:12:34 lwall X# Split into separate files. Added amoebas and pirates. X# X# Revision 4.3.1.1 85/05/10 11:35:14 lwall X# Branch for patches. X# X# Revision 4.3 85/05/01 11:42:31 lwall X# Baseline for release with 4.3bsd. X# X Xexport PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$) X Xcase \$# in X 0) X $echo "makedir pathname filenameflag" X exit 1 X ;; Xesac X X: guarantee one slash before 1st component Xcase \$1 in X /*) ;; X *) set ./\$1 \$2 ;; Xesac X X: strip last component if it is to be a filename Xcase X\$2 in X X1) set \`$echo \$1 | $sed 's:\(.*\)/[^/]*\$:\1:'\` ;; X *) set \$1 ;; Xesac X X: return reasonable status if nothing to be created Xif $test -d "\$1" ; then X exit 0 Xfi X Xlist='' Xwhile true ; do X case \$1 in X */*) X list="\$1 \$list" X set \`echo \$1 | $sed 's:\(.*\)/:\1 :'\` X ;; X *) X break X ;; X esac Xdone X Xset \$list X Xfor dir do X $mkdir \$dir >/dev/null 2>&1 Xdone X!GROK!THIS! X$eunicefix makedir Xchmod 755 makedir !STUFFY!FUNK! echo Extracting smp.2 sed >smp.2 <<'!STUFFY!FUNK!' -e 's/X//' X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * X* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * X* * * * * * !STUFFY!FUNK! echo Extracting us.h sed >us.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: us.h,v 7.0.1.1 86/10/16 10:53:58 lwall Exp $ */ X X/* $Log: us.h,v $ X * Revision 7.0.1.1 86/10/16 10:53:58 lwall X * Added Damage. Fixed random bugs. X * X * Revision 7.0 86/10/08 15:14:27 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X XEXT bool cloaking; XEXT bool cloaked; X XEXT int status; XEXT int entmode; X XEXT int evely; XEXT int evelx; XEXT int bvely; XEXT int bvelx; X X#define MAXDAMAGE 9 X#define NOWARP 0 X#define NOIMPULSE 1 X#define NOPHASERS 2 X#define NOTORPS 3 X#define NOCLOAKING 4 X#define NOSHIELDS 5 X#define NOZAPPER 6 X#define NODESTRUCT 7 X#define NOTRACTORS 8 X XEXT int dam INIT(0); XEXT int lastdam INIT(-1); XEXT int damage INIT(0); XEXT int olddamage INIT(-1); X X#ifdef DOINIT Xchar *dammess[MAXDAMAGE] = { X "WARP", X "IMPULSE", X "PHASERS", X "TORPS", X "CLOAKING", X "SHIELDS", X "ZAPPER", X "DESTRUCT", X "TRACTORS" X}; Xchar damflag[MAXDAMAGE] = {0,0,0,0,0,0,0,0,0}; X#else Xextern char *dammess[]; Xextern char damflag[]; X#endif X Xvoid do_direction(); Xvoid ctrl_direction(); Xvoid shift_direction(); Xvoid get_commands(); Xvoid us_init(); !STUFFY!FUNK! echo Extracting bang.h sed >bang.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: bang.h,v 7.0 86/10/08 15:12:03 lwall Exp $ */ X X/* $Log: bang.h,v $ X * Revision 7.0 86/10/08 15:12:03 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X XEXT long blast[YSIZE][XSIZE]; XEXT bool blasted; XEXT bool xblasted[XSIZE]; XEXT bool yblasted[YSIZE]; X XEXT char bangy[YSIZE*XSIZE]; XEXT char bangx[YSIZE*XSIZE]; XEXT char bangs[YSIZE*XSIZE]; X XEXT long bangm[YSIZE*XSIZE]; X X#define MAXBDIST 40 XEXT int xx[MAXBDIST]; XEXT int yy[MAXBDIST]; X XEXT int nxtbang; XEXT bool banging; X Xvoid make_plink(); Xvoid make_blast(); Xvoid do_bangs(); Xvoid bang_init(); !STUFFY!FUNK! echo Extracting EXTERN.h sed >EXTERN.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: EXTERN.h,v 7.0.1.1 86/12/12 16:46:50 lwall Exp $ X * X * $Log: EXTERN.h,v $ X * Revision 7.0.1.1 86/12/12 16:46:50 lwall X * Guarded the undefs. X * X * Revision 7.0 86/10/08 15:11:31 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#ifdef EXT X#undef EXT X#endif X#define EXT extern X X#ifdef INIT X#undef INIT X#endif X#define INIT(x) X X#ifdef DOINIT X#undef DOINIT X#endif !STUFFY!FUNK! echo Extracting version.c sed >version.c <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: version.c,v 7.0 86/10/08 15:14:39 lwall Exp $ X * X * $Log: version.c,v $ X * Revision 7.0 86/10/08 15:14:39 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#include "patchlevel.h" X#include "INTERN.h" X#include "version.h" X X/* Print out the version number. */ X Xvoid Xversion() X{ X extern char rcsid[]; X X printf("%s\r\nPatch level: %d\r\n", rcsid, PATCHLEVEL); X} !STUFFY!FUNK! echo Extracting weapon.h sed >weapon.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: weapon.h,v 7.0 86/10/08 15:18:20 lwall Exp $ */ X X/* $Log: weapon.h,v $ X * Revision 7.0 86/10/08 15:18:20 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X XEXT int tractor INIT(0); X XEXT int etorp; XEXT int btorp; X XEXT OBJECT *isatorp[2][3][3]; X XEXT int aretorps; X Xvoid fire_torp(); Xvoid attack(); Xvoid fire_phaser(); Xint tract(); Xvoid weapon_init(); !STUFFY!FUNK! echo Extracting INTERN.h sed >INTERN.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: INTERN.h,v 7.0.1.1 86/12/12 16:51:45 lwall Exp $ X * X * $Log: INTERN.h,v $ X * Revision 7.0.1.1 86/12/12 16:51:45 lwall X * Guarded the undefs. X * X * Revision 7.0 86/10/08 15:11:37 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X X#ifdef EXT X#undef EXT X#endif X#define EXT X X#ifdef INIT X#undef INIT X#endif X#define INIT(x) = x X X#define DOINIT !STUFFY!FUNK! echo Extracting sig.h sed >sig.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: sig.h,v 7.0 86/10/08 15:13:32 lwall Exp $ */ X X/* $Log: sig.h,v $ X * Revision 7.0 86/10/08 15:13:32 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X Xvoid sig_catcher(); X#ifdef SIGTSTP Xvoid cont_catcher(); Xvoid stop_catcher(); X#endif Xvoid mytstp(); Xvoid sig_init(); Xvoid finalize(); !STUFFY!FUNK! echo Extracting move.h sed >move.h <<'!STUFFY!FUNK!' -e 's/X//' X/* $Header: move.h,v 7.0 86/10/08 15:12:46 lwall Exp $ */ X X/* $Log: move.h,v $ X * Revision 7.0 86/10/08 15:12:46 lwall X * Split into separate files. Added amoebas and pirates. X * X */ X Xvoid bounce(); Xvoid move_universe(); Xint lookaround(); Xint lookfor(); XOBJECT *lookimg(); Xvoid move_init(); !STUFFY!FUNK! echo "" echo "End of kit 6 (of 7)" cat /dev/null >kit6isdone config=true for iskit in 1 2 3 4 5 6 7; do if test -f kit${iskit}isdone; then echo "You have run kit ${iskit}." else echo "You still need to run kit ${iskit}." config=false fi done case $config in true) echo "You have run all your kits. Please read README and then type Configure." chmod 755 Configure ;; esac : Someone might mail this, so... exit