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:
parent
2b7d37304d
commit
358b68c643
13 changed files with 143 additions and 72 deletions
|
|
@ -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,32 +205,17 @@ 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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
22
source/fs.c
22
source/fs.c
|
|
@ -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++;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
28
source/ir.c
28
source/ir.c
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
11
source/qtm.c
11
source/qtm.c
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue