home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol11n19.zip / OSTRING.PAS < prev    next >
Pascal/Delphi Source File  |  1992-05-24  |  3KB  |  122 lines

  1. UNIT OString;
  2. (**) INTERFACE (**)
  3. USES WObjects, Strings;
  4. TYPE
  5.   HexStr = ARRAY[0..2] OF Char;
  6. {***- Object Class :  TOString -**************************}
  7.   { Declare TOString }
  8.   POstring = ^TOstring;
  9.   TOstring = OBJECT(TObject)
  10.     vPChar  : Pchar;
  11.     MaxSize : Word;
  12.     CONSTRUCTOR Init(WMaxSize : Word);
  13.     DESTRUCTOR Done; Virtual;
  14.     PROCEDURE AddPChar(P : PChar); Virtual;
  15.     PROCEDURE AddString(S : String); Virtual;
  16.     PROCEDURE AddOString(S : TOString); Virtual;
  17.     PROCEDURE AddInteger(I, FieldSize : Integer);
  18.       Virtual;
  19.     PROCEDURE AddReal(R : Real;  FieldSize, Decimals :
  20.       Integer); Virtual;
  21.     PROCEDURE AddHexByte(B : Byte); Virtual;
  22.     PROCEDURE AddHexWord(W : Word); Virtual;
  23.     PROCEDURE Clear; Virtual;
  24.     FUNCTION Len : Word; Virtual;
  25.     PROCEDURE NewLine; Virtual;
  26.     FUNCTION GetPChar : Pchar; Virtual;
  27. (**) PRIVATE (**)
  28.     FUNCTION Hex(b : Byte; VAR H : HexStr) : PChar;
  29.   END;
  30.  
  31. (**) IMPLEMENTATION (**)
  32.  
  33. FUNCTION TOstring.Hex(b : Byte; VAR H : HexStr) : PChar;
  34. CONST
  35.   HexDigit :  Array [0..15] of Char = '0123456789ABCDEF';
  36. BEGIN
  37.   H[0] := HexDigit[b SHR 4];
  38.   H[1] := HexDigit[b AND $0F];
  39.   H[2] := #0;
  40.   Hex  := H;
  41. END;
  42.  
  43. CONSTRUCTOR TOstring.Init(WMaxSize : Word);
  44. BEGIN
  45.   GetMem(vPChar, WMaxSize+1);
  46.   MaxSize := WMaxSize;
  47.   vPChar[0] := #0; {Put a null at the start of the string}
  48. END;
  49.  
  50. DESTRUCTOR TOstring.Done;
  51. BEGIN
  52.   FreeMem(vPChar, MaxSize+1);
  53. END;
  54.  
  55. PROCEDURE TOstring.AddPChar(P : PChar);
  56. BEGIN
  57.   StrLCat(vPChar, P, MaxSize);
  58. END;
  59.  
  60. PROCEDURE TOstring.AddString(S : String);
  61. VAR P : PChar;
  62. BEGIN
  63.   GetMem(P, 256);
  64.   StrPCopy(P, S);
  65.   AddPChar(P);
  66.   FreeMem(P, 256);
  67. END;
  68.  
  69. PROCEDURE TOstring.AddOString(S : TOString);
  70. BEGIN
  71.   AddPChar(S.vPChar);
  72. END;
  73.  
  74. PROCEDURE TOstring.AddInteger(I, FieldSize : Integer);
  75. VAR S : String;
  76. BEGIN
  77.   Str(I:FieldSize, S);
  78.   AddString(S);
  79. END;
  80.  
  81. PROCEDURE TOstring.AddReal(R : Real;  FieldSize,
  82.   Decimals : Integer);
  83. VAR S : String;
  84. BEGIN
  85.   Str(R:FieldSize:Decimals,S);
  86.   AddString(S);
  87. END;
  88.  
  89. PROCEDURE TOstring.AddHexByte(B : Byte);
  90. VAR H : HexStr;
  91. BEGIN
  92.   AddPChar(Hex(B, H));
  93. END;
  94.  
  95. PROCEDURE TOstring.AddHexWord(W : Word);
  96. BEGIN
  97.   AddHexByte(Hi(W));
  98.   AddHexByte(Lo(W));
  99. END;
  100.  
  101. PROCEDURE TOString.Clear;
  102. BEGIN
  103.   vPChar[0] := #0; {Put a null at the start of the string}
  104. END;
  105.  
  106. FUNCTION TOstring.Len : Word;
  107. BEGIN
  108.   Len := StrLen(vPChar);
  109. END;
  110.  
  111. PROCEDURE TOstring.NewLine;
  112. BEGIN
  113.   AddString(#13#10);
  114. END;
  115.  
  116. FUNCTION TOString.GetPChar : PChar;
  117. BEGIN
  118.   GetPChar := vPChar;
  119. END;
  120.  
  121. END.
  122.