2008-12-29 04:49:26 +03:00
//INI parser in C--, GPL licence.
2011-07-30 18:59:48 +04:00
//Leency - 2011
2008-12-29 04:49:26 +03:00
#define COMMENT 0
#define SECTION 1
#define PARAM 2
#define OPTION 3
2011-08-18 17:32:06 +04:00
char NOTIFY_PATH[7]="@notify";
2011-07-30 18:59:48 +04:00
void GetIni(byte onload)
2008-12-29 04:49:26 +03:00
{
byte section[32]='', parametr[32]='', option[256]='', InfType=0;
word bukva[1];
2011-07-30 18:59:48 +04:00
int errornum;
2008-12-29 04:49:26 +03:00
dword buff, fsize, tj;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
buff = malloc(1048576);
2011-08-18 17:32:06 +04:00
IF (onload==1) copystr(".ini", #program_path+strlen(#program_path)); //facepalm
ReadFile(0, 1048576, buff, #program_path);
IF (EAX<>6) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> -<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
ReadFile(0, 1048576, buff, "/sys/File managers/Eolite.ini");
IF (EAX<>6) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2011-07-30 18:59:48 +04:00
{
2011-08-18 17:32:06 +04:00
IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
2011-07-30 18:59:48 +04:00
IF (onload==0) goto RUN_AS_PROGRAM;
}
2008-12-29 04:49:26 +03:00
fsize=EBX;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
for (tj=0; tj<fsize; tj++;)
{
bukva = ESBYTE[buff+tj];
switch (bukva)
{
case ';':
InfType=COMMENT;
break;
case '[':
InfType=SECTION;
section='';
break;
case ']':
InfType=PARAM;
break;
case '=':
InfType=OPTION;
break;
case 0x0a:
case 0x0d:
InfType=PARAM;
//IF (strcmp(#parametr,"select_color")==0) videlenie=StrToCol(#option);
2010-02-15 04:23:03 +03:00
IF (parametr) && (!strcmp(#file_name+find_symbol(#file_name,'.'),#parametr)) {
2011-07-30 18:59:48 +04:00
errornum=RunProgram(#option,#file_path);
IF (errornum<0) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
2011-08-22 04:17:55 +04:00
//WriteDebug(#option);
2011-07-30 18:59:48 +04:00
Write_Debug_Error(errornum);
}
2010-02-15 04:23:03 +03:00
return;
}
2008-12-29 04:49:26 +03:00
parametr=option='';
break;
default:
IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section));
IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr));
IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option));
}
}
2011-07-30 18:59:48 +04:00
RUN_AS_PROGRAM:
IF (file_path) errornum=RunProgram(#file_path,'');
IF (errornum<0) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
2011-08-22 04:17:55 +04:00
//WriteDebug(#file_path);
2011-07-30 18:59:48 +04:00
Write_Debug_Error(errornum);
}
}
///////////////////////////////////////////
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ///
///////////////////////////////////////////
void Write_Debug_Error(int error_number){
IF (error_number<0) error_number=-1*error_number;
switch (error_number) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
2011-08-18 17:32:06 +04:00
CASE 2: RunProgram(#NOTIFY_PATH, "Eolite: error 2 - Function is not supported for the given file system");
2011-07-30 18:59:48 +04:00
return;
2011-08-18 17:32:06 +04:00
CASE 3: RunProgram(#NOTIFY_PATH, "Eolite: error 3 - Unknown file system");
2011-07-30 18:59:48 +04:00
return;
2011-08-18 17:32:06 +04:00
CASE 5: RunProgram(#NOTIFY_PATH, "Eolite: error 5 - File or folder not found");
2011-07-30 18:59:48 +04:00
return;
2011-08-18 17:32:06 +04:00
CASE 6: RunProgram(#NOTIFY_PATH, "Eolite: error 6 - End of file, EOF");
2011-07-30 18:59:48 +04:00
return;
2011-08-18 17:32:06 +04:00
CASE 7: RunProgram(#NOTIFY_PATH, "Eolite: error 7 - Pointer lies outside of application memory");
2011-07-30 18:59:48 +04:00
return;
2011-08-18 17:32:06 +04:00
case 8: RunProgram(#NOTIFY_PATH, "Eolite: error 8 - FAT table is destroyed");
2011-07-30 18:59:48 +04:00
return;
2011-08-18 17:32:06 +04:00
case 9: RunProgram(#NOTIFY_PATH, "Eolite: error 9 - FAT table is destroyed");
2011-07-30 18:59:48 +04:00
RETURN;
2011-08-18 17:32:06 +04:00
case 10:RunProgram(#NOTIFY_PATH, "Eolite: error 10 - Access denied");
2011-07-30 18:59:48 +04:00
RETURN;
2011-08-18 17:32:06 +04:00
case 11:RunProgram(#NOTIFY_PATH, "Eolite: error 11 - Device error");
2011-07-30 18:59:48 +04:00
RETURN;
2011-08-18 17:32:06 +04:00
case 30:RunProgram(#NOTIFY_PATH, "Eolite: error 30 - Not enough memory");
2011-07-30 18:59:48 +04:00
RETURN;
2011-08-18 17:32:06 +04:00
case 31:RunProgram(#NOTIFY_PATH, "Eolite: error 31 - File is not executable");
2011-07-30 18:59:48 +04:00
RETURN;
2011-08-18 17:32:06 +04:00
case 32:RunProgram(#NOTIFY_PATH, "Eolite: error 32 - Too many processes");
2011-07-30 18:59:48 +04:00
RETURN;
2011-08-18 17:32:06 +04:00
default:RunProgram(#NOTIFY_PATH, "Unknown error number O_o");
2011-07-30 18:59:48 +04:00
}
2008-12-29 04:49:26 +03:00
}