Subversion Repositories Kolibri OS

Rev

Rev 1415 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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