[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    {
    NORBERT IGL

    > Note that your uppercase characters do not include the german Umlauts
    > and overlap sometimes with other foreign characters. There is a DOS
    > function call to convert a string to all upcercase letters. Norbert
    > Igl and I wrote a ASM end implementation, maybe he could repost his all-
    > Pascal version that conforms to the DOS country information.

    }

    Unit Upper;
    { Country-independent upcase-procedures          (c) 1992  N.Igl

      Uses the COUNRY=??? from your CONFIG.SYS to get the correct uppercase.
      SpeedUp with a table-driven version to avoid multiple DOS-Calls.

      Released to the public domain ( FIDO: PASCAL int'l ) in 12/92 }

    Interface

    function UpCase(ch : char) : Char;
    function UpCaseStr(S : String) : String;

    Implementation uses Dos;

    Const
      isTableOk : Boolean = FALSE;
    Var
      theTable  : Array[0..255] of Char;

    Procedure SetUpTable;                          { called only at Unit-init }
    var
      Regs: Registers;
      x   : byte;
    begin
      FillChar(theTable, Sizeof( theTable ), #0);  { Fill with NULL }
      For x := 1 to 255 do
        theTable[x] := CHAR(x);                    { predefined values }
      if Lo(DosVersion) < 4 then                   { n/a in this DOS... }
      begin                                        { use Turbo's Upcase }
        for x := 1 to 255 do
          theTable[x] := System.Upcase(CHAR(x));
        exit;
      end;
      Regs.AX := $6521;                            { "Capitalize String" }
      Regs.CX := 255;                              { "string"-length }
      Regs.DS := Seg(theTable);                    { DS:DX... }
      Regs.DX := Ofs(theTable[1]);                 {  ...points to the "string"}
      Intr($21,Regs);                              { let DOS do it ! }
      isTableOK := (Regs.Flags and FCarry = 0);    { OK ? }
    end;

    function UpCase(ch : char) : char;
    begin
      UpCase := theTable[BYTE(ch)]
    end;

    function UpCaseStr(S : String) : String;
    var x: Byte;
    begin
      for x := 1 to length(S) do
        S[x]:= theTable[BYTE(S[x])];
      UpCaseStr := S
    end;

    begin
      SetUpTable
    end.

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]