home *** CD-ROM | disk | FTP | other *** search
- {
- **************************************************************************
- STRUTIL.PAS -- Turbo Pascal String Utilities
- Copyright 1989 L. Brett Glass -- All rights reserved.
- **************************************************************************
- }
- unit StrUtil;
-
- interface
-
- type
- Str11 = String[11];
- Str12 = String[12];
-
- procedure AllUpper (var st);
- { Make a string all uppercase }
-
- procedure TrimLeading(var st);
- { Remove leading blanks from string }
-
- procedure TrimTrailing(var st);
- { Remove trailing blanks from string }
-
- procedure Pad(var st; ch : Char; newLen : Byte);
- { Pad st with blanks to newLen }
-
- function IntString(i : Longint; cols : Word) : Str12;
- { Convert an integer to a string }
-
- procedure Ellipsis(var st; maxLen : Word);
- { If string is longer than maxLen, truncate and add an ellipsis }
-
- procedure ReplaceAll(var st; oldChar, newChar : Char);
- { Replace all occurrences of oldChar in a string with newChar. }
-
- procedure DeleteAll(var st; delChar : Char);
- { Delete all occurrences of delChar in a string. }
-
- function HexStr(var num; byteCount : Byte) : String;
- { General-purpose hex conversion routine. The bytes at num are
- converted to a string of hex digits of length (byteCount*2).
- If byteCount is greater than 127, the least significant
- digits of the number will be truncated. }
-
- function HexPtr(p : Pointer) : Str11;
- { Return a string representing p in the format $XXXX:$XXXX }
-
- implementation
-
- procedure AllUpper (var st);
- var
- i : Word;
- s : String absolute st;
- begin {AllUpper}
- for i := 1 to Length(s) do
- s[i] := UpCase(s[i]);
- end; {AllUpper}
-
- procedure TrimLeading(var st);
- var
- first : Word;
- s : String absolute st;
- len : Byte absolute st; {Used to assign length directly}
- begin {TrimLeading}
- if len = 0 then Exit;
- first := 1;
- while (s[first] = ' ') and (first <= len) do
- first := Succ(first);
- len := Succ(len - first);
- if (first > 1) and (len > 0) then
- Move(s[first], s[1], len);
- end; {TrimLeading}
-
- procedure TrimTrailing(var st);
- var
- s : String absolute st;
- len : Byte absolute st;
- begin {TrimTrailing}
- while (s[len] = ' ') and (len > 0) do
- len := Pred(len);
- end; {TrimTrailing}
-
- procedure Pad(var st; ch : Char; newLen : Byte);
- var
- s : String absolute st;
- len : Byte absolute st;
- begin {Pad}
- if newLen <= len then
- Exit;
- FillChar(s[Succ(len)], newlen - len, ch);
- len := newLen;
- end; {Pad}
-
- function IntString(i : LongInt; cols : Word) : Str12;
- {Make an integer into a string}
- var
- tempStr : String[6];
- begin {IntString}
- Str(i:cols,tempStr);
- IntString := tempStr
- end; {IntString}
-
- procedure Ellipsis(var st; maxLen : Word);
- var
- s : String absolute st;
- len : Byte absolute st;
- begin {Ellipsis}
- if maxLen < 3 then
- Exit;
- if len > maxLen then
- begin
- len := maxLen;
- FillChar(s[maxLen-2],3,'.')
- end
- end; {Ellipsis}
-
- procedure ReplaceAll(var st; oldChar, newChar : Char);
- var
- s : String absolute st;
- p : Word;
- begin {ReplaceAll}
- repeat
- p := Pos(oldChar,s);
- if p = 0 then
- Exit;
- s[p] := newChar
- until FALSE
- end; {ReplaceAll}
-
- procedure DeleteAll(var st; delChar : Char);
- var
- s : String absolute st;
- p : Word;
- begin {DeleteAll}
- repeat
- p := Pos(delChar,s);
- if p = 0 then
- Exit;
- Delete(s,p,1)
- until FALSE
- end; {DeleteAll}
-
- function HexStr(var num; byteCount : Byte) : String;
- const
- hexChars : array [0..$F] of Char = '0123456789ABCDEF';
- var
- numArray : array [Byte] of Byte absolute num; {Access bytes of num}
- tempStr : String; {Holds result}
- tempLen : Byte absolute tempStr; {Length of result}
- begin {HexStr}
- tempLen := 0;
- for byteCount := Pred(byteCount) downto 0 do {numArray is 0-based}
- tempStr := tempStr + {Add: }
- hexChars[numArray[byteCount] shr 4] + {Hi digit}
- hexChars[numArray[byteCount] and $F]; {Lo digit}
- HexStr := tempStr
- end; {HexStr}
-
- function HexPtr(p : Pointer) : Str11;
- var
- ad : record
- o,s : Word
- end absolute p;
- begin {HexPtr}
- HexPtr := '$' + HexStr(ad.s,2) + ':$' + HexStr(ad.o,2)
- end; {HexPtr}
-
- end.
-