1: #include "mille.h"
2: #ifndef unctrl
3: #include "unctrl.h"
4: #endif
5:
6: # include <sys/file.h>
7:
8: # ifdef attron
9: # include <term.h>
10: # define _tty cur_term->Nttyb
11: # endif attron
12:
13: /*
14: * @(#)misc.c 1.2 (Berkeley) 3/28/83
15: */
16:
17: #define NUMSAFE 4
18:
19: /* VARARGS1 */
20: error(str, arg)
21: char *str;
22: {
23: stdscr = Score;
24: mvprintw(ERR_Y, ERR_X, str, arg);
25: clrtoeol();
26: putchar('');
27: refresh();
28: stdscr = Board;
29: return FALSE;
30: }
31:
32: CARD
33: getcard()
34: {
35: reg int c, c1;
36:
37: for (;;) {
38: while ((c = readch()) == '\n' || c == '\r' || c == ' ')
39: continue;
40: if (islower(c))
41: c = toupper(c);
42: if (c == killchar() || c == erasechar())
43: return -1;
44: addstr(unctrl(c));
45: clrtoeol();
46: switch (c) {
47: case '1': case '2': case '3':
48: case '4': case '5': case '6':
49: c -= '0';
50: break;
51: case '0': case 'P': case 'p':
52: c = 0;
53: break;
54: default:
55: putchar('');
56: addch('\b');
57: if (!isprint(c))
58: addch('\b');
59: c = -1;
60: break;
61: }
62: refresh();
63: if (c >= 0) {
64: while ((c1=readch()) != '\r' && c1 != '\n' && c1 != ' ')
65: if (c1 == killchar())
66: return -1;
67: else if (c1 == erasechar()) {
68: addch('\b');
69: clrtoeol();
70: refresh();
71: goto cont;
72: }
73: else
74: write(0, "", 1);
75: return c;
76: }
77: cont: ;
78: }
79: }
80:
81: check_ext(forcomp)
82: reg bool forcomp; {
83:
84:
85: if (End == 700)
86: if (Play == PLAYER) {
87: if (getyn(EXTENSIONPROMPT)) {
88: extend:
89: if (!forcomp)
90: End = 1000;
91: return TRUE;
92: }
93: else {
94: done:
95: if (!forcomp)
96: Finished = TRUE;
97: return FALSE;
98: }
99: }
100: else {
101: reg PLAY *pp, *op;
102: reg int i, safe, miles;
103:
104: pp = &Player[COMP];
105: op = &Player[PLAYER];
106: for (safe = 0, i = 0; i < NUMSAFE; i++)
107: if (pp->safety[i] != S_UNKNOWN)
108: safe++;
109: if (safe < 2)
110: goto done;
111: if (op->mileage == 0 || onecard(op)
112: || (op->can_go && op->mileage >= 500))
113: goto done;
114: for (miles = 0, i = 0; i < NUMSAFE; i++)
115: if (op->safety[i] != S_PLAYED
116: && pp->safety[i] == S_UNKNOWN)
117: miles++;
118: if (miles + safe == NUMSAFE)
119: goto extend;
120: for (miles = 0, i = 0; i < HAND_SZ; i++)
121: if ((safe = pp->hand[i]) <= C_200)
122: miles += Value[safe];
123: if (miles + (Topcard - Deck) * 3 > 1000)
124: goto extend;
125: goto done;
126: }
127: else
128: goto done;
129: }
130:
131: /*
132: * Get a yes or no answer to the given question. Saves are
133: * also allowed. Return TRUE if the answer was yes, FALSE if no.
134: */
135: getyn(promptno)
136: register int promptno; {
137:
138: reg char c;
139:
140: Saved = FALSE;
141: for (;;) {
142: leaveok(Board, FALSE);
143: prompt(promptno);
144: clrtoeol();
145: refresh();
146: switch (c = readch()) {
147: case 'n': case 'N':
148: addch('N');
149: refresh();
150: leaveok(Board, TRUE);
151: return FALSE;
152: case 'y': case 'Y':
153: addch('Y');
154: refresh();
155: leaveok(Board, TRUE);
156: return TRUE;
157: case 's': case 'S':
158: addch('S');
159: refresh();
160: Saved = save();
161: continue;
162: default:
163: addstr(unctrl(c));
164: refresh();
165: putchar('');
166: break;
167: }
168: }
169: }
170:
171: /*
172: * Check to see if more games are desired. If not, and game
173: * came from a saved file, make sure that they don't want to restore
174: * it. Exit appropriately.
175: */
176: check_more() {
177:
178: flush_input();
179:
180: On_exit = TRUE;
181: if (Player[PLAYER].total >= 5000 || Player[COMP].total >= 5000)
182: if (getyn(ANOTHERGAMEPROMPT))
183: return;
184: else {
185: /*
186: * must do accounting normally done in main()
187: */
188: if (Player[PLAYER].total > Player[COMP].total)
189: Player[PLAYER].games++;
190: else if (Player[PLAYER].total < Player[COMP].total)
191: Player[COMP].games++;
192: Player[COMP].total = 0;
193: Player[PLAYER].total = 0;
194: }
195: else
196: if (getyn(ANOTHERHANDPROMPT))
197: return;
198: if (!Saved && getyn(SAVEGAMEPROMPT))
199: if (!save())
200: return;
201: die();
202: }
203:
204: readch()
205: {
206: reg int cnt;
207: static char c;
208:
209: for (cnt = 0; read(0, &c, 1) <= 0; cnt++)
210: if (cnt > 100)
211: exit(1);
212: return c;
213: }
214:
215: flush_input()
216: {
217: # ifdef TIOCFLUSH
218: static int ioctl_args = FREAD;
219:
220: (void) ioctl(fileno(stdin), TIOCFLUSH, &ioctl_args);
221: # else
222: fflush(stdin);
223: # endif
224: }
Defined functions
error
defined in line
20; used 20 times
- in /usr/src/games/mille/move.c line
42-45(2),
57,
65-67(2),
160,
173-182(4),
193,
202,
210,
218-221(2),
231,
283,
371,
416
- in /usr/src/games/mille/save.c line
81
Defined macros
_tty
defined in line
10;
never used