studio works as dll now
This commit is contained in:
		
							
								
								
									
										116
									
								
								src/fs.c
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								src/fs.c
									
									
									
									
									
								
							@@ -105,8 +105,28 @@ bool fsIsInPublicDir(FileSystem* fs)
 | 
			
		||||
 | 
			
		||||
#if defined(__TIC_WINDOWS__) || defined(__WINRT__)
 | 
			
		||||
 | 
			
		||||
#define UTF8ToString(S) (wchar_t *)SDL_iconv_string("UTF-16LE", "UTF-8", (char *)(S), SDL_strlen(S)+1)
 | 
			
		||||
#define StringToUTF8(S) SDL_iconv_string("UTF-8", "UTF-16LE", (char *)(S), (SDL_wcslen(S)+1)*sizeof(wchar_t))
 | 
			
		||||
// #define UTF8ToString(S) (wchar_t *)SDL_iconv_string("UTF-16LE", "UTF-8", (char *)(S), strlen(S)+1)
 | 
			
		||||
// #define StringToUTF8(S) SDL_iconv_string("UTF-8", "UTF-16LE", (char *)(S), (wcslen(S)+1)*sizeof(wchar_t))
 | 
			
		||||
 | 
			
		||||
static const wchar_t* UTF8ToString(const char* str)
 | 
			
		||||
{
 | 
			
		||||
	// TODO: ugly hack
 | 
			
		||||
	wchar_t* wstr = calloc(1, FILENAME_MAX * sizeof(wchar_t));
 | 
			
		||||
 | 
			
		||||
	mbstowcs(wstr, str, FILENAME_MAX);
 | 
			
		||||
 | 
			
		||||
	return wstr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char* StringToUTF8(const wchar_t* wstr)
 | 
			
		||||
{
 | 
			
		||||
	// TODO: ugly hack
 | 
			
		||||
	char* str = calloc(1, FILENAME_MAX);
 | 
			
		||||
 | 
			
		||||
	wcstombs(str, wstr, FILENAME_MAX);
 | 
			
		||||
 | 
			
		||||
	return str;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FILE* _wfopen(const wchar_t *, const wchar_t *);
 | 
			
		||||
int _wremove(const wchar_t *);
 | 
			
		||||
@@ -154,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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -701,7 +721,7 @@ void* fsLoadFile(FileSystem* fs, const char* name, s32* size)
 | 
			
		||||
 | 
			
		||||
			char path[FILENAME_MAX] = {0};
 | 
			
		||||
			sprintf(path, "/cart/%s/cart.tic", loadPublicCartData.hash);
 | 
			
		||||
			void* data = netGetRequest(fs->net, path, size);
 | 
			
		||||
			void* data = _netGetRequest(fs->net, path, size);
 | 
			
		||||
 | 
			
		||||
			if(data)
 | 
			
		||||
				fsSaveRootFile(fs, cachePath, data, *size, false);
 | 
			
		||||
@@ -798,59 +818,57 @@ void createFileSystem(const char* path, void(*callback)(FileSystem*))
 | 
			
		||||
	FileSystem* fs = (FileSystem*)malloc(sizeof(FileSystem));
 | 
			
		||||
	memset(fs, 0, sizeof(FileSystem));
 | 
			
		||||
 | 
			
		||||
	fs->net = createNet();
 | 
			
		||||
	fs->net = _createNet();
 | 
			
		||||
 | 
			
		||||
	if(path)
 | 
			
		||||
	{
 | 
			
		||||
		strcpy(fs->dir, path);
 | 
			
		||||
		callback(fs);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
	strcpy(fs->dir, path);
 | 
			
		||||
	callback(fs);
 | 
			
		||||
 | 
			
		||||
#if defined(__EMSCRIPTEN__)
 | 
			
		||||
// 	else
 | 
			
		||||
// 	{
 | 
			
		||||
 | 
			
		||||
		strcpy(fs->dir, "/" TIC_PACKAGE "/" TIC_NAME "/");
 | 
			
		||||
// #if defined(__EMSCRIPTEN__)
 | 
			
		||||
 | 
			
		||||
#elif defined(__ANDROID__)
 | 
			
		||||
// 		strcpy(fs->dir, "/" TIC_PACKAGE "/" TIC_NAME "/");
 | 
			
		||||
 | 
			
		||||
		strcpy(fs->dir, SDL_AndroidGetExternalStoragePath());
 | 
			
		||||
		const char AppFolder[] = "/" TIC_NAME "/";
 | 
			
		||||
		strcat(fs->dir, AppFolder);
 | 
			
		||||
		mkdir(fs->dir, 0700);
 | 
			
		||||
// #elif defined(__ANDROID__)
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
// 		strcpy(fs->dir, SDL_AndroidGetExternalStoragePath());
 | 
			
		||||
// 		const char AppFolder[] = "/" TIC_NAME "/";
 | 
			
		||||
// 		strcat(fs->dir, AppFolder);
 | 
			
		||||
// 		mkdir(fs->dir, 0700);
 | 
			
		||||
 | 
			
		||||
		char* path = SDL_GetPrefPath(TIC_PACKAGE, TIC_NAME);
 | 
			
		||||
		strcpy(fs->dir, path);
 | 
			
		||||
		free(path);
 | 
			
		||||
// #else
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
// 		char* path = SDL_GetPrefPath(TIC_PACKAGE, TIC_NAME);
 | 
			
		||||
// 		strcpy(fs->dir, path);
 | 
			
		||||
// 		free(path);
 | 
			
		||||
 | 
			
		||||
// #endif
 | 
			
		||||
		
 | 
			
		||||
#if defined(__EMSCRIPTEN__)
 | 
			
		||||
		EM_ASM_
 | 
			
		||||
		(
 | 
			
		||||
			{
 | 
			
		||||
				var dir = "";
 | 
			
		||||
				Module.Pointer_stringify($0).split("/").forEach(function(val)
 | 
			
		||||
				{
 | 
			
		||||
					if(val.length)
 | 
			
		||||
					{
 | 
			
		||||
						dir += "/" + val;
 | 
			
		||||
						FS.mkdir(dir);
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
// #if defined(__EMSCRIPTEN__)
 | 
			
		||||
// 		EM_ASM_
 | 
			
		||||
// 		(
 | 
			
		||||
// 			{
 | 
			
		||||
// 				var dir = "";
 | 
			
		||||
// 				Module.Pointer_stringify($0).split("/").forEach(function(val)
 | 
			
		||||
// 				{
 | 
			
		||||
// 					if(val.length)
 | 
			
		||||
// 					{
 | 
			
		||||
// 						dir += "/" + val;
 | 
			
		||||
// 						FS.mkdir(dir);
 | 
			
		||||
// 					}
 | 
			
		||||
// 				});
 | 
			
		||||
				
 | 
			
		||||
				FS.mount(IDBFS, {}, dir);
 | 
			
		||||
				FS.syncfs(true, function(error)
 | 
			
		||||
				{
 | 
			
		||||
					if(error) console.log(error);
 | 
			
		||||
					else Runtime.dynCall('vi', $1, [$2]);
 | 
			
		||||
				});			
 | 
			
		||||
			}, fs->dir, callback, fs
 | 
			
		||||
		);
 | 
			
		||||
#else
 | 
			
		||||
		callback(fs);
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
// 				FS.mount(IDBFS, {}, dir);
 | 
			
		||||
// 				FS.syncfs(true, function(error)
 | 
			
		||||
// 				{
 | 
			
		||||
// 					if(error) console.log(error);
 | 
			
		||||
// 					else Runtime.dynCall('vi', $1, [$2]);
 | 
			
		||||
// 				});			
 | 
			
		||||
// 			}, fs->dir, callback, fs
 | 
			
		||||
// 		);
 | 
			
		||||
// #else
 | 
			
		||||
// 		callback(fs);
 | 
			
		||||
// #endif
 | 
			
		||||
	// }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										127
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								src/main.c
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "studio.h"
 | 
			
		||||
 | 
			
		||||
#include "net.h"
 | 
			
		||||
#include <SDL.h>
 | 
			
		||||
 | 
			
		||||
#define STUDIO_UI_SCALE 3
 | 
			
		||||
@@ -814,6 +814,98 @@ static void tick()
 | 
			
		||||
	blitSound();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// should work async with callback
 | 
			
		||||
static const char* getAppFolder()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	static char appFolder[FILENAME_MAX];
 | 
			
		||||
 | 
			
		||||
#if defined(__EMSCRIPTEN__)
 | 
			
		||||
 | 
			
		||||
		strcpy(appFolder, "/" TIC_PACKAGE "/" TIC_NAME "/");
 | 
			
		||||
 | 
			
		||||
#elif defined(__ANDROID__)
 | 
			
		||||
 | 
			
		||||
		strcpy(appFolder, SDL_AndroidGetExternalStoragePath());
 | 
			
		||||
		const char AppFolder[] = "/" TIC_NAME "/";
 | 
			
		||||
		strcat(appFolder, AppFolder);
 | 
			
		||||
		mkdir(appFolder, 0700);
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
		char* path = SDL_GetPrefPath(TIC_PACKAGE, TIC_NAME);
 | 
			
		||||
		strcpy(appFolder, path);
 | 
			
		||||
		free(path);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
#if defined(__EMSCRIPTEN__)
 | 
			
		||||
		EM_ASM_
 | 
			
		||||
		(
 | 
			
		||||
			{
 | 
			
		||||
				var dir = "";
 | 
			
		||||
				Module.Pointer_stringify($0).split("/").forEach(function(val)
 | 
			
		||||
				{
 | 
			
		||||
					if(val.length)
 | 
			
		||||
					{
 | 
			
		||||
						dir += "/" + val;
 | 
			
		||||
						FS.mkdir(dir);
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
				
 | 
			
		||||
				FS.mount(IDBFS, {}, dir);
 | 
			
		||||
				FS.syncfs(true, function(error)
 | 
			
		||||
				{
 | 
			
		||||
					if(error) console.log(error);
 | 
			
		||||
					else Runtime.dynCall('vi', $1, [$2]);
 | 
			
		||||
				});			
 | 
			
		||||
			}, appFolder, callback, fs
 | 
			
		||||
		);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return appFolder;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void setClipboardText(const char* text)
 | 
			
		||||
{
 | 
			
		||||
	SDL_SetClipboardText(text);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool hasClipboardText()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_HasClipboardText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* getClipboardText()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_GetClipboardText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 getPerformanceCounter()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_GetPerformanceCounter();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 getPerformanceFrequency()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_GetPerformanceFrequency();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static System sysHandlers = 
 | 
			
		||||
{
 | 
			
		||||
	.setClipboardText = setClipboardText,
 | 
			
		||||
	.hasClipboardText = hasClipboardText,
 | 
			
		||||
	.getClipboardText = getClipboardText,
 | 
			
		||||
	.getPerformanceCounter = getPerformanceCounter,
 | 
			
		||||
	.getPerformanceFrequency = getPerformanceFrequency,
 | 
			
		||||
 | 
			
		||||
	.netVersionRequest = netVersionRequest,
 | 
			
		||||
	.netDirRequest = netDirRequest,
 | 
			
		||||
	.netGetRequest = netGetRequest,
 | 
			
		||||
	.createNet = createNet,
 | 
			
		||||
	.closeNet = closeNet,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
s32 main(s32 argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	SDL_SetHint(SDL_HINT_WINRT_HANDLE_BACK_BUTTON, "1");
 | 
			
		||||
@@ -841,14 +933,14 @@ s32 main(s32 argc, char **argv)
 | 
			
		||||
#elif defined(__EMSCRIPTEN__)
 | 
			
		||||
		SDL_RENDERER_ACCELERATED
 | 
			
		||||
#else
 | 
			
		||||
		// TODO: uncomment this later
 | 
			
		||||
		// TODO: uncomment this later, also init FS before read config
 | 
			
		||||
		SDL_RENDERER_ACCELERATED// | (getConfig()->useVsync ? SDL_RENDERER_PRESENTVSYNC : 0)
 | 
			
		||||
#endif
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	platform.texture = SDL_CreateTexture(platform.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TEXTURE_SIZE, TEXTURE_SIZE);
 | 
			
		||||
 | 
			
		||||
	platform.studio = studioInit(argc, argv, platform.audio.spec.freq);
 | 
			
		||||
	platform.studio = studioInit(argc, argv, platform.audio.spec.freq, getAppFolder(), &sysHandlers);
 | 
			
		||||
 | 
			
		||||
	initTouchGamepad();
 | 
			
		||||
 | 
			
		||||
@@ -902,32 +994,3 @@ s32 main(s32 argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void setClipboardText(const char* text)
 | 
			
		||||
{
 | 
			
		||||
	SDL_SetClipboardText(text);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool hasClipboardText()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_HasClipboardText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* getClipboardText()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_GetClipboardText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 getPerformanceCounter()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_GetPerformanceCounter();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 getPerformanceFrequency()
 | 
			
		||||
{
 | 
			
		||||
	return SDL_GetPerformanceFrequency();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								src/studio.c
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								src/studio.c
									
									
									
									
									
								
							@@ -88,6 +88,7 @@ static const EditorMode Modes[] =
 | 
			
		||||
static struct
 | 
			
		||||
{
 | 
			
		||||
	Studio studio;
 | 
			
		||||
	System* system;
 | 
			
		||||
 | 
			
		||||
	tic80_local* tic80local;
 | 
			
		||||
 | 
			
		||||
@@ -2927,13 +2928,15 @@ static void emstick()
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
Studio* studioInit(s32 argc, char **argv, s32 samplerate)
 | 
			
		||||
Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* folder, System* system)
 | 
			
		||||
{
 | 
			
		||||
	setbuf(stdout, NULL);
 | 
			
		||||
	studioImpl.argc = argc;
 | 
			
		||||
	studioImpl.argv = argv;
 | 
			
		||||
	studioImpl.samplerate = samplerate;
 | 
			
		||||
 | 
			
		||||
	studioImpl.system = system;
 | 
			
		||||
 | 
			
		||||
#if defined(__EMSCRIPTEN__)
 | 
			
		||||
 | 
			
		||||
	if(studioImpl.argc == 2)
 | 
			
		||||
@@ -2946,7 +2949,7 @@ Studio* studioInit(s32 argc, char **argv, s32 samplerate)
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
	createFileSystem(argc > 1 && fsExists(argv[1]) ? fsBasename(argv[1]) : NULL, onFSInitialized);
 | 
			
		||||
	createFileSystem(argc > 1 && fsExists(argv[1]) ? fsBasename(argv[1]) : folder, onFSInitialized);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -3031,7 +3034,7 @@ void studioTick(void* pixels)
 | 
			
		||||
 | 
			
		||||
void studioClose()
 | 
			
		||||
{
 | 
			
		||||
	closeNet(studioImpl.surf->net);
 | 
			
		||||
	_closeNet(studioImpl.surf->net);
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		for(s32 i = 0; i < TIC_EDITOR_BANKS; i++)
 | 
			
		||||
@@ -3075,4 +3078,54 @@ void studioClose()
 | 
			
		||||
// #endif
 | 
			
		||||
 | 
			
		||||
	// exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void setClipboardText(const char* text)
 | 
			
		||||
{
 | 
			
		||||
	studioImpl.system->setClipboardText(text);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool hasClipboardText()
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->hasClipboardText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* getClipboardText()
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->getClipboardText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 getPerformanceCounter()
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->getPerformanceCounter();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Net* _createNet()
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->createNet();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _closeNet(Net* net)
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->closeNet(net);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								src/studio.h
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								src/studio.h
									
									
									
									
									
								
							@@ -37,6 +37,7 @@
 | 
			
		||||
#include "ticapi.h"
 | 
			
		||||
#include "defines.h"
 | 
			
		||||
#include "tools.h"
 | 
			
		||||
#include "net.h"
 | 
			
		||||
 | 
			
		||||
#define TIC_LOCAL ".local/"
 | 
			
		||||
#define TIC_CACHE TIC_LOCAL "cache/"
 | 
			
		||||
@@ -187,7 +188,7 @@ void showTooltip(const char* text);
 | 
			
		||||
 | 
			
		||||
tic_key* getKeymap();
 | 
			
		||||
 | 
			
		||||
const StudioConfig* getConfig();
 | 
			
		||||
TIC80_API const StudioConfig* getConfig();
 | 
			
		||||
 | 
			
		||||
void setSpritePixel(tic_tile* tiles, s32 x, s32 y, u8 color);
 | 
			
		||||
u8 getSpritePixel(tic_tile* tiles, s32 x, s32 y);
 | 
			
		||||
@@ -217,9 +218,25 @@ typedef struct
 | 
			
		||||
 | 
			
		||||
} Studio;
 | 
			
		||||
 | 
			
		||||
Studio* studioInit(s32 argc, char **argv, s32 samplerate);
 | 
			
		||||
void studioTick(void* pixels);
 | 
			
		||||
void studioClose();
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	void	(*setClipboardText)(const char* text);
 | 
			
		||||
	bool	(*hasClipboardText)();
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
} System;
 | 
			
		||||
 | 
			
		||||
TIC80_API Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* appFolder, System* system);
 | 
			
		||||
TIC80_API void studioTick(void* pixels);
 | 
			
		||||
TIC80_API void studioClose();
 | 
			
		||||
 | 
			
		||||
char getKeyboardText();
 | 
			
		||||
bool isKeyWasDown(tic_key key);
 | 
			
		||||
@@ -231,3 +248,9 @@ 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);
 | 
			
		||||
 
 | 
			
		||||
@@ -478,7 +478,7 @@ static void* requestCover(Surf* surf, const char* hash, s32* size)
 | 
			
		||||
 | 
			
		||||
	char path[FILENAME_MAX] = {0};
 | 
			
		||||
	sprintf(path, "/cart/%s/cover.gif", hash);
 | 
			
		||||
	void* data = netGetRequest(surf->net, path, size);
 | 
			
		||||
	void* data = _netGetRequest(surf->net, path, size);
 | 
			
		||||
 | 
			
		||||
	if(data)
 | 
			
		||||
	{
 | 
			
		||||
@@ -865,7 +865,7 @@ void initSurf(Surf* surf, tic_mem* tic, struct Console* console)
 | 
			
		||||
			.items = NULL,
 | 
			
		||||
			.count = 0,
 | 
			
		||||
		},
 | 
			
		||||
		.net = createNet(),
 | 
			
		||||
		.net = _createNet(),
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	fsMakeDir(surf->fs, TIC_CACHE);
 | 
			
		||||
 
 | 
			
		||||
@@ -51,4 +51,4 @@ bool tic_tool_parse_note(const char* noteStr, s32* note, s32* octave);
 | 
			
		||||
s32 tic_tool_get_pattern_id(const tic_track* track, s32 frame, s32 channel);
 | 
			
		||||
void tic_tool_set_pattern_id(tic_track* track, s32 frame, s32 channel, s32 id);
 | 
			
		||||
u32 tic_tool_find_closest_color(const tic_rgb* palette, const tic_rgb* color);
 | 
			
		||||
u32* tic_palette_blit(const tic_palette* src);
 | 
			
		||||
TIC80_API u32* tic_palette_blit(const tic_palette* src);
 | 
			
		||||
		Reference in New Issue
	
	Block a user