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