Modularized joey.c to make adding new platforms easier and to clean up code sharing.
This commit is contained in:
parent
f37e8d831f
commit
b8643d14d3
7 changed files with 738 additions and 212 deletions
|
@ -28,7 +28,9 @@ QMAKE_CFLAGS += \
|
||||||
$$JOEY_FLAGS
|
$$JOEY_FLAGS
|
||||||
|
|
||||||
INCLUDEPATH += \
|
INCLUDEPATH += \
|
||||||
$$JOEY_INCLUDES
|
$$JOEY_INCLUDES \
|
||||||
|
/home/scott/source/lzsa/src \
|
||||||
|
/home/scott/source/lzsa/src/libdivsufsort/include
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$JOEY_HEADERS
|
$$JOEY_HEADERS
|
||||||
|
@ -38,4 +40,7 @@ SOURCES += \
|
||||||
|
|
||||||
LIBS += \
|
LIBS += \
|
||||||
$$JOEY_LIBS \
|
$$JOEY_LIBS \
|
||||||
$$SDL_IMAGE_LIBS
|
$$SDL_IMAGE_LIBS \
|
||||||
|
-llz4 \
|
||||||
|
-L/home/scott/source/lzsa \
|
||||||
|
-llzsa
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_image.h>
|
#include <SDL2/SDL_image.h>
|
||||||
|
#include <lz4.h>
|
||||||
|
|
||||||
|
#include "lib.h"
|
||||||
|
|
||||||
#include "joey.h"
|
#include "joey.h"
|
||||||
|
|
||||||
|
@ -24,6 +26,11 @@ void convertColor(char *filename, char *basename, bool showIt) {
|
||||||
|
|
||||||
if (image == NULL) return;
|
if (image == NULL) return;
|
||||||
|
|
||||||
|
if (!image->format->palette) {
|
||||||
|
fprintf(stderr, "Not a palettized image.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
colors = image->format->palette->ncolors;
|
colors = image->format->palette->ncolors;
|
||||||
c = image->format->palette->colors;
|
c = image->format->palette->colors;
|
||||||
|
|
||||||
|
@ -56,9 +63,57 @@ void convertColor(char *filename, char *basename, bool showIt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_FreeSurface(image);
|
||||||
|
|
||||||
jlImgSave(img, basename);
|
jlImgSave(img, basename);
|
||||||
|
|
||||||
SDL_FreeSurface(image);
|
// Experimental LZ4 compression
|
||||||
|
const size_t srcSize = (sizeof(jlColorT) * 16) + (sizeof(jlPixelPairT) * 32000);
|
||||||
|
const int maxSize = LZ4_compressBound(srcSize);
|
||||||
|
char *compressedData = malloc((size_t)maxSize);
|
||||||
|
if (!compressedData) {
|
||||||
|
fprintf(stderr, "Unable to allocate space for compressed data.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const int compressedDataSize = LZ4_compress_default((char *)img->palette, compressedData, srcSize, maxSize);
|
||||||
|
if (compressedDataSize <= 0) {
|
||||||
|
fprintf(stderr, "Unable to compress data.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
char name[2048];
|
||||||
|
FILE *out;
|
||||||
|
snprintf(name, 2048, "%s.imgz", basename);
|
||||||
|
out = fopen(name, "wb");
|
||||||
|
if (!out) {
|
||||||
|
fprintf(stderr, "Unable to save compressed file: %s\n", name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fwrite(img, 4, 1, out);
|
||||||
|
fwrite(compressedData, compressedDataSize, 1, out);
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
|
// Experimental LZSA compression
|
||||||
|
const size_t srcSize2 = (sizeof(jlColorT) * 16) + (sizeof(jlPixelPairT) * 32000);
|
||||||
|
const int maxSize2 = lzsa_get_max_compressed_size_inmem(srcSize2);
|
||||||
|
unsigned char *compressedData2 = malloc((size_t)maxSize2);
|
||||||
|
if (!compressedData2) {
|
||||||
|
fprintf(stderr, "Unable to allocate space for compressed data.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const int compressedDataSize2 = lzsa_compress_inmem((unsigned char *)img->palette, compressedData2, srcSize2, maxSize2, LZSA_FLAG_FAVOR_RATIO, 3, 1);
|
||||||
|
if (compressedDataSize2 <= 0) {
|
||||||
|
fprintf(stderr, "Unable to compress data.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
snprintf(name, 2048, "%s.imgz2", basename);
|
||||||
|
out = fopen(name, "wb");
|
||||||
|
if (!out) {
|
||||||
|
fprintf(stderr, "Unable to save compressed file: %s\n", name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fwrite(img, 4, 1, out);
|
||||||
|
fwrite(compressedData2, compressedDataSize2, 1, out);
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
if (showIt) {
|
if (showIt) {
|
||||||
jlImgDisplay(img);
|
jlImgDisplay(img);
|
||||||
|
|
|
@ -232,50 +232,6 @@ void jlPaletteSetFromImg(jlImgT *img) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void jlSoundFree(jlSoundT *sound) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool jlSoundIsPlaying(jlSoundT *sound) {
|
|
||||||
//***TODO***
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool _jlSoundLoad(jlSoundT **sound, char *filename) {
|
|
||||||
//***TODO***
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiContinue(void) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool jlSoundMidiIsPlaying(void) {
|
|
||||||
//***TODO***
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiPause(void) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiPlay(char *name) {
|
|
||||||
(void)name;
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiStop(void) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundModContinue(void) {
|
void jlSoundModContinue(void) {
|
||||||
NTPContinueMusic();
|
NTPContinueMusic();
|
||||||
}
|
}
|
||||||
|
@ -311,21 +267,6 @@ void jlSoundModStop(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void jlSoundPlay(jlSoundT *sound) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlUtilIdle(void) {
|
|
||||||
// No need to pump the message loop on the IIgs
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool jlUtilMustExit(void) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlUtilShutdown(void) {
|
void jlUtilShutdown(void) {
|
||||||
// Clear the display.
|
// Clear the display.
|
||||||
jlDrawColorSet(0);
|
jlDrawColorSet(0);
|
||||||
|
|
|
@ -244,100 +244,12 @@ void jlDrawBlit8x8a(jlSurfaceT source, jlStnT *stencil, jint16 sx, jint16 sy, ji
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//***FIX*** This no longer does what we want since blitting source addresses are now in pixels. Fix!
|
|
||||||
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source) {
|
|
||||||
// startX = start tile for drawing - in pixels
|
|
||||||
// startY = start tile for drawing - in pixels
|
|
||||||
// width = tiles to draw horizontally - in tiles
|
|
||||||
// height = tiles to draw vertically - in tiles
|
|
||||||
// mapData = pointer to tile x/y pairs to draw
|
|
||||||
// stride = number of tile bytes to skip in the mapData for every horizontal line
|
|
||||||
// tiles = surface to fetch tile data from
|
|
||||||
jint16 x;
|
|
||||||
jint16 y;
|
|
||||||
byte tileX;
|
|
||||||
byte tileY;
|
|
||||||
juint16 offset = 0;
|
|
||||||
jint16 endX = width * 8 + startX;
|
|
||||||
jint16 endY = height * 8 + startY;
|
|
||||||
|
|
||||||
for (y=startY; y<endY; y+=8) {
|
|
||||||
for (x=startX; x<endX; x+=8) {
|
|
||||||
tileX = mapData[offset++];
|
|
||||||
tileY = mapData[offset++];
|
|
||||||
jlDrawBlit8x8(source, tileX, tileY, x, y);
|
|
||||||
}
|
|
||||||
offset += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlDrawClear(void) {
|
void jlDrawClear(void) {
|
||||||
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
|
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
|
||||||
memset(target, _jlDrawColorNibbles, 32000);
|
memset(target, _jlDrawColorNibbles, 32000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
|
|
||||||
jint16 x;
|
|
||||||
jint16 y;
|
|
||||||
jint16 dx;
|
|
||||||
jint16 dy;
|
|
||||||
jint16 incX;
|
|
||||||
jint16 incY;
|
|
||||||
jint16 balance;
|
|
||||||
|
|
||||||
if (x2 >= x1) {
|
|
||||||
dx = x2 - x1;
|
|
||||||
incX = 1;
|
|
||||||
} else {
|
|
||||||
dx = x1 - x2;
|
|
||||||
incX = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (y2 >= y1) {
|
|
||||||
dy = y2 - y1;
|
|
||||||
incY = 1;
|
|
||||||
} else {
|
|
||||||
dy = y1 - y2;
|
|
||||||
incY = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
x = x1;
|
|
||||||
y = y1;
|
|
||||||
|
|
||||||
if (dx >= dy) {
|
|
||||||
dy <<= 1;
|
|
||||||
balance = dy - dx;
|
|
||||||
dx <<= 1;
|
|
||||||
while (x != x2) {
|
|
||||||
jlDrawPixelSet(x, y);
|
|
||||||
if (balance >= 0) {
|
|
||||||
y += incY;
|
|
||||||
balance -= dx;
|
|
||||||
}
|
|
||||||
balance += dy;
|
|
||||||
x += incX;
|
|
||||||
}
|
|
||||||
jlDrawPixelSet(x, y);
|
|
||||||
} else {
|
|
||||||
dx <<= 1;
|
|
||||||
balance = dx - dy;
|
|
||||||
dy <<= 1;
|
|
||||||
while (y != y2) {
|
|
||||||
jlDrawPixelSet(x, y);
|
|
||||||
if (balance >= 0) {
|
|
||||||
x += incX;
|
|
||||||
balance -= dy;
|
|
||||||
}
|
|
||||||
balance += dx;
|
|
||||||
y += incY;
|
|
||||||
}
|
|
||||||
jlDrawPixelSet(x, y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
byte jlDrawPixelGet(jint16 x, jint16 y) {
|
byte jlDrawPixelGet(jint16 x, jint16 y) {
|
||||||
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
|
jlPixelPairT *target = (jlPixelPairT *)_jlDrawTargetActual;
|
||||||
int p = x / 2 + y * 160;
|
int p = x / 2 + y * 160;
|
||||||
|
@ -513,34 +425,6 @@ bool _jlSoundLoad(jlSoundT **sound, char *filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiContinue(void) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool jlSoundMidiIsPlaying(void) {
|
|
||||||
//***TODO***
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiPause(void) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiPlay(char *name) {
|
|
||||||
(void)name;
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundMidiStop(void) {
|
|
||||||
//***TODO***
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlSoundModContinue(void) {
|
void jlSoundModContinue(void) {
|
||||||
Mix_ResumeMusic();
|
Mix_ResumeMusic();
|
||||||
}
|
}
|
||||||
|
@ -677,17 +561,6 @@ bool jlUtilMustExit(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void jlUtilNibbleSwap(byte *mem, jint16 count, byte old, byte new) {
|
|
||||||
int x;
|
|
||||||
jlPixelPairT *b;
|
|
||||||
for (x=0; x<count; x++) {
|
|
||||||
b = (jlPixelPairT *)&mem[x];
|
|
||||||
if (b->l == old) b->l = new;
|
|
||||||
if (b->r == old) b->r = new;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void jlUtilShutdown(void) {
|
void jlUtilShutdown(void) {
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
|
|
@ -179,27 +179,94 @@ void *_jlRealloc(void *pointer, size_t size) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DISPLAYBORDER
|
||||||
void jlDisplayBorder(jlBorderColorsE color) {
|
void jlDisplayBorder(jlBorderColorsE color) {
|
||||||
_jlBorderColor = (byte)color;
|
_jlBorderColor = (byte)color;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DISPLAYPRESENT
|
||||||
|
void jlDisplayPresent(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWBLIT8X8
|
||||||
|
void jlDrawBlit8x8(jlSurfaceT source, jint16 sx, jint16 sy, jint16 tx, jint16 ty) {
|
||||||
|
(void)source;
|
||||||
|
(void)sx;
|
||||||
|
(void)sy;
|
||||||
|
(void)tx;
|
||||||
|
(void)ty;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWBLIT8X8A
|
||||||
|
void jlDrawBlit8x8a(jlSurfaceT source, jlStnT *stencil, jint16 sx, jint16 sy, jint16 tx, jint16 ty) {
|
||||||
|
(void)source;
|
||||||
|
(void)stencil;
|
||||||
|
(void)sx;
|
||||||
|
(void)sy;
|
||||||
|
(void)tx;
|
||||||
|
(void)ty;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWBLITMAP
|
||||||
|
//***FIX*** This no longer does what we want since blitting source addresses are now in pixels. Fix!
|
||||||
|
void jlDrawBlitMap(jint16 startX, jint16 startY, jint16 width, jint16 height, byte *mapData, juint16 stride, jlSurfaceT source) {
|
||||||
|
// startX = start tile for drawing - in pixels
|
||||||
|
// startY = start tile for drawing - in pixels
|
||||||
|
// width = tiles to draw horizontally - in tiles
|
||||||
|
// height = tiles to draw vertically - in tiles
|
||||||
|
// mapData = pointer to tile x/y pairs to draw
|
||||||
|
// stride = number of tile bytes to skip in the mapData for every horizontal line
|
||||||
|
// tiles = surface to fetch tile data from
|
||||||
|
jint16 x;
|
||||||
|
jint16 y;
|
||||||
|
byte tileX;
|
||||||
|
byte tileY;
|
||||||
|
juint16 offset = 0;
|
||||||
|
jint16 endX = width * 8 + startX;
|
||||||
|
jint16 endY = height * 8 + startY;
|
||||||
|
|
||||||
|
for (y=startY; y<endY; y+=8) {
|
||||||
|
for (x=startX; x<endX; x+=8) {
|
||||||
|
tileX = mapData[offset++];
|
||||||
|
tileY = mapData[offset++];
|
||||||
|
jlDrawBlit8x8(source, tileX, tileY, x, y);
|
||||||
|
}
|
||||||
|
offset += stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWBOX
|
||||||
void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
|
void jlDrawBox(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
|
||||||
jlDrawLine(x1, y1, x2, y1);
|
jlDrawLine(x1, y1, x2, y1);
|
||||||
jlDrawLine(x2, y1, x2, y2);
|
jlDrawLine(x2, y1, x2, y2);
|
||||||
jlDrawLine(x2, y2, x1, y2);
|
jlDrawLine(x2, y2, x1, y2);
|
||||||
jlDrawLine(x1, y2, x1, y1);
|
jlDrawLine(x1, y2, x1, y1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWBOXFILLED
|
||||||
void jlDrawBoxFilled(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
|
void jlDrawBoxFilled(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
|
||||||
jint16 y;
|
jint16 y;
|
||||||
for (y=y1; y<=y2; y++) {
|
for (y=y1; y<=y2; y++) {
|
||||||
jlDrawLine(x1, y, x2, y);
|
jlDrawLine(x1, y, x2, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWCIRCLE
|
||||||
void _jlDrawCircleClipped(jint16 x0, jint16 y0, jint16 radius) {
|
void _jlDrawCircleClipped(jint16 x0, jint16 y0, jint16 radius) {
|
||||||
jint16 x = radius-1;
|
jint16 x = radius-1;
|
||||||
jint16 y = 0;
|
jint16 y = 0;
|
||||||
|
@ -267,19 +334,32 @@ void jlDrawCircle(jint16 x0, jint16 y0, jint16 radius) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWCLEAR
|
||||||
|
void jlDrawClear(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWCOLORGET
|
||||||
byte jlDrawColorGet(void) {
|
byte jlDrawColorGet(void) {
|
||||||
return _jlDrawColor;
|
return _jlDrawColor;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWCOLORSET
|
||||||
void jlDrawColorSet(byte index) {
|
void jlDrawColorSet(byte index) {
|
||||||
_jlDrawColor = index;
|
_jlDrawColor = index;
|
||||||
_jlDrawColorNibbles = (byte)((index << 4) + index);
|
_jlDrawColorNibbles = (byte)((index << 4) + index);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWELLIPSE
|
||||||
// http://members.chello.at/~easyfilter/bresenham.html
|
// http://members.chello.at/~easyfilter/bresenham.html
|
||||||
void jlDrawEllipse(jint16 x0, jint16 y0, jint16 x1, jint16 y1) {
|
void jlDrawEllipse(jint16 x0, jint16 y0, jint16 x1, jint16 y1) {
|
||||||
jint16 a = (jint16)abs(x1-x0), b = (jint16)abs(y1-y0), b1 = b&1; /* values of diameter */
|
jint16 a = (jint16)abs(x1-x0), b = (jint16)abs(y1-y0), b1 = b&1; /* values of diameter */
|
||||||
|
@ -308,8 +388,10 @@ void jlDrawEllipse(jint16 x0, jint16 y0, jint16 x1, jint16 y1) {
|
||||||
jlDrawPixelSet(x1+1, y1--);
|
jlDrawPixelSet(x1+1, y1--);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(JL_HAS_DRAWFILL) && !defined(JL_HASDRAWFILLTO)
|
||||||
_jlScanDataT *_jlDrawFillNewSegment(jint16 startX, jint16 endX, jint16 y, signed char dir, bool scanLeft, bool scanRight) {
|
_jlScanDataT *_jlDrawFillNewSegment(jint16 startX, jint16 endX, jint16 y, signed char dir, bool scanLeft, bool scanRight) {
|
||||||
_jlScanDataT *s = (_jlScanDataT *)jlMalloc(sizeof(_jlScanDataT));
|
_jlScanDataT *s = (_jlScanDataT *)jlMalloc(sizeof(_jlScanDataT));
|
||||||
s->StartX = startX;
|
s->StartX = startX;
|
||||||
|
@ -392,20 +474,136 @@ void _jlDrawFill(jint16 x, jint16 y, bool how) {
|
||||||
jlFree(r);
|
jlFree(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWFILL
|
||||||
void jlDrawFill(jint16 x, jint16 y) {
|
void jlDrawFill(jint16 x, jint16 y) {
|
||||||
_jlDrawFillColor = jlDrawPixelGet(x, y);
|
_jlDrawFillColor = jlDrawPixelGet(x, y);
|
||||||
_jlDrawFill(x, y, true);
|
_jlDrawFill(x, y, true);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWFILLTO
|
||||||
void jlDrawFillTo(jint16 x, jint16 y, byte color) {
|
void jlDrawFillTo(jint16 x, jint16 y, byte color) {
|
||||||
_jlDrawFillColor = color;
|
_jlDrawFillColor = color;
|
||||||
_jlDrawFill(x, y, false);
|
_jlDrawFill(x, y, false);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWLINE
|
||||||
|
void jlDrawLine(jint16 x1, jint16 y1, jint16 x2, jint16 y2) {
|
||||||
|
jint16 x;
|
||||||
|
jint16 y;
|
||||||
|
jint16 dx;
|
||||||
|
jint16 dy;
|
||||||
|
jint16 incX;
|
||||||
|
jint16 incY;
|
||||||
|
jint16 balance;
|
||||||
|
|
||||||
|
if (x2 >= x1) {
|
||||||
|
dx = x2 - x1;
|
||||||
|
incX = 1;
|
||||||
|
} else {
|
||||||
|
dx = x1 - x2;
|
||||||
|
incX = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (y2 >= y1) {
|
||||||
|
dy = y2 - y1;
|
||||||
|
incY = 1;
|
||||||
|
} else {
|
||||||
|
dy = y1 - y2;
|
||||||
|
incY = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
x = x1;
|
||||||
|
y = y1;
|
||||||
|
|
||||||
|
if (dx >= dy) {
|
||||||
|
dy <<= 1;
|
||||||
|
balance = dy - dx;
|
||||||
|
dx <<= 1;
|
||||||
|
while (x != x2) {
|
||||||
|
jlDrawPixelSet(x, y);
|
||||||
|
if (balance >= 0) {
|
||||||
|
y += incY;
|
||||||
|
balance -= dx;
|
||||||
|
}
|
||||||
|
balance += dy;
|
||||||
|
x += incX;
|
||||||
|
}
|
||||||
|
jlDrawPixelSet(x, y);
|
||||||
|
} else {
|
||||||
|
dx <<= 1;
|
||||||
|
balance = dx - dy;
|
||||||
|
dy <<= 1;
|
||||||
|
while (y != y2) {
|
||||||
|
jlDrawPixelSet(x, y);
|
||||||
|
if (balance >= 0) {
|
||||||
|
x += incX;
|
||||||
|
balance -= dy;
|
||||||
|
}
|
||||||
|
balance += dx;
|
||||||
|
y += incY;
|
||||||
|
}
|
||||||
|
jlDrawPixelSet(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWPIXELGIT
|
||||||
|
byte jlDrawPixelGet(jint16 x, jint16 y) {
|
||||||
|
(void)x;
|
||||||
|
(void)y;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWPIXELSET
|
||||||
|
void jlDrawPixelSet(jint16 x, jint16 y) {
|
||||||
|
(void)x;
|
||||||
|
(void)y;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWSURFACEGET
|
||||||
|
jlSurfaceT jlDrawSurfaceGet(void) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_DRAWSURFACESET
|
||||||
|
void jlDrawSurfaceSet(jlSurfaceT target) {
|
||||||
|
(void)target;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_GETGAMEAXIS
|
||||||
|
jint16 jlGameGetAxis(byte which) {
|
||||||
|
(void)which;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_GETGAMEBUTTON
|
||||||
|
bool jlGameGetButton(byte which) {
|
||||||
|
(void)which;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_IMGCOPY
|
||||||
bool _jlImgCopy(jlImgT *source, jlImgT **target) {
|
bool _jlImgCopy(jlImgT *source, jlImgT **target) {
|
||||||
jlImgT *t = NULL;
|
jlImgT *t = NULL;
|
||||||
// Are we copying into a new image?
|
// Are we copying into a new image?
|
||||||
|
@ -420,15 +618,34 @@ bool _jlImgCopy(jlImgT *source, jlImgT **target) {
|
||||||
memcpy(*target, source, sizeof(jlImgT));
|
memcpy(*target, source, sizeof(jlImgT));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_IMGCREATE
|
||||||
|
bool _jlImgCreate(jlImgT **img) {
|
||||||
|
(void)img;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_IMGDISPLAY
|
||||||
|
void jlImgDisplay(jlImgT *img) {
|
||||||
|
(void)img;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_IMGFREE
|
||||||
void jlImgFree(jlImgT *img) {
|
void jlImgFree(jlImgT *img) {
|
||||||
if (img != NULL) {
|
if (img != NULL) {
|
||||||
jlFree(img);
|
jlFree(img);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_IMGLOAD
|
||||||
bool _jlImgLoad(jlImgT **img, char *filename) {
|
bool _jlImgLoad(jlImgT **img, char *filename) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
jlImgT *s = NULL;
|
jlImgT *s = NULL;
|
||||||
|
@ -456,8 +673,10 @@ bool _jlImgLoad(jlImgT **img, char *filename) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_IMGSAVE
|
||||||
bool jlImgSave(jlImgT *img, char *filename) {
|
bool jlImgSave(jlImgT *img, char *filename) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
@ -470,16 +689,34 @@ bool jlImgSave(jlImgT *img, char *filename) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_KEYPRESSED
|
||||||
|
bool jlKeyPressed(void) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_KEYREAD
|
||||||
|
char jlKeyRead(void) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_KEYWAITFORANY
|
||||||
void jlKeyWaitForAny(void) {
|
void jlKeyWaitForAny(void) {
|
||||||
//***TODO*** I don't think this does what we think it does.
|
//***TODO*** I don't think this does what we think it does.
|
||||||
while (!jlKeyPressed() && !jlUtilMustExit()) ;
|
while (!jlKeyPressed() && !jlUtilMustExit()) ;
|
||||||
jlKeyRead();
|
jlKeyRead();
|
||||||
while (jlKeyPressed() && !jlUtilMustExit()) ;
|
while (jlKeyPressed() && !jlUtilMustExit()) ;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_PALETTEDEFAULT
|
||||||
void jlPaletteDefault(void) {
|
void jlPaletteDefault(void) {
|
||||||
byte i;
|
byte i;
|
||||||
// Set palette.
|
// Set palette.
|
||||||
|
@ -503,8 +740,138 @@ void jlPaletteDefault(void) {
|
||||||
jlPaletteSet(i, _jlDefaultPalette[i].r, _jlDefaultPalette[i].g, _jlDefaultPalette[i].b);
|
jlPaletteSet(i, _jlDefaultPalette[i].r, _jlDefaultPalette[i].g, _jlDefaultPalette[i].b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_PALETTESET
|
||||||
|
void jlPaletteSet(byte index, byte r, byte g, byte b) {
|
||||||
|
(void)index;
|
||||||
|
(void)r;
|
||||||
|
(void)g;
|
||||||
|
(void)b;
|
||||||
|
//***TODO*** Really need a matching "get"
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_PALETTESETFROMIMG
|
||||||
|
void jlPaletteSetFromImg(jlImgT *img) {
|
||||||
|
(void)img;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDFREE
|
||||||
|
void jlSoundFree(jlSoundT *sound) {
|
||||||
|
(void)sound;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDISPLAYING
|
||||||
|
bool jlSoundIsPlaying(jlSoundT *sound) {
|
||||||
|
(void)sound;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDLOAD
|
||||||
|
bool _jlSoundLoad(jlSoundT **sound, char *filename) {
|
||||||
|
(void)sound;
|
||||||
|
(void)filename;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMIDICONTINUE
|
||||||
|
void jlSoundMidiContinue(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMIDIISPLAYING
|
||||||
|
bool jlSoundMidiIsPlaying(void) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMIDIPAUSE
|
||||||
|
void jlSoundMidiPause(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMIDIPLAY
|
||||||
|
void jlSoundMidiPlay(char *name) {
|
||||||
|
(void)name;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMIDISTOP
|
||||||
|
void jlSoundMidiStop(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMODCONTINUE
|
||||||
|
void jlSoundModContinue(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMODISPLAYING
|
||||||
|
bool jlSoundModIsPlaying(void) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMODPAUSE
|
||||||
|
void jlSoundModPause(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMODPLAY
|
||||||
|
void jlSoundModPlay(char *name) {
|
||||||
|
(void)name;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDMODSTOP
|
||||||
|
void jlSoundModStop(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_SOUNDPLAY
|
||||||
|
void jlSoundPlay(jlSoundT *sound) {
|
||||||
|
(void)sound;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_STNFREE
|
||||||
|
void jlStnFree(jlStnT *stn) {
|
||||||
|
if (stn != NULL) {
|
||||||
|
jlFree(stn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_STNLOAD
|
||||||
bool _jlStnLoad(jlStnT **stn, char *filename) {
|
bool _jlStnLoad(jlStnT **stn, char *filename) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
jlStnT *s = NULL;
|
jlStnT *s = NULL;
|
||||||
|
@ -532,14 +899,10 @@ bool _jlStnLoad(jlStnT **stn, char *filename) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void jlStnFree(jlStnT *stn) {
|
#ifndef JL_HAS_UTILDIE
|
||||||
if (stn != NULL) {
|
|
||||||
jlFree(stn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((__format__ (__printf__, 1, 0)))
|
__attribute__((__format__ (__printf__, 1, 0)))
|
||||||
void jlUtilDie(const char *why, ...) {
|
void jlUtilDie(const char *why, ...) {
|
||||||
#ifdef JOEY_DEBUG
|
#ifdef JOEY_DEBUG
|
||||||
|
@ -575,8 +938,105 @@ void jlUtilDie(const char *why, ...) {
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILIDLE
|
||||||
|
void jlUtilIdle(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILINPUTREAD
|
||||||
|
bool jlUtilInputRead(byte *key) {
|
||||||
|
|
||||||
|
static bool debounceController = false;
|
||||||
|
|
||||||
|
*key = 0;
|
||||||
|
|
||||||
|
// Keyboard
|
||||||
|
if (jlKeyPressed()) {
|
||||||
|
while (jlKeyPressed()) {
|
||||||
|
*key = jlKeyRead();
|
||||||
|
}
|
||||||
|
switch (*key) {
|
||||||
|
// Up
|
||||||
|
case 'I':
|
||||||
|
case 'i':
|
||||||
|
case 'W':
|
||||||
|
case 'w':
|
||||||
|
case '8':
|
||||||
|
*key = JOEY_INPUT_UP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Left
|
||||||
|
case 'J':
|
||||||
|
case 'j':
|
||||||
|
case 'A':
|
||||||
|
case 'a':
|
||||||
|
case '4':
|
||||||
|
*key = JOEY_INPUT_LEFT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Right
|
||||||
|
case 'K':
|
||||||
|
case 'k':
|
||||||
|
case 'D':
|
||||||
|
case 'd':
|
||||||
|
case '6':
|
||||||
|
*key = JOEY_INPUT_RIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Down
|
||||||
|
case 'M':
|
||||||
|
case 'm':
|
||||||
|
case 'S':
|
||||||
|
case 's':
|
||||||
|
case '2':
|
||||||
|
*key = JOEY_INPUT_DOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Primary
|
||||||
|
case 13:
|
||||||
|
*key = JOEY_INPUT_PRIMARY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Secondary
|
||||||
|
case 27:
|
||||||
|
*key = JOEY_INPUT_SECONDARY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Joystick
|
||||||
|
if (jlGameGetAxis(0) < -50) *key = JOEY_INPUT_LEFT;
|
||||||
|
if (jlGameGetAxis(0) > 50) *key = JOEY_INPUT_RIGHT;
|
||||||
|
if (jlGameGetAxis(1) < -50) *key = JOEY_INPUT_UP;
|
||||||
|
if (jlGameGetAxis(1) > 50) *key = JOEY_INPUT_DOWN;
|
||||||
|
if (jlGameGetButton(0)) *key = JOEY_INPUT_PRIMARY;
|
||||||
|
if (jlGameGetButton(1)) *key = JOEY_INPUT_SECONDARY;
|
||||||
|
|
||||||
|
// Debounce Joystick Input
|
||||||
|
if (debounceController) {
|
||||||
|
*key = 0;
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (*key != 0) {
|
||||||
|
debounceController = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debounceController = false;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILMAKEPATHNAME
|
||||||
char *jlUtilMakePathname(char *filename, char *extension) {
|
char *jlUtilMakePathname(char *filename, char *extension) {
|
||||||
char temp[2];
|
char temp[2];
|
||||||
|
|
||||||
|
@ -594,24 +1054,60 @@ char *jlUtilMakePathname(char *filename, char *extension) {
|
||||||
|
|
||||||
return _jlTempString;
|
return _jlTempString;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILMUSTEXIT
|
||||||
|
bool jlUtilMustExit(void) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILNIBBLESWAP
|
||||||
|
void jlUtilNibbleSwap(byte *mem, jint16 count, byte old, byte new) {
|
||||||
|
int x;
|
||||||
|
jlPixelPairT *b;
|
||||||
|
for (x=0; x<count; x++) {
|
||||||
|
b = (jlPixelPairT *)&mem[x];
|
||||||
|
if (b->l == old) b->l = new;
|
||||||
|
if (b->r == old) b->r = new;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILRANDOM
|
||||||
juint16 jlUtilRandom(void) {
|
juint16 jlUtilRandom(void) {
|
||||||
_jlSeed = _jlSeed * 1103515245 + 12345;
|
_jlSeed = _jlSeed * 1103515245 + 12345;
|
||||||
return _jlSeed / 65536;
|
return _jlSeed / 65536;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILRANDOMSEEDGET
|
||||||
juint32 jlUtilRandomSeedGet(void) {
|
juint32 jlUtilRandomSeedGet(void) {
|
||||||
return _jlSeed;
|
return _jlSeed;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILRANDOMSEEDSET
|
||||||
void jlUtilRandomSeedSet(juint32 seed) {
|
void jlUtilRandomSeedSet(juint32 seed) {
|
||||||
_jlSeed = seed;
|
_jlSeed = seed;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILSHUTDOWN
|
||||||
|
__attribute__((noreturn))
|
||||||
|
void jlUtilShutdown(void) {
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILSLEEP
|
||||||
void jlUtilSleep(juint16 sixtieths) {
|
void jlUtilSleep(juint16 sixtieths) {
|
||||||
juint16 t = jlUtilTimer();
|
juint16 t = jlUtilTimer();
|
||||||
juint16 d = 0;
|
juint16 d = 0;
|
||||||
|
@ -620,8 +1116,10 @@ void jlUtilSleep(juint16 sixtieths) {
|
||||||
d = jlUtilTimeSpan(t, jlUtilTimer());
|
d = jlUtilTimeSpan(t, jlUtilTimer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILSTACKPOP
|
||||||
void *_jlUtilStackPop(jlStackT **stack) {
|
void *_jlUtilStackPop(jlStackT **stack) {
|
||||||
void *d = NULL;
|
void *d = NULL;
|
||||||
jlStackT *s;
|
jlStackT *s;
|
||||||
|
@ -633,8 +1131,10 @@ void *_jlUtilStackPop(jlStackT **stack) {
|
||||||
}
|
}
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILSTACKPUSH
|
||||||
void _jlUtilStackPush(jlStackT **stack, void *data) {
|
void _jlUtilStackPush(jlStackT **stack, void *data) {
|
||||||
jlStackT *s = NULL;
|
jlStackT *s = NULL;
|
||||||
s = (jlStackT *)jlMalloc(sizeof(jlStackT));
|
s = (jlStackT *)jlMalloc(sizeof(jlStackT));
|
||||||
|
@ -642,8 +1142,24 @@ void _jlUtilStackPush(jlStackT **stack, void *data) {
|
||||||
s->data = data;
|
s->data = data;
|
||||||
*stack = s;
|
*stack = s;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILSTARTUP
|
||||||
|
void jlUtilStartup(char *appTitle) {
|
||||||
|
(void)appTitle;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILTIMER
|
||||||
|
juint16 jlUtilTimer(void) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_UTILTIMESPAN
|
||||||
juint16 jlUtilTimeSpan(juint16 past, juint16 current) {
|
juint16 jlUtilTimeSpan(juint16 past, juint16 current) {
|
||||||
jint32 temp = current - past;
|
jint32 temp = current - past;
|
||||||
if (temp < 0) {
|
if (temp < 0) {
|
||||||
|
@ -651,8 +1167,10 @@ juint16 jlUtilTimeSpan(juint16 past, juint16 current) {
|
||||||
}
|
}
|
||||||
return (juint16)temp;
|
return (juint16)temp;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_VECDISPLAY
|
||||||
void jlVecDisplay(jlVecT *vec, jint16 ox, jint16 oy) {
|
void jlVecDisplay(jlVecT *vec, jint16 ox, jint16 oy) {
|
||||||
jint16 command;
|
jint16 command;
|
||||||
jint16 count;
|
jint16 count;
|
||||||
|
@ -767,16 +1285,20 @@ void jlVecDisplay(jlVecT *vec, jint16 ox, jint16 oy) {
|
||||||
} // switch
|
} // switch
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_VECFREE
|
||||||
void jlVecFree(jlVecT *vec) {
|
void jlVecFree(jlVecT *vec) {
|
||||||
if (vec != NULL) {
|
if (vec != NULL) {
|
||||||
jlFree(vec->data);
|
jlFree(vec->data);
|
||||||
jlFree(vec);
|
jlFree(vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef JL_HAS_VECLOAD
|
||||||
bool _jlVecLoad(jlVecT **vec, char *filename) {
|
bool _jlVecLoad(jlVecT **vec, char *filename) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
jlVecT *v = NULL;
|
jlVecT *v = NULL;
|
||||||
|
@ -818,3 +1340,4 @@ bool _jlVecLoad(jlVecT **vec, char *filename) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -51,6 +51,14 @@ typedef unsigned char byte;
|
||||||
|
|
||||||
#define JOEY_DISPLAY (byte *)NULL
|
#define JOEY_DISPLAY (byte *)NULL
|
||||||
|
|
||||||
|
#define JOEY_INPUT_NONE 0
|
||||||
|
#define JOEY_INPUT_UP 1
|
||||||
|
#define JOEY_INPUT_DOWN 2
|
||||||
|
#define JOEY_INPUT_LEFT 3
|
||||||
|
#define JOEY_INPUT_RIGHT 4
|
||||||
|
#define JOEY_INPUT_PRIMARY 5
|
||||||
|
#define JOEY_INPUT_SECONDARY 6
|
||||||
|
|
||||||
|
|
||||||
// Determine platform and settings
|
// Determine platform and settings
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
@ -67,6 +75,37 @@ typedef unsigned short juint16;
|
||||||
typedef int jint32;
|
typedef int jint32;
|
||||||
typedef unsigned int juint32;
|
typedef unsigned int juint32;
|
||||||
|
|
||||||
|
#define JL_HAS_DISPLAYPRESENT
|
||||||
|
#define JL_HAS_DRAWBLIT8X8
|
||||||
|
#define JL_HAS_DRAWBLIT8X8A
|
||||||
|
#define JL_HAS_DRAWCLEAR
|
||||||
|
#define JL_HAS_DRAWPIXELGET
|
||||||
|
#define JL_HAS_DRAWPIXELSET
|
||||||
|
#define JL_HAS_DRAWSURFACEGET
|
||||||
|
#define JL_HAS_DRAWSURFACESET
|
||||||
|
#define JL_HAS_GAMEGETAXIS
|
||||||
|
#define JL_HAS_GAMEGETBUTTON
|
||||||
|
#define JL_HAS_IMGCREATE
|
||||||
|
#define JL_HAS_IMGDISPLAY
|
||||||
|
#define JL_HAS_KEYPRESSED
|
||||||
|
#define JL_HAS_KEYREAD
|
||||||
|
#define JL_HAS_PALETTESET
|
||||||
|
#define JL_HAS_PALETTESETFROMIMG
|
||||||
|
#define JL_HAS_SOUNDFREE
|
||||||
|
#define JL_HAS_SOUNDISPLAYING
|
||||||
|
#define JL_HAS_SOUNDLOAD
|
||||||
|
#define JL_HAS_SOUNDMODCONTINUE
|
||||||
|
#define JL_HAS_SOUNDMODISPLAYING
|
||||||
|
#define JL_HAS_SOUNDMODPAUSE
|
||||||
|
#define JL_HAS_SOUNDMODPLAY
|
||||||
|
#define JL_HAS_SOUNDMODSTOP
|
||||||
|
#define JL_HAS_SOUNDPLAY
|
||||||
|
#define JL_HAS_UTILIDLE
|
||||||
|
#define JL_HAS_UTILMUSTEXIT
|
||||||
|
#define JL_HAS_UTILSHUTDOWN
|
||||||
|
#define JL_HAS_UTILSTARTUP
|
||||||
|
#define JL_HAS_UTILTIMER
|
||||||
|
|
||||||
#elif _WIN32
|
#elif _WIN32
|
||||||
|
|
||||||
#define JOEY_WINDOWS
|
#define JOEY_WINDOWS
|
||||||
|
@ -78,6 +117,37 @@ typedef unsigned short juint16;
|
||||||
typedef int jint32;
|
typedef int jint32;
|
||||||
typedef unsigned int juint32;
|
typedef unsigned int juint32;
|
||||||
|
|
||||||
|
#define JL_HAS_DISPLAYPRESENT
|
||||||
|
#define JL_HAS_DRAWBLIT8X8
|
||||||
|
#define JL_HAS_DRAWBLIT8X8A
|
||||||
|
#define JL_HAS_DRAWCLEAR
|
||||||
|
#define JL_HAS_DRAWPIXELGET
|
||||||
|
#define JL_HAS_DRAWPIXELSET
|
||||||
|
#define JL_HAS_DRAWSURFACEGET
|
||||||
|
#define JL_HAS_DRAWSURFACESET
|
||||||
|
#define JL_HAS_GAMEGETAXIS
|
||||||
|
#define JL_HAS_GAMEGETBUTTON
|
||||||
|
#define JL_HAS_IMGCREATE
|
||||||
|
#define JL_HAS_IMGDISPLAY
|
||||||
|
#define JL_HAS_KEYPRESSED
|
||||||
|
#define JL_HAS_KEYREAD
|
||||||
|
#define JL_HAS_PALETTESET
|
||||||
|
#define JL_HAS_PALETTESETFROMIMG
|
||||||
|
#define JL_HAS_SOUNDFREE
|
||||||
|
#define JL_HAS_SOUNDISPLAYING
|
||||||
|
#define JL_HAS_SOUNDLOAD
|
||||||
|
#define JL_HAS_SOUNDMODCONTINUE
|
||||||
|
#define JL_HAS_SOUNDMODISPLAYING
|
||||||
|
#define JL_HAS_SOUNDMODPAUSE
|
||||||
|
#define JL_HAS_SOUNDMODPLAY
|
||||||
|
#define JL_HAS_SOUNDMODSTOP
|
||||||
|
#define JL_HAS_SOUNDPLAY
|
||||||
|
#define JL_HAS_UTILIDLE
|
||||||
|
#define JL_HAS_UTILMUSTEXIT
|
||||||
|
#define JL_HAS_UTILSHUTDOWN
|
||||||
|
#define JL_HAS_UTILSTARTUP
|
||||||
|
#define JL_HAS_UTILTIMER
|
||||||
|
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
|
|
||||||
#define JOEY_MACOS
|
#define JOEY_MACOS
|
||||||
|
@ -89,6 +159,37 @@ typedef unsigned short juint16;
|
||||||
typedef int jint32;
|
typedef int jint32;
|
||||||
typedef unsigned int juint32;
|
typedef unsigned int juint32;
|
||||||
|
|
||||||
|
#define JL_HAS_DISPLAYPRESENT
|
||||||
|
#define JL_HAS_DRAWBLIT8X8
|
||||||
|
#define JL_HAS_DRAWBLIT8X8A
|
||||||
|
#define JL_HAS_DRAWCLEAR
|
||||||
|
#define JL_HAS_DRAWPIXELGET
|
||||||
|
#define JL_HAS_DRAWPIXELSET
|
||||||
|
#define JL_HAS_DRAWSURFACEGET
|
||||||
|
#define JL_HAS_DRAWSURFACESET
|
||||||
|
#define JL_HAS_GAMEGETAXIS
|
||||||
|
#define JL_HAS_GAMEGETBUTTON
|
||||||
|
#define JL_HAS_IMGCREATE
|
||||||
|
#define JL_HAS_IMGDISPLAY
|
||||||
|
#define JL_HAS_KEYPRESSED
|
||||||
|
#define JL_HAS_KEYREAD
|
||||||
|
#define JL_HAS_PALETTESET
|
||||||
|
#define JL_HAS_PALETTESETFROMIMG
|
||||||
|
#define JL_HAS_SOUNDFREE
|
||||||
|
#define JL_HAS_SOUNDISPLAYING
|
||||||
|
#define JL_HAS_SOUNDLOAD
|
||||||
|
#define JL_HAS_SOUNDMODCONTINUE
|
||||||
|
#define JL_HAS_SOUNDMODISPLAYING
|
||||||
|
#define JL_HAS_SOUNDMODPAUSE
|
||||||
|
#define JL_HAS_SOUNDMODPLAY
|
||||||
|
#define JL_HAS_SOUNDMODSTOP
|
||||||
|
#define JL_HAS_SOUNDPLAY
|
||||||
|
#define JL_HAS_UTILIDLE
|
||||||
|
#define JL_HAS_UTILMUSTEXIT
|
||||||
|
#define JL_HAS_UTILSHUTDOWN
|
||||||
|
#define JL_HAS_UTILSTARTUP
|
||||||
|
#define JL_HAS_UTILTIMER
|
||||||
|
|
||||||
#elif __ORCAC__
|
#elif __ORCAC__
|
||||||
|
|
||||||
#define JOEY_IIGS
|
#define JOEY_IIGS
|
||||||
|
@ -107,6 +208,35 @@ typedef unsigned long juint32;
|
||||||
#pragma lint -1
|
#pragma lint -1
|
||||||
#pragma debug 0
|
#pragma debug 0
|
||||||
|
|
||||||
|
#define JL_HAS_DISPLAYBORDER
|
||||||
|
#define JL_HAS_DISPLAYPRESENT
|
||||||
|
#define JL_HAS_DRAWBLIT8X8
|
||||||
|
#define JL_HAS_DRAWBLIT8X8A
|
||||||
|
#define JL_HAS_DRAWBLITMAP
|
||||||
|
#define JL_HAS_DRAWPIXELGET
|
||||||
|
#define JL_HAS_DRAWPIXELSET
|
||||||
|
#define JL_HAS_DRAWLINE
|
||||||
|
#define JL_HAS_DRAWCLEAR
|
||||||
|
#define JL_HAS_DRAWSURFACEGET
|
||||||
|
#define JL_HAS_DRAWSURFACESET
|
||||||
|
#define JL_HAS_GAMEGETAXIS
|
||||||
|
#define JL_HAS_GAMEGETBUTTON
|
||||||
|
#define JL_HAS_IMGCREATE
|
||||||
|
#define JL_HAS_IMGDISPLAY
|
||||||
|
#define JL_HAS_KEYPRESSED
|
||||||
|
#define JL_HAS_KEYREAD
|
||||||
|
#define JL_HAS_PALETTESET
|
||||||
|
#define JL_HAS_PALETTESETFROMIMG
|
||||||
|
#define JL_HAS_SOUNDMODCONTINUE
|
||||||
|
#define JL_HAS_SOUNDMODISPLAYING
|
||||||
|
#define JL_HAS_SOUNDMODPAUSE
|
||||||
|
#define JL_HAS_SOUNDMODPLAY
|
||||||
|
#define JL_HAS_SOUNDMODSTOP
|
||||||
|
#define JL_HAS_UTILNIBBLESWAP
|
||||||
|
#define JL_HAS_UTILSHUTDOWN
|
||||||
|
#define JL_HAS_UTILSTARTUP
|
||||||
|
#define JL_HAS_UTILTIMER
|
||||||
|
|
||||||
#elif AMIGA
|
#elif AMIGA
|
||||||
|
|
||||||
#define JOEY_AMIGA
|
#define JOEY_AMIGA
|
||||||
|
@ -302,6 +432,7 @@ bool _jlStnLoad(jlStnT **stn, char *filename);
|
||||||
#define jlUtilByteSwap(twoBytes) ((juint16)((twoBytes) & 0xff) >> 8) | (juint16)((twoBytes) << 8)
|
#define jlUtilByteSwap(twoBytes) ((juint16)((twoBytes) & 0xff) >> 8) | (juint16)((twoBytes) << 8)
|
||||||
void jlUtilDie(const char *why, ...) __attribute__((noreturn));
|
void jlUtilDie(const char *why, ...) __attribute__((noreturn));
|
||||||
void jlUtilIdle(void);
|
void jlUtilIdle(void);
|
||||||
|
bool jlUtilInputRead(byte *key);
|
||||||
#define jlUtilIsOdd(x) (((x & 1) == 1) ? true : false)
|
#define jlUtilIsOdd(x) (((x & 1) == 1) ? true : false)
|
||||||
char *jlUtilMakePathname(char *filename, char *extension);
|
char *jlUtilMakePathname(char *filename, char *extension);
|
||||||
bool jlUtilMustExit(void);
|
bool jlUtilMustExit(void);
|
||||||
|
|
|
@ -319,13 +319,14 @@ void musicTest(void) {
|
||||||
|
|
||||||
void showStencil(void) {
|
void showStencil(void) {
|
||||||
jlStnT *stencil = NULL;
|
jlStnT *stencil = NULL;
|
||||||
jint16 y;
|
juint16 y;
|
||||||
jint16 x;
|
juint16 x;
|
||||||
|
juint16 temp;
|
||||||
jint16 count;
|
jint16 count;
|
||||||
juint16 index;
|
jint16 index;
|
||||||
byte bit;
|
byte bit;
|
||||||
|
|
||||||
if (!jlStnLoad(stencil, "font")) jlUtilDie("Unable to load font.stn!");
|
if (!jlStnLoad(stencil, "biff")) jlUtilDie("Unable to load biff.stn!");
|
||||||
|
|
||||||
jlDrawColorSet(0);
|
jlDrawColorSet(0);
|
||||||
jlDrawClear();
|
jlDrawClear();
|
||||||
|
@ -354,12 +355,12 @@ void showStencil(void) {
|
||||||
jlDrawClear();
|
jlDrawClear();
|
||||||
jlDrawColorSet(15);
|
jlDrawColorSet(15);
|
||||||
|
|
||||||
// Draw stencil by pixel location - this fails on the IIgs
|
// Draw stencil by pixel location
|
||||||
for (y=0; y<200; y++) {
|
for (y=0; y<200; y++) {
|
||||||
for (x=0; x<320; x++) {
|
for (x=0; x<320; x++) {
|
||||||
index = (y * 320 + x);
|
temp = (y * 320 + x);
|
||||||
count = 7 - (index % 8);
|
count = 7 - (temp % 8);
|
||||||
index /= 8;
|
index = temp / 8;
|
||||||
bit = stencil->pixels[index];
|
bit = stencil->pixels[index];
|
||||||
if (bit & (1 << count)) {
|
if (bit & (1 << count)) {
|
||||||
jlDrawPixelSet(x, y);
|
jlDrawPixelSet(x, y);
|
||||||
|
@ -382,8 +383,8 @@ void stencilTest(void) {
|
||||||
jint16 j;
|
jint16 j;
|
||||||
|
|
||||||
if (!jlImgLoad(kangaI, "kanga")) jlUtilDie("Unable to load kanga.img!");
|
if (!jlImgLoad(kangaI, "kanga")) jlUtilDie("Unable to load kanga.img!");
|
||||||
if (!jlImgLoad(biffI, "biff")) jlUtilDie("Unable to load biff.img!");
|
if (!jlImgLoad(biffI, "biff")) jlUtilDie("Unable to load biff.img!");
|
||||||
if (!jlStnLoad(biffS, "biff")) jlUtilDie("Unable to load biff.stn!");
|
if (!jlStnLoad(biffS, "biff")) jlUtilDie("Unable to load biff.stn!");
|
||||||
|
|
||||||
jlImgDisplay(kangaI);
|
jlImgDisplay(kangaI);
|
||||||
|
|
||||||
|
@ -391,12 +392,9 @@ void stencilTest(void) {
|
||||||
|
|
||||||
while (!jlKeyPressed()) {
|
while (!jlKeyPressed()) {
|
||||||
// Draw Biff & grab background
|
// Draw Biff & grab background
|
||||||
for (x=0; x<319-32; x++) {
|
for (x=0; x<319-32; x+=2) {
|
||||||
for (i=0; i<3; i++) {
|
for (i=0; i<3; i++) {
|
||||||
for (j=0; j<4; j++) {
|
for (j=0; j<4; j++) {
|
||||||
jlDrawSurfaceSet(jlImgSurfaceGet(biffI));
|
|
||||||
jlDrawBlit8x8(JOEY_DISPLAY, x + (j * 8), y + (i * 8), j * 8 + 32, i * 8 + 32);
|
|
||||||
jlDrawSurfaceSet(JOEY_DISPLAY);
|
|
||||||
jlDrawBlit8x8a(jlImgSurfaceGet(biffI), biffS, j * 8, i * 8, x + (j * 8), y + (i * 8));
|
jlDrawBlit8x8a(jlImgSurfaceGet(biffI), biffS, j * 8, i * 8, x + (j * 8), y + (i * 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -404,7 +402,7 @@ void stencilTest(void) {
|
||||||
// Erase Biff
|
// Erase Biff
|
||||||
for (i=0; i<3; i++) {
|
for (i=0; i<3; i++) {
|
||||||
for (j=0; j<4; j++) {
|
for (j=0; j<4; j++) {
|
||||||
jlDrawBlit8x8(jlImgSurfaceGet(biffI), j * 8 + 32, i * 8 + 32, x + (j * 8), y + (i * 8));
|
jlDrawBlit8x8(jlImgSurfaceGet(kangaI), x + (j * 8), y + (i * 8), x + (j * 8), y + (i * 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check for early quit
|
// Check for early quit
|
||||||
|
@ -447,8 +445,8 @@ int main(void) {
|
||||||
//grid();
|
//grid();
|
||||||
//lineTest();
|
//lineTest();
|
||||||
//musicTest();
|
//musicTest();
|
||||||
//showStencil();
|
showStencil();
|
||||||
stencilTest();
|
//stencilTest();
|
||||||
//timerTest();
|
//timerTest();
|
||||||
|
|
||||||
jlUtilShutdown();
|
jlUtilShutdown();
|
||||||
|
|
Loading…
Add table
Reference in a new issue