[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]
{***********************************************************************}
UNIT Strings; { String Conversion Routines, }
{ Last Updated Dec 07/93 }
{ Copyright (C) 1993, Greg Estabrooks }
{ NOTE: Requires TP 6.0+ to compile. }
INTERFACE
(************************************************************************)
CONST
HexList :ARRAY[0..15] OF CHAR ='0123456789ABCDEF';
FUNCTION BHex( V :BYTE ) :STRING;
FUNCTION WHex( V :WORD ) :STRING;
FUNCTION LHex( Long :LONGINT ) :STRING;
PROCEDURE UpperCase( VAR UpStr :STRING );
PROCEDURE LowerCase( VAR LoStr :STRING );
IMPLEMENTATION
(************************************************************************)
FUNCTION HiWord( Long :LONGINT ) :WORD; ASSEMBLER;
{ Routine to return high word of a LongInt. }
ASM
Mov AX,Long.WORD[2] { Move High word into AX. }
END;
FUNCTION LoWord( Long :LONGINT ) :WORD; ASSEMBLER;
{ Routine to return low word of a LongInt. }
ASM
Mov AX,Long.WORD[0] { Move low word into AX. }
END;
FUNCTION BHex( V :BYTE ) :STRING;
{ Routine to convert a byte to a Hex string. }
BEGIN
BHex := HexList[V Shr 4] + HexList[V Mod 16];
END;
FUNCTION WHex( V :WORD ) :STRING;
{ Routine to convert a word to a Hex string. }
BEGIN
WHex := Bhex(Hi(V)) + BHex(Lo(V));
END;
FUNCTION LHex( Long :LONGINT ) :STRING;
{ Routine to convert a longint to a Hex string. }
BEGIN
LHex := WHex(HiWord(Long))+WHex(LoWord(Long));
END;
PROCEDURE UpperCase( VAR UpStr :STRING ); ASSEMBLER;
{ Routine to convert string to uppercase }
ASM
Push ES { Save Registers to be used }
Push DI
Push CX
LES DI,UpStr { Point ES:DI to string to be converted}
Sub CX,CX { Clear CX }
Mov CL,ES:[DI] { Load Length of string for looping }
Cmp CX,0 { Check for a clear string }
JE @Exit { If it was then exit }
@ReadStr:
Inc DI { Point to next Character }
Cmp BYTE PTR ES:[DI],'z' { If Character above 'z' jump to end of}
Ja @LoopEnd { loop. }
Cmp BYTE PTR ES:[DI],'a' { if below 'a' jump to end of loop. }
Jb @LoopEnd
Sub BYTE PTR ES:[DI],32 { If not make it upper case }
@LoopEnd:
Loop @ReadStr { Loop Until done }
@Exit:
Pop CX { Restore registers }
Pop DI
Pop ES
END;{UpperCase}
PROCEDURE LowerCase( VAR LoStr :STRING ); ASSEMBLER;
{ Routine to convert a string to lower case }
ASM
Push ES { Save Registers to be used }
Push DI
Push CX
LES DI,LoStr { Point ES:DI to string to be converted}
Sub CX,CX { Clear CX }
Mov CL,ES:[DI] { Load Length of string for looping }
Cmp CX,0 { Check for a clear string }
JE @Exit { If it was then exit }
@ReadStr:
Inc DI { Point to next Character }
Cmp BYTE PTR ES:[DI],'Z' { If Character above 'Z' jump to end of}
Ja @LoopEnd { loop. }
Cmp BYTE PTR ES:[DI],'A' { if below 'A' jump to end of loop. }
Jb @LoopEnd
Add BYTE PTR ES:[DI],32 { If not make it Lower case }
@LoopEnd:
Loop @ReadStr { Loop Until done }
@Exit:
Pop CX { Restore registers }
Pop DI
Pop ES
END;{LowerCase}
BEGIN
END.
{***********************************************************************}
[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]