[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]