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