home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* MAXBUFF.PAS *)
- (* (c) 1991 Jeanette Winzenburg & DMV-Verlag *)
- (* ------------------------------------------------- *)
- PROGRAM MaxBuff;
-
- {$X+}
- USES Crt, Objects, SafeHeap, Memory;
-
- CONST
- stMemError = -6;
- MaxBufSize : WORD = 65520; (* 64k *)
-
- TYPE
- (* Nachfolger von tBufStream, legt den Puffer *)
- (* unter Berücksichtigung des Sicherheits- *)
- (* bereichs so groß wie möglich an; Abbruch *)
- (* mit stMemError, falls *)
- (* Puffer < 1/4 Sicherheitsbereich *)
- pMaxBufStream = ^tMaxBufStream;
- tMaxBufStream = OBJECT (tBufStream)
- CONSTRUCTOR Init(FileName : FNameStr; Mode : WORD);
- END;
-
- CONSTRUCTOR tMaxBufStream.Init(FileName : FNameStr;
- Mode : WORD);
- VAR
- Block : LONGINT;
- BEGIN
- tObject.Init;
- Block := MaxSichererBlock;
- IF BLock < LowMemSize * 4 THEN BEGIN
- Status := stMemError;
- Exit;
- END;
- IF Block > MaxBufSize THEN Block := MaxBufSize;
- tBufstream.Init(Filename, Mode, Block);
- END;
-
- PROCEDURE Ausgabe;
- BEGIN
- WriteLn('Größter freier Block : ',
- MaxAvail);
- WriteLn('Größter freier, sicherer Block: ',
- MaxSichererBlock);
- END;
-
- PROCEDURE MachBuf;
- VAR
- pNeu : pMaxBufstream;
- BEGIN
- New(pNeu, Init('dummy', stCreate));
- IF pNeu^.Status <> 0 THEN
- WriteLn('Speicher zu klein');
- WriteLn('Zugewiesene Puffergröße : ',
- pNeu^.Bufsize);
- Ausgabe;
- Dispose(pNeu, done);
- END;
-
- VAR
- p, p1, p2 : Pointer;
- Merk : LONGINT;
-
- BEGIN (* Demo *)
- ClrScr;
- (* Speicher absichtlich »verschmutzen« *)
- WHILE MaxAvail > 80000 DO GetMem(p, 60000);
- WriteLn('Speicher nach "Verschmutzen" : ',MaxAvail);
- (* jetzt definiert Speicher anfordern *)
- Merk := MaxAvail;
- GetMem(p1, Merk DIV 4);
- GetMem(p2, Merk DIV 2);
- WriteLn;
- WriteLn('Speicher nach kontrollierter Zuweisung '+
- 'an p1, p2');
- Ausgabe;
-
- (* pMaxBufStream wird im freien Heap ab Heapptr *)
- (* angelegt *)
-
- Machbuf;
- (* Fragment erzeugen *)
- WriteLn;
- WriteLn('Speicher nach Fragmenterzeugung durch '+
- 'Freigabe p1');
- FreeMem(p1, Merk DIV 4);
- Ausgabe;
- (* pMaxBufStream wird im Fragment angelegt *);
- Machbuf;
- ReadLn;
- END.
- (* ------------------------------------------------- *)
- (* Ende von MAXBUFF.PAS *)
-
-