#include #include #include #include #include #include #include #include #include extern char goban[Bansz+1][Bansz+1]; int mainstacksize = 2*Stacksz; void usage(void) { fprint(2, "usage: %s [-v] [-r] [-p B|W] [-m mtpt] game\n", argv0); exits("usage"); } void threadmain(int argc, char **argv) { char *mtpt, *player, *file; int ro; mtpt=nil; player=nil; ro=0; verbose=0; ARGBEGIN { case 'v': verbose=1; break; case 'p': player = EARGF(usage()); break; case 'm': mtpt = EARGF(usage()); break; case 'r': ro=1; break; default: usage(); }ARGEND; if(argc != 1) usage(); if(player && strcmp(player, "B") && strcmp(player, "W")) usage(); if(!mtpt) mtpt = strdup("/n/gofs"); file = malloc((strlen(mtpt)+1+strlen(argv[0])+3)*sizeof(char)); sprint(file, "%s/%s/ ", mtpt, argv[0]); /* whitespace for char */ ifcchan=chancreate(sizeof(Move*),0); keyboardctl = initkeyboard(nil); if(keyboardctl == nil) sysfatal("initkeyboard"); mousectl = initmouse(nil, screen); if(mousectl == nil) sysfatal("initmouse"); filectl = initfile(file, player, ro); if(filectl == nil) sysfatal("initfile"); threadcreate(ifcthread, nil, Stacksz); threadcreate(inthread, nil, Stacksz); threadexits(0); }