[comp.sources.games] v03i022: trek73 - computer simulated Star Trek battles, Part01/06

games-request@tekred.TEK.COM (12/18/87)

Submitted by: Jeff Okamoto <okamoto%hpccc@hplabs.HP.COM>
Comp.sources.games: Volume 3, Issue 22
Archive-name: trek73/Part01

	[This is the latest version (4.0) of the famous Trek73 game.
	 The Makefile is setup for either SYSV or BSD by some simple
	 editing.  I added the new README file (and moved Jeff's to
	 README2) so you can get an idea of what the game is about
	 (see below).   -br]

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 6)."
# Contents:  README MANIFEST man src src/bpv.c src/cmds1.c src/cmds2.c
#   src/grammar.c
# Wrapped by billr@tekred on Thu Dec 17 11:43:30 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f README -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"README\"
else
echo shar: Extracting \"README\" \(2322 characters\)
sed "s/^X//" >README <<'END_OF_README'
XFrom the first page of the manual:
X
X                          T R E K   7 3
X
X                           Version 4.0
X
X                  A Star Trek Battle Simulation
X
X
X     Trek73 is a computer-simulated battle based on the famous
XStar Trek television series and the board game Star Fleet Bat-
Xtles.  Via computer terminal, you can clash with enemy battle
Xcruisers, such as Klingon D-7's and Romulan Sparrowhawks, and use
Xthe same strategies that Captain Kirk has used.  Like Kirk, you
Xcontrol a Federation vessel similar to the Enterprise; a computer
Xprogram directs the enemy.  Victory can fall into several
Xcategories:
X
X     Decisive Victory -- You completely destroy or cripple the
Xattacking force.
X
X     Tactical Victory -- You out-maneuver the enemy using high-
Xspeed escapes, corbomite bluffs, `play dead' tactics; or the
Xenemy surrenders.
X
X     Moral Victory -- You surrender or self-destruct and destroy
Xeach other.
X
X     All distances are measured in megameters, one million meters
X(abbreviated `M').  Speed is expressed in `Warp Factors'.  Each
Xwarp factor equals 100M per second.[1] All angles are expressed
Xin common degrees from zero to 360, measured counter-clockwise
Xfrom the x-axis, similar to reading a protractor.  Only two
Xdimensions are used.[2]
X
X     Play is as follows:
X
X     1.  You issue one of a number of commands (fire phasers,
Xchange course, launch antimatter pods, surrender, etc.) by typing
Xthe appropriate code number into the keyboard;
X
X     2.  The enemy, under programmed instructions, issues a simi-
Xlar command;
X
X     3.  Both your commands are executed (phasers are fired,
Xprobes are launched, damages are assessed, courses changed, etc.)
Xwhile the vessels move through space;
X
X     4.  Unless certain end-game conditions are met (you destroy
Xthe enemy, the enemy destroys you, your out-maneuver the enemy,
Xyou both destroy each other, or one party surrenders) the above
Xsteps are repeated.
X
X__________________________
X(R) Star Trek is a registered trademark of Paramount Pictures.
X
X(TM) Star Fleet Battles is a trademark held  jointly  by  Task
X    Force Games and Amarillo Design Bureau.
X
X 1. Although technically incorrect, it does  save  the  player
X    from having to compute cube roots.
X
X 2. This  saves the player from having to work out problems in
X    spherical trigonometry.
END_OF_README
if test 2322 -ne `wc -c <README`; then
    echo shar: \"README\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f MANIFEST -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"MANIFEST\"
else
echo shar: Extracting \"MANIFEST\" \(2034 characters\)
sed "s/^X//" >MANIFEST <<'END_OF_MANIFEST'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X MANIFEST                  1	This shipping list
X Makefile                  6	
X README                    1	
X README2                   2	
X man                       1	
X man/00.t                  3	
X man/01.t                  4	
X man/02.t                  3	
X man/03.t                  5	
X man/04.5.t                6	
X man/04.t                  4	
X man/05.t                  6	
X man/06.t                  6	
X man/07.t                  6	
X man/08ca.t                6	
X man/08cl.t                6	
X man/08dd.t                6	
X man/08dn.t                6	
X man/09ca.t                6	
X man/09cl.t                6	
X man/09dd.t                6	
X man/09dn.t                6	
X man/10.t                  5	
X man/Makefile              5	
X man/bpv.6                 3	
X man/header                5	
X man/shipyard.6            6	
X man/trek73.6              5	
X src                       1	
X src/Makefile              5	
X src/bpv.c                 1	
X src/cmds1.c               1	
X src/cmds2.c               1	
X src/cmds3.c               4	
X src/cmds4.c               2	
X src/command.l             6	
X src/damage.c              3	
X src/defines.h             5	
X src/dist.c                5	
X src/endgame.c             5	
X src/enemycom.c            2	
X src/externs.h             6	
X src/firing.c              4	
X src/getopt.c              6	
X src/globals.c             2	
X src/grammar.c             1	
X src/grammar.y             3	
X src/init.c                3	
X src/main.c                4	
X src/misc.c                4	
X src/mission.c             5	
X src/moveships.c           2	
X src/parseopts.c           4	
X src/parsit.c              5	
X src/printships.c          6	
X src/save.c                5	
X src/ships.c               4	
X src/shipyard.c            4	
X src/special.c             3	
X src/strat1.c              2	
X src/structs.h             3	
X src/subs.c                5	
X src/union.h               6	
X src/vers.c                6	
END_OF_MANIFEST
if test 2034 -ne `wc -c <MANIFEST`; then
    echo shar: \"MANIFEST\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test ! -d man ; then
    echo shar: Creating directory \"man\"
    mkdir man
fi
if test ! -d src ; then
    echo shar: Creating directory \"src\"
    mkdir src
fi
if test -f src/bpv.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"src/bpv.c\"
else
echo shar: Extracting \"src/bpv.c\" \(1439 characters\)
sed "s/^X//" >src/bpv.c <<'END_OF_src/bpv.c'
X#ident "@(#) TREK73 $Header: bpv.c,v 1.2 87/10/09 15:48:35 okamoto Exp $"
X/*
X * $Source: /ccc/okamoto/src/trek/src/RCS/bpv.c,v $
X *
X * $Header: bpv.c,v 1.2 87/10/09 15:48:35 okamoto Exp $
X *
X * $Log:	bpv.c,v $
X * Revision 1.2  87/10/09  15:48:35  15:48:35  okamoto (Jeff Okamoto)
X * Added declaration of round as a function returning a double.
X * 
X * Revision 1.1  87/10/09  11:00:29  11:00:29  okamoto (Jeff Okamoto)
X * Initial revision
X * 
X */
X/*
X * TREK73: bpv.c
X *
X * Calculate the Basic Point Value of a ships
X *
X */
X
Xvoid
Xcalculate(regen, pods, p_div, t_div, weapons, crew, bpv, eff, turn, max)
Xdouble regen;	/* Regeneration */
Xfloat pods;	/* Number of antimatter pods */
Xfloat p_div;	/* Shield divisor for phasers */
Xfloat t_div;	/* Shield divisor for torps */
Xint weapons;	/* Number of weapons */
Xint crew;	/* Number of crew */
Xdouble *bpv;	/* Return for BPV */
Xdouble *eff;	/* Return for efficiency */
Xint *turn;	/* Turn per segment */
Xint *max;	/* Maximum speed */
X{
X	double floor(), round();
X
X	*bpv = 0.;
X	*bpv += regen * 12;
X	*bpv += pods / 2;
X	*bpv += p_div * 30;
X	*bpv += t_div * 40;
X	*bpv += weapons * 10;
X	*bpv += crew / 15;
X
X	*eff = round(4 * (0.0034 * *bpv - 0.78)) / 4.0;
X	if (*eff< 0.25)
X		*eff= 0.25;
X	*turn = (int) (10 - floor(*bpv / 100.0));
X	if (*turn < 1)
X		*turn = 1;
X	*max= (int) round(-0.004 * *bpv + 11.0);
X	if (*max < 1)
X		*max = 1;
X}
X
Xdouble
Xround(x)
Xdouble x;
X{
X	double floor();
X
X	return(floor(x + 0.5));
X}
END_OF_src/bpv.c
if test 1439 -ne `wc -c <src/bpv.c`; then
    echo shar: \"src/bpv.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f src/cmds1.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"src/cmds1.c\"
else
echo shar: Extracting \"src/cmds1.c\" \(14229 characters\)
sed "s/^X//" >src/cmds1.c <<'END_OF_src/cmds1.c'
X#ident "@(#) TREK73 $Header: cmds1.c,v 1.1 87/10/09 11:00:47 okamoto Exp $"
X/*
X * $Source: /ccc/okamoto/src/trek/src/RCS/cmds1.c,v $
X *
X * $Header: cmds1.c,v 1.1 87/10/09 11:00:47 okamoto Exp $
X *
X * $Log:	cmds1.c,v $
X * Revision 1.1  87/10/09  11:00:47  11:00:47  okamoto (Jeff Okamoto)
X * Initial revision
X * 
X */
X/*
X * TREK73: cmds1.c
X *
X * User Commands
X *
X * fire_phasers, fire_tubes, lock_phasers, lock_tubes,
X * turn_phasers, turn_tubes, load_tubes, launch_probe,
X * probe_control
X *
X */
X
X#include "externs.h"
X
Xint
Xfire_phasers(sp) 
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	buf2[20];
X	char	c;
X	int	typed[MAXPHASERS];
X	register int i;
X	register int k;
X
X	for (i=0; i < MAXPHASERS; i++)
X		typed[i] = 0;
X	printf("   fire phasers [1-%d] ", sp->num_phasers);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL) {
X		printf("%s:  Belay that order!\n", captain);
X		return 0;
X	}
X	printf("   spread [%d-%d] ", MIN_PHASER_SPREAD,
X	    MAX_PHASER_SPREAD);
X	(void) Gets(buf2, sizeof(buf2));
X	if (buf2[0] == NULL) {
X		printf("%s:  Belay that order!\n", captain);
X		return 0;
X	}
X	i = atoi(buf2);
X	if (i < MIN_PHASER_SPREAD || i > MAX_PHASER_SPREAD)
X		return 0;
X	sp->p_spread = i;
X	if (strcmp(buf1, "all") && strcmp(buf1, "ALL"))
X		for (i=0; c = buf1[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_phasers - 1)
X				continue;
X			typed[k]++;
X			if (sp->phasers[k].status & (P_DAMAGED | P_FIRING))
X				continue;
X			sp->phasers[k].status |= P_FIRING;
X		}
X	else
X		for (i=0; i<sp->num_phasers; i++) {
X			typed[i]++;
X			if (sp->phasers[i].status & (P_DAMAGED | P_FIRING))
X				continue;
X			sp->phasers[i].status |= P_FIRING;
X		}
X	check_p_damage(typed, sp, "fire");	/* Type if damaged */
X	check_p_turn(typed, sp, 1);
X	return 1;
X}
X
X
Xint
Xfire_tubes(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	c;
X	int	typed[MAXTUBES];
X	register int i;
X	register int j;
X	register int k;
X
X	for (i=0; i < MAXTUBES; i++)
X		typed[i] = 0;
X	printf("   fire tubes [1-%d] ", sp->num_tubes);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL) {
X		printf("%s:  Belay that order!\n", captain);
X		return 0;
X	}
X	if (strcmp(buf1, "all") && strcmp(buf1, "ALL"))
X		for (i=0; c = buf1[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_tubes - 1)
X				continue;
X			typed[k]++;
X			if (sp->tubes[k].status & (T_DAMAGED | T_FIRING))
X				continue;
X			sp->tubes[k].status |= T_FIRING;
X		}
X	else
X		for (i=0; i < sp->num_tubes; i++) {
X			typed[i]++;
X			if (sp->tubes[i].status & (T_DAMAGED | T_FIRING))
X				continue;
X			sp->tubes[i].status |= T_FIRING;
X		}
X	check_t_damage(typed, sp, "fire");	/* Type if damaged */
X	check_t_turn(typed, sp, 1);
X	j = 0;
X	for (i=0; i < sp->num_tubes; i++) {
X		if ((typed[i] == 0) || (!(sp->tubes[i].status & T_FIRING)))
X			continue;
X		if (sp->tubes[i].load == 0) {
X			if (!j)
X				printf("Computer: Tube(s) %d", i + 1);
X			else
X				printf(", %d", i + 1);
X			j++;
X		}
X	}
X	if (j > 1)
X		puts(" are not loaded.");
X	else if (j == 1)
X		puts(" is not loaded.");
X	return 0;
X}
X
X
Xint
Xlock_phasers(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	buf2[20];
X	int	typed[MAXPHASERS];
X	char	c;
X	struct	ship *ep;
X	register int i;
X	register int k;
X
X	for (i=0; i < MAXPHASERS; i++)
X		typed[i] = 0;
X	if (is_dead(sp, S_COMP)) {
X		printf("%s:  Impossible %s, our computer is dead.\n",
X		    science, title);
X		return 0;
X	}
X	if (!syswork(sp, S_COMP)) {
X		printf("%s:  Our computer is temporarily buggy",
X		    science);
X		return 0;
X	}
X	printf("   lock phasers [1-%d] ", sp->num_phasers);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	printf("   onto [whom] ");
X	(void) Gets(buf2, sizeof(buf2));
X	if (buf2[0] == NULL)
X		return 0;
X	ep = ship_name(buf2);
X	if (ep == NULL)
X		return 0;
X	if (cantsee(ep)) {
X		printf("%s:  %s, unable to lock phasers onto %s.\n",
X		    nav, title, ep->name);
X		return 0;
X	}
X	if (strcmp(buf1, "all") && strcmp(buf1, "ALL"))
X		for (i=0; c = buf1[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_phasers - 1)
X				continue;
X			typed[k]++;
X			if (sp->phasers[k].status & P_DAMAGED)
X				continue;
X			sp->phasers[k].target = ep;
X		}
X	else
X		for (i=0; i < sp->num_phasers; i++) {
X			typed[i]++;
X			if (sp->phasers[i].status & P_DAMAGED)
X				continue;
X			sp->phasers[i].target = ep;
X		}
X	check_p_damage(typed, sp, "lock");
X	check_p_turn(typed, sp, 0);
X	return 1;
X}
X
X
Xint
Xlock_tubes(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	buf2[20];
X	int	typed[MAXTUBES];
X	char	c;
X	struct	ship *ep;
X	register int i;
X	register int k;
X
X	for (i=0; i < sp->num_tubes; i++)
X		typed[i] = 0;
X	if (is_dead(sp, S_COMP)) {
X		printf("%s:  Impossible %s, our computer is dead.\n", science, title);
X		return 0;
X	}
X	if (!syswork(sp, S_COMP)) {
X		printf("%s:  Our computer is temporarily buggy", science);
X		return 0;
X	}
X	printf("   lock tubes [1-%d] ", sp->num_tubes);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	printf("   onto whom ");
X	(void) Gets(buf2, sizeof(buf2));
X	if (buf2[0] == NULL)
X		return 0;
X	ep = ship_name(buf2);
X	if (ep == NULL)
X		return 0;
X	if (cantsee(ep)) {
X		printf ("%s:  %s, unable to lock tubes onto %s.",
X		    nav, title, ep->name);
X		return 0;
X	}
X	if (strcmp(buf1, "all") && strcmp(buf1, "ALL"))
X		for (i=0; c = buf1[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_tubes - 1)
X				continue;
X			typed[k]++;
X			if (sp->tubes[k].status & T_DAMAGED)
X				continue;
X			sp->tubes[k].target = ep;
X		}
X	else
X		for (i=0; i < sp->num_tubes; i++) {
X			typed[i]++;
X			if (sp->tubes[i].status & T_DAMAGED)
X				continue;
X			sp->tubes[i].target = ep;
X		}
X	check_t_damage(typed, sp, "lock");
X	check_t_turn(typed, sp, 0);
X	return 1;
X}
X
X
Xint
Xturn_phasers(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	buf2[20];
X	char	c;
X	int	typed[MAXPHASERS];
X	register int i;
X	register float j;
X	register int k;
X
X	for (i=0; i < MAXPHASERS; i++)
X		typed[i] = 0;
X	printf("   turn phasers [1-%d] ", sp->num_phasers);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	printf("   to [0-360] ");
X	(void) Gets(buf2, sizeof(buf2));
X	if (buf2[0] == NULL)
X		return 0;
X	j = atof(buf2);
X	if (j < 0.0 || j > 360.0)
X		return 0;
X	if (strcmp(buf1, "all") && strcmp(buf1, "ALL"))
X		for (i=0; c = buf1[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_phasers - 1)
X				continue;
X			typed[k]++;
X			if (sp->phasers[k].status & P_DAMAGED)
X				continue;
X			sp->phasers[k].target = NULL;
X			sp->phasers[k].bearing = j;
X		}
X	else
X		for (i=0; i < sp->num_phasers; i++) {
X			typed[i]++;
X			if (sp->phasers[i].status & P_DAMAGED)
X				continue;
X			sp->phasers[i].target = NULL;
X			sp->phasers[i].bearing = j;
X		}
X	check_p_damage(typed, sp, "turn");
X	check_p_turn(typed, sp, 0);
X	return 1;
X}
X
X
Xint
Xturn_tubes(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	buf2[20];
X	char	c;
X	int	typed[MAXTUBES];
X	register int i;
X	register float j;
X	register int k;
X
X	for (i=0; i < MAXTUBES; i++)
X		typed[i] = 0;
X	printf("   turn tubes [1-%d] ", sp->num_tubes);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	printf("   to [0-360] ");
X	(void) Gets(buf2, sizeof(buf2));
X	if (buf2[0] == NULL)
X		return 0;
X	j = atof(buf2);
X	if (j < 0.0 || j > 360.0)
X		return 0;
X	if (strcmp(buf1, "all") && strcmp(buf1, "ALL"))
X		for (i=0; c = buf1[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_tubes - 1)
X				continue;
X			typed[k]++;
X			if (sp->tubes[k].status & T_DAMAGED)
X				continue;
X			sp->tubes[k].target = NULL;
X			sp->tubes[k].bearing = j;
X		}
X	else
X		for (i=0; i < sp->num_tubes; i++) {
X			typed[i]++;
X			if (sp->tubes[i].status & T_DAMAGED)
X				continue;
X			sp->tubes[i].target = NULL;
X			sp->tubes[i].bearing = j;
X		}
X	check_t_damage(typed, sp, "turn");
X	check_t_turn(typed, sp, 0);
X	return 1;
X}
X
X
Xint
Xload_tubes(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	char	buf2[20];
X	char	c;
X	int	load;
X	struct	tube *tp;
X	int	typed[MAXTUBES];
X	register int i;
X	register float j;
X	register int k;
X
X	for (i=0; i<MAXTUBES; i++)
X		typed[i] = 0;
X	load = 0;
X	printf("   [load or unload] ");
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	if (*buf1 == 'l' || *buf1 == 'L')
X		load++;
X	else if (*buf1 != 'u' && *buf1 != 'U')
X		return 0;
X	printf("   tubes [1-%d] ", sp->num_tubes);
X	(void) Gets(buf2, sizeof(buf2));
X	if (buf2[0] == NULL)
X		return 0;
X	if (strcmp(buf2, "all") && strcmp(buf2, "ALL"))
X		for (i=0; c = buf2[i]; i++) {
X			k = c - '1';
X			if (k < 0 || k > sp->num_tubes - 1)
X				continue;
X			typed[k]++;
X		}
X	else
X		for (i=0; i < sp->num_tubes; i++)
X			typed[i]++;
X	for (i = 0; i < sp->num_tubes; i++) {
X		tp = &sp->tubes[i];
X		if (!typed[i] || tp->status & T_DAMAGED)
X			continue;
X		if (load) {
X			j = min(sp->energy, MAX_TUBE_CHARGE - tp->load);
X			if (j <= 0)
X				continue;
X			sp->energy -= j;
X			sp->pods -= j;
X			tp->load += j;
X		} else {
X			j = tp->load;
X			if (j <= 0)
X				continue;
X			sp->energy += j;
X			sp->pods += j;
X			tp->load = 0;
X		}
X	}
X	printf("%s: Tubes now ", engineer);
X	for (i=0; i < sp->num_tubes; i++) {
X		if (sp->tubes[i].status & T_DAMAGED)
X			printf(" -- ");
X		else
X			printf(" %-2d ", sp->tubes[i].load);
X	}
X	printf(" energy at %d/%d\n", (int)sp->energy, (int)sp->pods);
X	return 1;
X}
X
X
Xint
Xlaunch_probe(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	int	pods, delay, prox;
X	float	course;
X	struct	ship *target;
X	struct	list *lp;
X	struct	torpedo *pp;
X
X	pods = delay = prox = 0;
X	course = 0.0;
X	target = NULL;
X	if (is_dead(sp, S_PROBE)) {
X		printf("%s:  Probe launcher destroyed!\n", engineer);
X		return 0;
X	}
X	if (!syswork(sp, S_PROBE)) {
X		printf("%s:  Probe launcher temporarily disabled, %s\n",
X		    engineer, title);
X		return 0;
X	}
X	if (sp->energy < MIN_PROBE_CHARGE) {
X		printf("%s: We've not enough power, Captain.\n", engineer);
X		return 0;
X	}
X	printf("%s: %d pods available.\n", engineer, (int)sp->energy);
X	printf("%s: Number to launch [%d+] is ", captain, MIN_PROBE_CHARGE);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		goto bad_param;
X	pods = atoi(buf1);
X	if (pods < MIN_PROBE_CHARGE || pods > sp->energy)
X		goto bad_param;
X	printf("   set time delay to [0-%d] ", MAX_PROBE_DELAY);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		goto bad_param;
X	delay = atoi(buf1);
X	if (delay < 0 || delay > MAX_PROBE_DELAY)
X		goto bad_param;
X	printf("   set proximity delay to [%d+] ", MIN_PROBE_PROX);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		goto bad_param;
X	prox = atoi(buf1);
X	if (prox < MIN_PROBE_PROX)
X		goto bad_param;
X	printf("   launch towards [whom, if anyone] ");
X	(void) Gets(buf1, sizeof(buf1));
X	if (*buf1) {
X		target = ship_name(buf1);
X		if (target == NULL)
X			goto bad_param;
X		if (cantsee(target) || !syswork(sp, S_SENSOR)) {
X			printf("%s:  %s, unable to lock probe onto the %s.\n",
X			    helmsman, title, target->name);
X			return 0;
X		}
X	} else {
X		printf("   course [0-360] ");
X		(void) Gets(buf1, sizeof(buf1));
X		if (buf1[0] == NULL)
X			goto bad_param;
X		course = atof(buf1);
X		if (course < 0.0 || course > 360.0)
X			goto bad_param;
X		target = NULL;
X	}
X	/*
X	 * add a new item to the list of items in space
X	 */
X	lp = newitem(I_PROBE);
X	lp->data.tp = MKNODE(struct torpedo, *, 1);
X	pp = lp->data.tp;
X	if (pp == (struct torpedo *)NULL) {
X		fprintf(stderr, "launch_probe: malloc failed\n");
X		exit(2);
X	}
X	pp->from = sp;
X	pp->fuel = pods;
X	pp->timedelay = delay;
X	pp->speed = sp->warp;
X	pp->newspeed = 3.0;
X	pp->prox = prox;
X	pp->target = target;
X	pp->course = course;
X	pp->x = sp->x;
X	pp->y = sp->y;
X	pp->id = new_slot();
X	pp->type = TP_PROBE;
X	/*
X	 * subtract the pods used
X	 */
X	sp->pods -= pods;
X	sp->energy -= pods;
X	sp->probe_status = PR_LAUNCHING;
X	printf("%s: Probe %d away\n",engineer, pp->id);
X	return 1;
Xbad_param:
X	printf("%s: Bad parameters, %s.\n", science, title);
X	return 0;
X}
X
X
Xint
Xprobe_control(sp)
Xstruct ship *sp;
X{
X	register struct list *lp;
X	register int i;
X	register float j;
X	register struct torpedo *pp;
X	struct	torpedo *probes[20];
X	int	probenum;
X	struct	ship *ep;
X	int	pnum;
X	float	bear;
X	int	range;
X	char	buf1[20];
X	char	*bp;
X
X	pnum = 0;
X	for (lp = &head; lp != tail; lp = lp->fwd) {
X		if (lp->type != I_PROBE)
X			continue;
X		pp = lp->data.tp;
X		if (pp->from != sp)
X			continue;
X		if (!pnum)
X	printf("\nprobe bearng range course time  prox units target\n");
X		if (pnum >= sizeof probes / sizeof probes[0]) {
X			printf("\n%s:  There are other probes out but\n",
X			    nav);
X			puts("   these are all we can control at one time.");
X		}
X		probes[pnum] = pp;
X		pnum++;
X		range = rangefind(sp->x, pp->x, sp->y, pp->y);
X		bear = bearing(sp->x, pp->x, sp->y, pp->y);
X		if (pp->target == NULL)
X			bp = "NONE";
X		else
X			bp = pp->target->name;
X		printf(" %2d    %4.1f %5d  %4.0f  %4.1f %5d  %3d  %s\n",
X			pp->id, bear, range, pp->course, pp->timedelay,
X			pp->prox, pp->fuel, bp);
X	}
X	if (!pnum) {
X		printf("%s: What probes?\n", nav);
X		return 0;
X	}
X	printf("%s:  Detonate all probes?\n", nav);
X	printf("%s:  [yes or no] ", captain);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] != NULL && (*buf1 == 'Y' || *buf1 == 'y')) {
X		printf("%s:  Aye, %s\n", nav, title);
X		for (i=0; i<pnum; i++)
X			probes[i]->timedelay = 0.0;
X		sp->probe_status = PR_DETONATE;
X		return 1;
X	}
X	printf("   control probe [#] ");
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	probenum = atoi(buf1);
X	for (i=0; i < pnum; i++)
X		if (probes[i]->id == probenum)
X			break;
X	if (i == pnum)
X		return 0;
X	probenum = i;
X	printf("%s:  Detonate it?\n", nav);
X	printf("%s:  [yes or no] ", captain);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] != NULL && (*buf1 == 'y' || *buf1 == 'Y')) {
X		probes[probenum]->timedelay = 0.;
X		sp->probe_status = PR_DETONATE;
X		return 1;
X	}
X	printf("   lock it onto [whom, if anyone] ");
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] != NULL) {
X		ep = ship_name(buf1);
X		if (ep != NULL) {
X			sp->probe_status = PR_LOCK;
X			if (cansee(ep) && syswork(sp, S_SENSOR)) {
X				probes[probenum]->target = ep;
X				printf("%s: locking.\n", nav);
X				return 1;
X			} else {
X				printf("%s:  %s, unable to lock probe on the %s.\n",
X				    helmsman, title, ep->name);
X				return 0;
X			}
X		}
X	}
X	printf("   set it to course [0-360] ");
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	sp->probe_status = PR_LOCK;
X	j = atof(buf1);
X	if (j < 0.0 || j > 360.0)
X		return 0;
X	probes[probenum]->course = j;
X	probes[probenum]->target = NULL;
X	printf("%s: setting in new course.\n", nav);
X	return 1;
X}
END_OF_src/cmds1.c
if test 14229 -ne `wc -c <src/cmds1.c`; then
    echo shar: \"src/cmds1.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f src/cmds2.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"src/cmds2.c\"
else
echo shar: Extracting \"src/cmds2.c\" \(15121 characters\)
sed "s/^X//" >src/cmds2.c <<'END_OF_src/cmds2.c'
X#ident "@(#) TREK73 $Header: cmds2.c,v 1.2 87/10/13 16:00:46 okamoto Exp $"
X/*
X * $Source: /ccc/okamoto/src/trek/src/RCS/cmds2.c,v $
X *
X * $Header: cmds2.c,v 1.2 87/10/13 16:00:46 okamoto Exp $
X *
X * $Log:	cmds2.c,v $
X * Revision 1.2  87/10/13  16:00:46  16:00:46  okamoto (Jeff Okamoto)
X * Fixed calls to Gets
X * 
X * Revision 1.1  87/10/09  11:01:38  11:01:38  okamoto (Jeff Okamoto)
X * Initial revision
X * 
X */
X/*
X * TREK73: cmds2.c
X *
X * User Commands
X *
X * pos_report, pos_display, pursue, elude, helm, self_scan, scan
X *
X * (print_damages)
X *
X */
X
X#include "externs.h"
X#include <ctype.h>
X
Xint
Xpos_report(sp)
Xstruct ship *sp;
X{
X	struct	ship *sp1;
X	struct	torpedo *tp;
X	struct	list *lp;
X	int	x, y;
X	int	range;
X	float	bear;
X	float	speed;
X	float	course;
X	float	relbear;
X	float	revrelbear;
X	int	maxlen = 0;
X	int	incltorp = 0;
X	char	whitespace[5], who[80];
X#ifdef SHOWTORP
X	char	buf[20];
X#endif
X
X#ifdef SHOWTORP
X	printf("%s:  Include torpedoes?\n", science);
X	printf("%s:  [yes or no] ", captain);
X	(void) Gets(buf, sizeof buf);
X	if (buf[0] == 'y' || buf[0] == 'Y')
X		incltorp = 1;
X#endif
X	/*
X	 * Go through the list of objects and find out the longest
X	 * name of any of them.  This is to insure that no matter
X	 * what the names of the ship, the position report will
X	 * come out formatted.
X	 */
X	for (lp = &head; lp != tail; lp = lp->fwd)
X		switch(lp->type) {
X		case I_SHIP:
X			sp1 = lp->data.sp;
X			maxlen = max(maxlen, strlen(sp1->name));
X			break;
X#ifdef SHOWTORP
X		case I_TORPEDO:
X			if (!incltorp)
X				break;
X			tp = lp->data.tp;
X			maxlen = max(maxlen, strlen(tp->from->name) + 8);
X			break;
X#endif
X		case I_PROBE:
X			tp = lp->data.tp;
X			maxlen = max(maxlen, strlen(tp->from->name) + 9);
X			break;
X		case I_ENG:
X			tp = lp->data.tp;
X			maxlen = max(maxlen, strlen(tp->from->name) + 12);
X			break;
X		}
X	maxlen += 2;			/* For "cloaked" column */
X	/*
X	 * Construct a string %ns where n is the length of the
X	 * longest name.
X	 */
X	(void) sprintf(whitespace, "%%%ds", maxlen);
X	/*
X	 * And print out the position report
X	 */
X	printf(whitespace, " ");
X	puts("                     abs           rel   rev rel");
X	printf(whitespace, " ");
X	puts(" class warp course bearing range bearing bearing");
X	for (lp = &head; lp != tail; lp = lp->fwd) {
X		if (lp->type == 0)
X			continue;
X		sp1 = NULL;
X		tp = NULL;
X		if (lp->type == I_SHIP) {
X			sp1 = lp->data.sp;
X			if (is_dead(sp1, S_DEAD))
X				continue;
X			if (cansee(sp1)) {
X				x = sp1->x;
X				y = sp1->y;
X				speed = sp1->warp;
X				course = sp1->course;
X				/* Reset what we know about his position */
X				sp1->position.x = sp1->x;
X				sp1->position.y = sp1->y;
X				sp1->position.warp = sp1->warp;
X				sp1->position.course = sp1->course;
X				sp1->position.bearing = bearing(sp->x,
X				    sp1->x, sp->y, sp1->y);
X				sp1->position.range = rangefind(sp->x,
X				    sp1->x, sp->y, sp1->y);
X				(void) sprintf(who, "%.*s  ",
X				    sizeof who - 3, sp1->name);
X			} else {
X				x = sp1->position.x;
X				y = sp1->position.y;
X				speed = sp1->position.warp;
X				course = sp1->position.course;
X				(void) sprintf(who, "%.*s *",
X				    sizeof who - 3, sp1->name);
X			}
X		} else {
X			tp = lp->data.tp;
X			if (lp->type == I_TORPEDO && !incltorp)
X				continue;
X			x = tp->x;
X			y = tp->y;
X			speed = tp->speed;
X			course = tp->course;
X			switch(lp->type) {
X#ifdef SHOWTORP
X				case I_TORPEDO:
X					(void) sprintf(who,"%.*s torp %d  ",
X					    sizeof who - 11, tp->from->name,
X					    tp->id);
X					break;
X#endif
X				case I_PROBE:
X					(void) sprintf(who, "%.*s probe %d  ",
X					    sizeof who - 12, tp->from->name,
X					    tp->id);
X					break;
X				case I_ENG:
X					(void) sprintf(who,"%.*s engineering  ",
X					    sizeof who - 15, tp->from->name);
X					break;
X				default:
X					(void) sprintf(who, "lp->type = %d  ",
X					    lp->type);
X					break;
X			}
X		}
X		printf(whitespace, who);
X		if (sp1)
X			printf("%5s", sp1->class);
X		else
X			printf("     ");
X		printf("%6.1f   %3.0f   ", speed, course);
X		if (sp1 == sp) {
X			if (sp->target != NULL)
X				printf("helm locked on %s", sp->target->name);
X			putchar('\n');
X		} else {
X			bear = bearing(sp->x, x, sp->y, y);
X			range = rangefind(sp->x, x, sp->y, y);
X			relbear = rectify(round(bear - sp->course));
X			revrelbear = rectify(round(bear + 180.0 - course));
X			printf(" %3.0f   %5d   %3.0f     %3.0f\n",
X			    bear, range, relbear, revrelbear);
X		}
X	}
X	return 0;
X}
X
X
Xint
Xpos_display(sp)
Xstruct ship *sp;
X{
X	register int i;
X	register int j;
X	int	range;
X	char	buf1[20];
X	int	x, y;
X	float	xf, yf;
X	int	h, v;
X	int 	hpitch = 10;
X	int	vpitch = 6;
X	char	map[13][23];	/* [2*MAXvpitch + 1][2*MAXhpitch + 1] */
X	struct	list *lp;
X	struct	ship *sp1;
X	struct	torpedo *tp;
X	char	c;
X
X	if (is_dead(sp, S_SENSOR)) {
X		printf("%s: Sensors are damaged.\n", science);
X		return 0;
X	}
X	if (!syswork(sp, S_SENSOR)) {
X		printf("%s: Sensors are temporarily inoperative.\n",
X		    science);
X		return 0;
X	}
X	printf("   display to [%d-%d] ", MIN_SENSOR_RANGE, MAX_SENSOR_RANGE);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	range = atoi(buf1);
X	if (range < MIN_SENSOR_RANGE || range > MAX_SENSOR_RANGE)
X		return 0;
X	/*
X	 * Compensation for aspect ratio of the output device
X	 */
X	x = range/hpitch;
X	y = range/vpitch;
X	for (i=0; i<=2*vpitch; i++) {
X		if (i == 0 || i == 2*vpitch)
X			for(j=0; j<=2*hpitch; j++)
X				map[i][j] = '-';
X		else
X			for(j=0; j<=2*hpitch; j++)
X				map[i][j] = ' ';
X	}
X	map[vpitch][hpitch] = '+';
X	for (lp = &head; lp != tail; lp = lp->fwd) {
X		if (lp->data.sp == sp)
X			continue;
X		if (lp->type == I_SHIP) {
X			sp1 = lp->data.sp;
X			if (cansee(sp1)) {
X				/* Update the position */
X				sp1->position.x = sp1->x;
X				sp1->position.y = sp1->y;
X				sp1->position.warp = sp1->warp;
X				sp1->position.course = sp1->course;
X				sp1->position.bearing = bearing(sp->x, x, sp->y, y);
X				sp1->position.range = rangefind(sp->x, x, sp->y, y);
X				xf = sp1->x - sp->x;
X				yf = sp1->y - sp->y;
X			} else {
X				xf = sp1->position.x - sp->x;
X				yf = sp1->position.y - sp->y;
X			}
X		} else {
X			tp = lp->data.tp;
X			xf = tp->x - sp->x;
X			yf = tp->y - sp->y;
X		}
X		v = yf/y + vpitch + 0.5;
X		h = xf/x + hpitch + 0.5;
X		if (v < 0 || v > 2*vpitch)
X			continue;
X		if (h < 0 || h > 2*hpitch)
X			continue;
X		switch (lp->type) {
X			case I_SHIP:
X				c = lp->data.sp->name[0];
X				if (cantsee(lp->data.sp))
X					c = tolower(c);
X				break;
X			case I_TORPEDO:
X				c = ':';
X				break;
X			case I_ENG:
X				c = '#';
X				break;
X			case I_PROBE:
X				c = '*';
X				break;
X			default:
X				c = '?';
X				break;
X		}
X		map[2*vpitch - v][h] = c;
X	}
X	for (i=0; i<=2*vpitch; i++) {
X		for (j=0; j<=2*hpitch; j++)
X			if (map[i][j] != ' ')
X				break;
X		if (j <= 2*hpitch)
X			printf("%.*s", 2*hpitch + 1, map[i]);
X		putchar('\n');
X	}
X	return 0;
X}
X
X
Xint
Xpursue(sp)
Xstruct ship *sp;
X{
X	register float i;
X	char	buf1[20];
X	struct	ship *ep;
X	float	warp;
X	
X	if (is_dead(sp, S_COMP)) {
X		printf("%s: Impossible, %s, our computer is dead\n",science ,title);
X		return 0;
X	}
X	if (!syswork(sp, S_COMP)) {
X		printf("%s: Main computer down, %s.  Rebooting.\n",
X		    science, title);
X		return 0;
X	}
X	printf("   Mr. %s, pursue [who] ", nav);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	ep = ship_name(buf1);
X	if (ep == NULL)
X		return 0;
X	if (cantsee(ep)) {
X		printf("%s:  %s, unable to acquire helm lock.\n", nav, title);
X		return 0;
X	}
X	printf("   Mr. %s, warp factor [-%.2f to %.2f] ", helmsman, 
X	    sp->max_speed, sp->max_speed);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	warp = atof(buf1);
X	if (fabs(warp) > 1.0 && is_dead(sp, S_WARP)) {
X		printf("%s: Warp drive is dead, Captain.\n", science);
X		warp = (warp < 0.0) ? -1.0 : 1.0;
X	}
X	if (fabs(warp) > sp->max_speed) {
X		printf("%s: %s, the engines canna go that fast!\n",engineer, title);
X		warp = (warp < 0.0) ? -sp->max_speed : sp->max_speed;
X	}
X	sp->newwarp = warp;
X	sp->target = ep;
X	sp->relbear = 0.0;
X	i = bearing(sp->x, ep->x, sp->y, ep->y);
X	printf("%s: Aye, %s, coming to course %3.0f.\n", nav, title, i);
X	sp->newcourse = i;
X	return 1;
X}
X
X
Xint
Xelude(sp)
Xstruct ship *sp;
X{
X	register float i;
X	char	buf1[20];
X	struct	ship *ep;
X	float	warp;
X
X	if (is_dead(sp, S_COMP)) {
X		printf("%s: Impossible, %s, our computer is dead\n",
X		    science, title);
X		return 0;
X	}
X	if (!syswork(sp, S_COMP)) {
X		printf("%s: Main computer down, %s.  Rebooting.\n",
X		    science, title);
X		return 0;
X	}
X	printf("   Mr. %s, elude [who] ", nav);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	ep = ship_name(buf1);
X	if (ep == NULL)
X		return 0;
X	if (cantsee(ep)) {
X		printf("%s:  %s, unable to acquire helm lock.\n",
X		    nav, title);
X		return 0;
X	}
X		
X	printf("   Mr. %s, warp factor [-%.2f to %.2f] ", helmsman, 
X	    sp->max_speed, sp->max_speed);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	warp = (float) atof(buf1);
X	if (fabs(warp) > 1.0 && is_dead(sp, S_WARP)) {
X		printf("%s: Warp drive is dead, Captain.\n", science);
X		warp = (warp < 0.0) ? -1.0 : 1.0;
X	}
X	if (fabs(warp) > sp->max_speed) {
X		printf("%s: %s, the engines canna go that fast!\n",engineer, title);
X		warp = (warp < 0.0) ? -sp->max_speed : sp->max_speed;
X	}
X	sp->newwarp = warp;
X	sp->target = ep;
X	sp->relbear = 180.0;
X	i = bearing(sp->x, ep->x, sp->y, ep->y);
X	i = rectify(i + 180.0);
X	printf("%s: Aye, %s, coming to course %3.0f.\n", nav, title, i);
X	sp->newcourse = i;
X	return 1;
X}
X
Xint
Xhelm(sp)
Xstruct ship *sp;
X{
X	char	buf1[20];
X	register float course;
X	float	warp;
X
X	printf("   Mr. %s, come to course [0-359] ", nav);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	course = atof(buf1);
X	if (course < 0.0 || course >= 360.0)
X		return 0;
X	printf("   Mr. %s, warp factor [-%.2f to %.2f] ", helmsman, 
X	    sp->max_speed, sp->max_speed);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	warp = (float) atof(buf1);
X	if (fabs(warp) > 1.0 && is_dead(sp, S_WARP)) {
X		printf("%s: Warp drive is dead, Captain.\n", science);
X		warp = (warp < 0.0) ? -1.0 : 1.0;
X	}
X	if (fabs(warp) > sp->max_speed) {
X		printf("%s: %s, the engines canna go that fast!\n",engineer, title);
X		warp = (warp < 0.0) ? -sp->max_speed : sp->max_speed;
X	}
X	sp->newwarp = warp;
X	sp->newcourse = course;
X	sp->target = NULL;
X	sp->relbear = 0.0;
X	printf("%s: Aye, %s.\n", nav, title);
X	printf("%s: Aye, %s.\n", helmsman, title);
X	return 1;
X}
X
Xint
Xself_scan(sp)
Xstruct ship *sp;
X{
X	(void) print_damage(sp);
X	return 1;
X}
X
Xint
Xscan(sp)
Xstruct ship *sp;
X{
X	struct	ship *ep = NULL;
X	struct	torpedo *tp = NULL;
X	struct	list *lp;
X	int	item = I_UNDEFINED;
X	int	probe_num;
X	char	buf1[20];
X
X	printf("   %s, scan [who] ", science);
X	(void) Gets(buf1, sizeof(buf1));
X	if (buf1[0] == NULL)
X		return 0;
X	if (buf1[0] == '#') {
X		strcpy(buf1,buf1+1);
X		if (strlen(buf1) == 0) {
X			printf("%s: %s, scan whose engineering?\n", science, title);
X			return 0;
X		}
X		ep = ship_name(buf1);
X		if (ep == NULL) {
X			printf("%s: %s, no such ship as the %s.\n", science, title, buf1);
X			return 0;
X		}
X		for (lp = &head; lp != NULL; lp = lp->fwd) {
X			if (lp == tail)
X				break;
X			if (lp->type == I_UNDEFINED)
X				continue;
X			if (lp->type == I_ENG && lp->data.tp->from == ep) {
X				tp = lp->data.tp;
X				break;
X			}
X		}
X		if (tp == NULL) {
X			printf("%s:  %s, the %s has not jettisoned it's engineering.\n",
X			    science, title, ep->name);
X			return 0;
X		}
X		item = I_ENG;
X	} else if ((probe_num = atoi(buf1)) > 0) {
X		for (lp = &head; lp != NULL; lp = lp->fwd) {
X			if (lp == tail)
X				break;
X			if (lp->type != I_PROBE)
X				continue;
X			if (lp->data.tp->id == probe_num) {
X				tp = lp->data.tp;
X				break;
X			}
X		}
X		if (tp == NULL) {
X			printf("%s: %s, there is no probe %d", science, title, probe_num);
X			return 0;
X		}
X		item = I_PROBE;
X	} else {
X		ep = ship_name(buf1);
X		if (ep == NULL) {
X			printf("%s: %s, no such ship as the %s.\n", science, title, buf1);
X			return 0;
X		}
X		item = I_SHIP;
X		if (cantsee(ep)) {
X			printf("%s:  %s, I am unable to scan the %s.\n",
X			    science, title, ep->name);
X			return 0;
X		}
X	}
X	if ((sp != ep) && (is_dead(sp, S_SENSOR))) {
X		printf ("%s: The sensors are damaged, Captain.\n",
X		    science);
X		return 0;
X	}
X	if ((sp != ep) && (!syswork(sp, S_SENSOR))) {
X		printf("%s: %s, sensors are temporarily out.\n",
X		    science, title);
X		return 0;
X	}
X	if ((sp == ep) && (item == I_SHIP)) {
X		printf ("%s: Captain, don't you mean 'Damage Report'?\n", science);
X		return 0;
X	}
X	if (item == I_SHIP)
X		(void) print_damage(ep);
X	else
X		(void) scan_torpedo(tp);
X	return 1;
X}
X
Xint
Xprint_damage(ep)
Xstruct ship *ep;
X{	
X	register int i;
X	register int j;
X	register float k;
X
X	printf("\n\nDamages to the %s\n", ep->name);
X	for (i=0; i<S_NUMSYSTEMS + 1; i++) {
X		if (is_dead(ep, i))
X			printf("%s.\n", statmsg[i]);
X		else if (ep->status[i] && i < S_NUMSYSTEMS)
X			printf("%s damaged %d%%\n", sysname[i], ep->status[i]);
X	}
X	printf("Survivors: %d\n", ep->complement);
X	printf("Helm lock: ");
X	if (ep->target == NULL)
X		printf("none.\n");
X	else
X		printf("%s\n",ep->target);
X	printf("\nPhasers Control");
X	for (i=0; i<ep->num_phasers; i++) {
X		if (ep->phasers[i].status & P_DAMAGED)
X			printf("\tdamaged");
X		else if (ep->phasers[i].target == NULL)
X			printf("\tmanual");
X		else
X			printf("\t%.7s", ep->phasers[i].target->name);
X	}
X	printf("\n\t turned");
X	for (i=0; i<ep->num_phasers; i++)
X		if (ep->phasers[i].status & P_DAMAGED)
X			printf("\t");
X		else if (ep->phasers[i].target == NULL)
X			printf("\t%.0f", ep->phasers[i].bearing);
X		else
X			printf("\tLOCKED");
X	printf("\n\t  level");
X	for (i=0; i<ep->num_phasers; i++)
X		if (ep->phasers[i].status & P_DAMAGED)
X			printf("\t");
X		else
X			printf("\t%-2d", ep->phasers[i].load);
X	printf("\n");
X	printf("\nTubes\tcontrol");
X	for (i=0; i<ep->num_tubes; i++) {
X		if (ep->tubes[i].status & T_DAMAGED)
X			printf("\tdamaged");
X		else if (ep->tubes[i].target == NULL)
X			printf("\tmanual");
X		else
X			printf("\t%.7s", ep->tubes[i].target->name);
X	}
X	printf("\n\t turned");
X	for (i=0; i<ep->num_tubes; i++)
X		if (ep->tubes[i].status & T_DAMAGED)
X			printf("\t");
X		else if (ep->tubes[i].target == NULL)
X			printf("\t%.0f", ep->tubes[i].bearing);
X		else
X			printf("\tLOCKED");
X	printf("\n\t  level");
X	for (i=0; i<ep->num_tubes; i++)
X		if (ep->tubes[i].status & T_DAMAGED)
X			printf("\t");
X		else
X			printf("\t%-2d", ep->tubes[i].load);
X	printf("\n");
X	printf("\nShields\t levels");
X	for (i=0; i<SHIELDS; i++) {
X		j = 100 * ep->shields[i].eff * ep->shields[i].drain;
X		printf("\t%-2d", j);
X	}
X	printf("\n\t drains");
X	for (i=0; i<SHIELDS; i++) {
X		k = ep->shields[i].attemp_drain;
X		printf("\t%-4.2f", k);
X	}
X	printf("\n\nEfficiency: %4.1f\tFuel remaining: %d\n",
X		ep->eff, (int)ep->energy);
X	printf("Regeneration: %4.1f\tFuel capacity: %d\n",
X		ep->regen, (int)ep->pods);
X	return 1;
X}
X
Xint
Xscan_torpedo(pp)
Xstruct torpedo *pp;
X{
X	char kind[20];
X	char tgt[20];
X
X	printf("\nobject id time  prox units target\n");
X	if (pp->type == TP_PROBE)
X		strcpy(kind, "probe");
X	else
X		strcpy(kind, "engng");
X	if (pp->target == NULL)
X		strcpy(tgt, "NONE");
X	else
X		strcpy(tgt, pp->target->name);
X	printf("%-7s%2d  %2.1f %4d   %3d   %s\n",
X		kind, pp->id, pp->timedelay, pp->prox, pp->fuel, tgt);
X	return 1;
X}
END_OF_src/cmds2.c
if test 15121 -ne `wc -c <src/cmds2.c`; then
    echo shar: \"src/cmds2.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f src/grammar.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"src/grammar.c\"
else
echo shar: Extracting \"src/grammar.c\" \(17138 characters\)
sed "s/^X//" >src/grammar.c <<'END_OF_src/grammar.c'
X# define NUMBER 257
X# define NAME 258
X# define ABORT 259
X# define ALL 260
X# define CONTROL 261
X# define CORB 262
X# define COURSE 263
X# define DAMAGE 264
X# define DEAD 265
X# define DELAY 266
X# define DEMAND 267
X# define DESTR 268
X# define DET 269
X# define DISPLAY 270
X# define ELUDE 271
X# define ENG 272
X# define FIRE 273
X# define HELP 274
X# define JETT 275
X# define LAUNCH 276
X# define LOAD 277
X# define LOCK 278
X# define PARAM 279
X# define PHASER 280
X# define POWER 281
X# define PROBE 282
X# define PROXIMITY 283
X# define PURSUE 284
X# define ROTATE 285
X# define SAVE 286
X# define SCAN 287
X# define SPREAD 288
X# define STATUS 289
X# define SURREND 290
X# define SURV 291
X# define TACTIC 292
X# define TOWARD 293
X# define TUBE 294
X# define UNLOAD 295
X# define VERSION 296
X# define WARP 297
X
X# line 51 "grammar.y"
X#ident "@(#) TREK73 $Header: grammar.y,v 1.2 87/10/09 12:24:34 okamoto Exp $"
X/*
X * $Source: /ccc/okamoto/src/trek/src/RCS/grammar.y,v $
X *
X * $Header: grammar.y,v 1.2 87/10/09 12:24:34 okamoto Exp $
X *
X * $Log:	grammar.y,v $
X * Revision 1.2  87/10/09  12:24:34  12:24:34  okamoto (Jeff Okamoto)
X * Added many extra stuff
X * 
X * Revision 1.1  87/10/09  12:22:55  12:22:55  okamoto (Jeff Okamoto)
X * Initial revision
X * 
X */
X#include "union.h"
X	extern char parsed[];
X	char string[80];
X	double num1;
X	double num2;
X	double num3;
X	double num4;
X#define yyclearin yychar = -1
X#define yyerrok yyerrflag = 0
Xextern int yychar;
Xextern short yyerrflag;
X#ifndef YYMAXDEPTH
X#define YYMAXDEPTH 150
X#endif
XYYSTYPE yylval, yyval;
X# define YYERRCODE 256
X
X# line 358 "grammar.y"
X
X
X#include "lex.yy.c"
X
Xyywrap() { return(1); }
X
Xyyerror(s) char *s; { fprintf(stderr, "%s", s); }
Xshort yyexca[] ={
X-1, 1,
X	0, -1,
X	-2, 0,
X	};
X# define YYNPROD 122
X# define YYLAST 287
Xshort yyact[]={
X
X   2, 124, 124,  86,  86, 107, 104, 100, 113, 111,
X  97,  73,  71,  68,  80,  78, 147,  77,  76, 108,
X 105, 101, 151, 128, 127,  83,  98, 137,  95,  94,
X  82,  74,  70,  67,  86,  84,  86,  88,  88, 154,
X  91, 141, 122, 120, 118,  75,  72,  69,  81,  79,
X 149, 124, 150,  86,  87,  85,  35, 123,  34,  33,
X  32,  31,  30,  29,  28,  27,  26,  25,  24,  23,
X  22,  21,  20,  19,  18,  17,  16,  15,  14,  13,
X  12,  11,  10,   9,   8,   7,   6,   5,   4,   1,
X 153, 148,   0,   0,   0,   0,   0,   0,   0,   0,
X   0,   0,   0,   0,  89,   0,  90,  92,  93,   0,
X   0,  96,   0,   0,   0,   0,   0,   0,   0,   0,
X   0,   0,   0,  99,   0, 102, 103,   0, 106,   0,
X 109, 110,   0,   0,   0, 112,   0, 114, 115, 116,
X 117,   0,   0, 119,   0, 121,   0, 125,   0,   0,
X 126,   0,   0,   0,   0,   0,   0,   0, 129, 130,
X 131, 132,   0, 133, 134,   0,   0, 135, 136,   0,
X   0,   0,   0,   0, 138,   0, 139,   0,   0,   0,
X 140,   0,   0, 142, 144, 143,   0,   0,   0,   0,
X   0,   0,   0,   0,   0, 145,   0,   0,   0, 146,
X   0,   0,   0,   0,   0, 152,   0,   0,   0,   0,
X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
X   0,   0,   0,   0,   0,   0,   3,   0,   0,  62,
X   0,  44,  58,  50,  51,  56,   0,  60,  61,  55,
X  47,  49,   0,  36,  66,  54,  43,  41,  37,  57,
X  39,  53,  45,   0,  48,  38,  65,  52,   0,   0,
X  59,  63,  46,   0,  40,  42,  64 };
Xshort yypact[]={
X
X -10,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
X-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
X-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
X-1000,-1000,-1000,-1000,-1000,-1000,-247,-248,-249,-271,
X-272,-245,-246,-252,-257,-226,-1000,-204,-220,-220,
X-223,-1000,-221,-1000,-243,-244,-220,-1000,-1000,-1000,
X-280,-1000,-242,-1000,-1000,-1000,-1000,-204,-273,-204,
X-204,-274,-204,-275,-204,-204,-1000,-1000,-285,-204,
X-286,-204,-204,-204,-204,-1000,-1000,-253,-1000,-254,
X-255,-204,-1000,-1000,-1000,-220,-1000,-1000,-1000,-264,
X-265,-1000,-1000,-220,-220,-220,-220,-204,-204,-206,
X-206,-1000,-1000,-1000,-1000,-239,-1000,-1000,-204,-1000,
X-204,-1000,-206,-1000,-1000,-256,-1000,-206,-204,-1000,
X-1000,-1000,-1000,-1000,-1000,-1000,-1000,-206,-1000,-1000,
X-1000,-206,-1000,-1000,-1000,-267,-1000,-207,-241,-1000,
X-220,-218,-1000,-1000,-1000 };
Xshort yypgo[]={
X
X   0,  55,  57,  91,  90,  54,  89,  88,  87,  86,
X  85,  84,  83,  82,  81,  80,  79,  78,  77,  76,
X  75,  74,  73,  72,  71,  70,  69,  68,  67,  66,
X  65,  64,  63,  62,  61,  60,  59,  58,  56 };
Xshort yyr1[]={
X
X   0,   6,   6,   6,   6,   6,   6,   6,   6,   6,
X   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
X   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,
X   6,   6,   6,   6,   6,   6,   1,   2,   3,   4,
X   5,   7,   7,   7,   7,   7,   8,   8,   8,   9,
X   9,   9,   9,   9,  10,  10,  10,  10,  10,  11,
X  11,  11,  11,  12,  12,  12,  12,  13,  14,  15,
X  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,
X  16,  17,  17,  17,  17,  18,  19,  19,  20,  20,
X  20,  20,  21,  21,  21,  21,  22,  22,  22,  22,
X  22,  22,  23,  24,  24,  24,  25,  26,  27,  27,
X  29,  28,  28,  30,  31,  32,  33,  34,  35,  36,
X  37,  38 };
Xshort yyr2[]={
X
X   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,
X   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
X   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
X   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
X   1,   5,   3,   5,   3,   2,   3,   3,   2,   4,
X   3,   4,   3,   2,   4,   3,   4,   3,   2,   4,
X   3,   4,   3,   4,   3,   4,   3,   2,   2,   3,
X   3,   3,   3,   2,   2,   2,   3,   5,   7,   9,
X   9,   3,   2,   3,   2,   1,   2,   1,   4,   3,
X   2,   1,   4,   3,   2,   1,   4,   3,   2,   5,
X   4,   3,   1,   2,   2,   1,   1,   2,   3,   2,
X   1,   2,   1,   1,   1,   2,   1,   2,   1,   1,
X   1,   1 };
Xshort yychk[]={
X
X-1000,  -6,  10, 256,  -7,  -8,  -9, -10, -11, -12,
X -13, -14, -15, -16, -17, -18, -19, -20, -21, -22,
X -23, -24, -25, -26, -27, -28, -29, -30, -31, -32,
X -33, -34, -35, -36, -37, -38, 273, 278, 285, 280,
X 294, 277, 295, 276, 261, 282, 292, 270, 284, 271,
X 263, 264, 287, 281, 275, 269, 265, 279, 262, 290,
X 267, 268, 259, 291, 296, 286, 274, 280, 260, 294,
X 280, 260, 294, 260, 280, 294, 289, 289, 260, 294,
X 260, 294, 282, 282, 261,  -1, 257,  -5, 258,  -5,
X  -1, 263,  -5,  -1, 272, 272,  -5, 290, 268,  -1,
X 280, 294,  -1,  -1, 280, 294,  -1, 280, 294,  -1,
X  -1, 294,  -1, 294,  -1,  -1,  -1,  -1, 297,  -1,
X 297,  -1, 297,  -2, 257,  -1,  -5, 288, 288,  -5,
X  -5,  -5,  -5,  -1,  -1,  -2,  -2, 266,  -1,  -1,
X  -2, 297,  -2,  -2,  -1,  -2,  -2, 283,  -3, 257,
X 293, 263,  -5,  -4, 257 };
Xshort yydef[]={
X
X   1,  -2,   2,   3,   4,   5,   6,   7,   8,   9,
X  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,
X  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
X  30,  31,  32,  33,  34,  35,   0,   0,   0,   0,
X   0,   0,   0,   0,   0,   0,  85,  87,  91,  95,
X   0, 102, 105, 106,   0,   0, 112, 110, 113, 114,
X   0, 116,   0, 118, 119, 120, 121,  45,   0,  48,
X  53,   0,  58,   0,   0,   0,  67,  68,   0,  73,
X   0,  74,  75,  82,  84,  86,  36,  90,  40,  94,
X  98,   0, 103, 104, 107, 109, 111, 115, 117,  42,
X  44,  47,  46,  50,  52,  57,  55,  60,  64,  62,
X  66,  69,  71,  70,  72,  76,  81,  83,   0,  89,
X   0,  93,   0,  97,  37, 101, 108,   0,   0,  49,
X  51,  56,  54,  59,  63,  61,  65,   0,  88,  92,
X  96,   0, 100,  41,  43,  77,  99,   0,  78,  38,
X   0,   0,  79,  80,  39 };
X#ifndef lint
Xstatic char yaccpar_sccsid[] = "@(#)yaccpar	4.1	(Berkeley)	2/11/83";
X#endif not lint
X
X#
X# define YYFLAG -1000
X# define YYERROR goto yyerrlab
X# define YYACCEPT return(0)
X# define YYABORT return(1)
X
X/*	parser for yacc output	*/
X
X#ifdef YYDEBUG
Xint yydebug = 0; /* 1 for debugging */
X#endif
XYYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
Xint yychar = -1; /* current input token number */
Xint yynerrs = 0;  /* number of errors */
Xshort yyerrflag = 0;  /* error recovery flag */
X
Xyyparse() {
X
X	short yys[YYMAXDEPTH];
X	short yyj, yym;
X	register YYSTYPE *yypvt;
X	register short yystate, *yyps, yyn;
X	register YYSTYPE *yypv;
X	register short *yyxi;
X
X	yystate = 0;
X	yychar = -1;
X	yynerrs = 0;
X	yyerrflag = 0;
X	yyps= &yys[-1];
X	yypv= &yyv[-1];
X
X yystack:    /* put a state and value onto the stack */
X
X#ifdef YYDEBUG
X	if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
X#endif
X		if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
X		*yyps = yystate;
X		++yypv;
X		*yypv = yyval;
X
X yynewstate:
X
X	yyn = yypact[yystate];
X
X	if( yyn<= YYFLAG ) goto yydefault; /* simple state */
X
X	if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
X	if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
X
X	if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
X		yychar = -1;
X		yyval = yylval;
X		yystate = yyn;
X		if( yyerrflag > 0 ) --yyerrflag;
X		goto yystack;
X		}
X
X yydefault:
X	/* default state action */
X
X	if( (yyn=yydef[yystate]) == -2 ) {
X		if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
X		/* look through exception table */
X
X		for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
X
X		while( *(yyxi+=2) >= 0 ){
X			if( *yyxi == yychar ) break;
X			}
X		if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
X		}
X
X	if( yyn == 0 ){ /* error */
X		/* error ... attempt to resume parsing */
X
X		switch( yyerrflag ){
X
X		case 0:   /* brand new error */
X
X			yyerror( "syntax error" );
X		yyerrlab:
X			++yynerrs;
X
X		case 1:
X		case 2: /* incompletely recovered error ... try again */
X
X			yyerrflag = 3;
X
X			/* find a state where "error" is a legal shift action */
X
X			while ( yyps >= yys ) {
X			   yyn = yypact[*yyps] + YYERRCODE;
X			   if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
X			      yystate = yyact[yyn];  /* simulate a shift of "error" */
X			      goto yystack;
X			      }
X			   yyn = yypact[*yyps];
X
X			   /* the current yyps has no shift onn "error", pop stack */
X
X#ifdef YYDEBUG
X			   if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
X#endif
X			   --yyps;
X			   --yypv;
X			   }
X
X			/* there is no state on the stack with an error shift ... abort */
X
X	yyabort:
X			return(1);
X
X
X		case 3:  /* no shift yet; clobber input char */
X
X#ifdef YYDEBUG
X			if( yydebug ) printf( "error recovery discards char %d\n", yychar );
X#endif
X
X			if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
X			yychar = -1;
X			goto yynewstate;   /* try again in the same state */
X
X			}
X
X		}
X
X	/* reduction by production yyn */
X
X#ifdef YYDEBUG
X		if( yydebug ) printf("reduce %d\n",yyn);
X#endif
X		yyps -= yyr2[yyn];
X		yypvt = yypv;
X		yypv -= yyr2[yyn];
X		yyval = yypv[1];
X		yym=yyn;
X			/* consult goto table to find next state */
X		yyn = yyr1[yyn];
X		yyj = yypgo[yyn] + *yyps + 1;
X		if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
X		switch(yym){
X			
Xcase 3:
X# line 79 "grammar.y"
X{ yyclearin; } break;
Xcase 36:
X# line 115 "grammar.y"
X{ num1 = yylval.dval; } break;
Xcase 37:
X# line 119 "grammar.y"
X{ num2 = yylval.dval; } break;
Xcase 38:
X# line 122 "grammar.y"
X{ num3 = yylval.dval; } break;
Xcase 39:
X# line 125 "grammar.y"
X{ num4 = yylval.dval; } break;
Xcase 40:
X# line 129 "grammar.y"
X{ strcpy(string, yylval.sval); } break;
Xcase 41:
X# line 133 "grammar.y"
X{ sprintf(parsed, "1 %.0f %.0f", num1, num2);} break;
Xcase 42:
X# line 135 "grammar.y"
X{ sprintf(parsed, "1 %.0f", num1); } break;
Xcase 43:
X# line 137 "grammar.y"
X{ sprintf(parsed, "1 all %.0f", num1); } break;
Xcase 44:
X# line 139 "grammar.y"
X{ strcpy(parsed, "1 all"); } break;
Xcase 45:
X# line 141 "grammar.y"
X{ strcpy(parsed, "1"); } break;
Xcase 46:
X# line 145 "grammar.y"
X{ sprintf(parsed, "2 %.0f", num1); } break;
Xcase 47:
X# line 147 "grammar.y"
X{ sprintf(parsed, "2 all"); } break;
Xcase 48:
X# line 149 "grammar.y"
X{ strcpy(parsed, "2"); } break;
Xcase 49:
X# line 153 "grammar.y"
X{ sprintf(parsed, "3 %.0f %s", num1, string);} break;
Xcase 50:
X# line 155 "grammar.y"
X{ sprintf(parsed, "3 %.0f", num1); } break;
Xcase 51:
X# line 157 "grammar.y"
X{ (void)sprintf(parsed, "3 all %s", string); } break;
Xcase 52:
X# line 159 "grammar.y"
X{ strcpy(parsed, "3 all"); } break;
Xcase 53:
X# line 161 "grammar.y"
X{ strcpy(parsed, "3"); } break;
Xcase 54:
X# line 165 "grammar.y"
X{ sprintf(parsed, "4 %.0f %s", num1, string);} break;
Xcase 55:
X# line 167 "grammar.y"
X{ sprintf(parsed, "4 %.0f", num1); } break;
Xcase 56:
X# line 169 "grammar.y"
X{ (void)sprintf(parsed, "4 all %s", string); } break;
Xcase 57:
X# line 171 "grammar.y"
X{ strcpy(parsed, "4 all"); } break;
Xcase 58:
X# line 173 "grammar.y"
X{ strcpy(parsed, "4"); } break;
Xcase 59:
X# line 177 "grammar.y"
X{ sprintf(parsed, "5 all %.0f", num1); } break;
Xcase 60:
X# line 179 "grammar.y"
X{ strcpy(parsed, "5 all"); } break;
Xcase 61:
X# line 181 "grammar.y"
X{ sprintf(parsed,"5 %.0f %.0f", num1, num2); } break;
Xcase 62:
X# line 183 "grammar.y"
X{ sprintf(parsed,"5 %.0f", num1); } break;
Xcase 63:
X# line 187 "grammar.y"
X{ sprintf(parsed, "6 all %.0f", num1); } break;
Xcase 64:
X# line 189 "grammar.y"
X{ strcpy(parsed, "6 all"); } break;
Xcase 65:
X# line 191 "grammar.y"
X{ sprintf(parsed,"6 %.0f %.0f", num1, num2); } break;
Xcase 66:
X# line 193 "grammar.y"
X{ sprintf(parsed,"6 %.0f", num1); } break;
Xcase 67:
X# line 197 "grammar.y"
X{ strcpy(parsed, "7"); } break;
Xcase 68:
X# line 201 "grammar.y"
X{ strcpy(parsed, "8"); } break;
Xcase 69:
X# line 205 "grammar.y"
X{ strcpy(parsed, "9 l all"); } break;
Xcase 70:
X# line 207 "grammar.y"
X{ strcpy(parsed, "9 u all"); } break;
Xcase 71:
X# line 209 "grammar.y"
X{ sprintf(parsed, "9 l %.0f", num1); } break;
Xcase 72:
X# line 211 "grammar.y"
X{ sprintf(parsed, "9 u %.0f", num1); } break;
Xcase 73:
X# line 213 "grammar.y"
X{ strcpy(parsed, "9 l"); } break;
Xcase 74:
X# line 215 "grammar.y"
X{ strcpy(parsed, "9 u"); } break;
Xcase 75:
X# line 219 "grammar.y"
X{ strcpy(parsed, "10"); } break;
Xcase 76:
X# line 221 "grammar.y"
X{ sprintf(parsed, "10 %.0f", num1); } break;
Xcase 77:
X# line 223 "grammar.y"
X{sprintf(parsed, "10 %.0f %.0f", num1, num2); } break;
Xcase 78:
X# line 225 "grammar.y"
X{ sprintf(parsed, "10 %.0f %.0f %.0f", num1, num2, num3); } break;
Xcase 79:
X# line 227 "grammar.y"
X{ sprintf(parsed, "10 %.0f %.0f %.0f %s", num1, num2, num3, string); } break;
Xcase 80:
X# line 229 "grammar.y"
X{ sprintf(parsed, "10 %.0f %.0f %.0f\n\r %.0f", num1, num2, num3, num4); } break;
Xcase 81:
X# line 233 "grammar.y"
X{ sprintf(parsed, "11 %.0f", num1); } break;
Xcase 82:
X# line 235 "grammar.y"
X{ strcpy(parsed, "11"); } break;
Xcase 83:
X# line 237 "grammar.y"
X{ sprintf(parsed, "11 %.0f", num1); } break;
Xcase 84:
X# line 239 "grammar.y"
X{ strcpy(parsed, "11"); } break;
Xcase 85:
X# line 243 "grammar.y"
X{ strcpy(parsed, "12"); } break;
Xcase 86:
X# line 247 "grammar.y"
X{ sprintf(parsed, "13 %.0f", num1); } break;
Xcase 87:
X# line 249 "grammar.y"
X{ strcpy(parsed, "13"); } break;
Xcase 88:
X# line 253 "grammar.y"
X{ sprintf(parsed, "14 %s %f", string, num1);} break;
Xcase 89:
X# line 255 "grammar.y"
X{ sprintf(parsed, "14 %s %f", string, num1);} break;
Xcase 90:
X# line 257 "grammar.y"
X{ sprintf(parsed, "14 %s", string); } break;
Xcase 91:
X# line 259 "grammar.y"
X{ strcpy(parsed, "14"); } break;
Xcase 92:
X# line 263 "grammar.y"
X{ sprintf(parsed, "15 %s %f", string, num1);} break;
Xcase 93:
X# line 265 "grammar.y"
X{ sprintf(parsed, "15 %s %f", string, num1);} break;
Xcase 94:
X# line 267 "grammar.y"
X{ sprintf(parsed, "15 %s", string); } break;
Xcase 95:
X# line 269 "grammar.y"
X{ strcpy(parsed, "15"); } break;
Xcase 96:
X# line 273 "grammar.y"
X{ sprintf(parsed, "16 %.0f %0f", num1, num2);} break;
Xcase 97:
X# line 275 "grammar.y"
X{ sprintf(parsed, "16 %.0f %0f", num1, num2);} break;
Xcase 98:
X# line 277 "grammar.y"
X{ sprintf(parsed, "16 %.0f", num1);} break;
Xcase 99:
X# line 279 "grammar.y"
X{ sprintf(parsed, "16 %.0f %0f", num1, num2);} break;
Xcase 100:
X# line 281 "grammar.y"
X{ sprintf(parsed, "16 %.0f %0f", num1, num2);} break;
Xcase 101:
X# line 283 "grammar.y"
X{ sprintf(parsed, "16 %.0f", num1);} break;
Xcase 102:
X# line 287 "grammar.y"
X{ strcpy(parsed, "17"); } break;
Xcase 103:
X# line 291 "grammar.y"
X{ sprintf(parsed, "18 %s", string); } break;
Xcase 104:
X# line 293 "grammar.y"
X{ sprintf(parsed, "18 %.0f", num1); } break;
Xcase 105:
X# line 295 "grammar.y"
X{ strcpy(parsed, "18"); } break;
Xcase 106:
X# line 299 "grammar.y"
X{ strcpy(parsed, "19"); } break;
Xcase 107:
X# line 303 "grammar.y"
X{ strcpy(parsed, "20"); } break;
Xcase 108:
X# line 307 "grammar.y"
X{ sprintf(parsed, "21 %s", string); } break;
Xcase 109:
X# line 309 "grammar.y"
X{ strcpy(parsed, "21"); } break;
Xcase 110:
X# line 313 "grammar.y"
X{ strcpy(parsed, "22"); } break;
Xcase 111:
X# line 317 "grammar.y"
X{ sprintf(parsed, "23 %s", string); } break;
Xcase 112:
X# line 319 "grammar.y"
X{ strcpy(parsed, "23"); } break;
Xcase 113:
X# line 323 "grammar.y"
X{ strcpy(parsed, "24"); } break;
Xcase 114:
X# line 327 "grammar.y"
X{ strcpy(parsed, "25"); } break;
Xcase 115:
X# line 331 "grammar.y"
X{ strcpy(parsed, "26"); } break;
Xcase 116:
X# line 335 "grammar.y"
X{ strcpy(parsed, "27"); } break;
Xcase 117:
X# line 339 "grammar.y"
X{ strcpy(parsed, "28"); } break;
Xcase 118:
X# line 343 "grammar.y"
X{ strcpy(parsed, "29"); } break;
Xcase 119:
X# line 347 "grammar.y"
X{ strcpy(parsed, "30"); } break;
Xcase 120:
X# line 351 "grammar.y"
X{ strcpy(parsed, "31"); } break;
Xcase 121:
X# line 355 "grammar.y"
X{ strcpy(parsed, "32"); } break;
X		}
X		goto yystack;  /* stack new state and value */
X
X	}
END_OF_src/grammar.c
if test 17138 -ne `wc -c <src/grammar.c`; then
    echo shar: \"src/grammar.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 1 \(of 6\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 5 6 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 6 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0