|
|
1.1 root 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 are permitted
6: * provided that: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: char copyright[] =
22: "@(#) Copyright (c) 1982 Regents of the University of California.\n\
23: All rights reserved.\n";
24: #endif /* not lint */
25:
26: #ifndef lint
27: static char sccsid[] = "@(#)mille.c 5.4 (Berkeley) 6/1/90";
28: #endif /* not lint */
29:
30: # include "mille.h"
31: # include <signal.h>
32: # ifdef attron
33: # include <term.h>
34: # endif attron
35:
36: /*
37: * @(#)mille.c 1.3 (Berkeley) 5/10/83
38: */
39:
40: int rub();
41:
42: main(ac, av)
43: reg int ac;
44: reg char *av[]; {
45:
46: reg bool restore;
47:
48: /* run as the user */
49: setuid(getuid());
50:
51: if (strcmp(av[0], "a.out") == 0) {
52: outf = fopen("q", "w");
53: setbuf(outf, (char *)NULL);
54: Debug = TRUE;
55: }
56: restore = FALSE;
57: switch (ac) {
58: case 2:
59: rest_f(av[1]);
60: restore = TRUE;
61: case 1:
62: break;
63: default:
64: printf("usage: milles [ restore_file ]\n");
65: exit(-1);
66: /* NOTREACHED */
67: }
68: Play = PLAYER;
69: initscr();
70: # ifdef attron
71: # define CA cursor_address
72: # endif
73: if (!CA) {
74: printf("Sorry. Need cursor addressing to play mille\n");
75: exit(-1);
76: }
77: delwin(stdscr);
78: stdscr = Board = newwin(BOARD_Y, BOARD_X, 0, 0);
79: Score = newwin(SCORE_Y, SCORE_X, 0, 40);
80: Miles = newwin(MILES_Y, MILES_X, 17, 0);
81: #ifdef attron
82: idlok(Board, TRUE);
83: idlok(Score, TRUE);
84: idlok(Miles, TRUE);
85: #endif
86: leaveok(Score, TRUE);
87: leaveok(Miles, TRUE);
88: clearok(curscr, TRUE);
89: # ifndef PROF
90: srandom(getpid());
91: # else
92: srandom(0);
93: # endif
94: crmode();
95: noecho();
96: signal(SIGINT, rub);
97: for (;;) {
98: if (!restore || (Player[PLAYER].total >= 5000
99: || Player[COMP].total >= 5000)) {
100: if (Player[COMP].total < Player[PLAYER].total)
101: Player[PLAYER].games++;
102: else if (Player[COMP].total > Player[PLAYER].total)
103: Player[COMP].games++;
104: Player[COMP].total = 0;
105: Player[PLAYER].total = 0;
106: }
107: do {
108: if (!restore)
109: Handstart = Play = other(Handstart);
110: if (!restore || On_exit) {
111: shuffle();
112: init();
113: }
114: newboard();
115: if (restore)
116: mvwaddstr(Score, ERR_Y, ERR_X, Initstr);
117: prboard();
118: do {
119: domove();
120: if (Finished)
121: newscore();
122: prboard();
123: } while (!Finished);
124: check_more();
125: restore = On_exit = FALSE;
126: } while (Player[COMP].total < 5000
127: && Player[PLAYER].total < 5000);
128: }
129: }
130:
131: /*
132: * Routine to trap rubouts, and make sure they really want to
133: * quit.
134: */
135: rub() {
136:
137: (void)signal(SIGINT, SIG_IGN);
138: if (getyn(REALLYPROMPT))
139: die();
140: (void)signal(SIGINT, rub);
141: }
142:
143: /*
144: * Time to go beddy-by
145: */
146: die() {
147:
148: (void)signal(SIGINT, SIG_IGN);
149: if (outf)
150: fflush(outf);
151: mvcur(0, COLS - 1, LINES - 1, 0);
152: endwin();
153: exit(1);
154: }
155:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.