|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)mille.c 4.1 12/24/82";
3: #endif
4:
5: # include "mille.h"
6: # include <signal.h>
7:
8: int rub(), tstp();
9:
10: char _sobuf[BUFSIZ];
11:
12: main(ac, av)
13: reg int ac;
14: reg char *av[]; {
15:
16: reg bool restore;
17:
18: # if 0
19: if (getuid() == GURP) {
20: printf("%s: Permission denied\n", av[0]);
21: exit(1);
22: }
23: # endif
24: if (strcmp(av[0], "a.out") == 0) {
25: outf = fopen("q", "w");
26: setbuf(outf, 0);
27: Debug = TRUE;
28: }
29: restore = FALSE;
30: # ifdef pdp11
31: if (geteuid() != ARNOLD)
32: maxusers(MAXUSERS, NULL);
33: # endif
34: switch (ac) {
35: case 2:
36: rest_f(av[1]);
37: restore = TRUE;
38: case 1:
39: break;
40: default:
41: printf("usage: milles [ restore_file ]\n");
42: exit(-1);
43: /* NOTREACHED */
44: }
45: setbuf(stdout, _sobuf);
46: Play = PLAYER;
47: initscr();
48: if (!CA) {
49: printf("Sorry. Need cursor addressing to play mille\n");
50: exit(-1);
51: }
52: delwin(stdscr);
53: stdscr = Board = newwin(BOARD_Y, BOARD_X, 0, 0);
54: Score = newwin(SCORE_Y, SCORE_X, 0, 40);
55: Miles = newwin(MILES_Y, MILES_X, 17, 0);
56: leaveok(Score, TRUE);
57: leaveok(Miles, TRUE);
58: clearok(curscr, TRUE);
59: # ifndef PROF
60: srand(getpid());
61: # else
62: srand(0);
63: # endif
64: crmode();
65: noecho();
66: signal(SIGINT, rub);
67: signal(SIGTSTP, tstp);
68: for (;;) {
69: if (!restore || (Player[PLAYER].total >= 5000
70: || Player[COMP].total >= 5000)) {
71: if (Player[COMP].total < Player[PLAYER].total)
72: Player[PLAYER].games++;
73: else if (Player[COMP].total > Player[PLAYER].total)
74: Player[COMP].games++;
75: Player[COMP].total = 0;
76: Player[PLAYER].total = 0;
77: }
78: do {
79: if (!restore)
80: Handstart = Play = other(Handstart);
81: if (!restore || On_exit) {
82: shuffle();
83: init();
84: }
85: newboard();
86: if (restore)
87: mvwaddstr(Score, ERR_Y, ERR_X, Initstr);
88: prboard();
89: do {
90: domove();
91: if (Finished)
92: newscore();
93: prboard();
94: } while (!Finished);
95: check_more();
96: restore = On_exit = FALSE;
97: } while (Player[COMP].total < 5000
98: && Player[PLAYER].total < 5000);
99: }
100: }
101:
102: /*
103: * Routine to trap rubouts, and make sure they really want to
104: * quit.
105: */
106: rub() {
107:
108: signal(SIGINT, 1);
109: if (getyn("Really? "))
110: die();
111: signal(SIGINT, rub);
112: }
113:
114: /*
115: * Time to go beddy-by
116: */
117: die() {
118:
119: signal(SIGINT, 1);
120: if (outf)
121: fflush(outf);
122: mvcur(0, COLS - 1, LINES - 1, 0);
123: endwin();
124: exit(1);
125: }
126:
127: tstp() {
128:
129: if (outf)
130: fflush(outf);
131: resetty();
132: kill(0, SIGTSTP);
133: signal(SIGTSTP, tstp);
134: noecho();
135: crmode();
136: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.