summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile11
-rw-r--r--hexdump.c57
3 files changed, 65 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 8291ce5..e8e3216 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
# Binary files
bidi
+hexdump
vendor/lua*/src/lua
vendor/lua*/src/luac
diff --git a/Makefile b/Makefile
index 8bd52b9..a7a46ef 100644
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,16 @@
+CC ?= tcc
RAYLIB := raylib-5.5_linux_amd64
LUA := lua-5.4.8
-
-CC ?= tcc
CFLAGS := -std=c99 -v -g -I./vendor/$(RAYLIB)/include -I./vendor/$(LUA)/src
LDFLAGS := -L./vendor/$(RAYLIB)/lib -lraylib -L./vendor/$(LUA)/src -llua -lm
PROG := bidi
+PROG_C := main.c
+
+$(PROG): lua hexdump $(PROG_C)
+ $(CC) $(CFLAGS) $(PROG_C) -o $(PROG) $(LDFLAGS)
-$(PROG): lua *.c
- $(CC) $(CFLAGS) *.c -o $(PROG) $(LDFLAGS)
+hexdump: hexdump.c
+ $(CC) -std=c99 -o hexdump hexdump.c
lua:
cd vendor/$(LUA) && make
diff --git a/hexdump.c b/hexdump.c
new file mode 100644
index 0000000..988424a
--- /dev/null
+++ b/hexdump.c
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char *argv[]) {
+ if (argc < 3) {
+ fprintf(stderr, "Usage: %s <input_file> <array_name>\n", argv[0]);
+ return 1;
+ }
+
+ const char *filename = argv[1];
+ const char *array_name = argv[2];
+
+ FILE *f = fopen(filename, "rb");
+ if (!f) {
+ perror("fopen");
+ return 1;
+ }
+
+ fseek(f, 0, SEEK_END);
+ long size = ftell(f);
+ rewind(f);
+
+ unsigned char *buffer = malloc(size);
+ if (!buffer) {
+ perror("malloc");
+ fclose(f);
+ return 1;
+ }
+
+ if (fread(buffer, 1, size, f) != (size_t)size) {
+ perror("fread");
+ free(buffer);
+ fclose(f);
+ return 1;
+ }
+
+ // Generate include guard
+ printf("#ifndef %s_H\n", array_name);
+ printf("#define %s_H\n\n", array_name);
+
+ printf("unsigned char %s[] = {\n", array_name);
+ for (long i = 0; i < size; i++) {
+ if (i % 12 == 0) printf("\t");
+ printf("0x%02x", buffer[i]);
+ if (i != size - 1) printf(", ");
+ if ((i + 1) % 12 == 0) printf("\n");
+ }
+ if (size % 12 != 0) printf("\n");
+ printf("};\n");
+ printf("unsigned int %s_len = %ld;\n", array_name, size);
+
+ printf("\n#endif // %s_H\n", array_name);
+
+ free(buffer);
+ fclose(f);
+ return 0;
+}