diff options
Diffstat (limited to 'tools/png_dimensions.c')
-rw-r--r-- | tools/png_dimensions.c | 62 |
1 files changed, 14 insertions, 48 deletions
diff --git a/tools/png_dimensions.c b/tools/png_dimensions.c index 900485bd..aea9c0d0 100644 --- a/tools/png_dimensions.c +++ b/tools/png_dimensions.c @@ -1,57 +1,23 @@ -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> +#define PROGRAM_NAME "png_dimensions" +#define USAGE_OPTS "front.png front.dimensions" -void usage(void) { - fprintf(stderr, "Usage: png_dimensions infile outfile\n"); - exit(1); -} - -void output_dimensions(char* png_filename, char* out_filename) { - FILE* f; - int width, height; - int i; - uint8_t bytes[4]; - uint8_t output; - - f = fopen(png_filename, "rb"); - if (f == NULL) { - fprintf(stderr, "failed to open file %s\n", png_filename); - exit(1); - } - - // width - fseek(f, 16, SEEK_SET); - int size = fread(bytes, 1, 4, f); - fclose(f); - if (size != 4) { - fprintf(stderr, "failed to read at offset 0x10 in file %s\n", png_filename); - exit(1); - } +#include "common.h" - width = 0; - for (i = 0; i < 4; i++) { - width |= bytes[i] << (8 * (3 - i)); +uint8_t read_png_dimensions(const char *filename) { + uint32_t width_px = read_png_width_verbose(filename); + if (width_px != 40 && width_px != 48 && width_px != 56) { + error_exit("Not a valid width for \"%s\": %" PRIu32 " px\n", filename, width_px); } - width >>= 3; - height = width; - - output = width & 0xf; - output |= (height & 0xf) << 4; - - f = fopen(out_filename, "wb"); - if (f == NULL) { - fprintf(stderr, "failed to open file %s\n", out_filename); - exit(1); - } - fwrite(&output, 1, 1, f); - fclose(f); + uint8_t width_tiles = (uint8_t)(width_px / 8); + return (width_tiles << 4) | width_tiles; } -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { if (argc < 3) { - usage(); + usage_exit(1); } - output_dimensions(argv[1], argv[2]); + + uint8_t output_byte = read_png_dimensions(argv[1]); + write_u8(argv[2], &output_byte, 1); return 0; } |