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