ref: 19bf783384014d10101e97fe81d2c83a9b30f408
parent: 6826682f43d94f27117a8570c4fc058ede9c236a
author: Jacob Moody <moody@posixcafe.org>
date: Sun Feb 5 19:25:22 EST 2023
First set of Engine port work
--- a/Engine/src/cache.h
+++ b/Engine/src/cache.h
@@ -32,4 +32,4 @@
-#endif
\ No newline at end of file
+#endif
--- a/Engine/src/display.c
+++ b/Engine/src/display.c
@@ -99,7 +99,7 @@
* !!! titlebar caption. --ryan.
*/
static uint8_t screenalloctype = 255;
-static void init_new_res_vars()
+static void init_new_res_vars(void)
{
int i = 0;
int j = 0;
@@ -200,7 +200,8 @@
SDL_CHECK_NOT_NULL(window, "create window");
// don't override higher-res app icon on OS X or Windows
-#if !PLATFORM_MACOSX && !WIN32
+ // plan9 has no window icons
+#if !PLATFORM_MACOSX && !WIN32 && !defined(__plan9__)
SDL_Surface* image = SDL_LoadBMP_RW(SDL_RWFromMem(iconBMP, sizeof(iconBMP)), 1);
Uint32 colorkey = 0; // index in this image to be transparent
SDL_SetColorKey(image, SDL_TRUE, colorkey);
@@ -214,9 +215,11 @@
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_CHECK_NOT_NULL(renderer, "create renderer");
+#ifndef __plan9__
SDL_RendererInfo rendererInfo;
SDL_CHECK_SUCCESS(SDL_GetRendererInfo(renderer, &rendererInfo));
printf("SDL Renderer: '%s'.\n", rendererInfo.name);
+#endif
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");
//SDL_SetHint(SDL_HINT_RENDER_VSYNC, "1");
@@ -249,7 +252,7 @@
SDL_RenderPresent(renderer);
}
-static inline int sdl_mouse_button_filter(SDL_MouseButtonEvent const *event)
+static int sdl_mouse_button_filter(SDL_MouseButtonEvent *event)
{
/*
* What bits BUILD expects:
@@ -326,7 +329,7 @@
* which we check for explicitly, and give the engine a keypad enter
* enter event.
*/
-static inline int handle_keypad_enter_hack(const SDL_Event *event)
+static int handle_keypad_enter_hack(const SDL_Event *event)
{
static int kp_enter_hack = 0;
int retval = 0;
@@ -634,6 +637,8 @@
static void output_sdl_versions(void)
{
+/* FIXME plan9 */
+#ifndef __plan9__
SDL_version linked_ver;
SDL_GetVersion(&linked_ver);
@@ -643,6 +648,7 @@
printf("SDL Display driver for the BUILD engine initializing.\n");
printf("SDL Compiled %s against SDL version %d.%d.%d ...\n", __DATE__, compiled_ver.major, compiled_ver.minor, compiled_ver.patch);
printf("SDL Linked against SDL version %d.%d.%d ...\n", linked_ver.major, linked_ver.minor, linked_ver.patch);
+#endif
}
/* lousy -ansi flag. :) */
--- a/Engine/src/display.h
+++ b/Engine/src/display.h
@@ -95,7 +95,7 @@
/* resolution inits. sdl_driver.c ... */
int32_t _setgamemode(int32_t daxdim, int32_t daydim);
-uint32_t getticks();
+uint32_t getticks(void);
void drawline16(int32_t XStart, int32_t YStart, int32_t XEnd, int32_t YEnd, uint8_t Color);
void setcolor16(uint8_t color);
--- a/Engine/src/engine.c
+++ b/Engine/src/engine.c
@@ -1373,7 +1373,7 @@
if (d4 >= u4)
vlineasm4(d4-u4+1,ylookup[u4]+x+frameoffset);
- i = x+frameoffset+ylookup[d4+1];
+ i = (intptr_t)(x+frameoffset+ylookup[d4+1]);
if (y2ve[0] > d4)
prevlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],(uint8_t*) bufplce[0],(uint8_t*) i+0);
@@ -1505,7 +1505,7 @@
else
i <<= tileHeight;
- bufplce[z] = tiles[globalpicnum].data+i;
+ bufplce[z] = (intptr_t)(tiles[globalpicnum].data+i);
vince[z] = swal[dax]*globalyscale;
vplce[z] = globalzd + vince[z]*(y1ve[z]-globalhoriz+1);
@@ -1545,7 +1545,7 @@
if (d4 >= u4) mvlineasm4(d4-u4+1,ylookup[u4]+p);
- i = p+ylookup[d4+1];
+ i = (intptr_t)(p+ylookup[d4+1]);
if (y2ve[0] > d4) mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],(const uint8_t*)bufplce[0],(uint8_t*)i+0);
if (y2ve[1] > d4) mvlineasm1(vince[1],palookupoffse[1],y2ve[1]-d4-1,vplce[1],(const uint8_t*)bufplce[1],(uint8_t*)i+1);
if (y2ve[2] > d4) mvlineasm1(vince[2],palookupoffse[2],y2ve[2]-d4-1,vplce[2],(const uint8_t*)bufplce[2],(uint8_t*)i+2);
@@ -1869,7 +1869,7 @@
globvis = mulscale16(globvis,xdimscale);
j = (intptr_t) palookup[globalpal];
- setupslopevlin(((int32_t)(picsiz[globalpicnum]&15))+(((int32_t)(picsiz[globalpicnum]>>4))<<8),tiles[globalpicnum].data,-ylookup[1]);
+ setupslopevlin(((int32_t)(picsiz[globalpicnum]&15))+(((int32_t)(picsiz[globalpicnum]>>4))<<8),(intptr_t)(tiles[globalpicnum].data),-ylookup[1]);
l = (globalzd>>16);
@@ -1916,7 +1916,7 @@
globalx3 = (globalx2>>10);
globaly3 = (globaly2>>10);
asm3 = mulscale16(y2,globalzd) + (globalzx>>6);
- slopevlin(ylookup[y2]+x+frameoffset,krecipasm(asm3>>3),slopalookup,y2+(shoffs>>15),y2-y1+1,globalx1,globaly1);
+ slopevlin((intptr_t)(ylookup[y2]+x+frameoffset),krecipasm(asm3>>3),slopalookup,y2+(shoffs>>15),y2-y1+1,globalx1,globaly1);
if ((x&15) == 0) faketimerhandler();
}
@@ -3121,18 +3121,18 @@
i = lwall[x] + globalxpanning;
if (i >= tiles[globalpicnum].dim.width)
i %= tiles[globalpicnum].dim.width;
- bufplce[0] = tiles[globalpicnum].data+i*tiles[globalpicnum].dim.height;
+ bufplce[0] = (intptr_t)(tiles[globalpicnum].data+i*tiles[globalpicnum].dim.height);
i = lwall[x2] + globalxpanning;
if (i >= tiles[globalpicnum].dim.width)
i %= tiles[globalpicnum].dim.width;
- bufplce[1] = tiles[globalpicnum].data+i*tiles[globalpicnum].dim.height;
+ bufplce[1] = (intptr_t)(tiles[globalpicnum].data+i*tiles[globalpicnum].dim.height);
y1 = max(y1ve[0],y1ve[1]);
y2 = min(y2ve[0],y2ve[1]);
- i = x+frameoffset;
+ i = (intptr_t)(x+frameoffset);
if (y1ve[0] != y1ve[1])
{
@@ -3360,8 +3360,7 @@
#endif
if ((fil = open(filename,
- O_BINARY|O_TRUNC|O_CREAT|O_WRONLY,
- permissions)) == -1)
+ O_BINARY|O_TRUNC|O_CREAT|O_WRONLY)) == -1)
{
return(-1);
}
@@ -4021,7 +4020,7 @@
by += yv*(y1-oy);
oy = y1;
- bufplce[xx] = (bx>>16)*tileHeight+bufplc;
+ bufplce[xx] = (intptr_t)((bx>>16)*tileHeight+bufplc);
vplce[xx] = by;
y1ve[xx] = y1;
y2ve[xx] = y2-1;
@@ -4059,7 +4058,7 @@
if (d4 >= u4) vlineasm4(d4-u4+1,ylookup[u4]+p);
- i = p+ylookup[d4+1];
+ i = (intptr_t)(p+ylookup[d4+1]);
if (y2ve[0] > d4)
prevlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],(const uint8_t*)bufplce[0],(uint8_t*)i+0);
if (y2ve[1] > d4)
@@ -4087,7 +4086,7 @@
if (d4 >= u4) mvlineasm4(d4-u4+1,ylookup[u4]+p);
- i = p+ylookup[d4+1];
+ i = (intptr_t)(p+ylookup[d4+1]);
if (y2ve[0] > d4) mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],(const uint8_t*)bufplce[0],(uint8_t*)i+0);
if (y2ve[1] > d4) mvlineasm1(vince[1],palookupoffse[1],y2ve[1]-d4-1,vplce[1],(const uint8_t*)bufplce[1],(uint8_t*)i+1);
if (y2ve[2] > d4) mvlineasm1(vince[2],palookupoffse[2],y2ve[2]-d4-1,vplce[2],(const uint8_t*)bufplce[2],(uint8_t*)i+2);
@@ -4736,9 +4735,9 @@
int32_t x1, v, bx, by;
/*
- * x = x1 + (x2-x1)t + (y1-y2)u � x = 160v
- * y = y1 + (y2-y1)t + (x2-x1)u � y = (scrx-160)v
- * z = z1 = z2 � z = posz + (scry-horiz)v
+ * x = x1 + (x2-x1)t + (y1-y2)u � x = 160v
+ * y = y1 + (y2-y1)t + (x2-x1)u � y = (scrx-160)v
+ * z = z1 = z2 � z = posz + (scry-horiz)v
*/
x1 = lastx[y];
@@ -9100,7 +9099,7 @@
transarea += (mirrorsx2-mirrorsx1)*(windowy2-windowy1);
- p = frameplace+ylookup[windowy1+mirrorsy1]+windowx1+mirrorsx1;
+ p = (intptr_t)(frameplace+ylookup[windowy1+mirrorsy1]+windowx1+mirrorsx1);
i = windowx2-windowx1-mirrorsx2-mirrorsx1;
mirrorsx2 -= mirrorsx1;
// FIX_00085: Optimized Video driver. FPS increases by +20%.
--- a/Engine/src/filesystem.c
+++ b/Engine/src/filesystem.c
@@ -83,7 +83,7 @@
//groupfil_memory[numgroupfiles] = NULL; // addresses of raw GRP files in memory
//groupefil_crc32[numgroupfiles] = 0;
- archive->fileDescriptor = open(filename,O_BINARY|O_RDONLY,S_IREAD);
+ archive->fileDescriptor = open(filename,O_BINARY|O_RDONLY);
if (archive->fileDescriptor < 0){
printf("Error: Unable to open file %s.\n",filename);
@@ -422,6 +422,18 @@
struct stat stats;
fstat(fd, &stats);
return (int32_t )stats.st_size;
+}
+#endif
+
+#if defined(__plan9__)
+int32_t filelength(int32_t fd){
+ Dir *d;
+ int32_t len;
+
+ d = dirfstat(fd);
+ len = d->length;
+ free(d);
+ return len;
}
#endif
--- a/Engine/src/icon.h
+++ b/Engine/src/icon.h
@@ -162,4 +162,4 @@
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
\ No newline at end of file
+ };
--- /dev/null
+++ b/Engine/src/mkfile
@@ -1,0 +1,33 @@
+</$objtype/mkfile
+
+CFLAGS=-Fpw -I/sys/include/npe -I/sys/include/npe/SDL2 -D__plan9__ -D__${objtype}__
+LIB=libbuild.a
+
+OFILES=\
+ cache.$O \
+ display.$O \
+ draw.$O \
+ engine.$O \
+ filesystem.$O \
+ fixedPoint_math.$O \
+#TODO mmulti.$O \
+ tiles.$O \
+
+HFILES=\
+ build.h \
+ cache.h \
+ draw.h \
+ display.h \
+ engine.h \
+ filesystem.h \
+ fixedPoint_math.h \
+ icon.h \
+ macos_compat.h \
+ mmulti.h \
+ platform.h \
+ sdl_util.h \
+ tiles.h \
+ unix_compat.h \
+ win32_compat.h
+
+</sys/src/cmd/mksyslib
--- a/Engine/src/mmulti.h
+++ b/Engine/src/mmulti.h
@@ -14,4 +14,4 @@
void flushpackets(void);
void genericmultifunction(int32_t other, const uint8_t* bufptr, int32_t messleng, int32_t command);
-#endif
\ No newline at end of file
+#endif
--- /dev/null
+++ b/Engine/src/plan9_compat.h
@@ -1,0 +1,51 @@
+//
+// unix_compat.h
+// Duke3D
+//
+// Based on macos_compat.h
+// Copyright Wed, Jul 31, 2013, Juan Manuel Borges Caño (GPLv3+)
+//
+
+#ifndef Duke3D_plan9_compat_h
+#define Duke3D_plan9_compat_h
+
+//MOODY
+#define BYTE_ORDER LITTLE_ENDIAN
+
+#include <stdlib.h>
+
+#ifndef max
+#define max(x, y) (((x) > (y)) ? (x) : (y))
+#endif
+
+#ifndef min
+#define min(x, y) (((x) < (y)) ? (x) : (y))
+#endif
+
+#include <inttypes.h>
+
+#define O_BINARY 0
+
+
+/*
+#define SOL_IP SOL_SOCKET
+#define IP_RECVERR SO_BROADCAST
+*/
+
+#define stricmp strcasecmp
+#define strcmpi strcasecmp
+
+#define S_IREAD S_IRUSR
+#define O_CREAT OTRUNC
+#define O_WRONLY OWRITE
+#define O_RDONLY OREAD
+
+#define lseek seek
+
+#include <assert.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <string.h>
+
+#endif
--- a/Engine/src/platform.h
+++ b/Engine/src/platform.h
@@ -9,6 +9,8 @@
#include "unix_compat.h"
#elif (defined __APPLE__)
#include "macos_compat.h"
+#elif (defined __plan9__)
+ #include "plan9_compat.h"
#else
#error Define your platform!
#endif
--- a/Engine/src/tiles.c
+++ b/Engine/src/tiles.c
@@ -386,4 +386,4 @@
}
return(offs);
-}
\ No newline at end of file
+}