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

  1. /*
  2.  * Copyright (c) 1982 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) 1982 Regents of the University of California.\n\
  37.  All rights reserved.\n";
  38. #endif /* not lint */
  39.  
  40. #ifndef lint
  41. static char sccsid[] = "@(#)mille.c    5.5 (Berkeley) 2/28/91";
  42. #endif /* not lint */
  43.  
  44. # include    "mille.h"
  45. # include    <signal.h>
  46. # ifdef attron
  47. #    include    <term.h>
  48. # endif    attron
  49.  
  50. /*
  51.  * @(#)mille.c    1.3 (Berkeley) 5/10/83
  52.  */
  53.  
  54. void    rub();
  55.  
  56. main(ac, av)
  57. reg int        ac;
  58. reg char    *av[]; {
  59.  
  60.     reg bool    restore;
  61.  
  62.     /* run as the user */
  63.     setuid(getuid());
  64.  
  65.     if (strcmp(av[0], "a.out") == 0) {
  66.         outf = fopen("q", "w");
  67.         setbuf(outf, (char *)NULL);
  68.         Debug = TRUE;
  69.     }
  70.     restore = FALSE;
  71.     switch (ac) {
  72.       case 2:
  73.         rest_f(av[1]);
  74.         restore = TRUE;
  75.       case 1:
  76.         break;
  77.       default:
  78.         printf("usage: milles [ restore_file ]\n");
  79.         exit(-1);
  80.         /* NOTREACHED */
  81.     }
  82.     Play = PLAYER;
  83.     initscr();
  84. # ifdef attron
  85. #    define    CA    cursor_address
  86. # endif
  87.     if (!CA) {
  88.         printf("Sorry.  Need cursor addressing to play mille\n");
  89.         exit(-1);
  90.     }
  91.     delwin(stdscr);
  92.     stdscr = Board = newwin(BOARD_Y, BOARD_X, 0, 0);
  93.     Score = newwin(SCORE_Y, SCORE_X, 0, 40);
  94.     Miles = newwin(MILES_Y, MILES_X, 17, 0);
  95. #ifdef attron
  96.     idlok(Board, TRUE);
  97.     idlok(Score, TRUE);
  98.     idlok(Miles, TRUE);
  99. #endif
  100.     leaveok(Score, TRUE);
  101.     leaveok(Miles, TRUE);
  102.     clearok(curscr, TRUE);
  103. # ifndef PROF
  104.     srandom(getpid());
  105. # else
  106.     srandom(0);
  107. # endif
  108.     crmode();
  109.     noecho();
  110.     signal(SIGINT, rub);
  111.     for (;;) {
  112.         if (!restore || (Player[PLAYER].total >= 5000
  113.             || Player[COMP].total >= 5000)) {
  114.             if (Player[COMP].total < Player[PLAYER].total)
  115.                 Player[PLAYER].games++;
  116.             else if (Player[COMP].total > Player[PLAYER].total)
  117.                 Player[COMP].games++;
  118.             Player[COMP].total = 0;
  119.             Player[PLAYER].total = 0;
  120.         }
  121.         do {
  122.             if (!restore)
  123.                 Handstart = Play = other(Handstart);
  124.             if (!restore || On_exit) {
  125.                 shuffle();
  126.                 init();
  127.             }
  128.             newboard();
  129.             if (restore)
  130.                 mvwaddstr(Score, ERR_Y, ERR_X, Initstr);
  131.             prboard();
  132.             do {
  133.                 domove();
  134.                 if (Finished)
  135.                     newscore();
  136.                 prboard();
  137.             } while (!Finished);
  138.             check_more();
  139.             restore = On_exit = FALSE;
  140.         } while (Player[COMP].total < 5000
  141.             && Player[PLAYER].total < 5000);
  142.     }
  143. }
  144.  
  145. /*
  146.  *    Routine to trap rubouts, and make sure they really want to
  147.  * quit.
  148.  */
  149. void
  150. rub() {
  151.  
  152.     (void)signal(SIGINT, SIG_IGN);
  153.     if (getyn(REALLYPROMPT))
  154.         die();
  155.     (void)signal(SIGINT, rub);
  156. }
  157.  
  158. /*
  159.  *    Time to go beddy-by
  160.  */
  161. die() {
  162.  
  163.     (void)signal(SIGINT, SIG_IGN);
  164.     if (outf)
  165.         fflush(outf);
  166.     mvcur(0, COLS - 1, LINES - 1, 0);
  167.     endwin();
  168.     exit(1);
  169. }
  170.  
  171.