X-Git-Url: https://harishankar.org/repos/?p=wordblah.git;a=blobdiff_plain;f=wordblox.c;fp=wordblox.c;h=0000000000000000000000000000000000000000;hp=f30c039b24e5161a9b37bbb5e9903a8f2af106c3;hb=2aac9fd96329b27dffec6534a042cfbe045f3a11;hpb=7defe51e8a1da9feec6319defa7c906fcb735726 diff --git a/wordblox.c b/wordblox.c deleted file mode 100644 index f30c039..0000000 --- a/wordblox.c +++ /dev/null @@ -1,438 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#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 do_export_puzzle (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"); - - printf (INPUT_EXPORT_ANSWERS); - char ans[3]; - fgets (ans, 3, stdin); - bool solution; - solution = (toupper (ans[0]) == 'Y') ? true : false; - - export_grid_image (p, filename, solution); - printf (FILE_SAVED); - 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); - - print_puzzle (p); - char ch = getchar (); -} - -/* set the solution password for the puzzle */ -void do_set_solution_password (Puzzle *p) -{ - char* password; - password = getpass (INPUT_PASSWORD); - /* if empty reset the password to nothing */ - if (strlen(password) == 0) - { - set_solution_password (p, "\0"); - printf (SOLUTION_PASSWORD_RESET); - char ch = getchar (); - } - /* set the password */ - else - { - set_solution_password (p, (const char* )password); - printf (PASSWORD_SET); - char ch = getchar (); - } -} -/* set the master (editing) password for the puzzle */ -void do_set_master_password (Puzzle *p) -{ - char* password; - password = getpass (INPUT_PASSWORD); - /* if empty reset the password to nothing */ - if (strlen(password) == 0) - { - set_master_password (p, "\0"); - printf (MASTER_PASSWORD_RESET); - char ch = getchar (); - } - /* set the password */ - else - { - set_master_password (p, (const char* )password); - printf (PASSWORD_SET); - char ch = getchar (); - } -} - -/* set clue for a word - only for frozen grid */ -void do_set_clue_word (Puzzle *p, enum ORIENTATION orient) -{ - print_puzzle (p); - if (p->grid_frozen == false) - { - printf (UNFROZEN_GRID); - char ch = getchar (); - return; - } - int index; - String clue; - printf (INPUT_INDEX); - index = get_num (); - printf (INPUT_CLUE); - fgets (clue, MAX_CLUE_LENGTH, stdin); - if (strlen (clue) == 1) - return; - char* cl = strtok (clue, "\n"); - - bool res; - res = set_clue (p, cl, index, orient); - - if (res == false) - { - printf (NO_WORD_INDEX); - char ch = getchar (); - } -} - -/* clear a cell in the grid */ -void do_clear_cell (Puzzle *p) -{ - print_puzzle (p); - if (p->grid_frozen == true) - { - printf (FROZEN_GRID); - char ch = getchar (); - return; - } - int row, col; - printf (INPUT_ROW); - row = get_num (); - printf (INPUT_COL); - col = get_num (); - if (row >= p->grid_size || col >= p->grid_size) - { - printf (EXCEED_GRID_SIZE); - char ch = getchar (); - return; - } - p->chars[row][col] = ' '; - print_puzzle (p); - - char ch = getchar (); -} - -/* add a down word to the grid */ -void do_add_down_word (Puzzle *p) -{ - print_puzzle (p); - if (p->grid_frozen == true) - { - printf (FROZEN_GRID); - char ch = getchar (); - return; - } - char wd[MAX_PUZZLE_SIZE]; - int row, col; - printf (INPUT_WORD); - fgets (wd, MAX_PUZZLE_SIZE, stdin); - 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); - col = get_num (); - if (row >= p->grid_size || col >= p->grid_size) - { - printf (EXCEED_GRID_SIZE); - char ch = getchar (); - return; - } - if (strlen (word) > (p->grid_size - row)) - { - printf (WORD_TOO_LONG); - char ch = getchar (); - return; - } - - for (int i = row; i < row + strlen(word); i ++) - p->chars[i][col] = toupper(word[i - row]); - - print_puzzle (p); - char ch = getchar (); -} - -/* add an across word to the grid */ -void do_add_across_word (Puzzle *p) -{ - print_puzzle (p); - if (p->grid_frozen == true) - { - printf (FROZEN_GRID); - char ch = getchar (); - return; - } - char wd[MAX_PUZZLE_SIZE]; - int row, col; - printf (INPUT_WORD); - fgets (wd, MAX_PUZZLE_SIZE, stdin); - 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); - col = get_num (); - if (row >= p->grid_size || col >= p->grid_size) - { - printf (EXCEED_GRID_SIZE); - char ch = getchar (); - return; - } - - if (strlen (word) > (p->grid_size - col)) - { - printf (WORD_TOO_LONG); - char ch = getchar (); - return; - } - - for (int i = col; i < col+strlen (word); i ++) - p->chars[row][i] = toupper(word[i - col]); - - print_puzzle (p); - char ch = getchar (); -} -/* confirm exit */ -bool do_confirm_exit () -{ - printf (INPUT_CONFIRM_EXIT); - char res[3]; - fgets (res, 3, stdin); - if (toupper(res[0]) == 'Y') - return true; - else - return false; -} - -/* main loop for the puzzle editor */ -void puzzle_editor_loop (Puzzle *p, const char *filename) -{ - bool loop = true; - while (loop) - { - char puzzle_title[60]; - sprintf (puzzle_title, "%s - %s", PUZZLE_MENU_TITLE, filename); - print_menu (WHITE, BLUE, puzzle_title, PUZZLE_EDIT_MENU, 15, 50); - printf (INPUT_CHOICE); - int ch = get_num (); - switch (ch) - { - case 1: print_puzzle (p); - char ch = getchar (); - break; - case 2: do_add_across_word (p); - break; - case 3: do_add_down_word (p); - break; - case 4: do_clear_cell (p); - break; - case 5: freeze_puzzle (p); - print_puzzle (p); - ch = getchar (); - break; - case 6: unfreeze_puzzle (p); - print_puzzle (p); - ch = getchar (); - break; - case 7: do_set_clue_word (p, ACROSS); - break; - 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: do_set_master_password (p); - break; - case 11: do_set_solution_password (p); - break; - case 12: do_reset_puzzle (p); - break; - case 13: do_export_puzzle (p); - break; - case 14: do_export_clues (p); - break; - case 15: loop = ! do_confirm_exit (); - break; - } - } -} - -/* open an existing puzzle */ -void do_open_puzzle (const char *filename) -{ - Puzzle p; - /* if no filename is provided, get it from command line */ - if (filename == NULL) - { - printf (INPUT_FILE); - char fname[256]; - fgets(fname, 256, stdin); - if (strlen (fname) == 1) - return; - filename = strtok (fname, "\n"); - } - - p = load_puzzle (filename); - - if (strcmp (p.hashed_master_password, "\0") != 0) - { - char *passwd; - passwd = getpass (INPUT_PASSWORD); - if (strlen (passwd) == 0) - return; - - if (verify_master_password (&p, (const char*) passwd)) - puzzle_editor_loop (&p, filename); - else - { - printf (WRONG_PASSWORD); - char ch = getchar (); - } - } - else - puzzle_editor_loop (&p, filename); -} - -/* create a new blank puzzle */ -void do_new_puzzle (char *filename, int size) -{ - Puzzle p; - /* if filename is not provided get it from command line */ - if (filename == NULL) - { - printf (INPUT_FILE); - char fname[256]; - fgets (fname, 256, stdin); - if (strlen (fname) == 1) - return; - filename = strtok (fname, "\n"); - } - /* if no size is specified get it from command line */ - if (size == -1) - { - printf (INPUT_GRID_SIZE); - size = get_num (); - } - - if (size > MAX_PUZZLE_SIZE) - { - printf (EXCEED_MAX_GRID_SIZE); - char c = getchar (); - } - else - { - init_puzzle (&p, size); - puzzle_editor_loop (&p, filename); - } -} - -/* The main loop of the program */ -int main_loop () -{ - /* Print the main menu */ - while (1) - { - print_menu (WHITE, BLUE, MAIN_MENU_TITLE, MAIN_MENU, 3, 50); - printf (INPUT_CHOICE); - int ch = get_num (); - switch (ch) - { - case 1: do_new_puzzle (NULL, -1); - break; - case 2: do_open_puzzle (NULL); - break; - case 3: exit (0); - } - } -} - -int main (int argc, char* argv[]) -{ - if (argc >= 2) - { - Puzzle p; - switch (argc) - { - case 2 : do_open_puzzle (argv[1]); - break; - case 4 : if (strcmp (argv[2], "new") == 0) - { - int grid_size = atoi (argv[3]); - do_new_puzzle (argv[1], grid_size); - break; - } - default: fprintf (stderr, USAGE_LINE_1, argv[0]); - fprintf (stderr, USAGE_LINE_2); - fprintf (stderr, USAGE_LINE_3); - exit (3); - } - } - return (main_loop ()); -}