/*#define DEBUG*/ void *c4_malloc (int); #define LOGFILE "connect4.log" #define TMPFILENAME "tempfile.$$$" #define TEMP_BOOK "openbook.cn4" #define WHITE_BOOK "white_ob.cn4" #define BLACK_BOOK "black_ob.cn4" #define ARROW_UP 0x4800 #define ARROW_DOWN 0x5000 #define PAGE_UP 0x4900 #define PAGE_DOWN 0x5100 #define TRUE 1 #define FALSE 0 #define YES 1 #define NO 0 #define ON 1 #define OFF 0 #define FULL -1 #define EMPTY 0 #define WHITE 1 #define BLACK 2 #define SWITCHSIDE 3 #define WIN 2 #define DRAW 1 #define NOTHING 0 #define BOARDX 7 #define BOARDY 6 #define MAXSQUARES (BOARDX*BOARDY) #define GROUPS 69 #define MAXSOLS 700 #define MAXGROUPS 50 #define TILES 4 #define MAXMEN 42 #define ELM(x,y) ((x)+((y)<<3)) #define ELX(n) ((n)&7) #define ELY(n) ((n)>>3) #define BOTH(x,y) ((x)+((y)<<6)) #define ALLOC_SOLUTIONS (9*GROUPS) #define CHARS 0 #define VESAGR 1 #define SQ_a1 ELM(0,0) #define SQ_a2 ELM(0,1) #define SQ_a3 ELM(0,2) #define SQ_a4 ELM(0,3) #define SQ_a5 ELM(0,4) #define SQ_a6 ELM(0,5) #define SQ_b1 ELM(1,0) #define SQ_b2 ELM(1,1) #define SQ_b3 ELM(1,2) #define SQ_b4 ELM(1,3) #define SQ_b5 ELM(1,4) #define SQ_b6 ELM(1,5) #define SQ_c1 ELM(2,0) #define SQ_c2 ELM(2,1) #define SQ_c3 ELM(2,2) #define SQ_c4 ELM(2,3) #define SQ_c5 ELM(2,4) #define SQ_c6 ELM(2,5) #define SQ_d1 ELM(3,0) #define SQ_d2 ELM(3,1) #define SQ_d3 ELM(3,2) #define SQ_d4 ELM(3,3) #define SQ_d5 ELM(3,4) #define SQ_d6 ELM(3,5) #define SQ_e1 ELM(4,0) #define SQ_e2 ELM(4,1) #define SQ_e3 ELM(4,2) #define SQ_e4 ELM(4,3) #define SQ_e5 ELM(4,4) #define SQ_e6 ELM(4,5) #define SQ_f1 ELM(5,0) #define SQ_f2 ELM(5,1) #define SQ_f3 ELM(5,2) #define SQ_f4 ELM(5,3) #define SQ_f5 ELM(5,4) #define SQ_f6 ELM(5,5) #define SQ_g1 ELM(6,0) #define SQ_g2 ELM(6,1) #define SQ_g3 ELM(6,2) #define SQ_g4 ELM(6,3) #define SQ_g5 ELM(6,4) #define SQ_g6 ELM(6,5) struct solvable_groups { short square[64][16]; short sqpnt[64]; }; struct solution { short valid; short solname; short solpoint[2]; short sqinv[2*TILES]; short sqinvnumb; short solgroups[GROUPS]; short solgroupsnumb; }; struct intgp { short tgroups[GROUPS]; short j,k; short mygroups[GROUPS]; }; struct board { short square[(BOARDX+1)*(BOARDY+2)]; short wipesq[(BOARDX+1)*(BOARDY+2)]; short usablegroup[GROUPS]; short sqused[(BOARDX+1)*(BOARDY+2)]; short stack[BOARDX+1]; short *groups[GROUPS][TILES]; short xplace[GROUPS][TILES]; short yplace[GROUPS][TILES]; short turn; short moves[MAXMEN],choices[MAXMEN],mlist[MAXMEN]; short filled; struct intgp intgp; struct solution *solution[ALLOC_SOLUTIONS]; short sp; short problem_solved,solused; short oracle[2],oracle_guesses,lastguess,bestguess; long nodes_visited; short maxtreedepth; unsigned long rule[3]; unsigned long instances[10]; short wins[2],draws,lastwin; struct solvable_groups *solvable_groups; unsigned char *white_book,*black_book; long wbposit,bbposit; long lastob; short autotest,cpu,white_lev,black_lev; short videotype,usegraphics,enablegr; short debug; };