X-Git-Url: https://harishankar.org/repos/?p=wordblah.git;a=blobdiff_plain;f=wordblox.c;h=61de6b6991fba50c54baa4d86f48110e6ed9ad7e;hp=d840b6d40b2f10fa54e6ff2648e0d5a9e49e51f4;hb=48a65b2e455c24d2482fd9098c918935714a198f;hpb=762979409c32bd4902716911101a1d1071f11038 diff --git a/wordblox.c b/wordblox.c index d840b6d..61de6b6 100644 --- a/wordblox.c +++ b/wordblox.c @@ -65,6 +65,33 @@ void do_reset_puzzle (Puzzle *p) fgets (conf, 3, stdin); if (toupper (conf[0]) == 'Y') init_puzzle (p, grid_size); + + print_puzzle (p); + char ch = getchar (); +} + +/* set the password for the puzzle */ +void do_set_password (Puzzle *p) +{ + printf (INPUT_PASSWORD); + char password[256]; + fgets (password, 256, stdin); + /* if empty reset the password to nothing */ + if (strlen (password) == 1) + { + set_puzzle_password (p, "\0"); + printf (PASSWORD_RESET); + char ch = getchar (); + } + /* set the password */ + else + { + char *passwd = strtok (password, "\n"); + + set_puzzle_password (p, (const char* )passwd); + printf (PASSWORD_SET); + char ch = getchar (); + } } /* set clue for a word - only for frozen grid */ @@ -230,7 +257,7 @@ void puzzle_editor_loop (Puzzle *p, const char *filename) bool loop = true; while (loop) { - print_menu (WHITE, BLUE, PUZZLE_MENU_TITLE, PUZZLE_EDIT_MENU, 13, 50); + print_menu (WHITE, BLUE, PUZZLE_MENU_TITLE, PUZZLE_EDIT_MENU, 14, 50); printf (INPUT_CHOICE); int ch = get_num (); switch (ch) @@ -260,47 +287,79 @@ void puzzle_editor_loop (Puzzle *p, const char *filename) printf ("%s\n",FILE_SAVED); ch = getchar (); break; - case 10: do_reset_puzzle (p); - print_puzzle (p); - ch = getchar (); + case 10: do_set_password (p); + break; + case 11: do_reset_puzzle (p); break; - case 11: do_export_puzzle (p); + case 12: do_export_puzzle (p); break; - case 12: do_export_clues (p); + case 13: do_export_clues (p); break; - case 13: loop = ! do_confirm_exit (); + case 14: loop = ! do_confirm_exit (); break; } } } /* open an existing puzzle */ -void do_open_puzzle () +void do_open_puzzle (const char *filename) { Puzzle p; - printf (INPUT_FILE); - char fname[256]; - fgets(fname, 256, stdin); - if (strlen (fname) == 1) - return; - char* filename = strtok (fname, "\n"); + /* 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); - puzzle_editor_loop (&p, filename); + + if (strcmp (p.hashed_password, "\0") != 0) + { + char passwd[256]; + printf (INPUT_PASSWORD); + fgets (passwd, 256, stdin); + if (strlen (passwd) == 1) + return; + char *pwd = strtok (passwd, "\n"); + + if (verify_password (&p, (const char*) pwd)) + 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 () +void do_new_puzzle (char *filename, int size) { 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; - size = get_num (); + /* 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); @@ -324,9 +383,9 @@ int main_loop () int ch = get_num (); switch (ch) { - case 1: do_new_puzzle (); + case 1: do_new_puzzle (NULL, -1); break; - case 2: do_open_puzzle (); + case 2: do_open_puzzle (NULL); break; case 3: exit (0); } @@ -340,14 +399,12 @@ int main (int argc, char* argv[]) Puzzle p; switch (argc) { - case 2 : p = load_puzzle (argv[1]); - puzzle_editor_loop (&p, argv[1]); + case 2 : do_open_puzzle (argv[1]); break; case 4 : if (strcmp (argv[2], "new") == 0) { int grid_size = atoi (argv[3]); - init_puzzle (&p, grid_size); - puzzle_editor_loop (&p, argv[1]); + do_new_puzzle (argv[1], grid_size); break; } default: fprintf (stderr, USAGE_LINE_1, argv[0]);