1 1.20 plunky /* $NetBSD: mille.c,v 1.20 2011/08/31 16:24:56 plunky Exp $ */ 2 1.4 cgd 3 1.1 cgd /* 4 1.3 jtc * Copyright (c) 1982, 1993 5 1.3 jtc * The Regents of the University of California. All rights reserved. 6 1.1 cgd * 7 1.1 cgd * Redistribution and use in source and binary forms, with or without 8 1.1 cgd * modification, are permitted provided that the following conditions 9 1.1 cgd * are met: 10 1.1 cgd * 1. Redistributions of source code must retain the above copyright 11 1.1 cgd * notice, this list of conditions and the following disclaimer. 12 1.1 cgd * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 cgd * notice, this list of conditions and the following disclaimer in the 14 1.1 cgd * documentation and/or other materials provided with the distribution. 15 1.13 agc * 3. Neither the name of the University nor the names of its contributors 16 1.1 cgd * may be used to endorse or promote products derived from this software 17 1.1 cgd * without specific prior written permission. 18 1.1 cgd * 19 1.1 cgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 1.1 cgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 1.1 cgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 1.1 cgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 1.1 cgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 1.1 cgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 1.1 cgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 1.1 cgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 1.1 cgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 1.1 cgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 1.1 cgd * SUCH DAMAGE. 30 1.1 cgd */ 31 1.1 cgd 32 1.6 lukem #include <sys/cdefs.h> 33 1.1 cgd #ifndef lint 34 1.15 lukem __COPYRIGHT("@(#) Copyright (c) 1982, 1993\ 35 1.15 lukem The Regents of the University of California. All rights reserved."); 36 1.1 cgd #endif /* not lint */ 37 1.1 cgd 38 1.1 cgd #ifndef lint 39 1.4 cgd #if 0 40 1.4 cgd static char sccsid[] = "@(#)mille.c 8.1 (Berkeley) 5/31/93"; 41 1.4 cgd #else 42 1.20 plunky __RCSID("$NetBSD: mille.c,v 1.20 2011/08/31 16:24:56 plunky Exp $"); 43 1.4 cgd #endif 44 1.1 cgd #endif /* not lint */ 45 1.1 cgd 46 1.19 dholland #include <time.h> 47 1.18 dholland #include "mille.h" 48 1.18 dholland #include <signal.h> 49 1.1 cgd 50 1.1 cgd /* 51 1.1 cgd * @(#)mille.c 1.3 (Berkeley) 5/10/83 52 1.1 cgd */ 53 1.1 cgd 54 1.6 lukem int 55 1.17 dholland main(int ac, char *av[]) 56 1.5 jtc { 57 1.6 lukem bool restore; 58 1.1 cgd 59 1.9 jsm /* Revoke setgid privileges */ 60 1.10 mycroft setgid(getgid()); 61 1.1 cgd 62 1.1 cgd if (strcmp(av[0], "a.out") == 0) { 63 1.1 cgd outf = fopen("q", "w"); 64 1.20 plunky setbuf(outf, NULL); 65 1.1 cgd Debug = TRUE; 66 1.1 cgd } 67 1.1 cgd restore = FALSE; 68 1.1 cgd switch (ac) { 69 1.1 cgd case 2: 70 1.1 cgd rest_f(av[1]); 71 1.1 cgd restore = TRUE; 72 1.1 cgd case 1: 73 1.1 cgd break; 74 1.1 cgd default: 75 1.1 cgd printf("usage: milles [ restore_file ]\n"); 76 1.11 wiz exit(1); 77 1.1 cgd /* NOTREACHED */ 78 1.1 cgd } 79 1.1 cgd Play = PLAYER; 80 1.16 drochner if (!initscr()) 81 1.16 drochner errx(0, "couldn't initialize screen"); 82 1.1 cgd delwin(stdscr); 83 1.1 cgd stdscr = Board = newwin(BOARD_Y, BOARD_X, 0, 0); 84 1.1 cgd Score = newwin(SCORE_Y, SCORE_X, 0, 40); 85 1.1 cgd Miles = newwin(MILES_Y, MILES_X, 17, 0); 86 1.1 cgd #ifdef attron 87 1.1 cgd idlok(Board, TRUE); 88 1.1 cgd idlok(Score, TRUE); 89 1.1 cgd idlok(Miles, TRUE); 90 1.1 cgd #endif 91 1.1 cgd leaveok(Score, TRUE); 92 1.1 cgd leaveok(Miles, TRUE); 93 1.1 cgd clearok(curscr, TRUE); 94 1.18 dholland #ifndef PROF 95 1.19 dholland srandom((long) time(NULL)); 96 1.18 dholland #else 97 1.1 cgd srandom(0); 98 1.18 dholland #endif 99 1.12 blymn cbreak(); 100 1.1 cgd noecho(); 101 1.1 cgd signal(SIGINT, rub); 102 1.1 cgd for (;;) { 103 1.1 cgd if (!restore || (Player[PLAYER].total >= 5000 104 1.1 cgd || Player[COMP].total >= 5000)) { 105 1.1 cgd if (Player[COMP].total < Player[PLAYER].total) 106 1.1 cgd Player[PLAYER].games++; 107 1.1 cgd else if (Player[COMP].total > Player[PLAYER].total) 108 1.1 cgd Player[COMP].games++; 109 1.1 cgd Player[COMP].total = 0; 110 1.1 cgd Player[PLAYER].total = 0; 111 1.1 cgd } 112 1.1 cgd do { 113 1.1 cgd if (!restore) 114 1.1 cgd Handstart = Play = other(Handstart); 115 1.1 cgd if (!restore || On_exit) { 116 1.1 cgd shuffle(); 117 1.1 cgd init(); 118 1.1 cgd } 119 1.1 cgd newboard(); 120 1.1 cgd if (restore) 121 1.1 cgd mvwaddstr(Score, ERR_Y, ERR_X, Initstr); 122 1.1 cgd prboard(); 123 1.1 cgd do { 124 1.1 cgd domove(); 125 1.1 cgd if (Finished) 126 1.1 cgd newscore(); 127 1.1 cgd prboard(); 128 1.1 cgd } while (!Finished); 129 1.1 cgd check_more(); 130 1.1 cgd restore = On_exit = FALSE; 131 1.1 cgd } while (Player[COMP].total < 5000 132 1.1 cgd && Player[PLAYER].total < 5000); 133 1.1 cgd } 134 1.1 cgd } 135 1.1 cgd 136 1.1 cgd /* 137 1.1 cgd * Routine to trap rubouts, and make sure they really want to 138 1.1 cgd * quit. 139 1.1 cgd */ 140 1.1 cgd void 141 1.17 dholland rub(int dummy __unused) 142 1.6 lukem { 143 1.1 cgd (void)signal(SIGINT, SIG_IGN); 144 1.1 cgd if (getyn(REALLYPROMPT)) 145 1.3 jtc die(0); 146 1.1 cgd (void)signal(SIGINT, rub); 147 1.1 cgd } 148 1.1 cgd 149 1.1 cgd /* 150 1.1 cgd * Time to go beddy-by 151 1.1 cgd */ 152 1.6 lukem void 153 1.17 dholland die(int code) 154 1.6 lukem { 155 1.1 cgd 156 1.1 cgd (void)signal(SIGINT, SIG_IGN); 157 1.1 cgd if (outf) 158 1.1 cgd fflush(outf); 159 1.1 cgd mvcur(0, COLS - 1, LINES - 1, 0); 160 1.1 cgd endwin(); 161 1.3 jtc exit(code); 162 1.1 cgd } 163