From 31892d6b2fff95ee98be32563e33c2d475d0aad6 Mon Sep 17 00:00:00 2001 From: David Griffith Date: Wed, 18 Sep 2019 21:37:18 -0700 Subject: [PATCH] Convert dumb_pic.c to K&R style. K&R style conversion for the dumb interface is now complete. --- src/dumb/dumb_pic.c | 288 ++++++++++++++++++++++---------------------- 1 file changed, 147 insertions(+), 141 deletions(-) diff --git a/src/dumb/dumb_pic.c b/src/dumb/dumb_pic.c index 55c7dec..524f306 100644 --- a/src/dumb/dumb_pic.c +++ b/src/dumb/dumb_pic.c @@ -36,182 +36,188 @@ f_setup_t f_setup; bb_map_t *blorb_map; static struct { - int z_num; - int width; - int height; - int orig_width; - int orig_height; - uint32 type; + int z_num; + int width; + int height; + int orig_width; + int orig_height; + uint32 type; } *pict_info; static int num_pictures = 0; static int round_div(int x, int y) { - int quotient = x / y; - int dblremain = (x % y) << 1; + int quotient = x / y; + int dblremain = (x % y) << 1; - if ((dblremain > y) || ((dblremain == y) && (quotient & 1))) - quotient++; - return quotient; + if ((dblremain > y) || ((dblremain == y) && (quotient & 1))) + quotient++; + return quotient; } bool dumb_init_pictures (void) { - int maxlegalpic = 0; - int i, x_scale, y_scale; - bool success = FALSE; - - unsigned char png_magic[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; - unsigned char ihdr_name[] = "IHDR"; - unsigned char jpg_magic[3] = {0xFF, 0xD8, 0xFF}; - unsigned char jfif_name[5] = {'J', 'F', 'I', 'F', 0x00}; - - bb_result_t res; - uint32 pos; - - if (blorb_map == NULL) return FALSE; - - bb_count_resources(blorb_map, bb_ID_Pict, &num_pictures, NULL, &maxlegalpic); - pict_info = malloc((num_pictures + 1) * sizeof(*pict_info)); - pict_info[0].z_num = 0; - pict_info[0].height = num_pictures; - pict_info[0].width = bb_get_release_num(blorb_map); - - y_scale = 200; - x_scale = 320; - - for (i = 1; i <= num_pictures; i++) { - if (bb_load_resource(blorb_map, bb_method_Memory, &res, bb_ID_Pict, i) == bb_err_None) { - pict_info[i].type = blorb_map->chunks[res.chunknum].type; - /* Copy and scale. */ - pict_info[i].z_num = i; - /* Check to see if we're dealing with a PNG file. */ - if (pict_info[i].type == bb_ID_PNG) { - if (memcmp(res.data.ptr, png_magic, 8) == 0) { - /* Check for IHDR chunk. If it's not there, PNG file is invalid. */ - if (memcmp(res.data.ptr+12, ihdr_name, 4) == 0) { - pict_info[i].orig_width = - (*((unsigned char *)res.data.ptr+16) << 24) + - (*((unsigned char *)res.data.ptr+17) << 16) + - (*((unsigned char *)res.data.ptr+18) << 8) + - (*((unsigned char *)res.data.ptr+19) << 0); - pict_info[i].orig_height = - (*((unsigned char *)res.data.ptr+20) << 24) + - (*((unsigned char *)res.data.ptr+21) << 16) + - (*((unsigned char *)res.data.ptr+22) << 8) + - (*((unsigned char *)res.data.ptr+23) << 0); - } - } - } else if (pict_info[i].type == bb_ID_Rect) { - pict_info[i].orig_width = - (*((unsigned char *)res.data.ptr+0) << 24) + - (*((unsigned char *)res.data.ptr+1) << 16) + - (*((unsigned char *)res.data.ptr+2) << 8) + - (*((unsigned char *)res.data.ptr+3) << 0); - pict_info[i].orig_height = - (*((unsigned char *)res.data.ptr+4) << 24) + - (*((unsigned char *)res.data.ptr+5) << 16) + - (*((unsigned char *)res.data.ptr+6) << 8) + - (*((unsigned char *)res.data.ptr+7) << 0); - } else if (pict_info[i].type == bb_ID_JPEG) { - if (memcmp(res.data.ptr, jpg_magic, 3) == 0) { /* Is it JPEG? */ - if (memcmp(res.data.ptr+6, jfif_name, 5) == 0) { /* Look for JFIF */ - pos = 11; - while (pos < res.length) { - pos++; - if (pos >= res.length) break; /* Avoid segfault */ - if (*((unsigned char *)res.data.ptr+pos) != 0xFF) continue; - if (*((unsigned char *)res.data.ptr+pos+1) != 0xC0) continue; - pict_info[i].orig_width = - (*((unsigned char *)res.data.ptr+pos+7)*256) + - *((unsigned char *)res.data.ptr+pos+8); + int maxlegalpic = 0; + int i, x_scale, y_scale; + bool success = FALSE; + + unsigned char png_magic[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; + unsigned char ihdr_name[] = "IHDR"; + unsigned char jpg_magic[3] = {0xFF, 0xD8, 0xFF}; + unsigned char jfif_name[5] = {'J', 'F', 'I', 'F', 0x00}; + + bb_result_t res; + uint32 pos; + + if (blorb_map == NULL) return FALSE; + + bb_count_resources(blorb_map, bb_ID_Pict, &num_pictures, NULL, &maxlegalpic); + pict_info = malloc((num_pictures + 1) * sizeof(*pict_info)); + pict_info[0].z_num = 0; + pict_info[0].height = num_pictures; + pict_info[0].width = bb_get_release_num(blorb_map); + + y_scale = 200; + x_scale = 320; + + for (i = 1; i <= num_pictures; i++) { + if (bb_load_resource(blorb_map, bb_method_Memory, &res, bb_ID_Pict, i) == bb_err_None) { + pict_info[i].type = blorb_map->chunks[res.chunknum].type; + /* Copy and scale. */ + pict_info[i].z_num = i; + /* Check to see if we're dealing with a PNG file. */ + if (pict_info[i].type == bb_ID_PNG) { + if (memcmp(res.data.ptr, png_magic, 8) == 0) { + /* Check for IHDR chunk. If it's not there, PNG file is invalid. */ + if (memcmp(res.data.ptr+12, ihdr_name, 4) == 0) { + pict_info[i].orig_width = + (*((unsigned char *)res.data.ptr+16) << 24) + + (*((unsigned char *)res.data.ptr+17) << 16) + + (*((unsigned char *)res.data.ptr+18) << 8) + + (*((unsigned char *)res.data.ptr+19) << 0); + pict_info[i].orig_height = + (*((unsigned char *)res.data.ptr+20) << 24) + + (*((unsigned char *)res.data.ptr+21) << 16) + + (*((unsigned char *)res.data.ptr+22) << 8) + + (*((unsigned char *)res.data.ptr+23) << 0); + } + } + } else if (pict_info[i].type == bb_ID_Rect) { + pict_info[i].orig_width = + (*((unsigned char *)res.data.ptr+0) << 24) + + (*((unsigned char *)res.data.ptr+1) << 16) + + (*((unsigned char *)res.data.ptr+2) << 8) + + (*((unsigned char *)res.data.ptr+3) << 0); pict_info[i].orig_height = - (*((unsigned char *)res.data.ptr+pos+5)*256) + - *((unsigned char *)res.data.ptr+pos+6); - } /* while */ - } /* JFIF */ - } /* JPEG */ - } + (*((unsigned char *)res.data.ptr+4) << 24) + + (*((unsigned char *)res.data.ptr+5) << 16) + + (*((unsigned char *)res.data.ptr+6) << 8) + + (*((unsigned char *)res.data.ptr+7) << 0); + } else if (pict_info[i].type == bb_ID_JPEG) { + if (memcmp(res.data.ptr, jpg_magic, 3) == 0) { /* Is it JPEG? */ + if (memcmp(res.data.ptr+6, jfif_name, 5) == 0) { /* Look for JFIF */ + pos = 11; + while (pos < res.length) { + pos++; + if (pos >= res.length) break; /* Avoid segfault */ + if (*((unsigned char *)res.data.ptr+pos) != 0xFF) continue; + if (*((unsigned char *)res.data.ptr+pos+1) != 0xC0) continue; + pict_info[i].orig_width = + (*((unsigned char *)res.data.ptr+pos+7)*256) + + *((unsigned char *)res.data.ptr+pos+8); + pict_info[i].orig_height = + (*((unsigned char *)res.data.ptr+pos+5)*256) + + *((unsigned char *)res.data.ptr+pos+6); + } /* while */ + } /* JFIF */ + } /* JPEG */ + } /* if */ + } /* if */ + + pict_info[i].height = round_div(pict_info[i].orig_height * h_screen_rows, y_scale); + pict_info[i].width = round_div(pict_info[i].orig_width * h_screen_cols, x_scale); + + /* Don't let dimensions get rounded to nothing. */ + if (pict_info[i].orig_height && !pict_info[i].height) + pict_info[1].height = 1; + if (pict_info[i].orig_width && !pict_info[i].width) + pict_info[i].width = 1; + + success = TRUE; } /* for */ - pict_info[i].height = round_div(pict_info[i].orig_height * h_screen_rows, y_scale); - pict_info[i].width = round_div(pict_info[i].orig_width * h_screen_cols, x_scale); + if (success) h_config |= CONFIG_PICTURES; + else h_flags &= ~GRAPHICS_FLAG; - /* Don't let dimensions get rounded to nothing. */ - if (pict_info[i].orig_height && !pict_info[i].height) - pict_info[1].height = 1; - if (pict_info[i].orig_width && !pict_info[i].width) - pict_info[i].width = 1; - - success = TRUE; - } /* for */ - - if (success) h_config |= CONFIG_PICTURES; - else h_flags &= ~GRAPHICS_FLAG; - - return success; + return success; } /* Convert a Z picture number to an index into pict_info. */ static int z_num_to_index(int n) { - int i; - for (i = 0; i <= num_pictures; i++) - if (pict_info[i].z_num == n) - return i; - return -1; + int i; + for (i = 0; i <= num_pictures; i++) { + if (pict_info[i].z_num == n) + return i; + } + return -1; } + bool os_picture_data(int num, int *height, int *width) { - int index; + int index; - *height = 0; - *width = 0; + *height = 0; + *width = 0; - if (!pict_info) - return FALSE; + if (!pict_info) + return FALSE; - if ((index = z_num_to_index(num)) == -1) - return FALSE; + if ((index = z_num_to_index(num)) == -1) + return FALSE; - *height = pict_info[index].height; - *width = pict_info[index].width; + *height = pict_info[index].height; + *width = pict_info[index].width; - return TRUE; + return TRUE; } + void os_draw_picture (int num, int row, int col) { - int width, height, r, c; - if (!os_picture_data(num, &height, &width) || !width || !height) - return; - col--, row--; - /* Draw corners */ - dumb_set_picture_cell(row, col, '+'); - dumb_set_picture_cell(row, col + width - 1, '+'); - dumb_set_picture_cell(row + height - 1, col, '+'); - dumb_set_picture_cell(row + height - 1, col + width - 1, '+'); - /* sides */ - for (c = col + 1; c < col + width - 1; c++) { - dumb_set_picture_cell(row, c, '-'); - dumb_set_picture_cell(row + height - 1, c, '-'); - } - for (r = row + 1; r < row + height - 1; r++) { - dumb_set_picture_cell(r, col, '|'); - dumb_set_picture_cell(r, col + width - 1, '|'); - } - /* body, but for last line */ - for (r = row + 1; r < row + height - 2; r++) - for (c = col + 1; c < col + width - 1; c++) - dumb_set_picture_cell(r, c, ':'); - /* Last line of body, including picture number. */ - if (height >= 3) - for (c = col + width - 2; c > col; c--, (num /= 10)) - dumb_set_picture_cell(row + height - 2, c, num ? (num % 10 + '0') : ':'); + int width, height, r, c; + if (!os_picture_data(num, &height, &width) || !width || !height) + return; + col--, row--; + /* Draw corners */ + dumb_set_picture_cell(row, col, '+'); + dumb_set_picture_cell(row, col + width - 1, '+'); + dumb_set_picture_cell(row + height - 1, col, '+'); + dumb_set_picture_cell(row + height - 1, col + width - 1, '+'); + /* sides */ + for (c = col + 1; c < col + width - 1; c++) { + dumb_set_picture_cell(row, c, '-'); + dumb_set_picture_cell(row + height - 1, c, '-'); + } + for (r = row + 1; r < row + height - 1; r++) { + dumb_set_picture_cell(r, col, '|'); + dumb_set_picture_cell(r, col + width - 1, '|'); + } + /* body, but for last line */ + for (r = row + 1; r < row + height - 2; r++) { + for (c = col + 1; c < col + width - 1; c++) + dumb_set_picture_cell(r, c, ':'); + } + /* Last line of body, including picture number. */ + if (height >= 3) { + for (c = col + width - 2; c > col; c--, (num /= 10)) + dumb_set_picture_cell(row + height - 2, c, num ? (num % 10 + '0') : ':'); + } } + int os_peek_colour (void) {return BLACK_COLOUR; } -- 2.34.1