marrub
/
LoveToken
Archived
1
0
Fork 0

KAY NEVERMIND TODAY I LEARNED MSVC HAS ABSOLUTELY NOTHING AND IS HORRIBLE IN EVERY POSSIBLE WAY IT COULD BE.

master
Marrub 2015-07-29 08:30:16 -04:00
parent 58319b43a1
commit 4fbd5b7c0a
4 changed files with 70 additions and 50 deletions

View File

@ -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.

View File

@ -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

View File

@ -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++];

View File

@ -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
}