[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]
Three ways to convert a string to uppercase (without international support).
{$R-,S-,I- }
Procedure UpCaseStr0(Var s : String);
Var
i : Integer;
Begin
For i := 1 to Length(s) Do
s[i] := UpCase(s[i]);
end; { UpCaseStr0 }
Procedure UpCaseStr1(Var s : String);
Var
i, len : Integer;
Begin
i := 0;
len := Ord(s[0]);
Repeat
Inc(i);
If i > len Then
Break;
If s[i] in ['a'..'z'] Then
Dec(s[i], 32);
Until False;
end; { UpCaseStr1 }
Procedure UpCaseStr2(Var s : String); Assembler;
ASM
PUSH DS
LDS SI, s
LES DI, s
CLD
XOR AH, AH
LODSB
STOSB
XCHG AX, CX
JCXZ @2
@1: LODSB
SUB AL, 'a'
CMP AL, 'z'-'a'+1
SBB AH, AH
AND AH, 'a'-'A'
SUB AL, AH
ADD AL, 'a'
STOSB
LOOP @1
@2: POP DS
end; { UpCaseStr2 }
Procedure Size Execution timing*
(bytes) (seconds)
UpCaseStr0 76 4.32 = 1.00
UpCaseStr1 67 2.76 = 0.63
UpCaseStr2 39 1.31 = 0.30
*30,000 times on a 40 MHz 386
Wilbert
--- GEcho 1.00/beta
* Origin: Charge of the Light Bregade (2:281/256.14)
[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]