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