int main(void) { Pile *players[PLAYERS], *deck, *discard; int i, j, k; Player* /* Initilize game state memory */ k = rand_init(); assert(k == 0); for (i = 0; i < PLAYERS; i++) players[i] = create_deck(10, 0, 1); discard = create_deck(deck_sizes[PLAYERS], 0, 1); deck = create_deck(deck_sizes[PLAYERS], 0, 0); /* Set game to initial state */ for (i = 0; i < PLAYERS; i++) for (j = 0; j < 10; j++) players[i]->deck[j] = draw_card(deck); /* Free up allocated memory */ (void)free_deck(&deck); (void)free_deck(&discard); for (i = 0; i < PLAYERS; i++) if (players[i] != NULL) (void)free_deck(&players[i]); return 0; }
card* free_deck( card* deck ) { if (deck) { if (deck->next_card != NULL) { free_deck(deck->next_card); } free(deck); deck=NULL; return deck; } return deck; }
int main(int argc, char *argv[]) { double dealt; char* endptr1; if(argc == 2) { dealt = strtod(argv[1], &endptr1); } else if(argc == 1) { dealt = 5; } printf("Welcome to the Poker Table\n"); struct deck *deck = make_deck(); shuffle_deck(deck); if(!deck) { fprintf(stderr, "Could not create deck"); return 1; } if(dealt > 52 || dealt < 0) { printf("%.2f was not a correct number of cards.\n", dealt); dealt = 5; printf("You were dealt %.2f cards.\n", dealt); print_card_new(deck, dealt); //print_card_abbrev(deck); } else if(dealt <= 52) { print_card_new(deck, dealt); //passes the variable 'deck' because it expects a pointer to a deck structure //print_card_abbrev(deck); } free_deck(deck); }
int main(int argc, char *argv[]) { int notrans = 0; // disable transparency int nofade = 0; // disable fading int invert = 0; // invert color (black on white) int reload = 0; // reload page N (0 means no reload) int noreload = 1; // reload disabled until we know input is a file int slidenum = 2; // 0:don't show; 1:show #; 2:show #/# // define command-line options struct option longopts[] = { { "debug", no_argument, 0, 'd' }, { "nofade", no_argument, 0, 'f' }, { "help", no_argument, 0, 'h' }, { "invert", no_argument, 0, 'i' }, { "notrans", no_argument, 0, 't' }, { "version", no_argument, 0, 'v' }, { "noslidenum", no_argument, 0, 's' }, { "noslidemax", no_argument, 0, 'x' }, { 0, 0, 0, 0 } }; // parse command-line options int opt, debug = 0; while ((opt = getopt_long(argc, argv, ":dfhitvsx", longopts, NULL)) != -1) { switch(opt) { case 'd': debug += 1; break; case 'f': nofade = 1; break; case 'h': usage(); break; case 'i': invert = 1; break; case 't': notrans = 1; break; case 'v': version(); break; case 's': slidenum = 0; break; case 'x': slidenum = 1; break; case ':': fprintf(stderr, "%s: '%c' requires an argument\n", argv[0], optopt); usage(); break; case '?': default : fprintf(stderr, "%s: option '%c' is invalid\n", argv[0], optopt); usage(); break; } } // set locale to that of the environment, so that ncurses properly renders // UTF-8 characters if the system supports it setlocale(LC_CTYPE, ""); // open file or set input to STDIN char *file = NULL; FILE *input; if (optind < argc) { do { file = argv[optind]; } while(++optind < argc); if(!strcmp(file, "-")) { input = stdin; } else { input = fopen(file,"r"); if(!input) { fprintf(stderr, "%s: %s: %s\n", argv[0], file, strerror(errno)); exit(EXIT_FAILURE); } // enable reload because input is a file noreload = 0; } } else { input = stdin; } // reload loop do { // reopen input file on reload if(noreload == 0 && reload > 0) { if(file) { input = fopen(file,"r"); if(!input) { fprintf(stderr, "%s: %s: %s\n", argv[0], file, strerror(errno)); exit(EXIT_FAILURE); } } else { fprintf(stderr, "%s: %s\n", argv[0], "no input file"); exit(EXIT_FAILURE); } } // load deck object from input deck_t *deck; deck = markdown_load(input); // close file fclose(input); // replace stdin with current tty if input was a pipe // if input was a pipe reload is disabled, so we simply check that if(noreload == 1) { input = freopen("/dev/tty", "rw", stdin); if(!input) { fprintf(stderr, "%s: %s: %s\n", argv[0], "/dev/tty", strerror(errno)); exit(EXIT_FAILURE); } } if(debug > 0) { markdown_debug(deck, debug); } reload = ncurses_display(deck, notrans, nofade, invert, reload, noreload, slidenum); free_deck(deck); // reload if supported and requested } while(noreload == 0 && reload > 0); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { int notrans = 0; int nofade = 0; int invert = 0; // define command-line options struct option longopts[] = { { "debug", no_argument, 0, 'd' }, { "nofade", no_argument, 0, 'f' }, { "help", no_argument, 0, 'h' }, { "invert", no_argument, 0, 'i' }, { "notrans", no_argument, 0, 't' }, { "version", no_argument, 0, 'v' }, { 0, 0, 0, 0 } }; // parse command-line options int opt, debug = 0; while ((opt = getopt_long(argc, argv, ":dfhitv", longopts, NULL)) != -1) { switch(opt) { case 'd': debug += 1; break; case 'f': nofade = 1; break; case 'h': usage(); break; case 'i': invert = 1; break; case 't': notrans = 1; break; case 'v': version(); break; case ':': fprintf(stderr, "%s: '%c' requires an argument\n", argv[0], optopt); usage(); break; case '?': default : fprintf(stderr, "%s: option '%c' is invalid\n", argv[0], optopt); usage(); break; } } // open file or set input to STDIN char *file; FILE *input; if (optind < argc) { do { file = argv[optind]; } while(++optind < argc); if(!strcmp(file, "-")) { input = stdin; } else { input = fopen(file,"r"); if(!input) { fprintf(stderr, "%s: %s: %s\n", argv[0], file, strerror(errno)); exit(EXIT_FAILURE); } } } else { input = stdin; } // load deck object from input deck_t *deck; deck = markdown_load(input); // close file fclose(input); // replace stdin with current tty if input was a pipe if(input == stdin) { input = freopen("/dev/tty", "rw", stdin); if(!input) { fprintf(stderr, "%s: %s: %s\n", argv[0], "/dev/tty", strerror(errno)); exit(EXIT_FAILURE); } } if(debug > 0) { markdown_debug(deck, debug); } ncurses_display(deck, notrans, nofade, invert); free_deck(deck); return EXIT_SUCCESS; }
/* ** cg_compute_cols_rows() ** Compute number of colons and rows of every decks' pages. */ yerr_t cg_compute_cols_rows(cg_t *carta) { double useable_w, useable_h; cg_deck_t *deck; int i; for (i = 0; i < yv_len(carta->decks); ++i) { deck = carta->decks[i]; useable_w = yvalue_get(deck->paper_width, carta->default_unit) - (2 * yvalue_get(deck->paper_margin_w, carta->default_unit)); useable_h = yvalue_get(deck->paper_height, carta->default_unit) - (2 * yvalue_get(deck->paper_margin_h, carta->default_unit)); deck->cols = (int)(useable_w / yvalue_get(deck->card_width, carta->default_unit)); deck->rows = (int)(useable_h / yvalue_get(deck->card_height, carta->default_unit)); /* adjust depending from space between cards */ while (deck->cols > 0) { double total_width; total_width = deck->cols * yvalue_get(deck->card_width, carta->default_unit); total_width += (deck->cols - 1) * yvalue_get(deck->space_width, carta->default_unit); if (total_width <= useable_w) break ; deck->cols--; } while (deck->rows > 0) { double total_height; total_height = deck->rows * yvalue_get(deck->card_height, carta->default_unit); total_height += (deck->rows - 1) * yvalue_get(deck->space_height, carta->default_unit); if (total_height <= useable_h) break ; deck->rows--; } /* check cards */ if (!yv_len(deck->cards)) { YLOG_ADD(YLOG_WARN, "No card in deck [line %d]. Deck skipped.", deck->line_nbr); deck = yv_ext(carta->decks, i); free_deck(deck, NULL); i--; } /* check paper size */ if (!deck->cols || !deck->rows) { YLOG_ADD(YLOG_WARN, "Cards bigger than paper size [line %d]. Deck skipped.", deck->line_nbr); deck = yv_ext(carta->decks, i); free_deck(deck, NULL); i--; } } /* check decks */ if (!yv_len(carta->decks)) { YLOG_ADD(YLOG_ERR, "No usable deck. Abort."); return (YENOENT); } return (YENOERR); }