home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / share / Dos / VARIOS / pascal / SWAG9605.DDD / 0112_More String case functions.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-05-31  |  1.6 KB  |  93 lines

  1. Optimized for speed:
  2. === ===
  3. function UpperCase(S: string): string;
  4. var 
  5.   I: Integer;
  6. begin
  7.   for I := 1 to Ord(S[0]) do if S[I] in ['a'..'z'] then Dec(S[i], 32);
  8.   Uppercase := S;
  9. end;
  10.  
  11. function LowerCase(S: string): string;
  12. var
  13.   I: Integer;
  14. begin 
  15.   for I := 1 to Ord(S[0]) do if S[I] in ['A'..'Z'] then Inc(S[i], 32);
  16.   Uppercase := S;
  17. end;
  18. === ===
  19. Optimized for memory (use constant declarations to cut down on stack
  20. usage--but then you can't modify S) :
  21.  
  22. === ===
  23. function UpperCase(const S: string): string;
  24. var
  25.   I: Integer;
  26. begin
  27.   Uppercase := S;
  28.   for I := 1 to Ord(S[0]) do if S[I] in ['a'..'z'] then
  29.     UpperCase[I] := Chr(Ord(S[I])-32);
  30. end;
  31.  
  32. function LowerCase(const S: string): string;
  33. var
  34.   I: Integer;
  35. begin
  36.   LowerCase := S;
  37.   for I := 1 to Ord(S[0]) do if S[I] in ['A'..'Z'] then
  38.     LowerCase[I] := Chr(Ord(S[I])+32);
  39. end;
  40. === ===
  41.  
  42. With ASM, the fastest case routines I have seen so far {w.out using a 
  43. look-up table that is}
  44.  
  45.  
  46. function UpperCase(const S: string): string; assembler;
  47. asm
  48.   push ds
  49.   lds si, s
  50.   les di, @result
  51.   lodsb
  52.   stosb
  53.   xor ch, ch
  54.   mov cl, al
  55.   jcxz @empty
  56. @upperloop:
  57.   lodsb
  58.   cmp al, 'a'
  59.   jb @cont
  60.   cmp al, 'z'
  61.   ja @cont
  62.   sub al, ' '
  63. @cont:
  64.   stosb
  65.   loop @upperloop
  66. @empty:
  67.   pop ds
  68. end;
  69.  
  70. function LowerCase(const S: string): string; assembler;
  71. asm
  72.   push ds
  73.   lds si, s
  74.   les di, @result
  75.   lodsb
  76.   stosb
  77.   xor ch, ch
  78.   mov cl, al
  79.   jcxz @empty
  80. @lowerloop:
  81.   lodsb
  82.   cmp al, 'A'
  83.   jb @cont
  84.   cmp al, 'Z'
  85.   ja @cont
  86.   add al, ' '
  87. @cont:
  88.   stosb
  89.   loop @lowerloop
  90. @empty:
  91.   pop ds
  92. end;
  93.