#include "old.h" play(f) int f; { int t, i, ts[9]; clock(); ts[8] = 0; if(f) goto first; loop: intrp = 0; move(); first: if(manflg) goto loop; i = mantom; t = clktim[i]; if(!bookm()) if(!mate(mdepth, 1)) xplay(); if(intrp) { decrem(); mantom? bremove(): wremove(); goto loop; } if(!abmove) { printf("Resign\n"); onhup(); } makmov(abmove); i = clktim[i]; t = i-t; times(ts); ts[8] = ts[1]; if(i/moveno > 150) { if(depth > 1) goto decr; goto loop; } if(depth==3 && t>180) goto decr; if(depth==1 && t<60) goto incr; if(game==3 && t<60 && depth==2) goto incr; goto loop; incr: depth++; goto loop; decr: goto loop; } move() { int a, *p, *p1; loop: lmp = (int *) done(); a = manual(); p = (int *) done(); p1 = p; while(p1 != lmp) { p1++; if(*p1++ == a) { lmp = p; makmov(a); return; } } printf("Illegal move\n"); lmp = p; goto loop; } manual() { int a, b, c; char *p1; extern out1; loop: intrp = 0; stage(); rline(); sbufp = sbuf; if(match("save")) { save(); goto loop; } if(match("test")) { testf = !testf; goto loop; } if(match("remove")) { if(amp[-1] != -1) { decrem(); mantom? bremove(): wremove(); } if(amp[-1] != -1) { decrem(); mantom? bremove(): wremove(); } goto loop; } if(match("exit")) exit(); if(match("manual")) { manflg = !manflg; goto loop; } if(match("resign")) onhup(); if(moveno == 1 && mantom == 0) { if(match("first")) play(1); if(match("alg")) { mfmt = 1; goto loop; } if(match("restore")) { restore(); goto loop; } } if(match("clock")) { clktim[mantom] += clock(); ctime("white", clktim[0]); ctime("black", clktim[1]); goto loop; } if(match("score")) { score(); goto loop; } if(match("setup")) { setup(); goto loop; } if(match("hint")) { a = xplay(); out(abmove); printf(" %d\n", a); goto loop; } if(match("repeat")) { if(amp[-1] != -1) { a = (int) amp; mantom? wremove(): bremove(); decrem(); posit(&out1, a); } goto loop; } if(*sbufp == '\0') { pboard(); goto loop; } if((a=algin()) != 0) { mfmt = 1; return(a); } if((a=stdin()) != 0) { mfmt = 0; return(a); } printf("eh?\n"); goto loop; } algin() { int from, to; from = cooin(); to = cooin(); if(*sbufp != '\0') return(0); return((from<<8)|to); } cooin() { int a, b; a = sbufp[0]; if(a<'a' || a>'h') return(0); b = sbufp[1]; if(b<'1' || b>'8') return(0); sbufp += 2; a = (a-'a')+8*('8'-b); return(a); } match(s) char *s; { char *p1; int c; p1 = sbufp; while((c = *s++) != '\0') if(*p1++ != c) return(0); sbufp = p1; return(1); } done() { int *p; if(rept() > 3) { printf("Draw by repetition\n"); onhup(); } p = lmp; mantom? bagen(): wagen(); if(p == lmp) { if(check()) if(mantom) printf("White wins\n"); else printf("Black wins\n"); else printf("Stale mate\n"); onhup(); } return((int)p); } xplay() { int a; stage(); abmove = 0; a = mantom? bplay(): wplay(); ivalue = a; return(a); } term() { exit(0); }