Subversion Repositories Kolibri OS

Rev

Rev 4166 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. inline fastcall void wintodos( ESI)
  3. {
  4.    while (BL=ESBYTE[ESI])
  5.    {
  6.         IF (BL>=192)
  7.         {
  8.              IF (BL>=240) ESBYTE[ESI] = BL - 16;
  9.              ELSE ESBYTE[ESI] = BL - 64;
  10.         }
  11.         ELSE
  12.         {
  13.                         IF (BL==178) ESBYTE[ESI] = 73;  //I
  14.                         IF (BL==179) ESBYTE[ESI] = 105; //i
  15.                         IF (BL==175) ESBYTE[ESI] = 244; //J
  16.                         IF (BL==191) ESBYTE[ESI] = 245; //j
  17.                         IF (BL==170) ESBYTE[ESI] = 242; //E
  18.                         IF (BL==186) ESBYTE[ESI] = 243; //e
  19.                         IF (BL==168) ESBYTE[ESI] = 240; //Ё
  20.                         IF (BL==184) ESBYTE[ESI] = 'e'; //e
  21.                         IF (BL==180) ESBYTE[ESI] = 254; //у
  22.                         IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
  23.                         IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
  24.         }
  25.         ESI++;
  26.    }
  27. }
  28.  
  29.  
  30. byte mas[66] = "юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ";
  31. inline fastcall void koitodos( EDI)
  32. {
  33.         WHILE (BL=ESBYTE[EDI])
  34.         {      
  35.                 IF (BL >= 0xC0)
  36.                 {
  37.                         BL -= 0xC0;
  38.                         ESBYTE[EDI] = mas[BL];
  39.                 }
  40.                 //IF (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i';
  41.                 EDI++;
  42.         }
  43. }
  44.  
  45. //Asper, lev
  46. //uncomplete
  47. inline fastcall void utf8rutodos( ESI)
  48. {
  49.     EDI=ESI;
  50.   while (BL=ESBYTE[ESI])
  51.   {
  52.     IF (BL == 0xD0) || (BL == 0xD1) EDI--;
  53.         else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //°
  54.         else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //ь
  55.         //0xE2 0x80 - ёуЁєяяшЁютрЄ№
  56.         else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
  57.         SWITCH (ESBYTE[ESI+2])
  58.         {
  59.         case 0x93: //long defis
  60.         CASE 0x94:
  61.         {
  62.           ESBYTE[EDI] = '-';
  63.           ESI+=2;
  64.             BREAK;
  65.         }
  66.         CASE 0xA2: //central point
  67.         {
  68.           ESBYTE[EDI] = '*';
  69.           ESI+=2;
  70.             BREAK;
  71.         }
  72.         CASE 0xA6: //ьэюуюЄюўшх
  73.         {
  74.           ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.';
  75.           EDI+=2;
  76.           ESI+=2;
  77.           break;
  78.           }
  79.         }
  80.  
  81.         else IF (BL == 0xC2) //ЄрсышЎє яхЁхъюфшЁютюъ?
  82.           SWITCH(ESBYTE[ESI+1]) {
  83.             case 0xAB: //"
  84.             CASE 0xBB: //"
  85.               {
  86.                 ESBYTE[EDI] = '\"';
  87.                 ESI++;
  88.                 BREAK;
  89.               }
  90.             CASE 0xB7: // _
  91.               {
  92.                 ESBYTE[EDI] = '_';
  93.                 ESI++;
  94.                 BREAK;
  95.               }
  96.             CASE 0xA0: // Alt+160 - эхЁрчсштр■∙шщ яЁюсхы
  97.               {
  98.                 ESBYTE[EDI] = ' ';
  99.                 ESI++;
  100.                 BREAK;
  101.               }
  102.             CASE 0xB0: // уЁрфєё
  103.               {
  104.                 ESBYTE[EDI] = '\29';
  105.                 ESI++;
  106.                 BREAK;
  107.               }
  108.                         CASE 0xA9: // (c) --- т√ыхЄ ╬_ю
  109.                         {
  110.                           ESBYTE[EDI] = 'c';
  111.                           ESI++;
  112.                           BREAK;
  113.                         }
  114.                         CASE 0xAE: // (r)
  115.                         {
  116.                           ESBYTE[EDI] = 'r';
  117.                           ESI++;
  118.                           BREAK;
  119.                         }
  120.      }
  121.  
  122.         ELSE IF (BL >= 0x90) && (BL <= 0xAF)
  123.     {
  124.       BL -= 0x10;
  125.       ESBYTE[EDI] = BL;
  126.     }
  127.         ELSE IF (BL >= 0x80) && (BL <= 0x8F)
  128.     {
  129.       BL += 0x60;
  130.       ESBYTE[EDI] = BL;
  131.     }
  132.       ELSE IF (BL >= 0xB0) && (BL <= 0xBF)
  133.     {
  134.      BL -= 0x10;
  135.      ESBYTE[EDI] = BL;
  136.     }
  137.     ELSE ESBYTE[EDI] = BL;
  138.     ESI++;
  139.     EDI++;
  140.   }
  141.   WHILE (EDI<ESI)
  142.   {
  143.     ESBYTE[EDI] = ' ';
  144.     EDI++;
  145.    }
  146. }
  147.  
  148. //------------------------------------------------------------------------------
  149.  
  150. :dword Hex2Symb(char* htmlcolor)
  151. {
  152.   dword j=0, symbol=0;
  153.   char ch=0x00;
  154.   FOR (;j<2;j++)
  155.   {
  156.     ch=ESBYTE[htmlcolor+j];
  157.     IF (ch==0x0d) || (ch=='\9') RETURN 0;
  158.     IF ((ch>='0') && (ch<='9')) ch -= '0';
  159.     IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
  160.     IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
  161.     symbol = symbol*0x10 + ch;
  162.   }
  163.   wintodos(#symbol);
  164.   AL=symbol;
  165. }
  166.  
  167.  
  168. :dword ConvertSize(unsigned int bytes)
  169. {
  170.   unsigned char size_prefix[8], size_nm[4];
  171.   if (bytes>=1073741824) strcpy(#size_nm, " Gb");
  172.   else if (bytes>=1048576) strcpy(#size_nm, " Mb");
  173.   else if (bytes>=1024) strcpy(#size_nm, " Kb");
  174.   else strcpy(#size_nm, " b ");
  175.   while (bytes>1023) bytes/=1024;
  176.   itoa_(#size_prefix, bytes);
  177.   strcat(#size_prefix, #size_nm);
  178.   return #size_prefix;
  179. }