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