1
0
Fork 0
mirror of https://github.com/ctruLua/ctruLua.git synced 2025-10-27 16:39:29 +00:00

Renamed item.fileSize to item.size in fs.list() return value, enabled 3D in the editor, added a lot of missing documentation

For the return values, I followed this rule: if the fuction returns true on success, it should return false, error on error; for every other case it should return nil, error on error.

Also, who doesn't want to edit code in 3D ? The line depth depends on the indentation level.
This commit is contained in:
Reuh 2016-04-22 13:42:59 +02:00
parent 2b7d37304d
commit 358b68c643
13 changed files with 143 additions and 72 deletions

View file

@ -44,9 +44,36 @@ local fileModified = false
local function displayedText(text) local function displayedText(text)
return text:gsub("\t", " "), nil return text:gsub("\t", " "), nil
end end
local function drawTop(eye)
-- Depth multiplicator. Multiply by a positive and add to x to add depth; multiply by a negative and add to x to go out of the screen.
local function d(mul) return math.floor(mul * hid.pos3d() * eye) end
-- Lines
local sI = math.floor(scrollY / lineHeight)
if sI < 1 then sI = 1 end
local eI = math.ceil((scrollY + gfx.TOP_HEIGHT) / lineHeight)
if eI > #lines then eI = #lines end
for i = sI, eI, 1 do
local x = -scrollX
local y = -scrollY+ (i-1)*lineHeight
for _,colored in ipairs(coloredLines[i]) do
local str = displayedText(colored[1])
gfx.text(x + d(#(lines[i]:match("^%s+") or "")*3), y, str, fontSize, colored[2])
x = x + font:width(str)
end
end
-- Cursor
local curline = lines[cursorY]
gfx.rectangle(-scrollX+ font:width(displayedText(curline:sub(1, (utf8.offset(curline, cursorX) or 0)-1))) + d(#(curline:match("^%s+") or "")*3),
-scrollY+ (cursorY-1)*lineHeight, 1, lineHeight, 0, color.cursor)
end
-- Set defaults -- Set defaults
gfx.set3D(false) gfx.set3D(true)
gfx.color.setDefault(color.default) gfx.color.setDefault(color.default)
gfx.color.setBackground(color.background) gfx.color.setBackground(color.background)
gfx.font.setDefault(font) gfx.font.setDefault(font)
@ -178,33 +205,18 @@ while ctr.run() do
end end
-- Draw -- Draw
gfx.start(gfx.TOP) local is3D = hid.pos3d() > 0
-- Lines
local sI = math.floor(scrollY / lineHeight)
if sI < 1 then sI = 1 end
local eI = math.ceil((scrollY + gfx.TOP_HEIGHT) / lineHeight)
if eI > #lines then eI = #lines end
for i = sI, eI, 1 do
local x = -scrollX
local y = -scrollY+ (i-1)*lineHeight
for _,colored in ipairs(coloredLines[i]) do
local str = displayedText(colored[1])
gfx.text(x, y, str, fontSize, colored[2])
x = x + font:width(str)
end
end
-- Cursor
local curline = lines[cursorY]
gfx.rectangle(-scrollX+ font:width(displayedText(curline:sub(1, (utf8.offset(curline, cursorX) or 0)-1))),
-scrollY+ (cursorY-1)*lineHeight, 1, lineHeight, 0, color.cursor)
gfx.start(gfx.TOP, gfx.LEFT)
drawTop(is3D and 0 or -1)
gfx.stop() gfx.stop()
if is3D then
gfx.start(gfx.TOP, gfx.RIGHT)
drawTop(1)
gfx.stop()
end
gfx.start(gfx.BOTTOM) gfx.start(gfx.BOTTOM)
gfx.text(3, 3, "FPS: "..math.ceil(gfx.getFPS())) gfx.text(3, 3, "FPS: "..math.ceil(gfx.getFPS()))

View file

@ -115,7 +115,7 @@ local function drawBottom(externalConfig, workingDirectoryScroll, selected)
gfx.text(1, 15, selectedFile.name, 12) gfx.text(1, 15, selectedFile.name, 12)
if not selectedFile.isDirectory then if not selectedFile.isDirectory then
gfx.text(1, 45, tostring(selectedFile.fileSize) .. "B", 12, 0xFF727272) gfx.text(1, 45, tostring(selectedFile.size) .. "B", 12, 0xFF727272)
end end
local binding, pattern = getBinding(selectedFile, bindings) local binding, pattern = getBinding(selectedFile, bindings)

View file

@ -21,6 +21,9 @@ The `cam` module.
/*** /***
Initialize the camera module. Initialize the camera module.
@function init @function init
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int cam_init(lua_State *L) { static int cam_init(lua_State *L) {
Result ret = camInit(); Result ret = camInit();

View file

@ -1,5 +1,5 @@
/*** /***
The `font` module The `gfx.font` module
@module ctr.gfx.font @module ctr.gfx.font
@usage local font = require("ctr.gfx.font") @usage local font = require("ctr.gfx.font")
*/ */
@ -21,7 +21,9 @@ u32 textSize = 9;
Load a TTF font. Load a TTF font.
@function load @function load
@tparam string path path to the file @tparam string path path to the file
@treturn font the loaded font. @treturn[1] font the loaded font.
@treturn[2] nil if an error occurred
@treturn[2] string error message
*/ */
static int font_load(lua_State *L) { static int font_load(lua_State *L) {
const char *path = luaL_checkstring(L, 1); const char *path = luaL_checkstring(L, 1);

View file

@ -52,14 +52,16 @@ const char* prefix_path(const char* path) {
Lists a directory contents (unsorted). Lists a directory contents (unsorted).
@function list @function list
@tparam string path the directory we wants to list the content @tparam string path the directory we wants to list the content
@treturn table the item list. Each item is a table like: @treturn[1] table the item list. Each item is a table like:
` `
{ {
name = "Item name.txt", name = "Item name.txt",
isDirectory = false, isDirectory = false,
fileSize = 321 -- (integer) in bytes size = 321 -- (integer) item size, in bytes
} }
` `
@treturn[2] nil if an error occurred
@treturn[2] string error message
*/ */
static int fs_list(lua_State *L) { static int fs_list(lua_State *L) {
const char* basepath = prefix_path(luaL_checkstring(L, 1)); const char* basepath = prefix_path(luaL_checkstring(L, 1));
@ -80,8 +82,8 @@ static int fs_list(lua_State *L) {
DIR* dir = opendir(path); DIR* dir = opendir(path);
if (dir == NULL) { if (dir == NULL) {
if (shouldFreePath) free(path); if (shouldFreePath) free(path);
lua_pushboolean(L, false); lua_pushnil(L);
lua_pushstring(L, strerror(errno)); lua_pushfstring(L, "Can't open directory: %s (%s)", strerror(errno), errno);
return 2; return 2;
} }
errno = 0; errno = 0;
@ -96,21 +98,17 @@ static int fs_list(lua_State *L) {
if (entry->d_type==DT_REG) { // Regular files: check size if (entry->d_type==DT_REG) { // Regular files: check size
char* filepath = malloc(strlen(path)+strlen(entry->d_name)+1); char* filepath = malloc(strlen(path)+strlen(entry->d_name)+1);
if (filepath == NULL) { if (filepath == NULL)
luaL_error(L, "Memory allocation error"); luaL_error(L, "Memory allocation error");
}
memset(filepath, 0, strlen(path)+strlen(entry->d_name)+1);
strcpy(filepath, path); strcpy(filepath, path);
strcat(filepath, entry->d_name); strcat(filepath, entry->d_name);
struct stat stats; struct stat stats;
if (stat(filepath, &stats)) { if (stat(filepath, &stats)) {
free(filepath); free(filepath);
if (shouldFreePath) free(path); if (shouldFreePath) free(path);
luaL_error(L, "Stat error: %s (%d)", strerror(errno), errno); luaL_error(L, "Stat error: %s (%d)", strerror(errno), errno);
lua_pushboolean(L, false); return 0;
lua_pushstring(L, strerror(errno));
return 2;
} else { } else {
lua_pushinteger(L, stats.st_size); lua_pushinteger(L, stats.st_size);
} }
@ -118,7 +116,7 @@ static int fs_list(lua_State *L) {
} else { // Everything else: 0 bytes } else { // Everything else: 0 bytes
lua_pushinteger(L, 0); lua_pushinteger(L, 0);
} }
lua_setfield(L, -2, "fileSize"); lua_setfield(L, -2, "size");
lua_seti(L, -2, i); lua_seti(L, -2, i);
i++; i++;

View file

@ -40,6 +40,9 @@ Open an url in the context.
@function :open @function :open
@tparam string url the url to open @tparam string url the url to open
@tparam[opt="GET"] string method method to use; can be `"GET"`, `"POST"`, `"HEAD"`, `"PUT"` or `"DELETE"` @tparam[opt="GET"] string method method to use; can be `"GET"`, `"POST"`, `"HEAD"`, `"PUT"` or `"DELETE"`
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int httpc_open(lua_State *L) { static int httpc_open(lua_State *L) {
httpcContext *context = lua_touserdata(L, 1); httpcContext *context = lua_touserdata(L, 1);
@ -59,7 +62,7 @@ static int httpc_open(lua_State *L) {
ret = httpcOpenContext(context, method, url, 0); ret = httpcOpenContext(context, method, url, 0);
if (ret != 0) { if (ret != 0) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }
@ -72,6 +75,9 @@ Add a field in the request header.
@function :addRequestHeaderField @function :addRequestHeaderField
@tparam string name Name of the field @tparam string name Name of the field
@tparam string value Value of the field @tparam string value Value of the field
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int httpc_addRequestHeaderField(lua_State *L) { static int httpc_addRequestHeaderField(lua_State *L) {
httpcContext *context = lua_touserdata(L, 1); httpcContext *context = lua_touserdata(L, 1);
@ -80,7 +86,7 @@ static int httpc_addRequestHeaderField(lua_State *L) {
Result ret = httpcAddRequestHeaderField(context, name ,value); Result ret = httpcAddRequestHeaderField(context, name ,value);
if (ret != 0) { if (ret != 0) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }
@ -91,6 +97,9 @@ static int httpc_addRequestHeaderField(lua_State *L) {
/*** /***
Begin a request to get the content at the URL. Begin a request to get the content at the URL.
@function :beginRequest @function :beginRequest
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int httpc_beginRequest(lua_State *L) { static int httpc_beginRequest(lua_State *L) {
httpcContext *context = lua_touserdata(L, 1); httpcContext *context = lua_touserdata(L, 1);
@ -98,7 +107,7 @@ static int httpc_beginRequest(lua_State *L) {
ret = httpcBeginRequest(context); ret = httpcBeginRequest(context);
if (ret != 0) { if (ret != 0) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }
@ -109,7 +118,9 @@ static int httpc_beginRequest(lua_State *L) {
/*** /***
Return the status code returned by the request. Return the status code returned by the request.
@function :getStatusCode @function :getStatusCode
@treturn number the status code @treturn[1] integer the status code
@treturn[2] nil in case of error
@treturn[2] integer error code
*/ */
static int httpc_getStatusCode(lua_State *L) { static int httpc_getStatusCode(lua_State *L) {
httpcContext *context = lua_touserdata(L, 1); httpcContext *context = lua_touserdata(L, 1);
@ -143,7 +154,9 @@ static int httpc_getDownloadSize(lua_State *L) {
/*** /***
Download and return the data of the context. Download and return the data of the context.
@function :downloadData @function :downloadData
@treturn string data @treturn[1] string data
@treturn[2] nil in case of error
@treturn[2] integer error code
*/ */
static int httpc_downloadData(lua_State *L) { static int httpc_downloadData(lua_State *L) {
httpcContext *context = lua_touserdata(L, 1); httpcContext *context = lua_touserdata(L, 1);
@ -167,9 +180,9 @@ static int httpc_downloadData(lua_State *L) {
} }
lua_pushstring(L, (char*)buff); lua_pushstring(L, (char*)buff);
//free(buff); //free(buff); FIXME we need to free this buffer at some point ?
lua_pushinteger(L, size); // only for test purposes. //lua_pushinteger(L, size); // only for test purposes.
return 2; return 1;
} }
/*** /***
@ -223,6 +236,9 @@ static int httpc_getResponseHeader(lua_State *L) {
Add a trusted RootCA cert to a context. Add a trusted RootCA cert to a context.
@function :addTrustedRootCA @function :addTrustedRootCA
@tparam string DER certificate @tparam string DER certificate
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int httpc_addTrustedRootCA(lua_State *L) { static int httpc_addTrustedRootCA(lua_State *L) {
httpcContext *context = lua_touserdata(L, 1); httpcContext *context = lua_touserdata(L, 1);
@ -231,7 +247,7 @@ static int httpc_addTrustedRootCA(lua_State *L) {
Result ret = httpcAddTrustedRootCA(context, cert, certsize); Result ret = httpcAddTrustedRootCA(context, cert, certsize);
if (ret != 0) { if (ret != 0) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }

View file

@ -37,6 +37,9 @@ Bitrate codes list (this is not a part of the module, just a reference)
Initialize the IR module. Initialize the IR module.
@function init @function init
@tparam[opt=6] number bitrate bitrate of the IR module (more informations below) @tparam[opt=6] number bitrate bitrate of the IR module (more informations below)
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int ir_init(lua_State *L) { static int ir_init(lua_State *L) {
u8 bitrate = luaL_optinteger(L, 1, 6); u8 bitrate = luaL_optinteger(L, 1, 6);
@ -56,6 +59,9 @@ static int ir_init(lua_State *L) {
/*** /***
Disable the IR module. Disable the IR module.
@function shutdown @function shutdown
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int ir_shutdown(lua_State *L) { static int ir_shutdown(lua_State *L) {
Result ret = IRU_Shutdown(); Result ret = IRU_Shutdown();
@ -74,6 +80,9 @@ Send some data over the IR module.
@function send @function send
@tparam string data just some data @tparam string data just some data
@tparam[opt=false] boolean wait set to `true` to wait until the data is sent. @tparam[opt=false] boolean wait set to `true` to wait until the data is sent.
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int ir_send(lua_State *L) { static int ir_send(lua_State *L) {
u8 *data = (u8*)luaL_checkstring(L, 1); u8 *data = (u8*)luaL_checkstring(L, 1);
@ -98,7 +107,9 @@ Receive some data from the IR module.
@function receive @function receive
@tparam number size bytes to receive @tparam number size bytes to receive
@tparam[opt=false] boolean wait wait until the data is received @tparam[opt=false] boolean wait wait until the data is received
@return string data @treturn[1] string data
@treturn[2] nil in case of error
@treturn[2] integer error code
*/ */
static int ir_receive(lua_State *L) { static int ir_receive(lua_State *L) {
u32 size = luaL_checkinteger(L, 1); u32 size = luaL_checkinteger(L, 1);
@ -108,7 +119,7 @@ static int ir_receive(lua_State *L) {
Result ret = iruRecvData(data, size, 0x00, &transfercount, wait); Result ret = iruRecvData(data, size, 0x00, &transfercount, wait);
if (ret) { if (ret) {
lua_pushboolean(L, false); lua_pushnil(L);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }
@ -122,6 +133,9 @@ static int ir_receive(lua_State *L) {
Set the bitrate of the communication. Set the bitrate of the communication.
@function setBitRate @function setBitRate
@tparam number bitrate new bitrate for the communication @tparam number bitrate new bitrate for the communication
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int ir_setBitRate(lua_State *L) { static int ir_setBitRate(lua_State *L) {
u8 bitrate = luaL_checkinteger(L, 1); u8 bitrate = luaL_checkinteger(L, 1);
@ -133,20 +147,24 @@ static int ir_setBitRate(lua_State *L) {
return 2; return 2;
} }
return 0; lua_pushboolean(L, true);
return 1;
} }
/*** /***
Return the actual bitrate of the communication. Return the actual bitrate of the communication.
@function getBitRate @function getBitRate
@treturn number actual bitrate @treturn[1] number actual bitrate
@treturn[2] nil in case of error
@treturn[2] integer error code
*/ */
static int ir_getBitRate(lua_State *L) { static int ir_getBitRate(lua_State *L) {
u8 bitrate = 0; u8 bitrate = 0;
Result ret = IRU_GetBitRate(&bitrate); Result ret = IRU_GetBitRate(&bitrate);
if (ret) { if (ret) {
lua_pushboolean(L, false); lua_pushnil(L);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }

View file

@ -1,5 +1,5 @@
/*** /***
The `map` module. The `gfx.map` module.
Tile coordinates start at x=0,y=0. Tile coordinates start at x=0,y=0.
@module ctr.gfx.map @module ctr.gfx.map
@usage local map = require("ctr.gfx.map") @usage local map = require("ctr.gfx.map")
@ -47,7 +47,9 @@ Load a map from a file.
@tparam texture tileset containing the tileset @tparam texture tileset containing the tileset
@tparam number tileWidth tile width @tparam number tileWidth tile width
@tparam number tileHeight tile height @tparam number tileHeight tile height
@treturn map loaded map object @treturn[1] map loaded map object
@treturn[2] nil in case of error
@treturn[2] string error message
*/ */
static int map_load(lua_State *L) { static int map_load(lua_State *L) {
texture_userdata *texture = luaL_checkudata(L, 2, "LTexture"); texture_userdata *texture = luaL_checkudata(L, 2, "LTexture");

View file

@ -20,20 +20,23 @@ u32 bufferSize = 0;
Initialize the mic module. Initialize the mic module.
@function init @function init
@tparam[opt=0x50000] number bufferSize size of the buffer (must be a multiple of 0x1000) @tparam[opt=0x50000] number bufferSize size of the buffer (must be a multiple of 0x1000)
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer/string error code/message
*/ */
static int mic_init(lua_State *L) { static int mic_init(lua_State *L) {
bufferSize = luaL_optinteger(L, 1, 0x50000); bufferSize = luaL_optinteger(L, 1, 0x50000);
buff = memalign(0x1000, bufferSize); buff = memalign(0x1000, bufferSize);
if (buff == NULL) { if (buff == NULL) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushstring(L, "Couldn't allocate buffer"); lua_pushstring(L, "Couldn't allocate buffer");
return 2; return 2;
} }
Result ret = micInit(buff, bufferSize); Result ret = micInit(buff, bufferSize);
if (ret) { if (ret) {
free(buff); free(buff);
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 2; return 2;
} }

View file

@ -117,7 +117,9 @@ Setup the new 3DS CPU features (overclock, 4 cores ...)
@newonly @newonly
@function configureNew3DSCPU @function configureNew3DSCPU
@tparam boolean enable enable the New3DS CPU features @tparam boolean enable enable the New3DS CPU features
@treturn boolean `true` if everything went fine @treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int ptm_configureNew3DSCPU(lua_State *L) { static int ptm_configureNew3DSCPU(lua_State *L) {
u8 conf = false; u8 conf = false;

View file

@ -22,6 +22,9 @@ static const struct luaL_Reg qtm_methods[];
/*** /***
Initialize the QTM module. Initialize the QTM module.
@function init @function init
@treturn[1] boolean `true` if everything went fine
@treturn[2] boolean `false` in case of error
@treturn[2] integer error code
*/ */
static int qtm_init(lua_State *L) { static int qtm_init(lua_State *L) {
Result ret = qtmInit(); Result ret = qtmInit();
@ -121,8 +124,10 @@ Convert QTM coordinates to screen coordinates
@tparam number coordinates index @tparam number coordinates index
@tparam[opt=400] number screenWidth specify a screen width @tparam[opt=400] number screenWidth specify a screen width
@tparam[opt=320] number screenHeight specify a screen height @tparam[opt=320] number screenHeight specify a screen height
@treturn number screen X coordinate @treturn[1] number screen X coordinate
@treturn number screen Y coordinate @treturn[1] number screen Y coordinate
@treturn[2] nil in case of error
@treturn[2] string error message
*/ */
static int qtm_convertCoordToScreen(lua_State *L) { static int qtm_convertCoordToScreen(lua_State *L) {
qtm_userdata *info = luaL_checkudata(L, 1, "LQTM"); qtm_userdata *info = luaL_checkudata(L, 1, "LQTM");
@ -130,7 +135,7 @@ static int qtm_convertCoordToScreen(lua_State *L) {
index = index - 1; // Lua index begins at 1 index = index - 1; // Lua index begins at 1
if (index > 3 || index < 0) { if (index > 3 || index < 0) {
lua_pushnil(L); lua_pushnil(L);
lua_pushnil(L); lua_pushstring(L, "Index must be between 1 and 3");
return 2; return 2;
} }
float screenWidth = luaL_optnumber(L, 3, 400.0f); float screenWidth = luaL_optnumber(L, 3, 400.0f);

View file

@ -109,7 +109,9 @@ static int socket_shutdown(lua_State *L) {
/*** /***
Return a TCP socket. Return a TCP socket.
@function tcp @function tcp
@treturn TCPMaster TCP socket @treturn[1] TCPMaster TCP socket
@treturn[2] nil in case of error
@treturn[2] string error message
*/ */
static int socket_tcp(lua_State *L) { static int socket_tcp(lua_State *L) {
socket_userdata *userdata = lua_newuserdata(L, sizeof(*userdata)); socket_userdata *userdata = lua_newuserdata(L, sizeof(*userdata));
@ -134,7 +136,9 @@ static int socket_tcp(lua_State *L) {
/*** /***
Return an UDP socket. Return an UDP socket.
@function udp @function udp
@treturn UDPMaster UDP socket @treturn[1] UDPMaster UDP socket
@treturn[2] nil in case of error
@treturn[2] string error message
*/ */
static int socket_udp(lua_State *L) { static int socket_udp(lua_State *L) {
socket_userdata *userdata = lua_newuserdata(L, sizeof(*userdata)); socket_userdata *userdata = lua_newuserdata(L, sizeof(*userdata));
@ -371,7 +375,9 @@ If no data is avaible, it returns an empty string (non-blocking).
"a" to receive everything, "a" to receive everything,
"l" to receive the next line, skipping the end of line, "l" to receive the next line, skipping the end of line,
"L" to receive the next line, keeping the end of line. "L" to receive the next line, keeping the end of line.
@treturn string data @treturn[1] string data
@treturn[2] nil in case of error
@treturn[2] integer error code
*/ */
static int socket_receive(lua_State *L) { static int socket_receive(lua_State *L) {
socket_userdata *userdata = luaL_checkudata(L, 1, "LSocket"); socket_userdata *userdata = luaL_checkudata(L, 1, "LSocket");
@ -440,7 +446,9 @@ static int socket_receive(lua_State *L) {
Send some data over the TCP socket. Send some data over the TCP socket.
@function :send @function :send
@tparam string data data to send @tparam string data data to send
@treturn number amount of data sent @treturn[1] number amount of data sent
@treturn[2] nil in case of error
@treturn[2] integer/string error code/message
*/ */
static int socket_send(lua_State *L) { static int socket_send(lua_State *L) {
socket_userdata *userdata = luaL_checkudata(L, 1, "LSocket"); socket_userdata *userdata = luaL_checkudata(L, 1, "LSocket");

View file

@ -43,7 +43,9 @@ Load a texture from a file. Supported formats: PNG, JPEG, BMP.
@tparam string path path to the image file @tparam string path path to the image file
@tparam[opt=PLACE_RAM] number place where to put the loaded texture @tparam[opt=PLACE_RAM] number place where to put the loaded texture
@tparam[opt=auto] number type type of the image @tparam[opt=auto] number type type of the image
@treturn texture the loaded texture object @treturn[1] texture the loaded texture object
@treturn[2] nil in case of error
@treturn[2] string error message
*/ */
static int texture_load(lua_State *L) { static int texture_load(lua_State *L) {
const char *path = luaL_checkstring(L, 1); const char *path = luaL_checkstring(L, 1);
@ -272,7 +274,7 @@ Save a texture to a file.
@tparam string filename path to the file to save the texture to @tparam string filename path to the file to save the texture to
@tparam[opt=TYPE_PNG] number type type of the image to save. Can be TYPE_PNG or TYPE_BMP @tparam[opt=TYPE_PNG] number type type of the image to save. Can be TYPE_PNG or TYPE_BMP
@treturn[1] boolean true on success @treturn[1] boolean true on success
@treturn[2] nil @treturn[2] boolean `false` in case of error
@treturn[2] string error message @treturn[2] string error message
*/ */
static int texture_save(lua_State *L) { static int texture_save(lua_State *L) {
@ -284,7 +286,7 @@ static int texture_save(lua_State *L) {
if (type == 0) { // PNG if (type == 0) { // PNG
FILE* file = fopen(path, "wb"); FILE* file = fopen(path, "wb");
if (file == NULL) { if (file == NULL) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushstring(L, "Can open file"); lua_pushstring(L, "Can open file");
return 2; return 2;
} }
@ -317,7 +319,7 @@ static int texture_save(lua_State *L) {
} else if (type == 2) { // BMP } else if (type == 2) { // BMP
u32* buff = malloc(texture->texture->width * texture->texture->height * 4); u32* buff = malloc(texture->texture->width * texture->texture->height * 4);
if (buff == NULL) { if (buff == NULL) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushstring(L, "Failed to allocate buffer"); lua_pushstring(L, "Failed to allocate buffer");
return 2; return 2;
} }
@ -330,13 +332,13 @@ static int texture_save(lua_State *L) {
free(buff); free(buff);
} else { } else {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushstring(L, "Not a valid type"); lua_pushstring(L, "Not a valid type");
return 2; return 2;
} }
if (result == 0) { if (result == 0) {
lua_pushnil(L); lua_pushboolean(L, false);
lua_pushstring(L, "Failed to save the texture"); lua_pushstring(L, "Failed to save the texture");
return 2; return 2;
} }