home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / trek / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  7.7 KB  |  236 lines

  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. }
  236.