diff --git a/include/common.h b/include/common.h new file mode 100644 index 00000000..8c4bd395 --- /dev/null +++ b/include/common.h @@ -0,0 +1,6 @@ +#ifndef RGBDS_COMMON_H +#define RGBDS_COMMON_H + +#define RGBDS_OBJECT_VERSION_STRING "RGB5" + +#endif /* RGBDS_COMMON_H */ diff --git a/src/asm/output.c b/src/asm/output.c index 34c6766e..ff0a1a30 100644 --- a/src/asm/output.c +++ b/src/asm/output.c @@ -15,6 +15,7 @@ #include "asm/main.h" #include "asm/rpn.h" #include "asm/fstack.h" +#include "common.h" #include "extern/err.h" void out_SetCurrentSection(struct Section * pSect); @@ -504,7 +505,9 @@ out_WriteObject(void) struct PatchSymbol *pSym; struct Section *pSect; - fwrite("RGB5", 1, 4, f); + fwrite(RGBDS_OBJECT_VERSION_STRING, 1, + strlen(RGBDS_OBJECT_VERSION_STRING), f); + fputlong(countsymbols(), f); fputlong(countsections(), f); diff --git a/src/link/object.c b/src/link/object.c index 770f6604..5b2fd8cf 100644 --- a/src/link/object.c +++ b/src/link/object.c @@ -3,11 +3,13 @@ * */ +#include #include #include #include #include +#include "common.h" #include "extern/err.h" #include "link/assign.h" #include "link/mylink.h" @@ -332,20 +334,22 @@ obj_ReadRGB(FILE * pObjfile, char *tzObjectfile) void obj_ReadOpenFile(FILE * pObjfile, char *tzObjectfile) { - char tzHeader[8]; + char tzHeader[strlen(RGBDS_OBJECT_VERSION_STRING) + 1]; - fread(tzHeader, sizeof(char), 4, pObjfile); - tzHeader[4] = 0; - if (strncmp(tzHeader, "RGB", 3) == 0) { - switch (tzHeader[3]) { - case '5': - obj_ReadRGB(pObjfile, tzObjectfile); - break; - default: - errx(1, "'%s' uses an unsupported object file version (%s). Please reassemble it.", tzObjectfile, tzHeader); - } + fread(tzHeader, sizeof(char), strlen(RGBDS_OBJECT_VERSION_STRING), + pObjfile); + + tzHeader[strlen(RGBDS_OBJECT_VERSION_STRING)] = 0; + + if (strncmp(tzHeader, RGBDS_OBJECT_VERSION_STRING, + strlen(RGBDS_OBJECT_VERSION_STRING)) == 0) { + obj_ReadRGB(pObjfile, tzObjectfile); } else { - errx(1, "'%s' is not a valid object", tzObjectfile); + for (int i = 0; i < strlen(RGBDS_OBJECT_VERSION_STRING); i++) + if (!isprint(tzHeader[i])) + tzHeader[i] = '?'; + errx(1, "%s: Invalid file or object file version [%s]", + tzObjectfile, tzHeader); } }