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