/* requires draw.h */ enum{ /* stone colors */ Hcapplay='A', Emptystone='e', Wmarked='w', Bmarked='b', Lstone='l', /* mark for last stone */ Kou='k', Cntstone='c', /* counting points */ Bstone='B', Wstone='W', Nop='N', /* special moves */ Chplayer='O', Resignmv='F', Chmode='C', /* change mode, count */ Mdead='D', /* mark dead, count */ }; enum{ Bansz=19, }; extern char *emptytype; extern int verbose; #define dprint if(verbose)print typedef struct MEvent MEvent; /* Move Event */ typedef struct Move Move; struct MEvent { int m; /* mouse */ int k; /* keyboard */ int fd; }; struct Move { Point; /* (i, j) in Go: 1 ≤ i,j ≤ 19 */ char type; MEvent ev; Move *next; }; /* move.c */ void fillmov(Move *m, Point pos, char type); void freegrp(Move *m); int opgrp(Move *grp, char type, void (*op)(Move *m, char type)); Move* clonegrp(Move *grp); Move* addlast(Move *g,Move *m); Move* pushmov(Move *g, Move *m); Move* popmov(Move **m, Move *g); void opprint(Move *m, char); void opdebug(Move *m,char); void opplace(Move *m, char type); void opsend(Move *mv,char); void opsettype(Move *m, char c); void opnop(Move *,char); Move* freelast(Move *g); Move* takelast(Move **grp); /* rules.c */ void cleangoban(void); Move* getmove(Point pos); int nlibert(Move *m); int move(Move *m, Move **mdead); int countpos(Move *m, Move **terr, char *type); Move* getgrp(Move *m, char *neightype); void opplace(Move *m, char type); int markdead(Move *m,Move **mdead); int trycount(int *nw, int *nb); int isvalidpos(Point pos); void cleartype(char type); enum { Hcapsz=9 }; /* draw.c */ enum{ DGobrown=0xEE9E00FF, DSTbord=0x303030FF, Cmdmaxsz=128, ↑=61454, ↓=128, DELETEKEY=0x7f, Stonesz=3, //divider of Δ Thickln=25, //divider of Δ Pointsz=5, //divider of Δ Countsz=5, //divider of Δ Szmin=150, Szmax=1500 }; static int bpoints, wpoints, clk; static Point pdr, pul; static int visible; static Point pul,fontcorn; static int bdead,wdead,clk; static Image *pixbg,*pixfg,*pixko; static Image *pixwht,*pixst, *pixyell, *pixbl; extern int Δx, Δy; extern Point hcap[Hcapsz]; extern Point hcapord[Hcapsz][Hcapsz]; extern char goban[Bansz+1][Bansz+1]; extern Move lkou; extern Move lstone; extern Move *moves; void inthread(void *); void ifcthread(void *); static int drawstone(Point, char); extern void drwlabel(int, int, int); extern void redraw(void); extern void drawgoban(void); extern void initifc(void); /* io.c */ enum{ Noev=0, Click1, Click2, Click3, }; enum{ Akeyboard=0, Areshape, Amouse, Afile, NALT };