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