Subversion Repositories Kolibri OS

Rev

Rev 2875 | Blame | Last modification | View Log | Download | RSS feed

  1. //INI parser in C--, GPL licence.
  2. //Leency - 2012
  3.  
  4. #define COMMENT 0
  5. #define SECTION 1
  6. #define PARAM   2
  7. #define OPTION  3
  8.  
  9. char NOTIFY_PATH[7]="@notify";
  10.  
  11. unsigned char *ERROR_TEXT[]={
  12. "Code #0 - No error",
  13. "Error #1 - Base or partition of a hard disk is not defined",
  14. "Error #2 - Function isn't supported for this file system",
  15. "Error #3 - Unknown file system",
  16. "Error #4 - Reserved, is never returned",
  17. "Error #5 - File or folder not found",
  18. "Error #6 - End of file, EOF",
  19. "Error #7 - Pointer lies outside of application memory",
  20. "Error #8 - FAT table is destroyed",
  21. "Error #9 - FAT table is destroyed",
  22. "Error #10 - Access denied",
  23. "Error #11 - Device error",
  24. "", "", "", "", "", "", "", "", "",
  25. "", "", "", "", "", "", "", "", "",
  26. "Error #30 - Not enough memory",
  27. "Error #31 - File is not executable",
  28. "Error #32 - Too many processes",
  29. 0};
  30.  
  31. void GetIni(byte onload)
  32. {
  33.         byte section[32]='', parametr[32]='', option[256]='', InfType=0;
  34.         word bukva[1];
  35.         int errornum;
  36.         dword buff, fsize, tj;
  37.         //÷èòàåì ôàéë
  38.         free(buff);
  39.         buff = malloc(12000);
  40.         IF (onload==1) copystr(".ini", #program_path+strlen(#program_path));
  41.         ReadFile(0, 12000, buff, #program_path);
  42.         IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè íåò â ïàïêå ñ ïðîãðàììîé ñìîòðèì â ïàïêå ïî-óìîë÷àíèþ
  43.                 ReadFile(0, 12000, buff, "/sys/File managers/Eolite.ini");
  44.         IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè òóïî íåò ïå÷àëüêà
  45.         {
  46.                 IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
  47.                 IF (onload==0) goto RUN_AS_PROGRAM;
  48.         }
  49.         fsize=EBX;
  50.         //ïàðñèì åãî
  51.         for (tj=0; tj<fsize; tj++;)
  52.         {  
  53.                 bukva = ESBYTE[buff+tj];
  54.                 switch (bukva)
  55.                 {
  56.                         case ';':
  57.                                 InfType=COMMENT;
  58.                                 break;                         
  59.                         case '[':
  60.                                 InfType=SECTION;
  61.                                 section='';
  62.                                 break;
  63.                         case ']':
  64.                                 InfType=PARAM;
  65.                                 break;
  66.                         case '=':
  67.                                 InfType=OPTION;
  68.                                 break;
  69.                         case 0x0a:
  70.                         case 0x0d:
  71.                                 InfType=PARAM;
  72.                                 IF (!strcmp(#parametr,"SelectionColor")) selection_col=StrToCol(#option);
  73.                                 IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=StrToInt(#option);
  74.                                 IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=StrToInt(#option);
  75.                                
  76.                                 /*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
  77.                                 {
  78.                                         copystr(#parametr, #disk_list[disc_num].Item);
  79.                                         disc_num++;
  80.                                 }*/
  81.                                
  82.                                 IF (parametr) && (!strcmp(#file_name+strchr(#file_name,'.'),#parametr)) {
  83.                                         errornum=RunProgram(#option,#file_path);
  84.                                         IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
  85.                                         {
  86.                                                 //WriteDebug(#option);
  87.                                                 Write_Error(errornum);
  88.                                         }
  89.                                         return;
  90.                                 }
  91.                                 parametr=option='';
  92.                                 break;
  93.                         default:
  94.                                 IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section));
  95.                                 IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr));
  96.                                 IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option));
  97.                 }
  98.         }
  99.         RUN_AS_PROGRAM:
  100.         IF (file_path) errornum=RunProgram(#file_path,'');
  101.         IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
  102.         {
  103.                 Write_Error(errornum);
  104.         }
  105. }
  106.  
  107.  
  108. void Write_Error(int error_number)
  109. {
  110.         char error[256];
  111.  
  112.         if (error_number<0) error_number=-1*error_number;
  113.        
  114.         if (error_number<33)
  115.                 copystr(ERROR_TEXT[error_number], #error);
  116.         else
  117.                 {
  118.                         copystr(IntToStr(error_number), #error);
  119.                         copystr(" - Unknown error number O_o", #error+strlen(#error));
  120.                 }
  121.         if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
  122.         Pause(5);
  123.         RunProgram(#NOTIFY_PATH, #error);
  124.         //DrawBar(192,onTop(0, BUTTON_HEIGHT+7),onLeft(27,192),BUTTON_HEIGHT,0xFF0000);
  125.         //WriteText(205,onTop(-5, BUTTON_HEIGHT+7),0x80,0xFFFFFF,#error,0);
  126. }