Subversion Repositories Kolibri OS

Rev

Rev 3433 | 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.  
  10. void GetIni(byte onload)
  11. {
  12.         byte section[32], parametr[32], option[256], InfType=0;
  13.         char bukva[2];
  14.         int errornum, tj;
  15.         static dword buff, fsize;
  16.         //÷èòàåì ôàéë
  17.         if (onload==1)
  18.         {
  19.                 free(buff);
  20.                 if (!GetFile(#buff, #fsize, abspath("Eolite.ini"))) notify("Eolite.ini not found. Defaults will be used.");
  21.         }
  22.         //ïàðñèì åãî
  23.         for (tj=0; tj<fsize; tj++;)
  24.         {  
  25.                 bukva = ESBYTE[buff+tj];
  26.                 switch (bukva)
  27.                 {
  28.                         case ';':
  29.                                 InfType=COMMENT;
  30.                                 break;                         
  31.                         case '[':
  32.                                 InfType=SECTION;
  33.                                 section=NULL;
  34.                                 break;
  35.                         case ']':
  36.                                 InfType=PARAM;
  37.                                 break;
  38.                         case '=':
  39.                                 InfType=OPTION;
  40.                                 break;
  41.                         case 0x0a:
  42.                         case 0x0d:
  43.                                 InfType=PARAM;
  44.                                 IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option);
  45.                                 IF (!strcmp(#parametr,"LineHeight")) files.line_h = atoi(#option);
  46.                                 IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
  47.                                
  48.                                 /*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
  49.                                 {
  50.                                         copystr(#parametr, #disk_list[disc_num].Item);
  51.                                         disc_num++;
  52.                                 }*/
  53.                                
  54.                                 IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
  55.                                 {
  56.                                         errornum=RunProgram(#option,#file_path);
  57.                                         IF (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
  58.                                         return;
  59.                                 }
  60.                                 parametr=option=NULL;
  61.                                 break;
  62.                         default:
  63.                                 IF (InfType==SECTION) chrcat(#section, bukva);
  64.                                 IF (InfType==PARAM) chrcat(#parametr, bukva);
  65.                                 IF (InfType==OPTION) chrcat(#option, bukva);
  66.                 }
  67.         }
  68.         if (file_path) && (!onload)
  69.         {
  70.                 errornum=RunProgram(#file_path,NULL);
  71.                 if (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
  72.         }
  73. }
  74.  
  75.  
  76. void Write_Error(int error_number)
  77. {
  78.         if (files.current>=0) Line_ReDraw(0xFF0000, files.current);
  79.         pause(5);
  80.         notify(get_error(error_number));
  81. }
  82.  
  83.  
  84. dword StrToCol(char* htmlcolor)
  85. {
  86.   dword j, color=0;
  87.   char ch=0x00;
  88.  
  89.   FOR (j=0; j<6; j++)
  90.   {
  91.     ch=ESBYTE[htmlcolor+j];
  92.     IF ((ch>='0') && (ch<='9')) ch -= '0';
  93.     IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
  94.     IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
  95.     color = color*0x10 + ch;
  96.   }
  97.    return color;
  98. }