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