Commit | Line | Data |
---|---|---|
9758240b KM |
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 | ||
2da1bbc7 | 13 | #ifndef lint |
9758240b | 14 | static char sccsid[] = "@(#)main.c 5.1 (Berkeley) %G%"; |
2da1bbc7 KM |
15 | #endif not lint |
16 | ||
17 | # include "trek.h" | |
06d69904 KL |
18 | # include <stdio.h> |
19 | # include <sgtty.h> | |
20 | # define PRIO 00 /* default priority */ | |
2da1bbc7 | 21 | |
06d69904 | 22 | int Mother = 51 + (51 << 8); |
2da1bbc7 KM |
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 | |
06d69904 | 99 | ** we don't have doubleing point hardware here; even if we did, I |
2da1bbc7 KM |
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 | |
06d69904 | 107 | ** implementations, and because I was too lazy to do the doubleing |
2da1bbc7 KM |
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 | { | |
06d69904 KL |
125 | long vect; |
126 | /* extern FILE *f_log; */ | |
2da1bbc7 KM |
127 | register char opencode; |
128 | int prio; | |
129 | register int ac; | |
130 | register char **av; | |
06d69904 KL |
131 | struct sgttyb argp; |
132 | int been_here = 0; | |
2da1bbc7 KM |
133 | |
134 | av = argv; | |
135 | ac = argc; | |
136 | av++; | |
06d69904 KL |
137 | time(&vect); |
138 | srand(vect); | |
2da1bbc7 KM |
139 | opencode = 'w'; |
140 | prio = PRIO; | |
06d69904 | 141 | if (gtty(1, &argp) == 0) |
2da1bbc7 | 142 | { |
06d69904 | 143 | if ((argp.sg_ispeed ) < B1200) |
2da1bbc7 KM |
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"); | |
06d69904 | 186 | /* |
2da1bbc7 | 187 | if (ac > 1) |
06d69904 KL |
188 | f_log = fopen(av[0], opencode); |
189 | */ | |
2da1bbc7 KM |
190 | |
191 | printf("\n * * * S T A R T R E K * * *\n\n"); | |
2da1bbc7 | 192 | |
06d69904 KL |
193 | play_with(stdin); |
194 | ungetc('\n',stdin); | |
2da1bbc7 | 195 | setexit(); |
06d69904 KL |
196 | if ( been_here == 1 ) |
197 | { | |
198 | if ( !getynpar("Another game") ) | |
199 | exit(0); | |
200 | } | |
201 | been_here = 1; | |
202 | do | |
2da1bbc7 KM |
203 | { |
204 | setup(); | |
205 | play(); | |
06d69904 KL |
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; | |
2da1bbc7 | 220 | } |