void getmove() { int i, c; c = 0; for (;;) { i = checkmove(c); switch (i) { case -1: if (movokay(mvlim)) { move(20, 0); for (i = 0; i < mvlim; i++) if (h[i]) wrhit(g[i]); nexturn(); if (*offopp == 15) cturn *= -2; return; } case -4: case 0: refresh(); if (i != 0 && i != -4) break; mvaddstr(20, 0, *Colorptr); if (i == -4) addstr(" must make "); else addstr(" can only make "); printw("%d move%s.\n", mvlim, mvlim > 1 ? "s":""); break; case -3: if (quit()) return; } move(cturn == -1 ? 18 : 19, 39); clrtoeol(); c = -1; } }
getmove () { register int i, c; c = 0; for (;;) { i = checkmove(c); switch (i) { case -1: if (movokay(mvlim)) { if (tflag) curmove (20,0); else writec ('\n'); for (i = 0; i < mvlim; i++) if (h[i]) wrhit(g[i]); nexturn(); if (*offopp == 15) cturn *= -2; if (tflag && pnum) bflag = pnum; return; } case -4: case 0: if (tflag) refresh(); if (i != 0 && i != -4) break; if (tflag) curmove (20,0); else writec ('\n'); writel (*Colorptr); if (i == -4) writel (" must make "); else writel (" can only make "); writec (mvlim+'0'); writel (" move"); if (mvlim > 1) writec ('s'); writec ('.'); writec ('\n'); break; case -3: if (quit()) return; } if (! tflag) proll (); else { curmove (cturn == -1? 18: 19,39); cline (); c = -1; } } }
int checkmove(int ist) { int curr, curc; int j, n; int c; domove: getyx(stdscr, curr, curc); if (ist == 0) mvprintw(curr, 32, "Move: "); ist = mvl = ncin = 0; for (j = 0; j < 5; j++) p[j] = g[j] = -1; dochar: c = readc(); if (c == 'S') { raflag = 0; save(1); move(cturn == -1 ? 18 : 19, 39); ist = -1; goto domove; } if ((c == KEY_BACKSPACE || c == 0177) && ncin > 0) { getyx(stdscr, curr, curc); move(curr, curc - 1); ncin--; n = rsetbrd(); if (n == 0) { n = -1; refresh(); } if ((ist = n) > 0) goto dochar; getyx(stdscr, curr, curc); move(curr, 39); clrtoeol(); goto domove; } else if (c == KEY_DL && ncin > 0) { getyx(stdscr, curr, curc); move(curr, 39); clrtoeol(); ist = -1; refresh(); goto domove; } if (!isascii(c) || (ncin >= CIN_SIZE - 1)) { beep(); goto domove; } n = dotable(c, ist); if (n >= 0) { cin[ncin++] = c; if (n > 2) if (c != '\n') addch(c); ist = n; if (n) goto dochar; else goto domove; } if (n == -1 && mvl >= mvlim) return(0); if (n == -1 && mvl < mvlim-1) return(-4); if (n == -6) { if (movokay(mvl + 1)) { moveplayers(); movback(mvl + 1); } else move(cturn == -1 ? 18 : 19, ncin + 39); ist = n = rsetbrd(); goto dochar; } if (n != -5) return(n); beep(); goto dochar; }