home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / bufstrm / bufstrea.exe / MAXBUFF.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-12-04  |  2.6 KB  |  96 lines

  1. (* ------------------------------------------------- *)
  2. (*                  MAXBUFF.PAS                      *)
  3. (*    (c) 1991 Jeanette Winzenburg & DMV-Verlag      *)
  4. (* ------------------------------------------------- *)
  5. PROGRAM MaxBuff;
  6.  
  7. {$X+}
  8. USES Crt, Objects, SafeHeap, Memory;
  9.  
  10. CONST
  11.   stMemError        = -6;
  12.   MaxBufSize : WORD = 65520;  (* 64k *)
  13.  
  14. TYPE
  15.        (* Nachfolger von tBufStream, legt den Puffer *)
  16.        (* unter Berücksichtigung des Sicherheits-    *)
  17.        (* bereichs so groß wie möglich an; Abbruch   *)
  18.        (* mit stMemError, falls                      *)
  19.        (* Puffer < 1/4 Sicherheitsbereich            *)
  20.   pMaxBufStream = ^tMaxBufStream;
  21.   tMaxBufStream = OBJECT (tBufStream)
  22.     CONSTRUCTOR Init(FileName : FNameStr; Mode : WORD);
  23.   END;
  24.  
  25.   CONSTRUCTOR tMaxBufStream.Init(FileName : FNameStr;
  26.                                  Mode     : WORD);
  27.   VAR
  28.     Block : LONGINT;
  29.   BEGIN
  30.     tObject.Init;
  31.     Block := MaxSichererBlock;
  32.     IF BLock < LowMemSize * 4 THEN BEGIN
  33.       Status := stMemError;
  34.       Exit;
  35.     END;
  36.     IF Block > MaxBufSize THEN Block := MaxBufSize;
  37.     tBufstream.Init(Filename, Mode, Block);
  38.   END;
  39.  
  40.   PROCEDURE Ausgabe;
  41.   BEGIN
  42.     WriteLn('Größter freier Block          : ',
  43.             MaxAvail);
  44.     WriteLn('Größter freier, sicherer Block: ',
  45.             MaxSichererBlock);
  46.   END;
  47.  
  48.   PROCEDURE MachBuf;
  49.   VAR
  50.     pNeu : pMaxBufstream;
  51.   BEGIN
  52.     New(pNeu, Init('dummy', stCreate));
  53.     IF pNeu^.Status <> 0 THEN
  54.       WriteLn('Speicher zu klein');
  55.     WriteLn('Zugewiesene Puffergröße       : ',
  56.             pNeu^.Bufsize);
  57.     Ausgabe;
  58.     Dispose(pNeu, done);
  59.   END;
  60.  
  61. VAR
  62.   p, p1, p2 : Pointer;
  63.   Merk      : LONGINT;
  64.  
  65. BEGIN      (* Demo *)
  66.   ClrScr; 
  67.     (* Speicher absichtlich »verschmutzen« *)
  68.   WHILE MaxAvail > 80000 DO GetMem(p, 60000);
  69.   WriteLn('Speicher nach "Verschmutzen"  : ',MaxAvail);
  70.     (* jetzt definiert Speicher anfordern  *)
  71.   Merk := MaxAvail;
  72.   GetMem(p1, Merk DIV 4);
  73.   GetMem(p2, Merk DIV 2);
  74.   WriteLn;
  75.   WriteLn('Speicher nach kontrollierter Zuweisung '+
  76.           'an p1, p2');
  77.   Ausgabe;
  78.  
  79.   (* pMaxBufStream wird im freien Heap ab Heapptr *)
  80.   (* angelegt                                     *)
  81.  
  82.   Machbuf;
  83.   (* Fragment erzeugen *)
  84.   WriteLn;
  85.   WriteLn('Speicher nach Fragmenterzeugung durch '+
  86.           'Freigabe p1');
  87.   FreeMem(p1, Merk DIV 4);
  88.   Ausgabe;
  89.   (* pMaxBufStream wird im Fragment angelegt *);
  90.   Machbuf;
  91.   ReadLn;
  92. END.
  93. (* ------------------------------------------------- *)
  94. (*              Ende von MAXBUFF.PAS                 *)
  95.  
  96.