123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include <assert.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <string.h>
-
- int main(int argc, char** argv)
- {
- if (argc != 3)
- {
- fprintf(stderr, "Usage: %s <input palette> <output header>\n", argv[0]);
-
- return 1;
- }
-
- const char* inFilename = argv[1];
- const char* outFilename = argv[2];
-
- // Read the file
- uint16_t* palette;
- int paletteSize;
- {
- FILE* inFile = fopen(inFilename, "r");
- assert(inFile);
-
- char* line;
- size_t len = 0;
-
- getline(&line, &len, inFile);
- assert(strncmp(line, "JASC-PAL", 8) == 0);
-
- getline(&line, &len, inFile);
- assert(strncmp(line, "0100", 4) == 0);
-
- getline(&line, &len, inFile);
- paletteSize = atoi(line);
-
- palette = malloc(sizeof(*palette) * paletteSize);
- assert(palette);
-
- // Each line is of form R G B
- for (int i = 0; i < paletteSize; ++i)
- {
- getline(&line, &len, inFile);
-
- char* tok = strtok(line, " ");
- int red = atoi(tok);
-
- tok = strtok(NULL, " ");
- int green = atoi(tok);
-
- tok = strtok(NULL, " ");
- int blue = atoi(tok);
-
- uint16_t rgb565 =
- ((red >> 3u) << 11u)
- | ((green >> 2u) << 5u)
- | (blue >> 3u);
-
- uint16_t endianSwap = ((rgb565 & 0xFFu) << 8u) | (rgb565 >> 8u);
-
- palette[i] = endianSwap;
- }
-
- fclose(inFile);
- }
-
-
- printf("Input: %s\n", inFilename);
- printf("Output: %s\n", outFilename);
- printf("Palette Size: %d\n", paletteSize);
-
-
- // Output to the file
- {
- FILE* outFile = fopen(outFilename, "w");
- assert(outFile);
-
- fprintf(outFile, "// AUTOMATICALLY GENERATED. DO NOT EDIT.\n");
- fprintf(outFile, "\n");
- fprintf(outFile, "#pragma once\n");
- fprintf(outFile, "\n");
- fprintf(outFile, "\n");
-
- fprintf(outFile, "uint16_t palette[%d] =\n", paletteSize);
- fprintf(outFile, "{\n");
-
- for (int i = 0; i < paletteSize; ++i)
- {
- fprintf(outFile, " 0x%04X,\n", palette[i]);
- }
-
- fprintf(outFile, "};\n");
- fprintf(outFile, "\n");
-
- fclose(outFile);
- }
-
- printf("\n");
- printf("DONE\n");
-
-
- return 0;
- }
|