X-Git-Url: https://harishankar.org/repos/?p=wordblah.git;a=blobdiff_plain;f=wordblox.c;h=fae8b838109ee9d72c7f1b15b463fc5a7f03b5fb;hp=d840b6d40b2f10fa54e6ff2648e0d5a9e49e51f4;hb=3d73a89d86191634ac382e0772708389686b8dde;hpb=762979409c32bd4902716911101a1d1071f11038 diff --git a/wordblox.c b/wordblox.c index d840b6d..fae8b83 100644 --- a/wordblox.c +++ b/wordblox.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "wordblox.h" #include "constantstrings.h" @@ -65,6 +66,30 @@ 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) +{ + char* password; + password = getpass (INPUT_PASSWORD); + /* if empty reset the password to nothing */ + if (strlen(password) == 0) + { + set_puzzle_password (p, "\0"); + printf (PASSWORD_RESET); + char ch = getchar (); + } + /* set the password */ + else + { + set_puzzle_password (p, (const char* )password); + printf (PASSWORD_SET); + char ch = getchar (); + } } /* set clue for a word - only for frozen grid */ @@ -230,7 +255,9 @@ 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); + char puzzle_title[60]; + sprintf (puzzle_title, "%s - %s", PUZZLE_MENU_TITLE, filename); + print_menu (WHITE, BLUE, puzzle_title, PUZZLE_EDIT_MENU, 14, 50); printf (INPUT_CHOICE); int ch = get_num (); switch (ch) @@ -260,47 +287,77 @@ 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; + passwd = getpass (INPUT_PASSWORD); + if (strlen (passwd) == 0) + return; + + if (verify_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 () +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 +381,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 +397,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]);