X-Git-Url: https://harishankar.org/repos/?a=blobdiff_plain;f=wordblox.h;h=e27d37cfbaeabe9b3f5b0e147e14a0e3f63d52e2;hb=350edf3c909ce7926dc84411190cca003f6ac2e9;hp=b6579861deb0ae4a99b7b4ac866ad352974e53b0;hpb=f5202f7c1ec8a765f4d0325e56f6d89ca22bef28;p=wordblah.git diff --git a/wordblox.h b/wordblox.h index b657986..e27d37c 100644 --- a/wordblox.h +++ b/wordblox.h @@ -69,6 +69,7 @@ typedef struct { char char_ans[MAX_PUZZLE_SIZE][MAX_PUZZLE_SIZE]; int cur_row; int cur_col; + enum ORIENTATION current_movement; } MainPlayerData; /* compute the hash of a password */ @@ -101,6 +102,23 @@ err: exit (2); } +/* convert the hashed binary password to hexadecimal representation and + free the hashed binary password */ +void to_hexadecimal (char *hex, unsigned char *binary_pwd, unsigned int len) +{ + char buf[3]; + /* keep reference to beginning of the hashed password */ + unsigned char *binary_pw_begin = binary_pwd; + for (int i = 0; i < len; i ++) + { + sprintf (buf, "%02x", (*binary_pwd)&0xff); + strcat (hex, buf); + binary_pwd ++; + } + /* free the hashed password */ + OPENSSL_free (binary_pw_begin); +} + /* get a number from the user */ int get_num () { @@ -122,13 +140,12 @@ bool verify_password (Puzzle *p, const char* password) unsigned int len; digest_message ((const unsigned char *)password, strlen(password), &hashed_password, &len); + char hashed_hex_pwd[256] = { (char) NULL }; + to_hexadecimal (hashed_hex_pwd, hashed_password, len); - if (strcmp (p->hashed_password, (const char*) hashed_password) == 0) - { - OPENSSL_free (hashed_password); + if (strcmp (p->hashed_password, hashed_hex_pwd) == 0) return true; - } - OPENSSL_free (hashed_password); + return false; } @@ -148,9 +165,14 @@ void set_puzzle_password (Puzzle *p, const char *password) unsigned int len; digest_message ((const unsigned char *)password, strlen(password), &hashedpwd, &len); - strcpy (p->hashed_password, (const char *)hashedpwd); + /* the hashedpwd contains binary data - we will convert it to + hexadecimal data and store in file */ + + to_hexadecimal (p->hashed_password, hashedpwd, len); + printf ("%s\n", p->hashed_password); + strcpy (p->salt, "\0"); - OPENSSL_free (hashedpwd); + } } @@ -269,6 +291,46 @@ void reset_color () { printf ("\x1B[0m"); } +/* check if the prev row has a block or not */ +bool prev_row_block (Puzzle *p, int r, int c) +{ + if (r == 0) + return true; + if (p->chars[r-1][c] == '#') + return true; + return false; +} + +/* check if the next row has a block or not */ +bool next_row_block (Puzzle *p, int r, int c) +{ + if (r == p->grid_size-1) + return true; + if (p->chars[r+1][c] == '#') + return true; + return false; +} + +/* check if the prev col has a block or not */ +bool prev_col_block (Puzzle *p, int r, int c) +{ + if (c == 0) + return true; + if (p->chars[r][c-1] == '#') + return true; + return false; +} + +/* check if the next col has a block or not */ +bool next_col_block (Puzzle *p, int r, int c) +{ + if (c == p->grid_size - 1) + return true; + if (p->chars[r][c+1] == '#') + return true; + return false; +} + /* check if previous row is blank or not */ bool prev_row_blank (Puzzle *p, int r, int c) { @@ -298,6 +360,34 @@ bool next_col_blank (Puzzle *p, int r, int c) return false; } +/* set the current row/col to the beginning of word index (across or down) */ +void set_selection_to_word_start (MainPlayerData *app_data, + enum ORIENTATION orient, int word_index) +{ + for (int i = 0; i < app_data->puzzle.grid_size; i ++) + { + for (int j = 0; j < app_data->puzzle.grid_size; j ++) + { + if (orient == ACROSS && + app_data->puzzle.start_across_word[i][j] == word_index) + { + app_data->current_movement = ACROSS; + app_data->cur_row = i; + app_data->cur_col = j; + break; + } + else if (orient == DOWN && + app_data->puzzle.start_down_word[i][j] == word_index) + { + app_data->current_movement = DOWN; + app_data->cur_row = i; + app_data->cur_col = j; + break; + } + } + } +} + /* unfreeze the grid - make editing possible to change words */ void unfreeze_puzzle (Puzzle *p) {