//INI parser in C--, GPL licence. //Leency - 2012 #define COMMENT 0 #define SECTION 1 #define PARAM 2 #define OPTION 3 unsigned char *ERROR_TEXT[]={ "Code #0 - No error", "Error #1 - Base or partition of a hard disk is not defined", "Error #2 - Function isn't supported for this file system", "Error #3 - Unknown file system", "Error #4 - Reserved, is never returned", "Error #5 - File or folder not found", "Error #6 - End of file, EOF", "Error #7 - Pointer lies outside of application memory", "Error #8 - FAT table is destroyed", "Error #9 - FAT table is destroyed", "Error #10 - Access denied", "Error #11 - Device error", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Error #30 - Not enough memory", "Error #31 - File is not executable", "Error #32 - Too many processes", 0}; void GetIni(byte onload) { byte section[32]='', parametr[32]='', option[256]='', InfType=0; word bukva[1]; int errornum; dword buff, fsize, tj; //÷èòàåì ôàéë free(buff); buff = malloc(12000); IF (onload==1) copystr(".ini", #program_path+strlen(#program_path)); ReadFile(0, 12000, buff, #program_path); IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè íåò â ïàïêå ñ ïðîãðàììîé ñìîòðèì â ïàïêå ïî-óìîë÷àíèþ ReadFile(0, 12000, buff, "/sys/File managers/Eolite.ini"); IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè òóïî íåò ïå÷àëüêà { IF (onload==1) notify("Eolite.ini not found. Defaults will be used."); IF (onload==0) goto RUN_AS_PROGRAM; } fsize=EBX; //ïàðñèì åãî 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,"SelectionColor")) selection_col=StrToCol(#option); IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=StrToInt(#option); IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=StrToInt(#option); /*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload) { copystr(#parametr, #disk_list[disc_num].Item); disc_num++; }*/ IF (parametr) && (!strcmp(#file_name+strchr(#file_name,'.'),#parametr)) { errornum=RunProgram(#option,#file_path); IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå { //WriteDebug(#option); Write_Error(errornum); } return; } 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)); } } RUN_AS_PROGRAM: IF (file_path) errornum=RunProgram(#file_path,''); IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå { Write_Error(errornum); } } void Write_Error(int error_number) { char error[256]; if (error_number<0) error_number=-1*error_number; if (error_number<33) copystr(ERROR_TEXT[error_number], #error); else { copystr(IntToStr(error_number), #error); copystr(" - Unknown error number O_o", #error+strlen(#error)); } if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn); Pause(5); notify(#error); //DrawBar(192,onTop(0, BUTTON_HEIGHT+7),onLeft(27,192),BUTTON_HEIGHT,0xFF0000); //WriteText(205,onTop(-5, BUTTON_HEIGHT+7),0x80,0xFFFFFF,#error,0); }