--- deliantra/Deliantra-Client/Client.xs 2012/01/07 15:24:41 1.313 +++ deliantra/Deliantra-Client/Client.xs 2018/11/18 01:00:10 1.320 @@ -50,7 +50,7 @@ #define PANGO_ENABLE_BACKEND #define G_DISABLE_CAST_CHECKS -#include +#include #include @@ -186,7 +186,7 @@ while (attrs) { - PangoAttribute *attr = attrs->data; + PangoAttribute *attr = (PangoAttribute *)attrs->data; if (attr->klass->type == PANGO_ATTR_SHAPE) return 1; @@ -214,7 +214,7 @@ { FcPatternAddBool (pattern, FC_HINTING, 1); #ifdef FC_HINT_STYLE - FcPatternAddBool (pattern, FC_HINT_STYLE, FC_HINT_FULL); + FcPatternAddInteger (pattern, FC_HINT_STYLE, FC_HINT_FULL); #endif FcPatternAddBool (pattern, FC_AUTOHINT, 0); } @@ -579,13 +579,17 @@ } static void -deliantra_main () +deliantra_main (SV *real_main) { - char *argv[] = { 0 }; - call_argv ("DC::Main::main", G_DISCARD | G_VOID, argv); + dSP; + + PUSHMARK (SP); + call_sv (real_main, G_DISCARD | G_VOID); } #ifdef __MACOSX__ + static SV *real_main; + /* to due surprising braindamage on the side of SDL design, we * do some mind-boggling hack here: SDL requires a custom main() * on OS X, so... we provide one and call the original main(), which, @@ -595,7 +599,7 @@ extern C_LINKAGE int main (int argc, char *argv[]) { - deliantra_main (); + deliantra_main (real_main); } #undef main @@ -603,16 +607,18 @@ extern C_LINKAGE int main (int argc, char *argv[]); static void - SDL_braino (void) + SDL_main_hack (SV *real_main_) { + real_main = real_main_; + char *argv[] = { "deliantra client", 0 }; (main) (1, argv); } #else static void - SDL_braino (void) + SDL_main_hack (SV *real_main) { - deliantra_main (); + deliantra_main (real_main); } #endif @@ -873,7 +879,8 @@ char *SDL_GetError () -void SDL_braino () +void SDL_main_hack (SV *real_main) + PROTOTYPE: & int SDL_Init (U32 flags) @@ -884,10 +891,11 @@ void SDL_Quit () int SDL_GL_SetAttribute (int attr, int value) + C_ARGS: (SDL_GLattr)attr, value int SDL_GL_GetAttribute (int attr) CODE: - if (SDL_GL_GetAttribute (attr, &RETVAL)) + if (SDL_GL_GetAttribute ((SDL_GLattr)attr, &RETVAL)) XSRETURN_UNDEF; OUTPUT: RETVAL @@ -970,6 +978,7 @@ char * SDL_GetKeyName (int sym) + C_ARGS: (SDLKey)sym int SDL_GetAppState () @@ -1207,7 +1216,7 @@ EXTEND (SP, 6); PUSHs (sv_2mortal (newSViv (surface2->w))); PUSHs (sv_2mortal (newSViv (surface2->h))); - PUSHs (sv_2mortal (newSVpvn (surface2->pixels, surface2->h * surface2->pitch))); + PUSHs (sv_2mortal (newSVpvn ((const char *)surface2->pixels, surface2->h * surface2->pitch))); PUSHs (sv_2mortal (newSViv (surface->flags & (SDL_SRCCOLORKEY | SDL_SRCALPHA) ? GL_RGBA : GL_RGB))); PUSHs (sv_2mortal (newSViv (GL_RGBA))); PUSHs (sv_2mortal (newSViv (GL_UNSIGNED_BYTE))); @@ -1289,7 +1298,7 @@ PROTOTYPES: DISABLE DC::Font -new_from_file (SV *class, char *path, int id = 0) +new_from_file (SV *klass, char *path, int id = 0) CODE: { int count; @@ -1328,7 +1337,7 @@ tc_restore (); DC::Layout -new (SV *class) +new (SV *klass) CODE: New (0, RETVAL, 1, struct cf_layout); @@ -1487,7 +1496,7 @@ set_height (DC::Layout self, int base_height) CODE: if (self->base_height != base_height) - { + { self->base_height = base_height; layout_update_font (self); } @@ -1861,7 +1870,7 @@ PROTOTYPES: DISABLE DC::Map -new (SV *class) +new (SV *klass) CODE: New (0, RETVAL, 1, struct map); RETVAL->x = 0; @@ -2027,7 +2036,7 @@ } SV * -map1a_update (DC::Map self, SV *data_, int extmap) +map1a_update (DC::Map self, SV *data_) CODE: { uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_); @@ -2058,44 +2067,39 @@ if (flags & 8) { - if (extmap) + uint8_t ext, cmd; + + do { - uint8_t ext, cmd; + ext = *data++; + cmd = ext & 0x7f; - do + if (cmd < 4) + cell->darkness = 255 - ext * 64 + 1; /* make sure this doesn't collide with FOW_DARKNESS */ + else if (cmd == 5) // health { - ext = *data++; - cmd = ext & 0x7f; - - if (cmd < 4) - cell->darkness = 255 - ext * 64 + 1; /* make sure this doesn't collide with FOW_DARKNESS */ - else if (cmd == 5) // health - { - cell->stat_width = 1; - cell->stat_hp = *data++; - } - else if (cmd == 6) // monster width - cell->stat_width = *data++ + 1; - else if (cmd == 0x47) - { - if (*data == 1) cell->player = data [1]; - else if (*data == 2) cell->player = data [2] + (data [1] << 8); - else if (*data == 3) cell->player = data [3] + (data [2] << 8) + (data [1] << 16); - else if (*data == 4) cell->player = data [4] + (data [3] << 8) + (data [2] << 16) + (data [1] << 24); + cell->stat_width = 1; + cell->stat_hp = *data++; + } + else if (cmd == 6) // monster width + cell->stat_width = *data++ + 1; + else if (cmd == 0x47) + { + if (*data == 1) cell->player = data [1]; + else if (*data == 2) cell->player = data [2] + (data [1] << 8); + else if (*data == 3) cell->player = data [3] + (data [2] << 8) + (data [1] << 16); + else if (*data == 4) cell->player = data [4] + (data [3] << 8) + (data [2] << 16) + (data [1] << 24); - data += *data + 1; - } - else if (cmd == 8) // cell flags - cell->flags = *data++; - else if (ext & 0x40) // unknown, multibyte => skip - data += *data + 1; - else - data++; + data += *data + 1; } - while (ext & 0x80); + else if (cmd == 8) // cell flags + cell->flags = *data++; + else if (ext & 0x40) // unknown, multibyte => skip + data += *data + 1; + else + data++; } - else - cell->darkness = *data++ + 1; + while (ext & 0x80); } for (z = 0; z <= 2; ++z) @@ -2742,7 +2746,7 @@ len = SvLEN (data_sv); SvGROW (data_sv, len + 8); // reserve at least 7+ bytes more - data = SvPVbyte_nolen (data_sv); + data = (uint8_t *)SvPVbyte_nolen (data_sv); end = data + len + 8; if (len < 5) @@ -2813,7 +2817,7 @@ MODULE = Deliantra::Client PACKAGE = DC::RW DC::RW -new (SV *class, SV *data_sv) +new (SV *klass, SV *data_sv) CODE: { STRLEN datalen; @@ -2825,7 +2829,7 @@ RETVAL DC::RW -new_from_file (SV *class, const char *path, const char *mode = "rb") +new_from_file (SV *klass, const char *path, const char *mode = "rb") CODE: RETVAL = SDL_RWFromFile (path, mode); OUTPUT: @@ -2944,7 +2948,7 @@ #endif DC::MixChunk -new (SV *class, DC::RW rwops) +new (SV *klass, DC::RW rwops) CODE: RETVAL = Mix_LoadWAV_RW (rwops, 1); OUTPUT: @@ -3024,7 +3028,7 @@ RETVAL DC::MixMusic -new (SV *class, DC::RW rwops) +new (SV *klass, DC::RW rwops) CODE: RETVAL = Mix_LoadMUS_RW (rwops); OUTPUT: @@ -3187,28 +3191,32 @@ void apple_nvidia_bug (int enable) -char * +const char * gl_vendor () CODE: - RETVAL = (char *)glGetString (GL_VENDOR); + RETVAL = (const char *)glGetString (GL_VENDOR); OUTPUT: RETVAL -char * +const char * gl_version () CODE: - RETVAL = (char *)glGetString (GL_VERSION); + RETVAL = (const char *)glGetString (GL_VERSION); OUTPUT: RETVAL -char * +const char * gl_extensions () CODE: - RETVAL = (char *)glGetString (GL_EXTENSIONS); + RETVAL = (const char *)glGetString (GL_EXTENSIONS); OUTPUT: RETVAL const char *glGetString (GLenum pname) + CODE: + RETVAL = (const char *)glGetString (pname); + OUTPUT: + RETVAL GLint glGetInteger (GLenum pname) CODE: