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 */
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)
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);
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);
}
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]);