[comp.sources.games] v01i050: warp7 - space war game, Part06/07

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