home *** CD-ROM | disk | FTP | other *** search
- Optimized for speed:
- === ===
- function UpperCase(S: string): string;
- var
- I: Integer;
- begin
- for I := 1 to Ord(S[0]) do if S[I] in ['a'..'z'] then Dec(S[i], 32);
- Uppercase := S;
- end;
-
- function LowerCase(S: string): string;
- var
- I: Integer;
- begin
- for I := 1 to Ord(S[0]) do if S[I] in ['A'..'Z'] then Inc(S[i], 32);
- Uppercase := S;
- end;
- === ===
- Optimized for memory (use constant declarations to cut down on stack
- usage--but then you can't modify S) :
-
- === ===
- function UpperCase(const S: string): string;
- var
- I: Integer;
- begin
- Uppercase := S;
- for I := 1 to Ord(S[0]) do if S[I] in ['a'..'z'] then
- UpperCase[I] := Chr(Ord(S[I])-32);
- end;
-
- function LowerCase(const S: string): string;
- var
- I: Integer;
- begin
- LowerCase := S;
- for I := 1 to Ord(S[0]) do if S[I] in ['A'..'Z'] then
- LowerCase[I] := Chr(Ord(S[I])+32);
- end;
- === ===
-
- With ASM, the fastest case routines I have seen so far {w.out using a
- look-up table that is}
-
-
- function UpperCase(const S: string): string; assembler;
- asm
- push ds
- lds si, s
- les di, @result
- lodsb
- stosb
- xor ch, ch
- mov cl, al
- jcxz @empty
- @upperloop:
- lodsb
- cmp al, 'a'
- jb @cont
- cmp al, 'z'
- ja @cont
- sub al, ' '
- @cont:
- stosb
- loop @upperloop
- @empty:
- pop ds
- end;
-
- function LowerCase(const S: string): string; assembler;
- asm
- push ds
- lds si, s
- les di, @result
- lodsb
- stosb
- xor ch, ch
- mov cl, al
- jcxz @empty
- @lowerloop:
- lodsb
- cmp al, 'A'
- jb @cont
- cmp al, 'Z'
- ja @cont
- add al, ' '
- @cont:
- stosb
- loop @lowerloop
- @empty:
- pop ds
- end;