X-Git-Url: https://harishankar.org/repos/?p=wordblah.git;a=blobdiff_plain;f=wordblox.c;h=d840b6d40b2f10fa54e6ff2648e0d5a9e49e51f4;hp=223dde74ab1d4c4bfaef6fc943a14ccf59485e3a;hb=762979409c32bd4902716911101a1d1071f11038;hpb=57adeb73762dac7590dcac1b2d1e462d50e8565d diff --git a/wordblox.c b/wordblox.c index 223dde7..d840b6d 100644 --- a/wordblox.c +++ b/wordblox.c @@ -8,8 +8,29 @@ #include "wordblox.h" #include "constantstrings.h" +/* export the clues to a text file */ +void do_export_clues (Puzzle *p) +{ + if (p->grid_frozen == false) + { + printf (UNFROZEN_GRID); + char ch = getchar (); + return; + } + char fname[256]; + printf (INPUT_FILE); + fgets (fname, 256, stdin); + if (strlen(fname) == 1) + return; + char *filename = strtok (fname, "\n"); + + export_clues (p, filename); + printf (FILE_SAVED); + char ch = getchar (); +} + /* export the puzzle to a png file */ -void export_puzzle (Puzzle *p) +void do_export_puzzle (Puzzle *p) { if (p->grid_frozen == false) { @@ -20,6 +41,8 @@ void export_puzzle (Puzzle *p) char fname[256]; printf (INPUT_FILE); fgets (fname, 256, stdin); + if (strlen (fname) == 1) + return; char* filename = strtok (fname, "\n"); printf (INPUT_EXPORT_ANSWERS); @@ -33,8 +56,19 @@ void export_puzzle (Puzzle *p) char ch = getchar (); } +/* reset the grid */ +void do_reset_puzzle (Puzzle *p) +{ + int grid_size = p->grid_size; + printf (INPUT_CONFIRM_RESET); + char conf[3]; + fgets (conf, 3, stdin); + if (toupper (conf[0]) == 'Y') + init_puzzle (p, grid_size); +} + /* set clue for a word - only for frozen grid */ -void set_clue_word (Puzzle *p, enum ORIENTATION orient) +void do_set_clue_word (Puzzle *p, enum ORIENTATION orient) { print_puzzle (p); if (p->grid_frozen == false) @@ -62,7 +96,7 @@ void set_clue_word (Puzzle *p, enum ORIENTATION orient) } /* clear a cell in the grid */ -void clear_cell (Puzzle *p) +void do_clear_cell (Puzzle *p) { print_puzzle (p); if (p->grid_frozen == true) @@ -89,7 +123,7 @@ void clear_cell (Puzzle *p) } /* add a down word to the grid */ -void add_down_word (Puzzle *p) +void do_add_down_word (Puzzle *p) { print_puzzle (p); if (p->grid_frozen == true) @@ -102,8 +136,8 @@ void add_down_word (Puzzle *p) int row, col; printf (INPUT_WORD); fgets (wd, MAX_PUZZLE_SIZE, stdin); - char *word = strtok (wd, "\n"); - if (! is_valid_word (word)) + char *word = is_valid_word (wd); + if (word == NULL) { printf (INVALID_WORD); char ch = getchar (); @@ -134,7 +168,7 @@ void add_down_word (Puzzle *p) } /* add an across word to the grid */ -void add_across_word (Puzzle *p) +void do_add_across_word (Puzzle *p) { print_puzzle (p); if (p->grid_frozen == true) @@ -147,13 +181,13 @@ void add_across_word (Puzzle *p) int row, col; printf (INPUT_WORD); fgets (wd, MAX_PUZZLE_SIZE, stdin); - char *word = strtok (wd, "\n"); - if (! is_valid_word (word)) + char *word = is_valid_word (wd); + if (word == NULL) { printf (INVALID_WORD); char ch = getchar (); return; - } + } printf (INPUT_ROW); row = get_num (); printf (INPUT_COL); @@ -179,7 +213,7 @@ void add_across_word (Puzzle *p) char ch = getchar (); } /* confirm exit */ -bool confirm_exit () +bool do_confirm_exit () { printf (INPUT_CONFIRM_EXIT); char res[3]; @@ -196,7 +230,7 @@ void puzzle_editor_loop (Puzzle *p, const char *filename) bool loop = true; while (loop) { - print_menu (WHITE, RED, PUZZLE_MENU_TITLE, PUZZLE_EDIT_MENU, 11, 50); + print_menu (WHITE, BLUE, PUZZLE_MENU_TITLE, PUZZLE_EDIT_MENU, 13, 50); printf (INPUT_CHOICE); int ch = get_num (); switch (ch) @@ -204,11 +238,11 @@ void puzzle_editor_loop (Puzzle *p, const char *filename) case 1: print_puzzle (p); char ch = getchar (); break; - case 2: add_across_word (p); + case 2: do_add_across_word (p); break; - case 3: add_down_word (p); + case 3: do_add_down_word (p); break; - case 4: clear_cell (p); + case 4: do_clear_cell (p); break; case 5: freeze_puzzle (p); print_puzzle (p); @@ -218,41 +252,51 @@ void puzzle_editor_loop (Puzzle *p, const char *filename) print_puzzle (p); ch = getchar (); break; - case 7: set_clue_word (p, ACROSS); + case 7: do_set_clue_word (p, ACROSS); break; - case 8: set_clue_word (p, DOWN); + case 8: do_set_clue_word (p, DOWN); break; case 9: save_puzzle (p, filename); printf ("%s\n",FILE_SAVED); ch = getchar (); break; - case 10: export_puzzle (p); + case 10: do_reset_puzzle (p); + print_puzzle (p); + ch = getchar (); + break; + case 11: do_export_puzzle (p); break; - case 11: loop = !confirm_exit (); + case 12: do_export_clues (p); + break; + case 13: loop = ! do_confirm_exit (); break; } } } /* open an existing puzzle */ -void open_puzzle () +void do_open_puzzle () { Puzzle p; printf (INPUT_FILE); char fname[256]; fgets(fname, 256, stdin); + if (strlen (fname) == 1) + return; char* filename = strtok (fname, "\n"); p = load_puzzle (filename); puzzle_editor_loop (&p, filename); } /* create a new blank puzzle */ -void new_puzzle () +void do_new_puzzle () { Puzzle p; printf (INPUT_FILE); char fname[256]; fgets (fname, 256, stdin); + if (strlen (fname) == 1) + return; char* filename = strtok (fname, "\n"); printf (INPUT_GRID_SIZE); int size; @@ -280,9 +324,9 @@ int main_loop () int ch = get_num (); switch (ch) { - case 1: new_puzzle (); + case 1: do_new_puzzle (); break; - case 2: open_puzzle (); + case 2: do_open_puzzle (); break; case 3: exit (0); }