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