Subversion Repositories Kolibri OS

Rev

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