home *** CD-ROM | disk | FTP | other *** search
- #include "old.h"
-
- 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;
- }
-
- btry(from, mask, offset)
- int from, mask, offset;
- {
-
- if((dir[from]&mask)==0)
- bcheck(from, from+offset);
- }
-
- bcheck(from, to)
- int from, to;
- {
-
- if(board[to]>0) return(1);
- *lmp++ = (pval+6)[board[to]]-value;
- *lmp++ = (from<<8)|to;
- return(board[to] != 0);
- }
-
- wagen()
- {
- int *p1, *p2, v;
-
- p1 = lmp;
- if((flag&1)!=0)
- if(board[61]==0 && board[62]==0 && board[63]== -4)
- if(battack(60) && battack(61) && battack(62))
- wtry(60, 0, 2); /* kingside castle */
- if((flag&2)!=0)
- if(board[56]== -4 && board[57]==0 && board[58]==0 && board[59]==0)
- if(battack(58) && battack(59) && battack(60))
- wtry(60, 0, -2); /* queenside castle */
- wgen();
- p2 = p1;
- while(p2 != lmp) {
- v = *p2++;
- wmove(*p2);
- if(battack(wkpos)) {
- *p1++ = v;
- *p1++ = *p2;
- }
- p2++;
- wremove();
- }
- lmp = p1;
- }
-
- wtry(from, mask, offset)
- int from, mask, offset;
- {
-
- if((dir[from]&mask)==0)
- wcheck(from, from+offset);
- }
-
- wcheck(from, to)
- int from, to;
- {
-
- if(board[to]<0) return(1);
- *lmp++ = value-(pval+6)[board[to]];
- *lmp++ = (from<<8)|to;
- return(board[to] != 0);
- }
-
-