KAY NEVERMIND TODAY I LEARNED MSVC HAS ABSOLUTELY NOTHING AND IS HORRIBLE IN EVERY POSSIBLE WAY IT COULD BE.
This commit is contained in:
		
							parent
							
								
									58319b43a1
								
							
						
					
					
						commit
						4fbd5b7c0a
					
				|  | @ -4,5 +4,7 @@ You can compile with the LT_NO_ICONV definition to disable iconv. | |||
| Compile lt.c to an object file and statically or dynamically link it with | ||||
| your application. That's it. Don't forget to include lt.h. | ||||
| 
 | ||||
| If you don't want to export it to a DLL/SO/whatever, define LT_NO_EXPORT. | ||||
| 
 | ||||
| Also, compiling with GDCC ( http://github.com/DavidPH/GDCC ) works. | ||||
| It will automatically omit iconv and use some specialized functions to work. | ||||
|  |  | |||
|  | @ -28,11 +28,13 @@ local tokenizer = {} | |||
| 
 | ||||
| local loveToken = ffi.load("LoveToken") | ||||
| ffi.cdef([[ | ||||
| typedef int LT_BOOL; | ||||
| 
 | ||||
| typedef struct | ||||
| { | ||||
| 	bool escapeChars; | ||||
| 	bool stripInvalid; | ||||
| 	bool doConvert; | ||||
| 	LT_BOOL escapeChars; | ||||
| 	LT_BOOL stripInvalid; | ||||
| 	LT_BOOL doConvert; | ||||
| 	const char *fromCode; | ||||
| 	const char *toCode; | ||||
| 	const char *stringChars; | ||||
|  | @ -41,33 +43,33 @@ typedef struct | |||
| 
 | ||||
| typedef struct | ||||
| { | ||||
| 	char *token; | ||||
| 	const char *token; | ||||
| 	char *string; | ||||
| 	int pos; | ||||
| } LT_Token; | ||||
| 
 | ||||
| typedef struct | ||||
| { | ||||
| 	bool failure; | ||||
| 	LT_BOOL failure; | ||||
| 	const char *str; | ||||
| } LT_AssertInfo; | ||||
| 
 | ||||
| void LT_Init(LT_Config initCfg); | ||||
| void LT_SetConfig(LT_Config newCfg); | ||||
| void LT_Quit(); | ||||
| void LT_Quit(void); | ||||
| 
 | ||||
| bool LT_Assert(bool assertion, const char *str, ...); | ||||
| LT_AssertInfo LT_CheckAssert(); | ||||
| LT_BOOL LT_Assert(LT_BOOL assertion, const char *fmt, ...); | ||||
| LT_AssertInfo LT_CheckAssert(void); | ||||
| 
 | ||||
| bool LT_OpenFile(const char *filePath); | ||||
| LT_BOOL LT_OpenFile(const char *filePath); | ||||
| void LT_SetPos(int newPos); | ||||
| void LT_CloseFile(); | ||||
| void LT_CloseFile(void); | ||||
| 
 | ||||
| char *LT_ReadNumber(); | ||||
| char *LT_ReadNumber(void); | ||||
| char *LT_ReadString(char term); | ||||
| char *LT_Escaper(char *str, size_t pos, char escape); | ||||
| LT_Token LT_GetToken(); | ||||
| void LT_SkipWhite(); | ||||
| LT_Token LT_GetToken(void); | ||||
| void LT_SkipWhite(void); | ||||
| ]]) | ||||
| 
 | ||||
| local pReturn | ||||
|  |  | |||
							
								
								
									
										32
									
								
								src/lt.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								src/lt.c
									
									
									
									
									
								
							|  | @ -251,7 +251,7 @@ void LT_Init(LT_Config initCfg) | |||
| 	 | ||||
| 	if(cfg.stringChars != NULL) | ||||
| 	{ | ||||
| 		int i; | ||||
| 		unsigned i; | ||||
| 		 | ||||
| 		stringChars = LT_Alloc(6); | ||||
| 		 | ||||
|  | @ -276,7 +276,7 @@ void LT_Init(LT_Config initCfg) | |||
| 	 | ||||
| 	if(cfg.charChars != NULL) | ||||
| 	{ | ||||
| 		int i; | ||||
| 		unsigned i; | ||||
| 		 | ||||
| 		charChars = LT_Alloc(6); | ||||
| 		 | ||||
|  | @ -338,7 +338,7 @@ void LT_SetConfig(LT_Config newCfg) | |||
| 	 | ||||
| 	if(cfg.stringChars != NULL) | ||||
| 	{ | ||||
| 		int i; | ||||
| 		unsigned i; | ||||
| 		 | ||||
| 		stringChars = LT_Alloc(6); | ||||
| 		 | ||||
|  | @ -363,7 +363,7 @@ void LT_SetConfig(LT_Config newCfg) | |||
| 	 | ||||
| 	if(cfg.charChars != NULL) | ||||
| 	{ | ||||
| 		int i; | ||||
| 		unsigned i; | ||||
| 		 | ||||
| 		charChars = LT_Alloc(6); | ||||
| 		 | ||||
|  | @ -430,13 +430,13 @@ LT_BOOL LT_Assert(LT_BOOL assertion, const char *fmt, ...) | |||
| 		assertError = LT_TRUE; | ||||
| 		assertString = malloc(512); | ||||
| 		 | ||||
| 		snprintf(ftString, 16, ":%ld:", ftell(parseFile)); | ||||
| 		sprintf(ftString, ":%ld:", ftell(parseFile)); | ||||
| 		 | ||||
| 		va_start(va, fmt); | ||||
| 		vsnprintf(asBuffer, 512, fmt, va); | ||||
| 		vsprintf(asBuffer, fmt, va); | ||||
| 		va_end(va); | ||||
| 		 | ||||
| 		snprintf(assertString, 512, "%s%s", ftString, asBuffer); | ||||
| 		sprintf(assertString, "%s%s", ftString, asBuffer); | ||||
| 		 | ||||
| 		LT_SetGarbage(assertString); | ||||
| 	} | ||||
|  | @ -606,6 +606,8 @@ char *LT_ReadString(char term) | |||
| 
 | ||||
| char *LT_Escaper(char *str, size_t pos, char escape) | ||||
| { | ||||
| 	unsigned i; | ||||
| 	 | ||||
| 	switch(escape) | ||||
| 	{ | ||||
| 		case '\\': case '\'': case '"':  str[pos] = escape; break; | ||||
|  | @ -617,7 +619,7 @@ char *LT_Escaper(char *str, size_t pos, char escape) | |||
| 		case 't': str[pos] = '\t'; break; | ||||
| 		case 'v': str[pos] = '\v'; break; | ||||
| 		case 'x': // [marrub] THIS ONE IS FUN
 | ||||
| 			for(unsigned int i = 0;;) | ||||
| 			for(i = 0;;) | ||||
| 			{ | ||||
| 				int c = fgetc(parseFile); | ||||
| 				 | ||||
|  | @ -653,9 +655,11 @@ char *LT_Escaper(char *str, size_t pos, char escape) | |||
| 		case '4': case '5': case '6': case '7': | ||||
| 			{ | ||||
| 				int c = escape; | ||||
| 				unsigned int i = 0; | ||||
| 				unsigned n; | ||||
| 				 | ||||
| 				for(unsigned int n = 2; n != 0; n--) | ||||
| 				i = 0; | ||||
| 				 | ||||
| 				for(n = 2; n != 0; n--) | ||||
| 				{ | ||||
| 					switch(c) | ||||
| 					{ | ||||
|  | @ -914,7 +918,9 @@ LT_Token LT_GetToken() | |||
| 	 | ||||
| 	if(stringChars[0] != '\0') | ||||
| 	{ | ||||
| 		for(size_t i = 0; i < 6;) | ||||
| 		unsigned i; | ||||
| 		 | ||||
| 		for(i = 0; i < 6;) | ||||
| 		{ | ||||
| 			char cc = stringChars[i++]; | ||||
| 			 | ||||
|  | @ -933,7 +939,9 @@ LT_Token LT_GetToken() | |||
| 	 | ||||
| 	if(charChars[0] != '\0') | ||||
| 	{ | ||||
| 		for(size_t i = 0; i < 6;) | ||||
| 		unsigned i; | ||||
| 		 | ||||
| 		for(i = 0; i < 6;) | ||||
| 		{ | ||||
| 			char cc = charChars[i++]; | ||||
| 			 | ||||
|  |  | |||
							
								
								
									
										58
									
								
								src/lt.h
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								src/lt.h
									
									
									
									
									
								
							|  | @ -41,12 +41,20 @@ THE SOFTWARE. | |||
| // [marrub] When using in FFI, remove this from the declarations.
 | ||||
| //          Also make sure to redefine this if your platform is not supported.
 | ||||
| //          (OSX shouldn't need this at all)
 | ||||
| #if defined(_MSC_VER) | ||||
| 	#define LT_EXPORT __declspec(dllexport) | ||||
| #elseif defined(_GCC) | ||||
| 	#define LT_EXPORT __attribute__((visibility("default"))) | ||||
| #ifndef LT_NO_EXPORT | ||||
| 	#if defined(_MSC_VER) | ||||
| 		#define LT_DLLEXPORT __declspec(dllexport) | ||||
| 		#define LT_EXPORT | ||||
| 	#elif defined(_GCC) | ||||
| 		#define LT_EXPORT __attribute__((visibility("default"))) | ||||
| 		#define LT_DLLEXPORT | ||||
| 	#else | ||||
| 		#define LT_EXPORT | ||||
| 		#define LT_DLLEXPORT | ||||
| 	#endif | ||||
| #else | ||||
| 	#define LT_EXPORT | ||||
| 	#define LT_DLLEXPORT | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __GDCC__ | ||||
|  | @ -81,12 +89,14 @@ enum | |||
|  * Types | ||||
|  */ | ||||
| 
 | ||||
| typedef int LT_BOOL; | ||||
| 
 | ||||
| typedef struct | ||||
| { | ||||
| 	bool escapeChars; | ||||
| 	bool stripInvalid; | ||||
| 	LT_BOOL escapeChars; | ||||
| 	LT_BOOL stripInvalid; | ||||
| #ifndef LT_NO_ICONV | ||||
| 	bool doConvert; | ||||
| 	LT_BOOL doConvert; | ||||
| 	const char *fromCode; | ||||
| 	const char *toCode; | ||||
| #endif | ||||
|  | @ -103,7 +113,7 @@ typedef struct | |||
| 
 | ||||
| typedef struct | ||||
| { | ||||
| 	bool failure; | ||||
| 	LT_BOOL failure; | ||||
| 	const char *str; | ||||
| } LT_AssertInfo; | ||||
| 
 | ||||
|  | @ -113,8 +123,6 @@ typedef struct LT_GarbageList_s | |||
| 	void *ptr; | ||||
| } LT_GarbageList; // [marrub] Don't include this into FFI declarations.
 | ||||
| 
 | ||||
| typedef int LT_BOOL; | ||||
| 
 | ||||
| /*
 | ||||
|  * Functions | ||||
|  */ | ||||
|  | @ -123,27 +131,27 @@ typedef int LT_BOOL; | |||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| void LT_EXPORT LT_Init(LT_Config initCfg); | ||||
| void LT_EXPORT LT_SetConfig(LT_Config newCfg); | ||||
| void LT_EXPORT LT_Quit(void); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_Init(LT_Config initCfg); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_SetConfig(LT_Config newCfg); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_Quit(void); | ||||
| 
 | ||||
| bool LT_EXPORT LT_Assert(bool assertion, const char *fmt, ...); | ||||
| void LT_EXPORT LT_Error(int type); // [marrub] C use ONLY
 | ||||
| LT_AssertInfo LT_EXPORT LT_CheckAssert(void); | ||||
| LT_DLLEXPORT LT_BOOL LT_EXPORT LT_Assert(LT_BOOL assertion, const char *fmt, ...); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_Error(int type); // [marrub] C use ONLY
 | ||||
| LT_DLLEXPORT LT_AssertInfo LT_EXPORT LT_CheckAssert(void); | ||||
| 
 | ||||
| #ifndef __GDCC__ | ||||
| bool LT_EXPORT LT_OpenFile(const char *filePath); | ||||
| LT_DLLEXPORT LT_BOOL LT_EXPORT LT_OpenFile(const char *filePath); | ||||
| #else | ||||
| bool LT_EXPORT LT_OpenFile(__str filePath); | ||||
| LT_DLLEXPORT LT_BOOL LT_EXPORT LT_OpenFile(__str filePath); | ||||
| #endif | ||||
| void LT_EXPORT LT_SetPos(int newPos); | ||||
| void LT_EXPORT LT_CloseFile(void); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_SetPos(int newPos); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_CloseFile(void); | ||||
| 
 | ||||
| char *LT_EXPORT LT_ReadNumber(void); | ||||
| char *LT_EXPORT LT_ReadString(char term); | ||||
| char *LT_EXPORT LT_Escaper(char *str, size_t pos, char escape); | ||||
| LT_Token LT_EXPORT LT_GetToken(void); | ||||
| void LT_EXPORT LT_SkipWhite(void); | ||||
| LT_DLLEXPORT char *LT_EXPORT LT_ReadNumber(void); | ||||
| LT_DLLEXPORT char *LT_EXPORT LT_ReadString(char term); | ||||
| LT_DLLEXPORT char *LT_EXPORT LT_Escaper(char *str, size_t pos, char escape); | ||||
| LT_DLLEXPORT LT_Token LT_EXPORT LT_GetToken(void); | ||||
| LT_DLLEXPORT void LT_EXPORT LT_SkipWhite(void); | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|  |  | |||
		Reference in New Issue
	
	Block a user