1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: char copyright[] =
9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
10: All rights reserved.\n";
11: #endif not lint
12:
13: #ifndef lint
14: static char sccsid[] = "@(#)main.c 5.1 (Berkeley) 1/29/86";
15: #endif not lint
16:
17: # include "trek.h"
18: # include <stdio.h>
19: # include <sgtty.h>
20: # define PRIO 00 /* default priority */
21:
22: int Mother = 51 + (51 << 8);
23:
24: /*
25: ** #### ##### # #### ##### #### ##### # #
26: ** # # # # # # # # # # # #
27: ** ### # ##### #### # #### ### ###
28: ** # # # # # # # # # # # #
29: ** #### # # # # # # # # ##### # #
30: **
31: ** C version by Eric P. Allman 5/76 (U.C. Berkeley) with help
32: ** from Jeff Poskanzer and Pete Rubinstein.
33: **
34: ** I also want to thank everyone here at Berkeley who
35: ** where crazy enough to play the undebugged game. I want to
36: ** particularly thank Nick Whyte, who made considerable
37: ** suggestions regarding the content of the game. Why, I'll
38: ** never forget the time he suggested the name for the
39: ** "capture" command.
40: **
41: ** Please send comments, questions, and suggestions about this
42: ** game to:
43: ** Eric P. Allman
44: ** Project INGRES
45: ** Electronics Research Laboratory
46: ** Cory Hall
47: ** University of California
48: ** Berkeley, California 94720
49: **
50: ** If you make ANY changes in the game, I sure would like to
51: ** know about them. It is sort of an ongoing project for me,
52: ** and I very much want to put in any bug fixes and improvements
53: ** that you might come up with.
54: **
55: ** FORTRASH version by Kay R. Fisher (DEC) "and countless others".
56: ** That was adapted from the "original BASIC program" (ha!) by
57: ** Mike Mayfield (Centerline Engineering).
58: **
59: ** Additional inspiration taken from FORTRAN version by
60: ** David Matuszek and Paul Reynolds which runs on the CDC
61: ** 7600 at Lawrence Berkeley Lab, maintained there by
62: ** Andy Davidson. This version is also available at LLL
63: ** and at LMSC. In all fairness, this version was the
64: ** major inspiration for this version of the game (trans-
65: ** lation: I ripped off a whole lot of code).
66: **
67: ** Minor other input from the "Battelle Version 7A" by Joe Miller
68: ** (Graphics Systems Group, Battelle-Columbus Labs) and
69: ** Ross Pavlac (Systems Programmer, Battelle Memorial
70: ** Institute). That version was written in December '74
71: ** and extensively modified June '75. It was adapted
72: ** from the FTN version by Ron Williams of CDC Sunnyvale,
73: ** which was adapted from the Basic version distributed
74: ** by DEC. It also had "neat stuff swiped" from T. T.
75: ** Terry and Jim Korp (University of Texas), Hicks (Penn
76: ** U.), and Rick Maus (Georgia Tech). Unfortunately, it
77: ** was not as readable as it could have been and so the
78: ** translation effort was severely hampered. None the
79: ** less, I got the idea of inhabited starsystems from this
80: ** version.
81: **
82: ** Permission is given for use, copying, and modification of
83: ** all or part of this program and related documentation,
84: ** provided that all reference to the authors are maintained.
85: **
86: **
87: **********************************************************************
88: **
89: ** NOTES TO THE MAINTAINER:
90: **
91: ** There is a compilation option xTRACE which must be set for any
92: ** trace information to be generated. It is probably defined in
93: ** the version that you get. It can be removed, however, if you
94: ** have trouble finding room in core.
95: **
96: ** Many things in trek are not as clear as they might be, but are
97: ** done to reduce space. I compile with the -f and -O flags. I
98: ** am constrained to running with non-seperated I/D space, since
99: ** we don't have doubleing point hardware here; even if we did, I
100: ** would like trek to be available to the large number of people
101: ** who either have an 11/40 or do not have FP hardware. I also
102: ** found it desirable to make the code run reentrant, so this
103: ** added even more space constraints.
104: **
105: ** I use the portable C library to do my I/O. This is done be-
106: ** cause I wanted the game easily transportable to other C
107: ** implementations, and because I was too lazy to do the doubleing
108: ** point input myself. Little did I know. The portable C library
109: ** released by Bell Labs has more bugs than you would believe, so
110: ** I ended up rewriting the whole blessed thing. Trek excercises
111: ** many of the bugs in it, as well as bugs in some of the section
112: ** III UNIX routines. We have fixed them here. One main problem
113: ** was a bug in alloc() that caused it to always ask for a large
114: ** hunk of memory, which worked fine unless you were almost out,
115: ** which I inevitably was. If you want the code for all of this
116: ** stuff, it is also available through me.
117: **
118: ***********************************************************************
119: */
120:
121: main(argc, argv)
122: int argc;
123: char **argv;
124: {
125: long vect;
126: /* extern FILE *f_log; */
127: register char opencode;
128: int prio;
129: register int ac;
130: register char **av;
131: struct sgttyb argp;
132: int been_here = 0;
133:
134: av = argv;
135: ac = argc;
136: av++;
137: time(&vect);
138: srand(vect);
139: opencode = 'w';
140: prio = PRIO;
141: if (gtty(1, &argp) == 0)
142: {
143: if ((argp.sg_ispeed ) < B1200)
144: Etc.fast++;
145: }
146: while (ac > 1 && av[0][0] == '-')
147: {
148: switch (av[0][1])
149: {
150: case 'a': /* append to log file */
151: opencode = 'a';
152: break;
153:
154: case 'f': /* set fast mode */
155: Etc.fast++;
156: break;
157:
158: case 's': /* set slow mode */
159: Etc.fast = 0;
160: break;
161:
162: # ifdef xTRACE
163: case 't': /* trace */
164: if (getuid() != Mother)
165: goto badflag;
166: Trace++;
167: break;
168: # endif
169:
170: case 'p': /* set priority */
171: if (getuid() != Mother)
172: goto badflag;
173: if (scanf(-1, &av[0][2], "%d", &prio) > 0)
174: break;
175:
176: default:
177: badflag:
178: printf("Invalid option: %s\n", av[0]);
179:
180: }
181: ac--;
182: av++;
183: }
184: if (ac > 2)
185: syserr(0, "arg count");
186: /*
187: if (ac > 1)
188: f_log = fopen(av[0], opencode);
189: */
190:
191: printf("\n * * * S T A R T R E K * * *\n\n");
192:
193: play_with(stdin);
194: ungetc('\n',stdin);
195: setexit();
196: if ( been_here == 1 )
197: {
198: if ( !getynpar("Another game") )
199: exit(0);
200: }
201: been_here = 1;
202: do
203: {
204: setup();
205: play();
206: } while (getynpar("Another game"));
207:
208: fflush(stdout);
209: }
210:
211: play_with(iop)
212: register FILE *iop;
213: {
214: extern char _sibuf[];
215:
216: iop->_cnt = 0;
217: iop->_base = _sibuf;
218: iop->_ptr = iop->_base;
219: iop->_bufsiz = BUFSIZ;
220: }
Defined functions
main
defined in line
121;
never used
Defined variables
Defined macros
PRIO
defined in line
20; used 1 times