You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-09-08 08:13:02 -07:00
Add C build tools.
This commit is contained in:
89
tools/palette.c
Normal file
89
tools/palette.c
Normal file
@@ -0,0 +1,89 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
void usage(void) {
|
||||
printf("Usage: palette palfile\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void print_rgb(uint16_t word) {
|
||||
int r, g, b;
|
||||
r = word & 0x1f;
|
||||
g = (word >> 5) & 0x1f;
|
||||
b = (word >> 10) & 0x1f;
|
||||
printf("\tRGB %2d, %2d, %2d\n", r, g, b);
|
||||
}
|
||||
|
||||
void print_pokemon_palette(char* palette_filename) {
|
||||
FILE* f;
|
||||
uint8_t bytes[4];
|
||||
|
||||
f = fopen(palette_filename, "rb");
|
||||
if (f == NULL) {
|
||||
fprintf(stderr, "failed to open file %s\n", palette_filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fseek(f, 2, SEEK_SET);
|
||||
fread(bytes, 1, 4, f);
|
||||
fclose(f);
|
||||
|
||||
print_rgb((bytes[1] << 8) | bytes[0]);
|
||||
print_rgb((bytes[3] << 8) | bytes[2]);
|
||||
}
|
||||
|
||||
void print_palette(char* palette_filename) {
|
||||
FILE* f;
|
||||
uint8_t* bytes;
|
||||
long size;
|
||||
int i;
|
||||
|
||||
f = fopen(palette_filename, "rb");
|
||||
if (f == NULL) {
|
||||
fprintf(stderr, "failed to open file %s\n", palette_filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fseek(f, 0, SEEK_END);
|
||||
size = ftell(f);
|
||||
rewind(f);
|
||||
|
||||
bytes = malloc(size);
|
||||
|
||||
fseek(f, 0, SEEK_SET);
|
||||
fread(bytes, 1, size, f);
|
||||
fclose(f);
|
||||
|
||||
for (i = 0; i + 1 < size; i += 2) {
|
||||
print_rgb((bytes[i + 1] << 8) | bytes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int ch;
|
||||
bool pokemon;
|
||||
|
||||
while ((ch = getopt(argc, argv, "p")) != -1) {
|
||||
switch (ch) {
|
||||
case 'p':
|
||||
pokemon = true;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
if (argc < 1) {
|
||||
usage();
|
||||
}
|
||||
if (pokemon) {
|
||||
print_pokemon_palette(argv[0]);
|
||||
} else {
|
||||
print_palette(argv[0]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user