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

  1. UNIT EString;
  2. (**) INTERFACE (**)
  3. USES WObjects, Strings, OString;
  4. TYPE
  5.   PEString = ^TEString;
  6.   TEString = OBJECT(TOString)
  7.     Excess : Word;
  8.     CONSTRUCTOR Init(WMaxSize : Word);
  9.     PROCEDURE AddPChar(P : PChar); Virtual;
  10.     FUNCTION ExpandTo(W : Word) : Boolean;
  11.     FUNCTION GetExcess : Word;
  12.   END;
  13.  
  14. (**) IMPLEMENTATION (**)
  15. CONSTRUCTOR TEString.Init(WMaxSize : Word);
  16. BEGIN
  17.   TOString.Init(WMaxSize);
  18.   IF vPChar = NIL THEN Fail;
  19.   Excess := 0;
  20. END;
  21.  
  22. PROCEDURE TEString.AddPChar(P : PChar);
  23. BEGIN
  24.   IF Len + StrLen(P) > MaxSize THEN
  25.     Inc(Excess, Len + StrLen(P) - MaxSize)
  26.   ELSE TOString.AddPChar(P);
  27. END;
  28.  
  29. FUNCTION TEString.GetExcess : Word;
  30. BEGIN
  31.   GetExcess := Excess;
  32. END;
  33.  
  34. FUNCTION TEString.ExpandTo(W : Word) : Boolean;
  35. VAR P : PChar;
  36. BEGIN
  37.   ExpandTo := FALSE;
  38.     {- don't SHRINK smaller than current contents! -}
  39.   IF W < Len THEN Exit;
  40.   GetMem(P, W+1);
  41.     {- fail if can't allocate bigger PChar -}
  42.   IF P = NIL THEN Exit;
  43.     {- copy contents to new, bigger PChar -}
  44.   StrCopy(P, vPChar);
  45.     {- get rid of puny old PChar -}
  46.   FreeMem(vPChar, MaxSize+1);
  47.   vPChar   := P;
  48.   MaxSize  := W;
  49.   Excess   := 0;
  50.   ExpandTo := TRUE;
  51. END;
  52.  
  53. END.
  54.  
  55.