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