From: <ni...@us...> - 2009-11-19 08:02:07
|
Revision: 3082 http://desmume.svn.sourceforge.net/desmume/?rev=3082&view=rev Author: nitsuja Date: 2009-11-19 08:01:55 +0000 (Thu, 19 Nov 2009) Log Message: ----------- fix for sudden exit if passing bad arguments into a lua gui at a time when it must be deferred Modified Paths: -------------- trunk/desmume/src/lua-engine.cpp Modified: trunk/desmume/src/lua-engine.cpp =================================================================== --- trunk/desmume/src/lua-engine.cpp 2009-11-19 07:31:14 UTC (rev 3081) +++ trunk/desmume/src/lua-engine.cpp 2009-11-19 08:01:55 UTC (rev 3082) @@ -2928,12 +2928,13 @@ DEFINE_LUA_FUNCTION(gui_text, "x,y,str[,color=\"white\"[,outline=\"black\"]]") { + int x = luaL_checkinteger(L,1); // have to check for errors before deferring + int y = luaL_checkinteger(L,2); + if(DeferGUIFuncIfNeeded(L)) return 0; // we have to wait until later to call this function because we haven't emulated the next frame yet // (the only way to avoid this deferring is to be in a gui.register or emu.registerafter callback) - int x = luaL_checkinteger(L,1); - int y = luaL_checkinteger(L,2); const char* str = toCString(L,3); // better than using luaL_checkstring here (more permissive) if(str && *str) @@ -2952,13 +2953,14 @@ DEFINE_LUA_FUNCTION(gui_box, "x1,y1,x2,y2[,fill[,outline]]") { + int x1 = luaL_checkinteger(L,1); // have to check for errors before deferring + int y1 = luaL_checkinteger(L,2); + int x2 = luaL_checkinteger(L,3); + int y2 = luaL_checkinteger(L,4); + if(DeferGUIFuncIfNeeded(L)) return 0; - int x1 = luaL_checkinteger(L,1); - int y1 = luaL_checkinteger(L,2); - int x2 = luaL_checkinteger(L,3); - int y2 = luaL_checkinteger(L,4); int fillcolor = getcolor(L,5,0xFFFFFF3F); int outlinecolor = getcolor(L,6,fillcolor|0xFF); @@ -3028,11 +3030,12 @@ // or it can be a preset color like 'red', 'orange', 'blue', 'white', etc. DEFINE_LUA_FUNCTION(gui_pixel, "x,y[,color=\"white\"]") { + int x = luaL_checkinteger(L,1); // have to check for errors before deferring + int y = luaL_checkinteger(L,2); + if(DeferGUIFuncIfNeeded(L)) return 0; - int x = luaL_checkinteger(L,1); - int y = luaL_checkinteger(L,2); int color = getcolor(L,3,0xFFFFFFFF); if(color & 0xFF) { @@ -3065,13 +3068,14 @@ } DEFINE_LUA_FUNCTION(gui_line, "x1,y1,x2,y2[,color=\"white\"[,skipfirst=false]]") { + int x1 = luaL_checkinteger(L,1); // have to check for errors before deferring + int y1 = luaL_checkinteger(L,2); + int x2 = luaL_checkinteger(L,3); + int y2 = luaL_checkinteger(L,4); + if(DeferGUIFuncIfNeeded(L)) return 0; - int x1 = luaL_checkinteger(L,1); - int y1 = luaL_checkinteger(L,2); - int x2 = luaL_checkinteger(L,3); - int y2 = luaL_checkinteger(L,4); int color = getcolor(L,5,0xFFFFFFFF); int skipFirst = lua_toboolean(L,6); @@ -3193,9 +3197,6 @@ // example: gui.gdoverlay(gd.createFromPng("myimage.png"):gdStr()) DEFINE_LUA_FUNCTION(gui_gdoverlay, "[x=0,y=0,]gdimage[,alphamul]") { - if(DeferGUIFuncIfNeeded(L)) - return 0; - int xStart = 0; int yStart = 0; @@ -3207,7 +3208,11 @@ yStart = lua_tointeger(L,index++); } - luaL_checktype(L,index,LUA_TSTRING); + luaL_checktype(L,index,LUA_TSTRING); // have to check for errors before deferring + + if(DeferGUIFuncIfNeeded(L)) + return 0; + const unsigned char* ptr = (const unsigned char*)lua_tostring(L,index++); // GD format header for truecolor image (11 bytes) @@ -3924,17 +3929,15 @@ // static int gui_osdtext(lua_State *L) { + int x = luaL_checkinteger(L,1); // have to check for errors before deferring + int y = luaL_checkinteger(L,2); + if(DeferGUIFuncIfNeeded(L)) return 0; // we have to wait until later to call this function because we haven't emulated the next frame yet // (the only way to avoid this deferring is to be in a gui.register or emu.registerafter callback) - const char *msg; - int x, y; + const char* msg = toCString(L,3); - x = luaL_checkinteger(L,1); - y = luaL_checkinteger(L,2); - msg = toCString(L,3); - osd->addFixed(x, y, "%s", msg); return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |