short getkey(void) { int c, i; flushin(); c = wgetch(win); if (flushin()) return 0; if (c < 0) return 0; if (c <= 255) return c; switch (c) { case KEY_LEFT: return LEFT; case KEY_UP: return UP; case KEY_RIGHT: return RIGHT; case KEY_DOWN: return DOWN; } return 0; }
int main(int argc, char *argv[]) { int ch, done; char *bspec, *p, *seed; batch = debug = reuse = selfuse; bspec = seed = NULL; minlength = -1; tlimit = 180; /* 3 minutes is standard */ while ((ch = getopt(argc, argv, "Bbcds:t:w:")) != -1) switch(ch) { case 'B': grid = 5; break; case 'b': batch = 1; break; case 'c': challenge = 1; break; case 'd': debug = 1; break; case 's': seed = optarg; break; case 't': if ((tlimit = atoi(optarg)) < 1) errx(1, "bad time limit"); break; case 'w': if ((minlength = atoi(optarg)) < 3) errx(1, "min word length must be > 2"); break; case '?': default: usage(); } argc -= optind; argv += optind; /* process final arguments */ if (argc > 0) { if (strcmp(argv[0], "+") == 0) reuse = 1; else if (strcmp(argv[0], "++") == 0) selfuse = 1; } if (reuse || selfuse) { argc -= 1; argv += 1; } if (argc > 0) { if (islower(argv[0][0])) { if (strlen(argv[0]) != ncubes) { usage(); } else { /* This board is assumed to be valid... */ bspec = argv[0]; } } else { usage(); } } if (batch && bspec == NULL) errx(1, "must give both -b and a board setup"); init(); if (batch) { newgame(bspec); while ((p = batchword(stdin)) != NULL) (void) printf("%s\n", p); exit(0); } setup(seed); prompt("Loading the dictionary..."); if ((dictfp = opendict(DICT)) == NULL) { warn("%s", DICT); cleanup(); exit(1); } #ifdef LOADDICT if (loaddict(dictfp) < 0) { warnx("can't load %s", DICT); cleanup(); exit(1); } (void)fclose(dictfp); dictfp = NULL; #endif if (loadindex(DICTINDEX) < 0) { warnx("can't load %s", DICTINDEX); cleanup(); exit(1); } prompt("Type <space> to begin..."); while (inputch() != ' '); for (done = 0; !done;) { newgame(bspec); bspec = NULL; /* reset for subsequent games */ playgame(); prompt("Type <space> to continue, any cap to quit..."); delay(10); /* wait for user to quit typing */ flushin(stdin); for (;;) { ch = inputch(); if (ch == '\033') findword(); else if (ch == '\014' || ch == '\022') /* ^l or ^r */ redraw(); else { if (isupper(ch)) { done = 1; break; } if (ch == ' ') break; } } } cleanup(); exit(0); }