main knows nothing about lua and etc.
This commit is contained in:
parent
2de319ce5a
commit
3c40e171fc
4
Makefile
4
Makefile
|
@ -29,10 +29,6 @@ MINGW_LINKER_FLAGS= \
|
|||
-lmingw32 \
|
||||
-lSDL2main \
|
||||
-lSDL2 \
|
||||
-lz \
|
||||
-lgif \
|
||||
-llua \
|
||||
-lwren \
|
||||
-lcomdlg32 \
|
||||
-lws2_32 \
|
||||
-mwindows
|
||||
|
|
|
@ -41,9 +41,6 @@
|
|||
<ProjectReference Include="..\..\..\3rd-party\SDL2-2.0.7\VisualC\SDL\SDL.vcxproj">
|
||||
<Project>{81ce8daf-ebb2-4761-8e45-b71abcca8c68}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\lua\lua.vcxproj">
|
||||
<Project>{57d2471b-3138-495e-af18-6e290d098ffc}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\studio\studio.vcxproj">
|
||||
<Project>{6181f6a6-aa1b-4cd2-b306-e242cfde9b20}</Project>
|
||||
</ProjectReference>
|
||||
|
|
|
@ -2540,7 +2540,7 @@ static void checkNewVersion(Console* console)
|
|||
|
||||
if(net)
|
||||
{
|
||||
NetVersion version = _netVersionRequest(net);
|
||||
NetVersion version = netVersionRequest(net);
|
||||
free(net);
|
||||
|
||||
if((version.major > TIC_VERSION_MAJOR) ||
|
||||
|
|
2
src/fs.c
2
src/fs.c
|
@ -174,7 +174,7 @@ void fsEnumFiles(FileSystem* fs, ListCallback callback, void* data)
|
|||
|
||||
if(isPublic(fs))
|
||||
{
|
||||
_netDirRequest(fs->net, fs->work + sizeof(TIC_HOST), callback, data);
|
||||
netDirRequest(fs->net, fs->work + sizeof(TIC_HOST), callback, data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -899,8 +899,6 @@ static System sysHandlers =
|
|||
.getPerformanceCounter = getPerformanceCounter,
|
||||
.getPerformanceFrequency = getPerformanceFrequency,
|
||||
|
||||
.netVersionRequest = netVersionRequest,
|
||||
.netDirRequest = netDirRequest,
|
||||
.netGetRequest = netGetRequest,
|
||||
.createNet = createNet,
|
||||
.closeNet = closeNet,
|
||||
|
|
160
src/net.c
160
src/net.c
|
@ -24,9 +24,8 @@
|
|||
#include "tic.h"
|
||||
#include "SDL_net.h"
|
||||
|
||||
#include <lua.h>
|
||||
#include <lauxlib.h>
|
||||
#include <lualib.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct Net
|
||||
{
|
||||
|
@ -178,124 +177,6 @@ static void getRequest(Net* net, const char* path, NetResponse callback, void* d
|
|||
|
||||
#endif
|
||||
|
||||
static lua_State* netLuaInit(u8* buffer, s32 size)
|
||||
{
|
||||
if (buffer && size)
|
||||
{
|
||||
lua_State* lua = luaL_newstate();
|
||||
|
||||
if(lua)
|
||||
{
|
||||
if(luaL_loadstring(lua, (char*)buffer) == LUA_OK && lua_pcall(lua, 0, LUA_MULTRET, 0) == LUA_OK)
|
||||
return lua;
|
||||
|
||||
else lua_close(lua);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ListCallback callback;
|
||||
void* data;
|
||||
} NetDirData;
|
||||
|
||||
static void onDirResponse(u8* buffer, s32 size, void* data)
|
||||
{
|
||||
NetDirData* netDirData = (NetDirData*)data;
|
||||
|
||||
lua_State* lua = netLuaInit(buffer, size);
|
||||
|
||||
if(lua)
|
||||
{
|
||||
{
|
||||
lua_getglobal(lua, "folders");
|
||||
|
||||
if(lua_type(lua, -1) == LUA_TTABLE)
|
||||
{
|
||||
s32 count = (s32)lua_rawlen(lua, -1);
|
||||
|
||||
for(s32 i = 1; i <= count; i++)
|
||||
{
|
||||
lua_geti(lua, -1, i);
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "name");
|
||||
if(lua_isstring(lua, -1))
|
||||
netDirData->callback(lua_tostring(lua, -1), NULL, 0, netDirData->data, true);
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
{
|
||||
lua_getglobal(lua, "files");
|
||||
|
||||
if(lua_type(lua, -1) == LUA_TTABLE)
|
||||
{
|
||||
s32 count = (s32)lua_rawlen(lua, -1);
|
||||
|
||||
for(s32 i = 1; i <= count; i++)
|
||||
{
|
||||
lua_geti(lua, -1, i);
|
||||
|
||||
char hash[FILENAME_MAX] = {0};
|
||||
char name[FILENAME_MAX] = {0};
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "hash");
|
||||
if(lua_isstring(lua, -1))
|
||||
strcpy(hash, lua_tostring(lua, -1));
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "name");
|
||||
|
||||
if(lua_isstring(lua, -1))
|
||||
strcpy(name, lua_tostring(lua, -1));
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "id");
|
||||
|
||||
if(lua_isinteger(lua, -1))
|
||||
netDirData->callback(name, hash, lua_tointeger(lua, -1), netDirData->data, false);
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_close(lua);
|
||||
}
|
||||
}
|
||||
|
||||
void netDirRequest(Net* net, const char* path, ListCallback callback, void* data)
|
||||
{
|
||||
char request[FILENAME_MAX] = {'\0'};
|
||||
sprintf(request, "/api?fn=dir&path=%s", path);
|
||||
|
||||
NetDirData netDirData = {callback, data};
|
||||
getRequest(net, request, onDirResponse, &netDirData);
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void* buffer;
|
||||
|
@ -319,43 +200,6 @@ void* netGetRequest(Net* net, const char* path, s32* size)
|
|||
return netGetData.buffer;
|
||||
}
|
||||
|
||||
NetVersion netVersionRequest(Net* net)
|
||||
{
|
||||
NetVersion version =
|
||||
{
|
||||
.major = TIC_VERSION_MAJOR,
|
||||
.minor = TIC_VERSION_MINOR,
|
||||
.patch = TIC_VERSION_PATCH,
|
||||
};
|
||||
|
||||
s32 size = 0;
|
||||
void* buffer = netGetRequest(net, "/api?fn=version", &size);
|
||||
|
||||
if(buffer && size)
|
||||
{
|
||||
lua_State* lua = netLuaInit(buffer, size);
|
||||
|
||||
if(lua)
|
||||
{
|
||||
static const char* Fields[] = {"major", "minor", "patch"};
|
||||
|
||||
for(s32 i = 0; i < COUNT_OF(Fields); i++)
|
||||
{
|
||||
lua_getglobal(lua, Fields[i]);
|
||||
|
||||
if(lua_isinteger(lua, -1))
|
||||
((s32*)&version)[i] = (s32)lua_tointeger(lua, -1);
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_close(lua);
|
||||
}
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
Net* createNet()
|
||||
{
|
||||
SDLNet_Init();
|
||||
|
|
12
src/net.h
12
src/net.h
|
@ -26,16 +26,6 @@
|
|||
|
||||
typedef struct Net Net;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
s32 major;
|
||||
s32 minor;
|
||||
s32 patch;
|
||||
} NetVersion;
|
||||
|
||||
NetVersion netVersionRequest(Net* net);
|
||||
void netDirRequest(Net* net, const char* path, ListCallback callback, void* data);
|
||||
void* netGetRequest(Net* net, const char* path, s32* size);
|
||||
|
||||
Net* createNet();
|
||||
void* netGetRequest(Net* net, const char* path, s32* size);
|
||||
void closeNet(Net* net);
|
178
src/studio.c
178
src/studio.c
|
@ -39,12 +39,18 @@
|
|||
|
||||
#include "fs.h"
|
||||
|
||||
#include <zlib.h>
|
||||
#include <ctype.h>
|
||||
#include "net.h"
|
||||
#include "ext/gif.h"
|
||||
#include "ext/md5.h"
|
||||
|
||||
#include <zlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <lua.h>
|
||||
#include <lauxlib.h>
|
||||
#include <lualib.h>
|
||||
|
||||
|
||||
// #define TEXTURE_SIZE (TIC80_FULLWIDTH)
|
||||
// #define STUDIO_PIXEL_FORMAT SDL_PIXELFORMAT_ARGB8888
|
||||
#define FRAME_SIZE (TIC80_FULLWIDTH * TIC80_FULLHEIGHT * sizeof(u32))
|
||||
|
@ -3105,16 +3111,6 @@ u64 getPerformanceFrequency()
|
|||
return studioImpl.system->getPerformanceFrequency();
|
||||
}
|
||||
|
||||
NetVersion _netVersionRequest(Net* net)
|
||||
{
|
||||
return studioImpl.system->netVersionRequest(net);
|
||||
}
|
||||
|
||||
void _netDirRequest(Net* net, const char* path, ListCallback callback, void* data)
|
||||
{
|
||||
return studioImpl.system->netDirRequest(net, path, callback, data);
|
||||
}
|
||||
|
||||
void* _netGetRequest(Net* net, const char* path, s32* size)
|
||||
{
|
||||
return studioImpl.system->netGetRequest(net, path, size);
|
||||
|
@ -3139,3 +3135,161 @@ void _file_dialog_save(file_dialog_save_callback callback, const char* name, con
|
|||
{
|
||||
studioImpl.system->file_dialog_save(callback, name, buffer, size, data, mode);
|
||||
}
|
||||
|
||||
static lua_State* netLuaInit(u8* buffer, s32 size)
|
||||
{
|
||||
if (buffer && size)
|
||||
{
|
||||
lua_State* lua = luaL_newstate();
|
||||
|
||||
if(lua)
|
||||
{
|
||||
if(luaL_loadstring(lua, (char*)buffer) == LUA_OK && lua_pcall(lua, 0, LUA_MULTRET, 0) == LUA_OK)
|
||||
return lua;
|
||||
|
||||
else lua_close(lua);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
NetVersion netVersionRequest(Net* net)
|
||||
{
|
||||
NetVersion version =
|
||||
{
|
||||
.major = TIC_VERSION_MAJOR,
|
||||
.minor = TIC_VERSION_MINOR,
|
||||
.patch = TIC_VERSION_PATCH,
|
||||
};
|
||||
|
||||
s32 size = 0;
|
||||
void* buffer = _netGetRequest(net, "/api?fn=version", &size);
|
||||
|
||||
if(buffer && size)
|
||||
{
|
||||
lua_State* lua = netLuaInit(buffer, size);
|
||||
|
||||
if(lua)
|
||||
{
|
||||
static const char* Fields[] = {"major", "minor", "patch"};
|
||||
|
||||
for(s32 i = 0; i < COUNT_OF(Fields); i++)
|
||||
{
|
||||
lua_getglobal(lua, Fields[i]);
|
||||
|
||||
if(lua_isinteger(lua, -1))
|
||||
((s32*)&version)[i] = (s32)lua_tointeger(lua, -1);
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_close(lua);
|
||||
}
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ListCallback callback;
|
||||
void* data;
|
||||
} NetDirData;
|
||||
|
||||
static void onDirResponse(u8* buffer, s32 size, void* data)
|
||||
{
|
||||
NetDirData* netDirData = (NetDirData*)data;
|
||||
|
||||
lua_State* lua = netLuaInit(buffer, size);
|
||||
|
||||
if(lua)
|
||||
{
|
||||
{
|
||||
lua_getglobal(lua, "folders");
|
||||
|
||||
if(lua_type(lua, -1) == LUA_TTABLE)
|
||||
{
|
||||
s32 count = (s32)lua_rawlen(lua, -1);
|
||||
|
||||
for(s32 i = 1; i <= count; i++)
|
||||
{
|
||||
lua_geti(lua, -1, i);
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "name");
|
||||
if(lua_isstring(lua, -1))
|
||||
netDirData->callback(lua_tostring(lua, -1), NULL, 0, netDirData->data, true);
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
{
|
||||
lua_getglobal(lua, "files");
|
||||
|
||||
if(lua_type(lua, -1) == LUA_TTABLE)
|
||||
{
|
||||
s32 count = (s32)lua_rawlen(lua, -1);
|
||||
|
||||
for(s32 i = 1; i <= count; i++)
|
||||
{
|
||||
lua_geti(lua, -1, i);
|
||||
|
||||
char hash[FILENAME_MAX] = {0};
|
||||
char name[FILENAME_MAX] = {0};
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "hash");
|
||||
if(lua_isstring(lua, -1))
|
||||
strcpy(hash, lua_tostring(lua, -1));
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "name");
|
||||
|
||||
if(lua_isstring(lua, -1))
|
||||
strcpy(name, lua_tostring(lua, -1));
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
{
|
||||
lua_getfield(lua, -1, "id");
|
||||
|
||||
if(lua_isinteger(lua, -1))
|
||||
netDirData->callback(name, hash, lua_tointeger(lua, -1), netDirData->data, false);
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
}
|
||||
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
lua_close(lua);
|
||||
}
|
||||
}
|
||||
|
||||
void netDirRequest(Net* net, const char* path, ListCallback callback, void* data)
|
||||
{
|
||||
char request[FILENAME_MAX] = {'\0'};
|
||||
sprintf(request, "/api?fn=dir&path=%s", path);
|
||||
|
||||
s32 size = 0;
|
||||
void* buffer = _netGetRequest(net, request, &size);
|
||||
|
||||
NetDirData netDirData = {callback, data};
|
||||
onDirResponse(buffer, size, &netDirData);
|
||||
}
|
14
src/studio.h
14
src/studio.h
|
@ -227,8 +227,6 @@ typedef struct
|
|||
u64 (*getPerformanceCounter)();
|
||||
u64 (*getPerformanceFrequency)();
|
||||
|
||||
NetVersion (*netVersionRequest)(Net* net);
|
||||
void (*netDirRequest)(Net* net, const char* path, ListCallback callback, void* data);
|
||||
void* (*netGetRequest)(Net* net, const char* path, s32* size);
|
||||
Net* (*createNet)();
|
||||
void (*closeNet)(Net* net);
|
||||
|
@ -253,11 +251,19 @@ char* getClipboardText();
|
|||
u64 getPerformanceCounter();
|
||||
u64 getPerformanceFrequency();
|
||||
|
||||
NetVersion _netVersionRequest(Net* net);
|
||||
void _netDirRequest(Net* net, const char* path, ListCallback callback, void* data);
|
||||
void* _netGetRequest(Net* net, const char* path, s32* size);
|
||||
Net* _createNet();
|
||||
void _closeNet(Net* net);
|
||||
|
||||
void _file_dialog_load(file_dialog_load_callback callback, void* data);
|
||||
void _file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
s32 major;
|
||||
s32 minor;
|
||||
s32 patch;
|
||||
} NetVersion;
|
||||
|
||||
NetVersion netVersionRequest(Net* net);
|
||||
void netDirRequest(Net* net, const char* path, ListCallback callback, void* data);
|
||||
|
|
|
@ -494,7 +494,6 @@ static void updateMenuItemCover(Surf* surf, const u8* cover, s32 size)
|
|||
|
||||
MenuItem* item = &surf->menu.items[surf->menu.pos];
|
||||
|
||||
|
||||
item->cover = malloc(sizeof(tic_screen));
|
||||
|
||||
gif_image* image = gif_read_data(cover, size);
|
||||
|
|
Loading…
Reference in New Issue