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