Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site ucbvax.ARPA
Path: utzoo!watmath!clyde!burl!ulysses!ucbvax!okamoto
From: okamoto@ucbvax.ARPA (Doctor Who)
Newsgroups: net.sources.games
Subject: Trek73 (part 2 of 4)
Message-ID: <10400@ucbvax.ARPA>
Date: Mon, 16-Sep-85 11:14:07 EDT
Article-I.D.: ucbvax.10400
Posted: Mon Sep 16 11:14:07 1985
Date-Received: Wed, 18-Sep-85 02:53:46 EDT
Organization: University of California at Berkeley
Lines: 1714

#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
-----cut here-----cut here-----cut here-----cut here-----
#!/bin/sh
# shar:	Shell Archiver
#	Run the following text with /bin/sh to create:
#	cmds1.c
#	cmds2.c
#	cmds3.c
#	cmds4.c
#	defines.h
#	dist.c
# This archive created: Mon Sep  9 12:06:17 1985
echo shar: extracting cmds1.c '(9815 characters)'
sed 's/^XX//' << \SHAR_EOF > cmds1.c
XX/*
XX * TREK73: cmds1.c
XX *
XX * User Commands
XX *
XX * fire_phasers, fire_tubes, lock_phasers, lock_tubes
XX * turn_phasers, turn_tubes, load_tubes, launch_probe,
XX * probe_control
XX *
XX */
XX
XX#include "defines.h"
XX#include "structs.h"
XX
XXextern	char title[];
XXextern	char science[];
XXextern	char engineer[];
XXextern  char nav[];
XXextern	char helmsman[];
XX
XXfire_phasers(sp) 
XXstruct ship *sp;
XX{
XX	char	buf1[20];
XX	char	buf2[20];
XX	char	c;
XX	int	typed[4];
XX	register int i;
XX	register int k;
XX
XX	for (i=0; i<4; i++)
XX		typed[i] = 0;
XX	printf("   fire phasers [1-4] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	printf("   spread [10-45] ");
XX	if (Gets(buf2) == NULL)
XX		return 0;
XX	i = atoi(buf2);
XX	if (i < 10 || i > 45)
XX		return 0;
XX	sp->p_spread = i;
XX	for (i=0; c = buf1[i]; i++) {
XX		k = c - '1';
XX		if (k < 0 || k > 3)
XX			continue;
XX		typed[k]++;
XX		if ((sp->phasers[k].status & P_DAMAGED) ||
XX			(sp->phasers[k].status) & P_FIRING)
XX			continue;
XX		sp->phasers[k].status |= P_FIRING;
XX	}
XX	check_p_damage(typed, sp, "fire");	/* Type out if damaged */
XX	check_p_turn(typed, sp, 1);
XX	return 1;
XX}
XX
XX
XXfire_tubes(sp)
XXstruct ship *sp;
XX{
XX	char	buf1[20];
XX	char	c;
XX	int	typed[6];
XX	register int i;
XX	register int j;
XX	register int k;
XX
XX	for (i=0; i<6; i++)
XX		typed[i] = 0;
XX	printf("   fire tubes [1-6] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	j = strlen(buf1);
XX	for (i=0; c = buf1[i]; i++) {
XX		k = c - '1';
XX		if (k < 0 || k > 5)
XX			continue;
XX		typed[k]++;
XX		if ((sp->tubes[k].status & T_DAMAGED) ||
XX			(sp->tubes[k].status & T_FIRING))
XX			continue;
XX		sp->tubes[k].status |= T_FIRING;
XX	}
XX	check_t_damage(typed, sp, "fire");	/* Type if damaged */
XX	check_t_turn(typed, sp, 1);
XX	j = 0;
XX	for (i=0; i<6; i++) {
XX		if ((typed[i] == 0) || (!(sp->tubes[i].status & T_FIRING)))
XX			continue;
XX		if (sp->tubes[i].load == 0) {
XX			if (!j)
XX				printf("Computer: Tube(s) %d", i + 1);
XX			else
XX				printf(", %d", i + 1);
XX			j++;
XX		}
XX	}
XX	if (j)
XX		printf(" have no charge in them.\n");
XX	return 0;
XX}
XX
XX
XXlock_phasers(sp)
XXstruct ship *sp;
XX{
XX	extern	struct ship *ship_name();
XX	char	buf1[20];
XX	char	buf2[20];
XX	int	typed[4];
XX	char	c;
XX	struct	ship *ep;
XX	register int i;
XX	register int k;
XX
XX	for (i=0; i<4; i++)
XX		typed[i] = 0;
XX	if (sp->status & S_COMP) {
XX		printf("%s:  Impossible %s, our computer is dead.\n", science, title);
XX		return 0;
XX	}
XX	printf("   lock phasers [1-4] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	printf("   onto whom ");
XX	if (Gets(buf2) == NULL)
XX		return 0;
XX	ep = ship_name(buf2,ENEMYONLY);
XX	if (ep == NULL)
XX		return 0;
XX	for (i=0; c = buf1[i]; i++) {
XX		k = c - '1';
XX		if (k < 0 || k > 3)
XX			continue;
XX		typed[k]++;
XX		if (sp->phasers[k].status & P_DAMAGED)
XX			continue;
XX		sp->phasers[k].target = ep;
XX	}
XX	check_p_damage(typed, sp, "lock");
XX	check_p_turn(typed, sp, 0);
XX	return 1;
XX}
XX
XX
XXlock_tubes(sp)
XXstruct ship *sp;
XX{
XX	extern	struct ship *ship_name();
XX	char	buf1[20];
XX	char	buf2[20];
XX	int	typed[6];
XX	char	c;
XX	struct	ship *ep;
XX	register int i;
XX	register int k;
XX
XX	for (i=0; i<6; i++)
XX		typed[i] = 0;
XX	if (sp->status & S_COMP) {
XX		printf("%s:  Impossible %s, our computer is dead.\n", science, title);
XX		return 0;
XX	}
XX	printf("   lock tubes [1-6] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	printf("   onto whom ");
XX	if (Gets(buf2) == NULL)
XX		return 0;
XX	ep = ship_name(buf2,ENEMYONLY);
XX	if (ep == NULL)
XX		return 0;
XX	for (i=0; c = buf1[i]; i++) {
XX		k = c - '1';
XX		if (k < 0 || k > 5)
XX			continue;
XX		typed[k]++;
XX		if (sp->tubes[k].status & T_DAMAGED)
XX			continue;
XX		sp->tubes[k].target = ep;
XX	}
XX	check_t_damage(typed, sp, "lock");
XX	check_t_turn(typed, sp, 0);
XX	return 1;
XX}
XX
XX
XXturn_phasers(sp)
XXstruct ship *sp;
XX{
XX	char	buf1[20];
XX	char	buf2[20];
XX	char	c;
XX	int	typed[4];
XX	register int i;
XX	register int j;
XX	register int k;
XX
XX	for (i=0; i<4; i++)
XX		typed[i] = 0;
XX	printf("   turn phasers [1-4] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	printf("   to [0-360] ");
XX	if (Gets(buf2) == NULL)
XX		return 0;
XX	j = atoi(buf2);
XX	if (j < 0 || j > 360)
XX		return 0;
XX	for (i=0; c = buf1[i]; i++) {
XX		k = c - '1';
XX		if (k < 0 || k > 3)
XX			continue;
XX		typed[k]++;
XX		if (sp->phasers[k].status & P_DAMAGED)
XX			continue;
XX		sp->phasers[k].target = NULL;
XX		sp->phasers[k].bearing = j;
XX	}
XX	check_p_damage(typed, sp, "turn");
XX	check_p_turn(typed, sp, 0);
XX	return 1;
XX}
XX
XX
XXturn_tubes(sp)
XXstruct ship *sp;
XX{
XX	char	buf1[20];
XX	char	buf2[20];
XX	char	c;
XX	int	typed[6];
XX	register int i;
XX	register int j;
XX	register int k;
XX
XX	for (i=0; i<6; i++)
XX		typed[i] = 0;
XX	printf("   turn tubes [1-6] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	printf("   to [0-360] ");
XX	if (Gets(buf2) == NULL)
XX		return 0;
XX	j = atoi(buf2);
XX	if (j < 0 || j > 360)
XX		return 0;
XX	for (i=0; c = buf1[i]; i++) {
XX		k = c - '1';
XX		if (k < 0 || k > 5)
XX			continue;
XX		typed[k]++;
XX		if (sp->tubes[k].status & T_DAMAGED)
XX			continue;
XX		sp->tubes[k].target = NULL;
XX		sp->tubes[k].bearing = j;
XX	}
XX	check_t_damage(typed, sp, "turn");
XX	check_t_turn(typed, sp, 0);
XX	return 1;
XX}
XX
XX
XXload_tubes(sp)
XXstruct ship *sp;
XX{
XX	char	buf1[20];
XX	char	buf2[20];
XX	char	c;
XX	int	load;
XX	struct	tube *tp;
XX	register int i;
XX	register int j;
XX	register int k;
XX
XX	load = 0;
XX	printf("   [load or unload] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	if (*buf1 == 'l' || *buf1 == 'L')
XX		load++;
XX	else if (*buf1 != 'u' && *buf1 != 'U')
XX		return 0;
XX	printf("   tubes [1-6] ");
XX	if (Gets(buf2) == NULL)
XX		return 0;
XX	for (i=0; c = buf2[i]; i++) {
XX		if (sp->energy <= 0)
XX			break;
XX		k = c - '1';
XX		if (k < 0 || k > 5)
XX			continue;
XX		tp = &sp->tubes[k];
XX		if (tp->status & T_DAMAGED)
XX			continue;
XX		if (load) {
XX			j = min(sp->energy, 10-tp->load);
XX			if (j == 0)
XX				continue;
XX			sp->energy -= j;
XX			sp->pods -= j;
XX			tp->load += j;
XX		} else {
XX			j = tp->load;
XX			if (j == 0)
XX				continue;
XX			sp->energy += j;
XX			sp->pods += j;
XX			tp->load = 0;
XX		}
XX	}
XX	printf("%s: tubes now ", engineer);
XX	for (i=0; i<6; i++) {
XX		if (sp->tubes[i].status & T_DAMAGED)
XX			printf(" -- ");
XX		else
XX			printf(" %-2d ", sp->tubes[i].load);
XX	}
XX	printf(" pods at %d\n", sp->pods);
XX	return 1;
XX}
XX
XX
XXlaunch_probe(sp)
XXstruct ship *sp;
XX{
XX	extern	char captain[];
XX	extern	struct list *newitem();
XX	char	buf1[20];
XX	int	pods, delay, prox, course;
XX	struct	ship *target;
XX	struct	list *lp;
XX	struct	torpedo *pp;
XX
XX	pods = delay = prox = course = 0;
XX	target = NULL;
XX	if (sp->status & S_PROBE) {
XX		printf("%s: probe launcher destroyed!\n", engineer);
XX		return 0;
XX	}
XX	if (sp->energy < 10) {
XX		printf("%s: we've not enough power, Captain.\n", engineer);
XX		return 0;
XX	}
XX	printf("%s: %d pods available.\n", engineer, sp->energy);
XX	printf("%s: number to launch [10+] is ", captain);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	pods = atoi(buf1);
XX	if (pods < 10 || pods > sp->energy)
XX		return 0;
XX	printf("   set time delay to [0-15] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	delay = atoi(buf1);
XX	if (delay < 0 || delay > 15)
XX		return 0;
XX	printf("   set proximity delay to [50+] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	prox = atoi(buf1);
XX	if (prox < 50)
XX		return 0;
XX	printf("   launch towards [whom, if anyone] ");
XX	Gets(buf1);
XX	/*
XX	 * This must be fixed in the near future...
XX	 */
XX	if (*buf1) {
XX		target = ship_name(buf1,ENEMYONLY);
XX		if (target == NULL)
XX			return 0;
XX	} else {
XX		printf("   course [0-360] ");
XX		if (gets(buf1) == NULL)
XX			return 0;
XX		course = atoi(buf1);
XX		if (course < 0 || course > 360)
XX			return 0;
XX		target = NULL;
XX	}
XX	/*
XX	 * add a new item to the list of items in space
XX	 */
XX	lp = newitem(I_PROBE);
XX	lp->data.tp = MKNODE(struct torpedo, *, 1);
XX	pp = lp->data.tp;
XX	pp->from = sp;
XX	pp->fuel = pods;
XX	pp->timedelay = delay * 10;
XX	pp->speed = sp->warp;
XX	pp->newspeed = 2.0;
XX	pp->prox = prox;
XX	pp->target = target;
XX	pp->course = course;
XX	pp->x = sp->x;
XX	pp->y = sp->y;
XX	pp->id = new_slot();
XX	/*
XX	 * subtract the pods used
XX	 */
XX	sp->pods -= pods;
XX	sp->energy -= pods;
XX	printf("%s: probe %d away\n",engineer, pp->id);
XX	return 1;
XX}
XX
XX
XXprobe_control(sp)
XXstruct ship *sp;
XX{
XX	extern	int rangefind();
XX	extern	int bearing();
XX	extern	struct list head;
XX	extern	struct list *tail;
XX	register struct list *lp;
XX	register int i;
XX	register int j;
XX	register struct torpedo *pp;
XX	struct	torpedo *probes[10];
XX	int	probenum;
XX	struct	ship *ep;
XX	int	pnum;
XX	int	bear;
XX	int	range;
XX	char	buf1[20];
XX	char	*bp;
XX
XX	pnum = 0;
XX	for (lp = &head; lp != tail; lp = lp->fwd) {
XX		if (lp->type != I_PROBE)
XX			continue;
XX		pp = lp->data.tp;
XX		if (pp->from != sp)
XX			continue;
XX		if (!pnum)
XX			printf("\nprobe bearng range course time  prox units target\n");
XX		probes[pnum] = pp;
XX		pnum++;
XX		range = rangefind(sp->x, pp->x, sp->y, pp->y);
XX		bear = bearing(sp->x, pp->x, sp->y, pp->y);
XX		if (pp->target == NULL)
XX			bp = "NONE";
XX		else
XX			bp = pp->target->name;
XX		printf(" %2d    %3d   %5d  %3d    %2d  %5d  %3d  %s\n",
XX			pp->id, bear, range, pp->course, pp->timedelay,
XX			pp->prox, pp->fuel, bp);
XX	}
XX	if (!pnum) {
XX		printf("%s: what probes?\n", nav);
XX		return 0;
XX	}
XX	printf("%s:  detonate all probes?\n", nav);
XX	printf("%s:  [yes or no] ", captain);
XX	if (Gets(buf1) != NULL && (*buf1 == 'Y' || *buf1 == 'y')) {
XX		printf("%s:  aye, %s\n",nav, title);
XX		for (i=0; itimedelay = 0;
XX		return 1;
XX	}
XX	printf("   control probe [#] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	probenum = atoi(buf1);
XX	for (i=0; iid == probenum)
XX			break;
XX	if (i == pnum)
XX		return 0;
XX	probenum = i;
XX	printf("%s: detonate it?\n", nav);
XX	printf("%s:  [yes or no] ", captain);
XX	if (Gets(buf1) != NULL && (*buf1 == 'y' || *buf1 == 'Y')) {
XX		probes[probenum]->timedelay = 0;
XX		return 0;
XX	}
XX	printf("   lock it onto [whom] ");
XX	if (Gets(buf1) != NULL && *buf1 != NULL) {
XX		ep = ship_name(buf1,ENEMYONLY);
XX		if (ep != NULL) {
XX			probes[probenum]->target = ep;
XX			printf("%s: locking.\n", nav);
XX			return 1;
XX		}
XX	}
XX	printf("   set it to course [0-360] ");
XX	if (Gets(buf1) == NULL || *buf1 == NULL)
XX		return 0;
XX	j = atoi(buf1);
XX	if (j < 0 || j > 360)
XX		return 0;
XX	probes[probenum]->course = j;
XX	probes[probenum]->target = NULL;
XX	printf("%s: setting in new course.\n", nav);
XX	return 1;
XX}
SHAR_EOF
if test 9815 -ne "`wc -c cmds1.c`"
then
echo shar: error transmitting cmds1.c '(should have been 9815 characters)'
fi
echo shar: extracting cmds2.c '(9808 characters)'
sed 's/^XX//' << \SHAR_EOF > cmds2.c
XX/*
XX * TREK73: cmds2.c
XX *
XX * User Commands
XX *
XX * pos_report, pos_display, pursue, helm, self_scan, scan
XX *
XX * (print_damages)
XX *
XX */
XX
XX#include "defines.h"
XX#include "structs.h"
XX#include 
XX#include 
XX
XXextern char title[];
XXextern char science[];
XXextern char engineer[];
XXextern char helmsman[];
XXextern char nav[];
XX
XX
XXpos_report(sp)
XXstruct ship *sp;
XX{
XX	extern	int rangefind();
XX	extern	int bearing();
XX	extern	struct ship *shiplist[];
XX	extern	struct list head, *tail;
XX	struct	ship *sp1;
XX	struct	torpedo *tp;
XX	struct	list *lp;
XX	int	x, y;
XX	int	range;
XX	int	bear;
XX	float	speed;
XX	int	course;
XX	int	maxlen = 0;
XX	char	whitespace[5], who[80];
XX
XX	/*
XX	 * Go through tht list of objects and find out the longest
XX	 * name of any of them.  This is to insure that no matter
XX	 * what the names of the ship, the position report will
XX	 * come out formatted.
XX	 */
XX	for (lp = &head; lp != tail; lp = lp->fwd) {
XX		if (lp->type == 0)
XX			continue;
XX		if (lp->type == I_SHIP) {
XX			sp1 = lp->data.sp;
XX			strcpy(who, sp1->name);
XX			maxlen = max(maxlen, strlen(who));
XX		} else {
XX			tp = lp->data.tp;
XX			strcpy(who, tp->from->name);
XX			switch (lp->type) {
XX				case I_SHIP:
XX				case I_TORPEDO: 
XX					continue;
XX				case I_PROBE:
XX					maxlen = max(maxlen, strlen(who) + 9);
XX				case I_ENG:
XX					maxlen = max(maxlen, strlen(who) + 12);
XX					break;
XX				default:
XX					break;
XX			}
XX		}
XX	}
XX	/*
XX	 * Construct a string %ns where n is the length of the
XX	 * longest name.
XX	 */
XX	sprintf(whitespace, "%%%ds", maxlen);
XX	/*
XX	 * And print out the position report
XX	 */
XX	printf(whitespace, " ");
XX	printf(" warp course bearing range\n");
XX	for (lp = &head; lp != tail; lp = lp->fwd) {
XX		if (lp->type == 0)
XX			continue;
XX		sp1 = NULL;
XX		tp = NULL;
XX		if (lp->type == I_SHIP) {
XX			sp1 = lp->data.sp;
XX			if (sp1->status & S_DEAD)
XX				continue;
XX			x = sp1->x;
XX			y = sp1->y;
XX			speed = sp1->warp;
XX			course = sp1->course;
XX			strcpy(who, sp1->name);
XX		} else {
XX			tp = lp->data.tp;
XX			if (lp->type == I_TORPEDO)
XX				continue;
XX			x = tp->x;
XX			y = tp->y;
XX			speed = tp->speed;
XX			course = tp->course;
XX			strcpy(who, tp->from->name);
XX			switch(lp->type) {
XX				case I_PROBE:
XX					sprintf(who, "%s probe %d", who, tp->id);
XX					break;
XX				case I_ENG:
XX					strcat(who, " engineering");
XX					break;
XX				default:
XX					break;
XX			}
XX		}
XX		bear = bearing(sp->x, x, sp->y, y);
XX		range = rangefind(sp->x, x, sp->y, y);
XX		printf(whitespace, who);
XX		printf(" %4.1f   %3d   ", speed, course);
XX		if ((sp1 != NULL) && (sp1 == shiplist[0])) {
XX			if (shiplist[0]->target != NULL)
XX				if (shiplist[0]->eluding)
XX					printf("eluding %s\n", shiplist[0]->target->name);
XX				else
XX					printf("pursuing %s\n", shiplist[0]->target->name);
XX			else
XX				printf("           \n");
XX		} else
XX			printf("%3d  %5d\n",  bear, range);
XX	}
XX}
XX
XX
XXpos_display(sp)
XXstruct ship *sp;
XX{
XX	extern	struct list head, *tail;
XX	register int i;
XX	register int j;
XX	int	range;
XX	char	buf1[20];
XX	int	x, y;
XX	float	xf, yf;
XX	int	h, v;
XX	struct	list *lp;
XX	struct	ship *sp1;
XX	struct	torpedo *tp;
XX	char	map[13][23];
XX	char	c;
XX
XX	if (sp->status & S_SENSOR) {
XX		printf("%s: sensors are damaged.\n", science);
XX		return 0;
XX	}
XX	printf("   display to [100+] ");
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	range = atoi(buf1);
XX	if (range < 100 || range > 10000)
XX		return 0;
XX	/*
XX	 * Compensation for aspect ratio of the output device
XX	 */
XX	x = range/10;
XX	y = range/6;
XX	for (i=0; i<13; i++) {
XX		if (i == 0 || i == 12)
XX			strcpy(map[i], "---------------------");
XX		else
XX			strcpy(map[i], "                     ");
XX	}
XX	map[6][10] = '+';
XX	for (lp = &head; lp != tail; lp = lp->fwd) {
XX		if (lp->data.sp == sp)
XX			continue;
XX		if (lp->type == I_SHIP) {
XX			sp1 = lp->data.sp;
XX			xf = sp1->x - sp->x;
XX			yf = sp1->y - sp->y;
XX		} else {
XX			tp = lp->data.tp;
XX			xf = tp->x - sp->x;
XX			yf = tp->y - sp->y;
XX		}
XX		v = yf/y + 6.5;
XX		h = xf/x + 10.5;
XX		if (v < 0 || v > 12)
XX			continue;
XX		if (h < 0 || h > 20)
XX			continue;
XX		switch (lp->type) {
XX			case I_SHIP:
XX				c = lp->data.sp->name[0];
XX				break;
XX			case I_TORPEDO:
XX				c = ':';
XX				break;
XX			case I_ENG:
XX				c = '#';
XX				break;
XX			case I_PROBE:
XX				c = '*';
XX				break;
XX			default:
XX				c = '?';
XX				break;
XX		}
XX		map[12 - v][h] = c;
XX	}
XX	for (i=0; i<13; i++) {
XX		for (j=0; j<21; j++)
XX			if (map[i][j] != ' ')
XX				break;
XX		if (j != 21)
XX			printf("%s", map[i]);
XX		printf("\n");
XX	}
XX	return 0;
XX}
XX
XX
XXpursue(sp)
XXstruct ship *sp;
XX{
XX	extern	struct ship *ship_name();
XX	extern	double atof();
XX	register int i;
XX	char	buf1[20];
XX	struct	ship *ep;
XX	float	warp;
XX
XX	if (sp->status & S_COMP) {
XX		printf("%s: Impossible, %s, our computer is dead\n",science ,title);
XX		return 0;
XX	}
XX	printf("   Mr. %s, pursue [who] ", nav);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	ep = ship_name(buf1,ENEMYONLY);
XX	if (ep == NULL)
XX		return 0;
XX	printf("   Mr. %s, warp factor [-9 to 9] ", helmsman);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	warp = (float) atof(buf1);
XX	if (warp > 9.0 || warp < -9.0) {
XX		printf("%s: %s, the engines canna go that fast!\n",engineer, title);
XX		return 0;
XX	}
XX	if ((warp > 1.0 || warp < -1.0) && (sp->status & S_WARP)) {
XX		printf("%s: Warp drive is dead, Captain.\n", science);
XX		warp = warp < 0.0 ? -1.0 : 1.0;
XX	}
XX	sp->newwarp = warp;
XX	sp->target = ep;
XX	/* Set eluding flag to 0, which means pursue */
XX	sp->eluding = 0;
XX	i = bearing(sp->x, ep->x, sp->y, ep->y);
XX	printf("%s: Aye, %s, coming to course %d.\n", nav, title, i);
XX	sp->newcourse = i;
XX	return 1;
XX}
XX
XX
XXelude(sp)
XXstruct ship *sp;
XX{
XX	extern	struct ship *ship_name();
XX	extern	double atof();
XX	register int i;
XX	char	buf1[20];
XX	struct	ship *ep;
XX	float	warp;
XX
XX	if (sp->status & S_COMP) {
XX		printf("%s: impossible, %s, our computer is dead\n",science, title);
XX		return 0;
XX	}
XX	printf("   Mr. %s, elude [who] ", nav);
XX	if ((Gets(buf1) == NULL) || (buf1 == NULL))
XX		return 0;
XX	ep = ship_name(buf1,ENEMYONLY);
XX	if (ep == NULL)
XX		return 0;
XX	printf("   Mr. %s, warp factor [-9 to 9] ", helmsman);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	warp = (float) atof(buf1);
XX	if (warp > 9.0 || warp < -9.0) {
XX		printf("%s: %s, the engines canna go that fast!\n",engineer, title);
XX		return 0;
XX	}
XX	if ((warp > 1.0 || warp < -1.0) && (sp->status & S_WARP)) {
XX		printf("%s: Warp drive is dead, Captain.\n", science);
XX		warp = warp < 0.0 ? -1.0 : 1.0;
XX	}
XX	sp->newwarp = warp;
XX	sp->target = ep;
XX	/* Set eluding flag to 1, which means elude */
XX	sp->eluding = 1;
XX	i = bearing(sp->x, ep->x, sp->y, ep->y);
XX	i = rectify(i + 180);
XX	printf("%s: Aye, %s, coming to course %d.\n", nav, title, i);
XX	sp->newcourse = i;
XX	return 1;
XX}
XX
XXhelm(sp)
XXstruct ship *sp;
XX{
XX	extern	double atof();
XX	char	buf1[20];
XX	register int course;
XX	float	warp;
XX
XX	printf("   Mr. %s, come to course [0-359] ", nav);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	course = atoi(buf1);
XX	if (course < 0 || course > 360)
XX		return 0;
XX	printf("   Mr. %s, warp factor [-9 to 9] ", helmsman);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	warp = (float) atof(buf1);
XX	if (warp > 9.0 || warp < -9.0) {
XX		printf("%s: %s, the engines canna go that fast!\n",engineer, title);
XX		return 0;
XX	}
XX	if ((warp > 1.0 || warp < -1.0) && (sp->status & S_WARP)) {
XX		printf("%s: Warp drive is dead, Captain.\n", science);
XX		warp = warp < 0.0 ? -1.0 : 1.0;
XX	}
XX	sp->newwarp = warp;
XX	sp->newcourse = course;
XX	sp->target = NULL;
XX	sp->eluding = 0;
XX	printf("%s: aye, %s.\n", nav, title);
XX	return 1;
XX}
XX
XXself_scan(sp)
XXstruct ship *sp;
XX{
XX	struct ship *ep;
XX	extern struct ship *shiplist[];
XX
XX	ep = shiplist[0];			/* Scanning ourself */
XX	print_damage(ep);
XX	sp = sp;				/* LINT */
XX	return 1;
XX}
XX
XXscan(sp)
XXstruct ship *sp;
XX{
XX	struct	ship *ep;
XX	char	buf1[20];
XX
XX	printf("   %s, scan [who] ", science);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	ep = ship_name(buf1,ENEMYONLY);
XX	if (ep == NULL)
XX		return 0;
XX	if (sp != ep && (sp->status & S_SENSOR)) {
XX		printf ("%s: The sensors are damaged, Captain.\n", science);
XX		return 0;
XX	}
XX	if (sp == ep) {
XX		printf ("%s: Captain, don't you mean 'Damage Report'?\n", science);
XX		return 0;
XX	}
XX	print_damage(ep);
XX	return 1;
XX}
XX
XXprint_damage(ep)
XXstruct ship *ep;
XX{	
XX	extern char *statmsg[];
XX	register int i;
XX	register int j;
XX	register float k;
XX
XX	printf("\n\nDamages to the %s\n", ep->name);
XX	for (i=0; i<5; i++) {
XX		if (ep->status & 1<crew);
XX	printf("\nPhasers Control");
XX	for (i=0; i<4; i++) {
XX		if (ep->phasers[i].status & P_DAMAGED)
XX			printf("\tdamaged");
XX		else if (ep->phasers[i].target == NULL)
XX			printf("\tmanual");
XX		else
XX			printf("\t%.7s", ep->phasers[i].target->name);
XX	}
XX	printf("\n\t turned");
XX	for (i=0; i<4; i++)
XX		if (ep->phasers[i].status & P_DAMAGED)
XX			printf("\t");
XX		else if (ep->phasers[i].target == NULL)
XX			printf("\t%d", ep->phasers[i].bearing);
XX		else
XX			printf("\tLOCKED");
XX	printf("\n\t  level");
XX	for (i=0; i<4; i++)
XX		if (ep->phasers[i].status & P_DAMAGED)
XX			printf("\t");
XX		else
XX			printf("\t%-2d", ep->phasers[i].load);
XX	printf("\n");
XX	printf("\nTubes\tcontrol");
XX	for (i=0; i<6; i++) {
XX		if (ep->tubes[i].status & T_DAMAGED)
XX			printf("\tdamaged");
XX		else if (ep->tubes[i].target == NULL)
XX			printf("\tmanual");
XX		else
XX			printf("\t%.7s", ep->tubes[i].target->name);
XX	}
XX	printf("\n\t turned");
XX	for (i=0; i<6; i++)
XX		if (ep->tubes[i].status & T_DAMAGED)
XX			printf("\t");
XX		else if (ep->tubes[i].target == NULL)
XX			printf("\t%d", ep->tubes[i].bearing);
XX		else
XX			printf("\tLOCKED");
XX	printf("\n\t  level");
XX	for (i=0; i<6; i++)
XX		if (ep->tubes[i].status & T_DAMAGED)
XX			printf("\t");
XX		else
XX			printf("\t%-2d", ep->tubes[i].load);
XX	printf("\n");
XX	printf("\nShields\t levels");
XX	for (i=0; i<4; i++) {
XX		j = 100 * ep->shields[i].eff * ep->shields[i].drain;
XX		printf("\t%-2d", j);
XX	}
XX	printf("\n\t drains");
XX	for (i=0; i<4; i++) {
XX		k = ep->shields[i].attemp_drain;
XX		printf("\t%-4.2f", k);
XX	}
XX	printf("\n\nefficiency: %3.1f\t\tfuel remaining: %d\n",
XX		ep->eff, ep->energy);
XX	printf("regeneration: %4.1f\tfuel capacity: %d\n",
XX		ep->regen, ep->pods);
XX	return 1;
XX}
SHAR_EOF
if test 9808 -ne "`wc -c cmds2.c`"
then
echo shar: error transmitting cmds2.c '(should have been 9808 characters)'
fi
echo shar: extracting cmds3.c '(5051 characters)'
sed 's/^XX//' << \SHAR_EOF > cmds3.c
XX/*
XX * TREK73: cmds3.c
XX *
XX * User Commands
XX *
XX * jettison_engineering, detonate_engineering, phaser_status, tube_status,
XX * survivors, alter_power
XX *
XX * (do_jettison)
XX *
XX */
XX
XX#include "defines.h"
XX#include "structs.h"
XX#include 
XX#include 
XX
XXextern char title[];
XXextern char engineer[];
XX
XXjettison_engineering(sp)
XXstruct ship *sp;
XX{
XX
XX	printf("   Mr. %s, jettison our engineering section!\n", engineer);
XX	if (sp->status & S_ENG) {
XX		printf("%s:  But Captain, it's already jettisonned.\n", engineer);
XX		return 0;
XX	}
XX	do_jettison(sp);
XX	printf("%s:  Jettisoning engineering.\n", engineer);
XX	return 1;
XX}
XX
XXdo_jettison(sp)
XXstruct ship *sp;
XX{
XX	extern	struct list *newitem();
XX	register struct list *lp;
XX	register struct torpedo *tp;
XX
XX	lp = newitem(I_ENG);
XX	tp = lp->data.tp = MKNODE(struct torpedo, *, 1);
XX	tp->target = NULL;
XX	tp->speed = sp->warp;
XX	tp->newspeed = 0.0;
XX	tp->x = sp->x;
XX	tp->y = sp->y;
XX	tp->course = sp->course;
XX	tp->fuel = sp->pods;
XX	tp->timedelay = 10 * 10;
XX	tp->prox = 0;
XX	tp->from = sp;
XX	tp->id = new_slot();
XX	sp->energy = sp->pods = 0;
XX	sp->newwarp = .99 * (sp->warp < 0.0 ? -1.0 : 1.0);
XX	sp->regen = 0.0;
XX	sp->status |= S_ENG;
XX	sp->status |= S_WARP;
XX}
XX
XXdetonate_engineering(sp)
XXstruct ship *sp;
XX{
XX	extern	struct list head;
XX	extern	struct list *tail;
XX	register struct list *lp;
XX	register struct torpedo *tp;
XX	register int found;
XX	char buf[10];
XX
XX	found = 0;
XX	printf("   %s, detonate engineering!\n", engineer);
XX	if (!(sp->status & S_ENG)) {
XX		printf("%s: But %s, it's still attached.\n",engineer,title);
XX		printf("   Detonate anyway? ");
XX		if ((Gets(buf) == NULL) || (buf == NULL))
XX			return 0;
XX		if (buf[0] != 'y')
XX			return 0;
XX		else 
XX			do_jettison(sp);
XX	}
XX	for (lp = &head; lp != tail; lp = lp->fwd) {
XX		if (lp->type != I_ENG)
XX			continue;
XX		tp = lp->data.tp;
XX		if (tp->from != sp)
XX			continue;
XX		found++;
XX		tp->timedelay = 1;
XX		break;
XX	}
XX	if (found)
XX		printf("%s:  Aye, %s.\n",engineer, title);
XX	else
XX		printf("%s:  Ours has already detonated.\n", engineer);
XX	return 1;
XX}
XX
XX
XXphaser_status(sp)
XXstruct ship *sp;
XX{
XX	register int i;
XX
XX	printf("Phasers\n\n");
XX	printf("Control: ");
XX	for (i=0; i<4; i++) {
XX		if (sp->phasers[i].status & P_DAMAGED)
XX			printf("\tdamaged");
XX		else if (sp->phasers[i].target == NULL)
XX			printf("\tmanual");
XX		else
XX			printf("\t%.7s", sp->phasers[i].target->name);
XX	}
XX	printf("\n Turned: ");
XX	for (i=0; i<4; i++)
XX		if (sp->phasers[i].status & P_DAMAGED)
XX			printf("\t");
XX		else if (sp->phasers[i].target == NULL)
XX			printf("\t%d", sp->phasers[i].bearing);
XX		else
XX			printf("\tLOCKED");
XX	printf("\n  Level: ");
XX	for (i=0; i<4; i++) {
XX		if (sp->phasers[i].status & P_DAMAGED)
XX			printf("\t");
XX		else
XX			printf("\t%d", sp->phasers[i].load);
XX	}
XX	printf("\n  Drain: ");
XX	for (i=0; i<4; i++) {
XX		if (sp->phasers[i].status & P_DAMAGED)
XX			printf("\t");
XX		else
XX			printf("\t%d", sp->phasers[i].drain);
XX	}
XX	printf("\n\nFiring percentage: %d\n",sp->p_percent);
XX	return 1;
XX}
XX
XXtube_status(sp)
XXstruct ship *sp;
XX{
XX	register int i;
XX
XX	printf("Torpedos\n\n");
XX	printf("Control: ");
XX	for (i=0; i<6; i++) {
XX		if (sp->tubes[i].status & T_DAMAGED)
XX			printf("\tdamaged");
XX		else if (sp->tubes[i].target == NULL)
XX			printf("\tmanual");
XX		else
XX			printf("\t%.7s", sp->tubes[i].target->name);
XX	}
XX	printf("\n Turned: ");
XX	for (i=0; i<6; i++)
XX		if (sp->tubes[i].status & T_DAMAGED)
XX			printf("\t");
XX		else if (sp->tubes[i].target == NULL)
XX			printf("\t%d", sp->tubes[i].bearing);
XX		else
XX			printf("\tLOCKED");
XX	printf("\n  Level: ");
XX	for (i=0; i<6; i++) {
XX		if (sp->tubes[i].status & T_DAMAGED)
XX			printf("\t");
XX		else
XX			printf("\t%d", sp->tubes[i].load);
XX	}
XX	printf("\n\nLaunch speed: %d\n", sp->t_lspeed);
XX	printf("  time delay: %d\n", sp->t_delay);
XX	printf("  prox delay: %d\n", sp->t_prox);
XX	return 1;
XX}
XX
XXsurvivors(sp)
XXstruct ship *sp;
XX{
XX	extern struct ship *shiplist[];
XX	extern int shipnum;
XX	struct ship *ep;
XX	register int i;
XX
XX	printf("\nSurvivors reported:\n");
XX	for (i=0; i<=shipnum; i++) {
XX		ep = shiplist[i];
XX		printf("   %s -- %d\n", ep->name, ep->crew);
XX	}
XX	sp = sp;				/* LINT */
XX}
XX
XXalter_power()
XX{
XX	extern char **argp;
XX	extern struct ship *shiplist[];
XX	extern char captain[];
XX	extern double atof();
XX	register int i;
XX	float j;
XX	char buf1[20];
XX
XX	printf("\n%s:  Regeneration rate is %5.2f.\n",engineer, shiplist[0]->regen);
XX	for (i=0; i<4; i++) {
XX		printf("%s:  Shield %d drain is ", captain, i + 1);
XX		Gets(buf1);
XX		j = (float) atof(buf1);
XX		if (buf1[strlen(buf1) - 1] == '*') {
XX			for (; i<4; i++)
XX				shiplist[0]->shields[i].attemp_drain =j;
XX			break;
XX		} else if ((j < 0.0) || (j > 1.0))
XX			goto badparam;
XX		else
XX			shiplist[0]->shields[i].attemp_drain = j;
XX	}				
XX	printf("\n");
XX	for (i=0; i<4; i++) {
XX		printf("%s:  Phaser %d drain is ", captain, i + 1);
XX		Gets(buf1);
XX		j = (float) atof(buf1);
XX		if (buf1[strlen(buf1) - 1] == '*') {
XX			for (; i<4; i++)
XX				shiplist[0]->phasers[i].drain = (int) j;
XX			break;
XX		} else if ((j < -10.0) || (j > 10.0))
XX			goto badparam;
XX		else
XX			shiplist[0]->phasers[i].drain = (int) j;
XX	}
XX	return 1;
XXbadparam:
XX	printf("%s:  Bad parameters, %s.\n", engineer, title);
XX	return 0;
XX}
SHAR_EOF
if test 5051 -ne "`wc -c cmds3.c`"
then
echo shar: error transmitting cmds3.c '(should have been 5051 characters)'
fi
echo shar: extracting cmds4.c '(8534 characters)'
sed 's/^XX//' << \SHAR_EOF > cmds4.c
XX/*
XX * TREK73: cmds4.c
XX *
XX * User Commands
XX *
XX * alterpntparams, play_dead, corbomite_bluff, surrender_ship,
XX * request_surrender, self_destruct, abort_self_destruct
XX *
XX */
XX
XX#include "defines.h"
XX#include "structs.h"
XX#include 
XX
XXextern	 int  defenseless;
XXextern   char captain[];
XXextern   char title[];
XXextern	 char science[];
XXextern	 char com[];
XXextern	 char nav[];
XXextern	 char helmsman[];
XXextern	 char engineer[];
XXextern   char foerace[];
XXextern   int  corbomite;
XXextern   int  surrender;
XXextern   int  surrenderp;
XX
XXalterpntparams(sp)
XXstruct ship *sp;
XX{
XX	int temp;
XX	char buf1[30];
XX
XX	printf("\n%s:  Reset tubes, %s?\n",nav,title);
XX	printf("%s:  [yes or no] ",captain);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	if ((buf1 != NULL) && (buf1[0] != 'n')) {
XX		printf("   Set launch speed to [0-12] ");
XX		if (Gets(buf1) == NULL)
XX			return 0;
XX		if (buf1 != NULL) {
XX			temp = atoi(buf1);
XX			if ((temp > -1) && (temp < 13))
XX				sp->t_lspeed = temp;
XX		}
XX		printf("   ...time delay to [0-10] ");
XX		if (Gets(buf1) == NULL)
XX			return 0;
XX		if (buf1 != NULL) {
XX			temp = atoi(buf1);
XX			if ((temp > -1) && (temp < 11))
XX				sp->t_delay = temp;
XX		}
XX		printf("   ...proximity delay to [0-500] ");
XX		if (Gets(buf1) == NULL)
XX			return 0;
XX		if (buf1 != NULL) {
XX			temp = atoi(buf1);
XX			if ((temp > -1) && (temp < 501))
XX				sp->t_prox = temp;
XX		}
XX	}
XX	printf("%s:  Reset phasers, %s?\n",nav ,title);
XX	printf("%s:  [yes or no] ",captain);
XX	if (Gets(buf1) == NULL)
XX		return 0;
XX	if ((buf1 != NULL) && (buf1[0] != 'n')) {
XX		printf("   Reset firing percentage to [0-100] ");
XX		if (Gets(buf1) == NULL)
XX			return 0;
XX		if (buf1 != NULL) {
XX			temp = atoi(buf1);
XX			if ((temp > -1) && (temp < 101))
XX				sp->p_percent = temp;
XX		}
XX	}
XX	return 0;
XX}
XX
XXplay_dead(sp)
XXstruct ship *sp;
XX{
XX	
XX	char buf1[30];
XX	int  phaser_charge;
XX	register int i;
XX
XX	printf("%s:   Weapons officer, drop shields ...\n",captain);
XX	if (defenseless) {
XX		printf("%s:   %s, the %ss are not that stupid.",science, title,foerace);
XX		return 0;
XX	}
XX	printf("   Transfer power to [engines or phasers]: ");
XX	if (Gets(buf1) == NULL || *buf1 == NULL) {
XX		printf("%s:   What?\n", nav);
XX		return 0;
XX	}
XX	phaser_charge = -10.;
XX	if (buf1[0] != 'e') {
XX		phaser_charge = 10.;
XX		if (buf1[0] != 'p') {
XX			printf("%s:   What?\n", nav);
XX			return 0;
XX		}
XX	}
XX	for (i=0;i<4;i++) 
XX		sp->shields[i].attemp_drain = 0.;
XX	for (i=0;i<4;i++)
XX		sp->phasers[i].drain = phaser_charge;
XX	defenseless = 1;
XX	return 0;
XX}
XX
XXcorbomite_bluff(sp)
XXstruct ship *sp;
XX{
XX	
XX	if (randm(2) == 1) {
XX		printf("%s:   Open a hailing frequency, ship-to-ship.\n",captain);
XX		printf("%s:  Hailing frequency open, %s.\n", com, title);
XX		printf("%s:   This is the Captain of the %s.  Our respect for\n",captain, sp->name);
XX		printf("   other life forms requires that we give you this warning--\n");
XX		printf("   one critical item of information which has never been\n");
XX		printf("   incorporated into the memory banks of any Earth ship.\n");
XX		printf("   Since the early years of space exploration, Earth vessels\n");
XX		printf("   have had incorporated into them a substance know as corbomite.\n");
XX		if (!corbomite) {
XX			printf("      It is a material and a device which prevents attack on\n");
XX			printf("   us.  If any destructive energy touchs our vessel, a re-\n");
XX			printf("   verse reaction of equal strength is created, destroying\n");
XX			printf("   the attacker.  It may interest you to know that, since\n");
XX			printf("   the initial use of corbomite for more than two of our\n");
XX			printf("   centuries ago, no attacking vessel has survived the attempt.\n");
XX			printf("   Death has little meaning to us.  If it has none to you,\n");
XX			printf("   then attack us now.  We grow annoyed with your foolishness.\n");
XX		}
XX	} else {
XX		printf("%s:   Open a special channel to Starfleet Command.\n",captain);
XX		printf("%s:   Aye, %s.\n",com, title);
XX		printf("%s:   Use Code 2.\n",captain);
XX		printf("%s:   but, Captain, according to our last Starfleet\n", com);
XX		printf("   Bulletin, the %ss have broken code 2.\n",foerace);
XX		printf("%s:   That's an order, Lieutenant.  Code 2!\n",captain);
XX		printf("%s:   Yes, Captain.  Code 2.\n", com);
XX		printf("%s:   Message from %s to Starfleet Command, this sector.\n",captain,sp->name);
XX		printf("   have inadvertantly encroached upon %s neutral zone,\n",foerace);
XX		printf("   surrounded and under heavy %s attack.  Escape\n",foerace);
XX		printf("   impossible.  Shields failing.  Will implement destruct\n");
XX		printf("   order using corbomite device recently installed.\n");
XX		if (!corbomite) {
XX			printf("   This will result in the destruction of the %s and\n",sp->name);
XX			printf("   all matter within a 200 megameter diameter and\n");
XX			printf("   establish corresponding dead zone, all federation\n");
XX			printf("   vessels will aviod this area for the next four solar\n");
XX			printf("   years.  Explosion will take place in one minute.  %s,\n",captain);
XX			printf("   commanding %s, out.\n",sp->name);
XX		}
XX	}
XX	if (!corbomite) {
XX		printf("      Mr. %s.  Stand by.\n", helmsman);
XX		printf("%s:  Standing by.\n", helmsman);
XX		corbomite = 1;
XX	} else {
XX		printf("\n%s:  I don't believe that they will fall for tha maneuver\n", science);
XX		printf("   again, %s.\n",title);
XX	}
XX	return 0;
XX}
XX
XXsurrender_ship(sp)
XXstruct ship *sp;
XX{
XX	printf("%s:   Lieutenant, open a channel to the %ss.\n", captain, foerace);
XX	printf("%s:   Aye, %s.\n", com, title);
XX	printf("%s:   This is Captain %s of the U. S. S. %s.  Will\n",captain,captain,sp->name);
XX	printf("   you accept my unconditional surrender?\n");
XX	if (surrender) {
XX		printf("%s:  The %ss have already refused.\n",science, foerace);
XX	} else {
XX		if (foerace == "Romulan") {
XX			printf("%s:  The %ss have not been know to have taken\n",science, foerace);
XX			printf("   prisoners.\n");
XX		}
XX		surrender = 1;
XX	}
XX	return 0;
XX}
XX
XXrequest_surrender(sp)
XXstruct ship *sp;
XX{
XX	printf("%s:   Lieutenant, open a hailing frequency to the %ss.\n",captain,foerace);
XX	printf("%s:  Aye, %s.\n", com, title);
XX	printf("%s:  This is Captain %s of the U. S. S. %s.  I give you\n",captain, captain, sp->name);
XX	printf("   one last chance to surrender before we resume our attack.\n");
XX	if (surrenderp) {
XX		printf("%s:   %s, our offer has already been refused.\n",science, title);
XX	} else {
XX		surrenderp = 1;
XX	}
XX	return 0;
XX}
XX
XXself_destruct(sp)
XXstruct ship *sp;
XX{
XX	printf("%s:   Lieutenant %s, tie in the bridge to the master\n",captain, com);
XX	printf("   computer.\n");
XX	if (sp->status & S_COMP) {
XX		printf("%s:  Our computer is down.\n", science);
XX		return 0;
XX	}
XX	printf("%s:   Aye, %s.\n",com, title);
XX	printf("%s:  Computer.  Destruct sequence.  Are you ready to copy?\n",captain);
XX	printf("Computer:  Working.\n");
XX	printf("%s:  Computer, this is Captain %s of the U. S. S. %s.\n",captain,captain,sp->name);
XX	printf("   destruct sequence one, code 1-1a.\n");
XX	printf("Computer:  Voice and code verified and correct.\n");
XX	printf("   Sequence one complete.\n");
XX	printf("%s:  This is Commander %s, Science Officer.  Destruct\n", science, science);
XX	printf("   sequence two, code 1-1a-2b.\n");
XX	printf("Computer:  Voice and code verified and correct.  Sequence\n");
XX	printf("   two complete.\n");
XX	printf("%s:  This is Lieutenant Commander %s, Chief Engineering\n", engineer, engineer);
XX	printf("   Officer of the U. S. S. %s.  Destruct sequence\n",sp->name);
XX	printf("   number three, code 1-b2-b3.\n");
XX	printf("Computer:  Voice and code verified and correct.\n");
XX	printf("   Destruct sequence complete and engaged.  Awaiting final\n");
XX	printf("   code for twenty second countdown.\n");
XX	printf("%s:  Computer, this is Captain %s of the U. S. S. %s.\n",captain, captain, sp->name);
XX	printf("   begin countdown, code 0-0-0, destruct 0.\n");
XX	printf("Computer:  20 seconds to self-detruct.\n");
XX	sp->delay = 9 * 20;
XXreturn 0;
XX}
XX
XXabort_self_destruct(sp)
XXstruct ship *sp;
XX{
XX	printf("%s:   Computer, this is Captain %s of the U. S. S. %s.\n",captain,captain,sp->name);
XX	printf("   Code 1-2-3 continuity abort destruct order, repeat:\n");
XX	printf("   Code 1-2-3 continuity abort destruct order!\n");
XX	if (sp->status & S_COMP) {
XX		printf("%s:  Our computer is down.\n", science);
XX		return 0;
XX	}
XX	if (sp->delay > 1000) {
XX		printf("Computer:  Self-destruct sequence has not been\n");
XX		printf("   initiated.\n");
XX		return 0;
XX	}
XX	printf("Computer:   Self-destruct order ...");
XX	fflush(stdout);
XX	sleep(4);
XX	if (sp->delay > 4 * 9) {
XX		printf("aborted.  Destruct order aborted.\n");
XX		sp->delay = 10000;
XX		return 0;
XX	} else {
XX		printf("\n%s:  Too late, captain ...\n", science);
XX		return 0;
XX	}
XX}
SHAR_EOF
if test 8534 -ne "`wc -c cmds4.c`"
then
echo shar: error transmitting cmds4.c '(should have been 8534 characters)'
fi
echo shar: extracting defines.h '(1508 characters)'
sed 's/^XX//' << \SHAR_EOF > defines.h
XX/*
XX * TREK73: defines.h
XX *
XX * Defines for TREK73
XX *
XX */
XX
XX/* Globals externals */
XXextern char *malloc(), *strcpy(), *gets();
XXextern long random();
XX
XX#define toradians(x) ((float)(x)*.0174533)
XX#define todegrees(x) ((float)(x)*57.2958)
XX#define randm(x) (((int)random() % (x)) + 1)
XX
XX#define min(x, y) ((x) < (y) ? (x) : (y))
XX#define max(x, y) ((x) > (y) ? (x) : (y))
XX
XX#ifndef NULL
XX#define NULL 0
XX#endif
XX
XX/*
XX * for the item linked list
XX */
XX#define I_UNDEFINED	0
XX#define I_SHIP		1
XX#define I_TORPEDO	2
XX#define I_PROBE		3
XX#define I_ENG		4
XX
XX/*
XX * for the ship status word
XX */
XX#define S_NORMAL	000
XX#define S_COMP		001
XX#define S_SENSOR	002
XX#define S_PROBE		004
XX#define S_WARP		010
XX#define S_ENG		020
XX#define S_DEAD		040
XX#define S_SURRENDER	0100
XX
XX/*
XX * for the status message turn off array
XX */
XX#define DISENGAGE	1
XX#define SHIELDSF	2
XX#define PHASERS		3
XX#define TUBES		7
XX#define SURRENDER	13
XX#define SURRENDERP	14
XX#define PLAYDEAD	15
XX#define CORBOMITE	16
XX#define BURNOUT		17
XX#define HIGHSHUTUP	27
XX
XX/*
XX * Defines for the play status word
XX */
XX#define NORMAL		000
XX#define F_SURRENDER	001
XX#define E_SURRENDER	002
XX
XX/*
XX * Phaser statuses
XX */
XX#define P_NORMAL	000
XX#define P_DAMAGED	001
XX#define P_FIRING	002
XX
XX/*
XX * Tube statuses
XX */
XX#define T_NORMAL	000
XX#define T_DAMAGED	001
XX#define T_FIRING	002
XX
XX/*
XX * Ship search routine directives
XX */
XX#define ALL		0
XX#define ENEMYONLY	1
XX
XX#define MKNODE(cast, star, number) (cast star)malloc(sizeof(cast) * number)
XX
XX#define MAXBADS 9
XX#define MAXFEDS 9
XX#define MAXENCOMM 9
XX#define MAXFOERACES 9
SHAR_EOF
if test 1508 -ne "`wc -c defines.h`"
then
echo shar: error transmitting defines.h '(should have been 1508 characters)'
fi
echo shar: extracting dist.c '(2568 characters)'
sed 's/^XX//' << \SHAR_EOF > dist.c
XX/*
XX * TREK73: dist.c
XX *
XX * Power distribution routines
XX *
XX * distribute
XX *
XX */
XX
XX#include "defines.h"
XX#include "structs.h"
XX#include 
XX
XXextern char engineer[];
XX
XXdistribute(sp)
XXstruct ship *sp;
XX{
XX	extern char title[];
XX	register int i;
XX	register int fuel;
XX	register int load;
XX	register int effload;
XX	register int drain;
XX	float shield;
XX	extern char shutup[];
XX	extern struct ship *shiplist[];
XX
XX	fuel = sp->energy + (int)(sp->regen * 2);
XX	/*
XX	 * Calculate negative phaser drains
XX	 */
XX	for (i=0; i<4; i++) {
XX		load = sp->phasers[i].load;
XX		drain = sp->phasers[i].drain;
XX		if ((sp->phasers[i].status & P_DAMAGED) || (drain >= 0)
XX		    || (sp->phasers[i].load <= 0))
XX			continue;
XX		/*
XX		 * Drain the lesser of either the current load if the
XX		 * load is less than the drain, or the drain value
XX		 */
XX		if (drain < 0) {
XX			effload = max(load + drain, 0);
XX			fuel += load - effload;
XX			sp->phasers[i].load = effload;
XX		}
XX	}
XX	/*
XX	 * Calculate shield drains
XX	 */
XX	shield = 0.0;
XX	for (i=0; i<4; i++)
XX		shield += sp->shields[i].attemp_drain;
XX	drain = ceil((double) shield);
XX	/*
XX	 * If all attempted drains are zero, or we have no
XX	 * fuel, our shields are down!
XX	 */
XX	if (((shield == 0) || (fuel == 0)) && !shutup[SHIELDSF] && sp == shiplist[0]) {
XX		printf("%s: %s, our shields are down!\n",engineer, title);
XX		shutup[SHIELDSF]++;
XX	}
XX	/*
XX	 * If there's not enough fuel to sustain the drains, then
XX	 * ration it out in proportion to the attempted drains and
XX	 * say that shields are fluctuating.
XX	 */
XX	if (drain <= fuel) {
XX		fuel -= drain;
XX		for (i=0; i<4; i++)
XX			sp->shields[i].drain = sp->shields[i].attemp_drain;
XX	} else {
XX		if (!shutup[SHIELDSF] && sp == shiplist[0]) {
XX			printf("%s: %s, our shields are fluctuating!\n", engineer, title);
XX			shutup[SHIELDSF]++;
XX		}
XX		for (i=0; i<4; i++)
XX			if (!sp->shields[i].attemp_drain)
XX				sp->shields[i].drain = sp->shields[i].attemp_drain * (float) fuel / drain;
XX			else
XX				sp->shields[i].drain = 0;
XX		fuel = 0;
XX	}
XX	/*
XX	 * Calculate positive phaser drains
XX	 */
XX	for (i=0; i<4 && fuel > 0; i++) {
XX		if (fuel <=0)
XX			break;
XX		load = sp->phasers[i].load;
XX		drain = sp->phasers[i].drain;
XX		if ((sp->phasers[i].status & P_DAMAGED) || load >= 10 || drain <= 0)
XX			continue;
XX		/*
XX		 * Load phasers either enough to top them off, or
XX		 * the full drain
XX		 */
XX		if (drain > 0) {
XX			effload = min(10, load + min(drain, fuel));
XX			fuel -= effload - load;
XX			sp->phasers[i].load = effload;
XX		}
XX	}
XX	/*
XX	 * Now balance the level of energy with the numer of pods
XX	 */
XX	if (fuel > sp->pods)
XX		sp->energy = sp->pods;
XX	else 
XX		sp->energy = fuel;
XX}
SHAR_EOF
if test 2568 -ne "`wc -c dist.c`"
then
echo shar: error transmitting dist.c '(should have been 2568 characters)'
fi
#	End of shell archive
exit 0