Subversion Repositories Kolibri OS

Rev

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

  1. //CODED by Veliant, Leency 2008-2012. GNU GPL licence.
  2.  
  3.  
  4. inline fastcall dword strlen( EDI)
  5. {
  6.         asm {
  7.           xor ecx, ecx
  8.           xor eax, eax
  9.           dec ecx
  10.           repne scasb
  11.           sub eax, 2
  12.           sub eax, ecx
  13.         }
  14. }
  15.  
  16.  
  17. inline fastcall copystr( ESI,EDI)
  18. {
  19.         $cld
  20. l1:
  21.         $lodsb
  22.         $stosb
  23.         $test al,al
  24.         $jnz l1
  25. }
  26.  
  27. char buffer[11];
  28. inline fastcall dword IntToStr( ESI)
  29. {
  30.      $mov     edi, #buffer
  31.      $mov     ecx, 10
  32.      $test     esi, esi
  33.      $jns     f1
  34.      $mov     al, '-'
  35.      $stosb
  36.      $neg     esi
  37. f1:
  38.      $mov     eax, esi
  39.      $push     -'0'
  40. f2:
  41.      $xor     edx, edx
  42.      $div     ecx
  43.      $push     edx
  44.      $test     eax, eax
  45.      $jnz     f2
  46. f3:
  47.      $pop     eax
  48.      $add     al, '0'
  49.      $stosb
  50.      $jnz     f3
  51.      $mov     eax, #buffer
  52.      $ret
  53. }
  54.  
  55. inline fastcall dword StrToInt()
  56. {
  57.         ESI=EDI=EAX;
  58.         IF(DSBYTE[ESI]=='-')ESI++;
  59.         EAX=0;
  60.         BH=AL;
  61.         do{
  62.                 BL=DSBYTE[ESI]-'0';
  63.                 EAX=EAX*10+EBX;
  64.                 ESI++;
  65.         }while(DSBYTE[ESI]>0);
  66.         IF(DSBYTE[EDI]=='-') -EAX;
  67. }
  68.  
  69. dword StrToCol(char* htmlcolor)
  70. {
  71.   dword j, color=0;
  72.   char ch=0x00;
  73.  
  74.   FOR (j=0; j<6; j++)
  75.   {
  76.     ch=ESBYTE[htmlcolor+j];
  77.     IF ((ch>='0') && (ch<='9')) ch -= '0';
  78.     IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
  79.     IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
  80.     color = color*0x10 + ch;
  81.   }
  82.  
  83.   return color;
  84. }
  85.  
  86. inline fastcall int strcmp(ESI, EDI)
  87. {
  88.         loop()
  89.         {
  90.                 IF (DSBYTE[ESI]<DSBYTE[EDI]) RETURN -1;
  91.                 IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
  92.                 IF (DSBYTE[ESI]=='\0') RETURN 0;
  93.                 ESI++;
  94.                 EDI++;
  95.         }
  96. }
  97.  
  98.  
  99.  
  100.  
  101. inline fastcall unsigned int strchr(ESI,BL)
  102. {
  103.         int jj=0, last=-1;
  104.         do{
  105.                 jj++;
  106.                 $lodsb
  107.                 IF(AL==BL) last=jj;
  108.         } while(AL!=0);
  109.         return last;
  110. }
  111.  
  112.  
  113. inline fastcall TitleCase( EDX)
  114. {
  115.         AL=DSBYTE[EDX];
  116.         IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f;
  117.         IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32;        //à-ï
  118.         IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80;        //à-ï
  119.         do{
  120.                 EDX++;
  121.                 AL=DSBYTE[EDX];
  122.                 IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;}
  123.                 IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
  124.                 IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80;        //à-ï
  125.         }while(AL!=0);
  126. }
  127.  
  128.  
  129.  
  130. inline fastcall strcpy( EDI, ESI)
  131. {
  132.         $cld
  133. l2:
  134.         $lodsb
  135.         $stosb
  136.         $test al,al
  137.         $jnz l2
  138. }
  139.  
  140.  
  141. inline fastcall strcat( EDI, ESI)
  142. {
  143.   asm {
  144.     mov ebx, edi
  145.     xor ecx, ecx
  146.     xor eax, eax
  147.     dec ecx
  148.     repne scasb
  149.     dec edi
  150.     mov edx, edi
  151.     mov edi, esi
  152.     xor ecx, ecx
  153.     xor eax, eax
  154.     dec ecx
  155.     repne scasb
  156.     xor ecx, 0ffffffffh
  157.     mov edi, edx
  158.     mov edx, ecx
  159.     mov eax, edi
  160.     shr ecx, 2
  161.     rep movsd
  162.     mov ecx, edx
  163.     and ecx, 3
  164.     rep movsb
  165.     mov eax, ebx
  166.         }
  167. }