From b76e19467cbaac0f3b074d827c743d02377da170 Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Sat, 15 May 2021 19:42:19 -0500 Subject: [PATCH] More changes to support JoeyDev. All targets need updating before they'll work again. --- joeylib/src/jDev.c | 19 ++++++++++--------- joeylib/src/jDev.h | 8 +++----- joeylib/src/jPixBuf.c | 35 +++++++++++++++++++++++------------ joeylib/src/joey.c | 42 ++++++++++++++++++++++-------------------- joeylib/src/joey.h | 34 +++++++++++++++++++--------------- 5 files changed, 77 insertions(+), 61 deletions(-) diff --git a/joeylib/src/jDev.c b/joeylib/src/jDev.c index 71e3af5..3443c85 100644 --- a/joeylib/src/jDev.c +++ b/joeylib/src/jDev.c @@ -26,12 +26,16 @@ #include "joey.h" -extern jbool _jlIsRunning; extern jlMemoryBlockT _jlMemoryBlocks[JOEY_MEM_BLOCKS]; extern long _jlTotalAllocations; extern long _jlTotalFrees; +jbool jlUtilMustExit(void) { + return _jlUtilMustExit(JOEY_DEV_HANDLE); +} + + void jlUtilSay(char *format, ...) { va_list va; va_start(va, format); @@ -40,19 +44,16 @@ void jlUtilSay(char *format, ...) { } -void SetJLMustExitHelper(void) { - printf("Setting Must Exit Flag!\n"); - _jlIsRunning = jfalse; -} - - void main(void) { int i; jPixBufStart(); - joeyMain(); - jPixBufStop(); + if (!setjmp(_jlJumpBuffer)) { + joeyMain(); + } + + jPixBufStop(); jlUtilDie("Clean Exit."); if (_jlTotalAllocations > _jlTotalFrees) { diff --git a/joeylib/src/jDev.h b/joeylib/src/jDev.h index c1b8969..e61a93e 100644 --- a/joeylib/src/jDev.h +++ b/joeylib/src/jDev.h @@ -38,8 +38,8 @@ extern void _jlDisplayPresent(uint32_t handle, void *image); // void so we d extern jint16 _jlGameGetAxis(uint32_t handle, jbyte which); extern jbool _jlGameGetButton(uint32_t handle, jbyte which); extern jbool _jlKeyPressed(uint32_t handle); +extern char _jlUtilMustExit(uint32_t handle); extern char _jlKeyRead(uint32_t handle); -//extern jbool _jlUtilMustExit(uint32_t handle); extern void _jlUtilSay(uint32_t handle, char *format, va_list args); extern juint16 _jlUtilTimer(uint32_t handle); extern void _jlUtilTitleSet(uint32_t handle, char *title); @@ -49,14 +49,12 @@ extern void _jlUtilTitleSet(uint32_t handle, char *title); #define jlGameGetButton(w) _jlGameGetButton(JOEY_DEV_HANDLE, w) #define jlKeyPressed() _jlKeyPressed(JOEY_DEV_HANDLE) #define jlKeyRead() _jlKeyRead(JOEY_DEV_HANDLE) -//#define jlUtilMustExit() _jlUtilMustExit(JOEY_DEV_HANDLE) -//#define jlUtilSay(m, ...) _jlUtilSay(JOEY_DEV_HANDLE, m, __VA_ARGS__) #define jlUtilTimer() _jlUtilTimer(JOEY_DEV_HANDLE) #define jlUtilTitleSet(t) _jlUtilTitleSet(JOEY_DEV_HANDLE, t) -void jlUtilSay(char *format, ...); -void SetJLMustExitHelper(void); +jbool jlUtilMustExit(void); +void jlUtilSay(char *format, ...); // TCC Standard Library Replacement diff --git a/joeylib/src/jPixBuf.c b/joeylib/src/jPixBuf.c index e121881..ca82150 100644 --- a/joeylib/src/jPixBuf.c +++ b/joeylib/src/jPixBuf.c @@ -31,7 +31,8 @@ #endif -jlImgT *_jlBackingStore = NULL; // 4 bit representation +jlImgT *_jlBackingStore = NULL; // 4 bit representation +jbool _jlPixBufStarted = jfalse; void jlDrawBlit8x8(jlSurfaceT source, jint16 sx, jint16 sy, jint16 tx, jint16 ty) { @@ -153,12 +154,12 @@ void jlDrawSurfaceSet(jlSurfaceT target) { } -jbool _jlImgCreate(jlImgT **img) { +jbool _jlImgCreate(jlImgT **img, jint16 line, char *file) { jlImgT *t = NULL; // Are we loading into a new image? if (*img == NULL) { - t = (jlImgT *)jlMalloc(sizeof(jlImgT)); + t = (jlImgT *)jlMallocEx(sizeof(jlImgT), line, file); if (t == NULL) { return jfalse; } @@ -198,17 +199,27 @@ void jlPaletteSetFromImg(jlImgT *img) { void jPixBufStart(void) { - // Create backing store - jlImgCreate(_jlBackingStore); - jlPaletteDefault(); - jlDrawSurfaceSet(JOEY_DISPLAY); - jlDrawColorSet(0); - jlDrawClear(); - jlDrawColorSet(15); - jlDisplayPresent(); + if (!_jlPixBufStarted) { + // Create backing store + jlImgCreate(_jlBackingStore); + jlPaletteDefault(); + jlDrawSurfaceSet(JOEY_DISPLAY); + jlDrawColorSet(0); + jlDrawClear(); + jlDrawColorSet(15); + jlDisplayPresent(); + _jlPixBufStarted = jtrue; + } } +#include void jPixBufStop(void) { - jlImgFree(_jlBackingStore); + if (_jlPixBufStarted) { + //***TODO*** For some reason, jlImgFree is NOT setting _jlBackingStore to NULL. BAD. + //printf("Calling jlImgFree on %p\n", _jlBackingStore); + jlImgFree(_jlBackingStore); + //printf("Back from jlImgFree\n"); + _jlPixBufStarted = jfalse; + } } diff --git a/joeylib/src/joey.c b/joeylib/src/joey.c index de7c14a..e8d9f2e 100644 --- a/joeylib/src/joey.c +++ b/joeylib/src/joey.c @@ -76,6 +76,7 @@ jbyte _jlDrawColor = 15; // Color in lower nibble only jbyte _jlDrawColorNibbles = (15 << 4) + 15; // Color in both nibbles jbyte _jlBorderColor = 0; char _jlTempString[1024]; // Used internally for pathname operations +jmp_buf _jlJumpBuffer; #ifndef JL_HAS_UTILMUSTEXIT jbool _jlIsRunning = jtrue; @@ -122,7 +123,6 @@ void _jlFree(void **pointer) { if (i >= JOEY_MEM_BLOCKS) jlUtilDie("Block not found in jlFree()!"); free(*pointer); - *pointer = NULL; } } @@ -611,11 +611,11 @@ jbool jlGameGetButton(jbyte which) { #ifndef JL_HAS_IMGCOPY -jbool _jlImgCopy(jlImgT *source, jlImgT **target) { +jbool _jlImgCopy(jlImgT *source, jlImgT **target, jint16 line, char *file) { jlImgT *t = NULL; // Are we copying into a new image? if (*target == NULL) { - t = (jlImgT *)jlMalloc(sizeof(jlImgT)); + t = (jlImgT *)jlMallocEx(sizeof(jlImgT), line, file); if (t == NULL) { return jfalse; } @@ -628,8 +628,10 @@ jbool _jlImgCopy(jlImgT *source, jlImgT **target) { #ifndef JL_HAS_IMGCREATE -jbool _jlImgCreate(jlImgT **img) { +jbool _jlImgCreate(jlImgT **img, jint16 line, char *file) { (void)img; + (void)line; + (void)file; return jfalse; } #endif @@ -652,14 +654,14 @@ void jlImgFree(jlImgT *img) { #ifndef JL_HAS_IMGLOAD -jbool _jlImgLoad(jlImgT **img, char *filename) { +jbool _jlImgLoad(jlImgT **img, char *filename, jint16 line, char *file) { jbool result = jfalse; jlImgT *s = NULL; FILE *f = NULL; // Are we loading into a new image? if (*img == NULL) { - s = (jlImgT *)jlMalloc(sizeof(jlImgT)); + s = (jlImgT *)jlMallocEx(sizeof(jlImgT), line, file); if (s == NULL) { return result; } @@ -878,14 +880,14 @@ void jlStnFree(jlStnT *stn) { #ifndef JL_HAS_STNLOAD -jbool _jlStnLoad(jlStnT **stn, char *filename) { +jbool _jlStnLoad(jlStnT **stn, char *filename, jint16 line, char *file) { jbool result = jfalse; jlStnT *s = NULL; FILE *f = NULL; // Are we loading into a new stencil? if (*stn == NULL) { - s = (jlStnT *)jlMalloc(sizeof(jlStnT)); + s = (jlStnT *)jlMallocEx(sizeof(jlStnT), line, file); if (s == NULL) { return result; } @@ -938,15 +940,13 @@ void jlUtilDie(const char *why, ...) { } jlUtilSay(""); jlUtilSay("%s", msg); - } -#ifdef JOEY_TOOLS #ifndef JL_HAS_UTILMUSTEXIT - _jlIsRunning = jfalse; -#endif -#else - exit(0); + _jlIsRunning = jfalse; #endif + + longjmp(_jlJumpBuffer, 1); + } } #endif @@ -1009,11 +1009,15 @@ jbool jlUtilInputRead(jbyte *key) { // Primary case 13: + case 'z': + case 'Z': *key = JOEY_INPUT_PRIMARY; break; // Secondary case 27: + case 'x': + case 'X': *key = JOEY_INPUT_SECONDARY; break; } @@ -1077,8 +1081,6 @@ char *jlUtilMakePathname(char *filename, char *extension) { strcat(_jlTempString, extension); } - printf("%s\n", _jlTempString); - return _jlTempString; } #endif @@ -1189,9 +1191,9 @@ void *_jlUtilStackPop(jlStackT **stack) { #ifndef JL_HAS_UTILSTACKPUSH -void _jlUtilStackPush(jlStackT **stack, void *data) { +void _jlUtilStackPush(jlStackT **stack, void *data, jint16 line, char *file) { jlStackT *s = NULL; - s = (jlStackT *)jlMalloc(sizeof(jlStackT)); + s = (jlStackT *)jlMallocEx(sizeof(jlStackT), line, file); s->previous = *stack; s->data = data; *stack = s; @@ -1353,7 +1355,7 @@ void jlVecFree(jlVecT *vec) { #ifndef JL_HAS_VECLOAD -jbool _jlVecLoad(jlVecT **vec, char *filename) { +jbool _jlVecLoad(jlVecT **vec, char *filename, jint16 line, char *file) { jbool result = jfalse; jlVecT *v = NULL; FILE *f = NULL; @@ -1363,7 +1365,7 @@ jbool _jlVecLoad(jlVecT **vec, char *filename) { if (*vec != NULL) { jlVecFree(*vec); } - v = (jlVecT *)jlMalloc(sizeof(jlVecT)); + v = (jlVecT *)jlMallocEx(sizeof(jlVecT), line, file); if (v == NULL) { return result; } diff --git a/joeylib/src/joey.h b/joeylib/src/joey.h index 350d128..816fb12 100644 --- a/joeylib/src/joey.h +++ b/joeylib/src/joey.h @@ -32,6 +32,7 @@ extern "C" { #include +#include typedef unsigned char jbool; @@ -266,6 +267,7 @@ extern jbyte _jlDrawColor; extern jbyte _jlDrawColorNibbles; extern jbyte _jlBorderColor; extern char _jlTempString[1024]; +extern jmp_buf _jlJumpBuffer; enum _jlBorderColorsE { @@ -343,10 +345,11 @@ typedef struct { jint16 line; } jlMemoryBlockT; -#define jlFree(p) _jlFree((void **)&(p)) +#define jlFree(p) _jlFree((void **)&(p)); p = 0 void _jlFree(void **pointer); -#define jlMalloc(s) _jlMalloc(s, __LINE__, __FILE__) +#define jlMalloc(s) _jlMalloc(s, __LINE__, (char *)__FILE__) +#define jlMallocEx(s, l, f) _jlMalloc(s, l, (char *)f) void *_jlMalloc(size_t size, jint16 line, char *file); #define jlRealloc(p, s) _jlRealloc(p, s) @@ -354,7 +357,7 @@ void *_jlRealloc(void *pointer, size_t size); #else -#define jlFree free +#define jlFree(p) free(p); p = 0 #define jlMalloc malloc #endif @@ -384,14 +387,14 @@ void jlDrawSurfaceSet(jlSurfaceT target); jint16 jlGameGetAxis(jbyte which); jbool jlGameGetButton(jbyte which); -#define jlImgCopy(source, target) _jlImgCopy(source, (jlImgT **)&(target)) // Syntatic Sugar -jbool _jlImgCopy(jlImgT *source, jlImgT **target); -#define jlImgCreate(img) _jlImgCreate((jlImgT **)&(img)) // Syntatic Sugar -jbool _jlImgCreate(jlImgT **img); +#define jlImgCopy(source, target) _jlImgCopy(source, (jlImgT **)&(target), __LINE__, (char *)__FILE__) // Syntatic Sugar +jbool _jlImgCopy(jlImgT *source, jlImgT **target, jint16 line, char *file); +#define jlImgCreate(img) _jlImgCreate((jlImgT **)&(img), __LINE__, (char *)__FILE__) // Syntatic Sugar +jbool _jlImgCreate(jlImgT **img, jint16 line, char *file); void jlImgDisplay(jlImgT *img); void jlImgFree(jlImgT *img); -#define jlImgLoad(img, filename) _jlImgLoad((jlImgT **)&(img), filename) // Syntatic Sugar -jbool _jlImgLoad(jlImgT **img, char *filename); +#define jlImgLoad(img, filename) _jlImgLoad((jlImgT **)&(img), filename, __LINE__, (char *)__FILE__) // Syntatic Sugar +jbool _jlImgLoad(jlImgT **img, char *filename, jint16 line, char *file); #define jlImgSave(img, filename) _jlImgSave(img, filename) // Needed so we can redefined it for JoeyDev jbool _jlImgSave(jlImgT *img, char *filename); #define jlImgSurfaceGet(img) ((jlSurfaceT)img->pixels) @@ -422,8 +425,8 @@ void jlSoundModStop(void); void jlSoundPlay(jlSoundT *sound); void jlStnFree(jlStnT *stn); -#define jlStnLoad(stn, filename) _jlStnLoad((jlStnT **)&(stn), filename) // Syntatic Sugar -jbool _jlStnLoad(jlStnT **stn, char *filename); +#define jlStnLoad(stn, filename) _jlStnLoad((jlStnT **)&(stn), filename, __LINE__, (char *)__FILE__) // Syntatic Sugar +jbool _jlStnLoad(jlStnT **stn, char *filename, jint16 line, char *file); #define jlUtilByteSwap(twoBytes) ((juint16)((twoBytes) & 0xff) >> 8) | (juint16)((twoBytes) << 8) #ifdef JOEY_TOOLS @@ -444,16 +447,16 @@ void jlUtilSay(char *format, ...); void jlUtilSleep(juint16 sixtieths); #define jlUtilStackPop(stack) _jlUtilStackPop((jlStackT **)&(stack)) // Syntatic Sugar void *_jlUtilStackPop(jlStackT **stack); -#define jlUtilStackPush(stack, data) _jlUtilStackPush((jlStackT **)&(stack), data) // Syntatic Sugar -void _jlUtilStackPush(jlStackT **stack, void *data); +#define jlUtilStackPush(stack, data) _jlUtilStackPush((jlStackT **)&(stack), data, __LINE__, (char *)__FILE__) // Syntatic Sugar +void _jlUtilStackPush(jlStackT **stack, void *data, jint16 line, char *file); juint16 jlUtilTimer(void); juint16 jlUtilTimeSpan(juint16 past, juint16 current); void jlUtilTitleSet(char *title); void jlVecDisplay(jlVecT *vec, jint16 x, jint16 y); void jlVecFree(jlVecT *vec); -#define jlVecLoad(vec, filename) _jlVecLoad((jlVecT **)&(vec), filename) // Syntatic Sugar -jbool _jlVecLoad(jlVecT **vec, char *filename); +#define jlVecLoad(vec, filename) _jlVecLoad((jlVecT **)&(vec), filename, __LINE__, (char *)__FILE__) // Syntatic Sugar +jbool _jlVecLoad(jlVecT **vec, char *filename, jint16 line, char *file); // Must be provided by application @@ -513,6 +516,7 @@ void _jlDebugBorder(jlBorderColorsE color); #define JL_HAS_GAMEGETBUTTON #define JL_HAS_KEYPRESSED #define JL_HAS_KEYREAD +#define JL_HAS_UTILMUSTEXIT #define JL_HAS_UTILSAY #define JL_HAS_UTILTIMER #include "jDev.h"