int main(int argc, char **argv) { enum_game_t game; enum_sample_t enumType; int niter, npockets, nboard, err, terse; StdDeck_CardMask pockets[ENUM_MAXPLAYERS]; StdDeck_CardMask board; StdDeck_CardMask dead; enum_result_t result; if (parseArgs(argc, argv, &game, &enumType, &niter, pockets, &board, &dead, &npockets, &nboard, &terse)) { printf("usage: %s [-t] [-mc niter]\n", argv[0]); printf("\t[-h|-h8|-o|-o8|-7s|-7s8|-7snsq|-r|-5d|-5d8|-5dnsq|-l|-l27]\n"); printf("\t<pocket1> - <pocket2> - ... [ -- <board> ] [ / <dead> ] ]\n"); return 1; } if (enumType == ENUM_EXHAUSTIVE) { err = enumExhaustive(game, pockets, board, dead, npockets, nboard, &result); } else if (enumType == ENUM_SAMPLE) { err = enumSample(game, pockets, board, dead, npockets, nboard, niter, &result); } else err = 1; if (err) { printf("enumeration function failed err=%d\n", err); return 1; } if (terse) enumResultPrintTerse(&result, pockets, board); else enumResultPrint(&result, pockets, board); return 0; }
int main(int argc, char **argv) { enum_game_t game; enum_sample_t enumType; int niter = 0, npockets, nboard, err, terse, orderflag; StdDeck_CardMask pockets[ENUM_MAXPLAYERS]; StdDeck_CardMask board; StdDeck_CardMask dead; enum_result_t result; int fromStdin; fromStdin = (argc == 2 && !strcmp(argv[1], "-i")); if (fromStdin) argv = (char **) malloc(MAX_ARGS * sizeof(char *)); do { err = 0; enumResultClear(&result); if (fromStdin) { /* read one line from stdin, split into argv/argc */ char buf[BUF_LEN], *p; if (fgets(buf, sizeof(buf), stdin) == NULL) break; argc = 0; argv[argc++] = "pokenum"; p = strtok(buf, " \t\r\n"); while (p != NULL) { argv[argc++] = p; p = strtok(NULL, " \t\r\n"); } } if (parseArgs(argc, argv, &game, &enumType, &niter, pockets, &board, &dead, &npockets, &nboard, &orderflag, &terse)) { if (fromStdin) { printf("ERROR\n"); } else { printf("single usage: %s [-t] [-O] [-mc niter]\n", argv[0]); printf("\t[-h|-h8|-o|-o8|-7s|-7s8|-7snsq|-r|-5d|-5d8|-5dnsq|-l|-l27]\n"); printf("\t<pocket1> - <pocket2> - ... [ -- <board> ] [ / <dead> ] ]\n"); printf("streaming usage: %s -i < argsfile\n", argv[0]); } err = 1; } else { if (enumType == ENUM_EXHAUSTIVE) { err = enumExhaustive(game, pockets, board, dead, npockets, nboard, orderflag, &result); } else if (enumType == ENUM_SAMPLE) { err = enumSample(game, pockets, board, dead, npockets, nboard, niter, orderflag, &result); } else { err = 1; } if (err) { if (fromStdin) printf("ERROR\n"); else printf("enumeration function failed err=%d\n", err); } else { if (terse) enumResultPrintTerse(&result, pockets, board); else enumResultPrint(&result, pockets, board); } } enumResultFree(&result); fflush(stdout); } while (fromStdin); return err; }