bagen() { int *p1, *p2, v; p1 = lmp; if((flag&010)!=0) if(board[5]==0 && board[6]==0 && board[7]==4) if(wattack(4) && wattack(5) && wattack(6)) btry(4, 0, 2); /* kingside castle */ if((flag&020)!=0) if(board[0]==4 && board[1]==0 && board[2]==0 && board[3]==0) if(wattack(2) && wattack(3) && wattack(4)) btry(4, 0, -2); /* queenside castle */ bgen(); p2 = p1; while(p2 != lmp) { v = *p2++; bmove(*p2); if(wattack(bkpos)) { *p1++ = v; *p1++ = *p2; } p2++; bremove(); } lmp = p1; }
bplay() { int v1, v2, *p1, *p2, *p3, ab; if(value > ivalue) ivalue = value; ab = 0; v1 = -3000; ply = 0; p1 = (int *) statl(); if(lmp == p1+2) { abmove = p1[1]; lmp = p1; return(ivalue); } p2 = p1; mantom = !mantom; while(p2 != lmp) { p2++; bmove(*p2); if(testf) { mantom = !mantom; bstatic(1); mantom = !mantom; } if(rept()) v2 = 0; else v2 = wplay1(v1); if(v2 > v1 && !mate(3, 0)) { ab = *p2; v1 = v2; } bremove(); if(testf) { mantom = !mantom; printf("%6d ", v2); out(*p2); printf("\n"); mantom = !mantom; } p2++; } if(ab == 0 && lmp != p1) ab = p1[1]; mantom = !mantom; lmp = p1; abmove = ab; return(v1); }
wheur4() { int *p1, *p2, ploc, i; if(amp[-1] != 1) return(0); ploc = amp[-3]; if(board[ploc] == -1) return(0); if(xheur(ploc)) return(0); p1 = lmp; p2 = p1; bagen(); i = 0; while(p2 != lmp) { p2++; bmove(*p2++); i = xheur(ploc); bremove(); if(i) break; } lmp = p1; return(i); }
void bclose(conn_t *conn, buddywin_t *bwin, int _auto) { if (bwin == NULL) return; verify_winlist_sanity(conn, bwin); switch (bwin->et) { case BUDDY: if (_auto == 0) { assert(bwin->e.buddy != NULL); status_echof(conn, "Type /delbuddy to remove %s from your buddy list.\n", user_name(NULL, 0, conn, bwin->e.buddy)); STRREPLACE(lastclose, bwin->winname); } break; case CHAT: if (bwin->winname[0] != ':') firetalk_chat_part(conn->conn, bwin->winname); free(bwin->e.chat->key); bwin->e.chat->key = NULL; free(bwin->e.chat->last.line); bwin->e.chat->last.line = NULL; free(bwin->e.chat->last.name); bwin->e.chat->last.name = NULL; free(bwin->e.chat); bwin->e.chat = NULL; break; case TRANSFER: assert(bwin->e.transfer != NULL); firetalk_file_cancel(conn->conn, bwin->e.transfer->handle); echof(conn, NULL, "File transfer aborted.\n"); fremove(bwin->e.transfer); bwin->e.transfer = NULL; break; } if (bwin == bwin->next) conn->curbwin = NULL; else { int i = 0; buddywin_t *bbefore; bbefore = bwin->next; while (bbefore->next != bwin) { bbefore = bbefore->next; assert(i++ < 10000); } bbefore->next = bwin->next; if (bwin == conn->curbwin) conn->curbwin = bwin->next; } if (conn->curbwin != NULL) verify_winlist_sanity(conn, NULL); bremove(bwin); bwin = NULL; bupdate(); if (conn->curbwin != NULL) verify_winlist_sanity(conn, NULL); if (conn->curbwin != NULL) nw_touchwin(&(conn->curbwin->nwin)); else nw_touchwin(&(conn->nwin)); }