Subversion Repositories Kolibri OS

Rev

Rev 3050 | 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. }
  53.  
  54. inline fastcall dword StrToInt()
  55. {
  56.         ESI=EDI=EAX;
  57.         IF(DSBYTE[ESI]=='-')ESI++;
  58.         EAX=0;
  59.         BH=AL;
  60.         do{
  61.                 BL=DSBYTE[ESI]-'0';
  62.                 EAX=EAX*10+EBX;
  63.                 ESI++;
  64.         }while(DSBYTE[ESI]>0);
  65.         IF(DSBYTE[EDI]=='-') -EAX;
  66. }
  67.  
  68. dword StrToCol(char* htmlcolor)
  69. {
  70.   dword j, color=0;
  71.   char ch=0x00;
  72.  
  73.   FOR (j=0; j<6; j++)
  74.   {
  75.     ch=ESBYTE[htmlcolor+j];
  76.     IF ((ch>='0') && (ch<='9')) ch -= '0';
  77.     IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
  78.     IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
  79.     color = color*0x10 + ch;
  80.   }
  81.    return color;
  82. }
  83.  
  84. inline fastcall signed char strcmp(ESI, EDI)
  85. {
  86.         loop()
  87.         {
  88.                 IF (DSBYTE[ESI]<DSBYTE[EDI]) RETURN -1;
  89.                 IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
  90.                 IF (DSBYTE[ESI]=='\0') RETURN 0;
  91.                 ESI++;
  92.                 EDI++;
  93.         }
  94. }
  95.  
  96.  
  97.  
  98. inline fastcall signed int strchr(ESI,BL)
  99. {
  100.         int jj=0, last=-1;
  101.         do{
  102.                 jj++;
  103.                 $lodsb
  104.                 IF(AL==BL) last=jj;
  105.         } while(AL!=0);
  106.         return last;
  107. }
  108.  
  109.  
  110. inline fastcall TitleCase( EDX)
  111. {
  112.         AL=DSBYTE[EDX];
  113.         IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f;
  114.         IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32;        //à-ï
  115.         IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80;        //à-ï
  116.         do{
  117.                 EDX++;
  118.                 AL=DSBYTE[EDX];
  119.                 IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;}
  120.                 IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
  121.                 IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80;        //à-ï
  122.         }while(AL!=0);
  123. }
  124.  
  125.  
  126.  
  127. inline fastcall strcpy( EDI, ESI)
  128. {
  129.         $cld
  130. L2:
  131.         $lodsb
  132.         $stosb
  133.         $test al,al
  134.         $jnz L2
  135. }
  136.  
  137.  
  138. inline fastcall strcat( EDI, ESI)
  139. {
  140.   asm {
  141.     mov ebx, edi
  142.     xor ecx, ecx
  143.     xor eax, eax
  144.     dec ecx
  145.     repne scasb
  146.     dec edi
  147.     mov edx, edi
  148.     mov edi, esi
  149.     xor ecx, ecx
  150.     xor eax, eax
  151.     dec ecx
  152.     repne scasb
  153.     xor ecx, 0ffffffffh
  154.     mov edi, edx
  155.     mov edx, ecx
  156.     mov eax, edi
  157.     shr ecx, 2
  158.     rep movsd
  159.     mov ecx, edx
  160.     and ecx, 3
  161.     rep movsb
  162.     mov eax, ebx
  163.         }
  164. }