fixed linux make, added some features
This commit is contained in:
parent
0c758e3f63
commit
1cb7804fe1
2
Makefile
2
Makefile
|
@ -17,7 +17,7 @@ else
|
||||||
CC+=gcc
|
CC+=gcc
|
||||||
MKDIR+=mkdir -p
|
MKDIR+=mkdir -p
|
||||||
PCFLAGS+=-fPIC
|
PCFLAGS+=-fPIC
|
||||||
LIBNAME+=$(OUTDIR)/lovetoken.so
|
LIBNAME+=$(OUTDIR)/LoveToken.so
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
131
src/lt.c
131
src/lt.c
|
@ -36,7 +36,7 @@ THE SOFTWARE.
|
||||||
|
|
||||||
static LT_GarbageList *gbHead, *gbRover;
|
static LT_GarbageList *gbHead, *gbRover;
|
||||||
static FILE *parseFile;
|
static FILE *parseFile;
|
||||||
static LT_InitInfo info;
|
static LT_Config cfg;
|
||||||
static iconv_t icDesc;
|
static iconv_t icDesc;
|
||||||
static bool assertError = false;
|
static bool assertError = false;
|
||||||
static char *assertString;
|
static char *assertString;
|
||||||
|
@ -115,7 +115,7 @@ static void *LT_SetGarbage(void *p)
|
||||||
return gbRover->ptr;
|
return gbRover->ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LT_Init(LT_InitInfo initInfo)
|
void LT_Init(LT_Config initCfg)
|
||||||
{
|
{
|
||||||
gbHead = LT_Alloc(sizeof(LT_GarbageList));
|
gbHead = LT_Alloc(sizeof(LT_GarbageList));
|
||||||
gbHead->next = NULL;
|
gbHead->next = NULL;
|
||||||
|
@ -123,11 +123,11 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
|
|
||||||
gbRover = gbHead;
|
gbRover = gbHead;
|
||||||
|
|
||||||
info = initInfo;
|
cfg = initCfg;
|
||||||
|
|
||||||
if(info.doConvert && info.fromCode != NULL && info.toCode != NULL)
|
if(cfg.doConvert && cfg.fromCode != NULL && cfg.toCode != NULL)
|
||||||
{
|
{
|
||||||
icDesc = iconv_open(info.toCode, info.fromCode);
|
icDesc = iconv_open(cfg.toCode, cfg.fromCode);
|
||||||
|
|
||||||
if(icDesc == (iconv_t) -1)
|
if(icDesc == (iconv_t) -1)
|
||||||
{
|
{
|
||||||
|
@ -136,15 +136,15 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
info.doConvert = false;
|
cfg.doConvert = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(info.stripInvalid && info.doConvert)
|
if(cfg.stripInvalid && cfg.doConvert)
|
||||||
{
|
{
|
||||||
info.stripInvalid = false;
|
cfg.stripInvalid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(info.stringChars != NULL)
|
if(cfg.stringChars != NULL)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
|
|
||||||
for(i = 0; i < 6; i++)
|
for(i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
int c = info.stringChars[i];
|
int c = cfg.stringChars[i];
|
||||||
|
|
||||||
if(c != '\0')
|
if(c != '\0')
|
||||||
{
|
{
|
||||||
|
@ -169,7 +169,7 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
LT_SetGarbage(stringChars);
|
LT_SetGarbage(stringChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(info.charChars != NULL)
|
if(cfg.charChars != NULL)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -177,7 +177,92 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
|
|
||||||
for(i = 0; i < 6; i++)
|
for(i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
int c = info.charChars[i];
|
int c = cfg.charChars[i];
|
||||||
|
|
||||||
|
if(c != '\0')
|
||||||
|
{
|
||||||
|
charChars[i] = c;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
charChars[i] = '\0';
|
||||||
|
|
||||||
|
LT_SetGarbage(charChars);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LT_SetConfig(LT_Config newCfg)
|
||||||
|
{
|
||||||
|
cfg = newCfg;
|
||||||
|
|
||||||
|
if(cfg.doConvert && cfg.fromCode != NULL && cfg.toCode != NULL)
|
||||||
|
{
|
||||||
|
if(icDesc != NULL)
|
||||||
|
{
|
||||||
|
iconv_close(icDesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
icDesc = iconv_open(cfg.toCode, cfg.fromCode);
|
||||||
|
|
||||||
|
if(icDesc == (iconv_t) -1)
|
||||||
|
{
|
||||||
|
LT_Assert(true, "LT_Init: Failure opening iconv");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(icDesc != NULL)
|
||||||
|
{
|
||||||
|
iconv_close(icDesc);
|
||||||
|
icDesc = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.doConvert = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cfg.stripInvalid && cfg.doConvert)
|
||||||
|
{
|
||||||
|
cfg.stripInvalid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cfg.stringChars != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
stringChars = LT_Alloc(6);
|
||||||
|
|
||||||
|
for(i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
int c = cfg.stringChars[i];
|
||||||
|
|
||||||
|
if(c != '\0')
|
||||||
|
{
|
||||||
|
stringChars[i] = c;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stringChars[i] = '\0';
|
||||||
|
|
||||||
|
LT_SetGarbage(stringChars);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cfg.charChars != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
charChars = LT_Alloc(6);
|
||||||
|
|
||||||
|
for(i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
int c = cfg.charChars[i];
|
||||||
|
|
||||||
if(c != '\0')
|
if(c != '\0')
|
||||||
{
|
{
|
||||||
|
@ -197,7 +282,7 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
|
|
||||||
void LT_Quit()
|
void LT_Quit()
|
||||||
{
|
{
|
||||||
if(info.doConvert)
|
if(cfg.doConvert)
|
||||||
{
|
{
|
||||||
iconv_close(icDesc);
|
iconv_close(icDesc);
|
||||||
}
|
}
|
||||||
|
@ -269,6 +354,14 @@ bool LT_OpenFile(const char *filePath)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LT_SetPos(int newPos)
|
||||||
|
{
|
||||||
|
if(fseek(parseFile, newPos, SEEK_SET) != 0)
|
||||||
|
{
|
||||||
|
LT_Assert(ferror(parseFile), "LT_SetPos: Failed to set position");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LT_CloseFile()
|
void LT_CloseFile()
|
||||||
{
|
{
|
||||||
if(parseFile != NULL)
|
if(parseFile != NULL)
|
||||||
|
@ -300,7 +393,7 @@ char *LT_ReadNumber()
|
||||||
|
|
||||||
str[i++] = c;
|
str[i++] = c;
|
||||||
|
|
||||||
if(info.stripInvalid)
|
if(cfg.stripInvalid)
|
||||||
{
|
{
|
||||||
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
||||||
}
|
}
|
||||||
|
@ -308,7 +401,7 @@ char *LT_ReadNumber()
|
||||||
|
|
||||||
str[i++] = '\0';
|
str[i++] = '\0';
|
||||||
|
|
||||||
if(info.doConvert)
|
if(cfg.doConvert)
|
||||||
{
|
{
|
||||||
LT_DoConvert(&str);
|
LT_DoConvert(&str);
|
||||||
}
|
}
|
||||||
|
@ -339,7 +432,7 @@ char *LT_ReadString(char term)
|
||||||
return LT_SetGarbage(emptyString);
|
return LT_SetGarbage(emptyString);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c == '\\' && info.escapeChars)
|
if(c == '\\' && cfg.escapeChars)
|
||||||
{
|
{
|
||||||
c = fgetc(parseFile);
|
c = fgetc(parseFile);
|
||||||
|
|
||||||
|
@ -365,7 +458,7 @@ char *LT_ReadString(char term)
|
||||||
|
|
||||||
str[i++] = c;
|
str[i++] = c;
|
||||||
|
|
||||||
if(info.stripInvalid)
|
if(cfg.stripInvalid)
|
||||||
{
|
{
|
||||||
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
||||||
}
|
}
|
||||||
|
@ -374,7 +467,7 @@ char *LT_ReadString(char term)
|
||||||
|
|
||||||
str[i++] = '\0';
|
str[i++] = '\0';
|
||||||
|
|
||||||
if(info.doConvert)
|
if(cfg.doConvert)
|
||||||
{
|
{
|
||||||
LT_DoConvert(&str);
|
LT_DoConvert(&str);
|
||||||
}
|
}
|
||||||
|
@ -755,7 +848,7 @@ LT_Token LT_GetToken()
|
||||||
|
|
||||||
str[i++] = '\0'; // [marrub] Completely forgot this line earlier. Really screwed up everything.
|
str[i++] = '\0'; // [marrub] Completely forgot this line earlier. Really screwed up everything.
|
||||||
|
|
||||||
if(info.doConvert)
|
if(cfg.doConvert)
|
||||||
{
|
{
|
||||||
LT_DoConvert(&str);
|
LT_DoConvert(&str);
|
||||||
}
|
}
|
||||||
|
|
11
src/lt.h
11
src/lt.h
|
@ -37,7 +37,7 @@ THE SOFTWARE.
|
||||||
|
|
||||||
// [marrub] This can be changed if you have either a lot of very
|
// [marrub] This can be changed if you have either a lot of very
|
||||||
// long strings, or a lot of very small strings, for optimization.
|
// long strings, or a lot of very small strings, for optimization.
|
||||||
#define TOKEN_STR_BLOCK_LENGTH 512
|
#define TOKEN_STR_BLOCK_LENGTH 128
|
||||||
|
|
||||||
// [marrub] When using in FFI, remove this from the declarations.
|
// [marrub] When using in FFI, remove this from the declarations.
|
||||||
// Also make sure to redefine this if your platform is not supported.
|
// Also make sure to redefine this if your platform is not supported.
|
||||||
|
@ -84,7 +84,7 @@ typedef struct
|
||||||
const char *toCode;
|
const char *toCode;
|
||||||
const char *stringChars;
|
const char *stringChars;
|
||||||
const char *charChars;
|
const char *charChars;
|
||||||
} LT_InitInfo;
|
} LT_Config;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -109,13 +109,16 @@ typedef struct LT_GarbageList_s
|
||||||
* Functions
|
* Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void LT_EXPORT LT_Init(LT_InitInfo initInfo);
|
void LT_EXPORT LT_Init(LT_Config initCfg);
|
||||||
|
void LT_EXPORT LT_SetConfig(LT_Config newCfg);
|
||||||
void LT_EXPORT LT_Quit();
|
void LT_EXPORT LT_Quit();
|
||||||
|
|
||||||
bool LT_EXPORT LT_Assert(bool assertion, const char *str);
|
bool LT_EXPORT LT_Assert(bool assertion, const char *str);
|
||||||
LT_AssertInfo LT_EXPORT LT_CheckAssert();
|
|
||||||
void LT_EXPORT LT_Error(int type); // [marrub] C use ONLY
|
void LT_EXPORT LT_Error(int type); // [marrub] C use ONLY
|
||||||
|
LT_AssertInfo LT_EXPORT LT_CheckAssert();
|
||||||
|
|
||||||
bool LT_EXPORT LT_OpenFile(const char *filePath);
|
bool LT_EXPORT LT_OpenFile(const char *filePath);
|
||||||
|
void LT_EXPORT LT_SetPos(int newPos);
|
||||||
void LT_EXPORT LT_CloseFile();
|
void LT_EXPORT LT_CloseFile();
|
||||||
|
|
||||||
char *LT_EXPORT LT_ReadNumber();
|
char *LT_EXPORT LT_ReadNumber();
|
||||||
|
|
Reference in New Issue
Block a user