Subversion Repositories Kolibri OS

Rev

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