main knows nothing about lua and etc.
This commit is contained in:
		
							
								
								
									
										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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user