home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SWAPDEM.PAS *)
- (* Demonstriert den Einsatz von SWAP.PAS. 10 große Heap- *)
- (* Strukturen werden angelegt und können in den Heap ein-*)
- (* bzw. ausgeblendet werden. *)
- (* (c) 1991 Ralf Homburg & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM SwapDemo;
-
- USES Crt, Dos, Swap;
-
- TYPE
- Satz = RECORD { x-beliebige Satzstruktur }
- Name,
- Vorname,
- Strasse,
- PLZOrt : STRING [30];
- END;
- Feld = ARRAY [1..500] OF Satz; { Feld mit ca. 60 KB }
- FeldPtr = ^Feld; { Zeiger auf das Feld }
-
- VAR
- I : INTEGER; { Schleifenzähler }
- CH : CHAR; { Tastatureingabe }
- Block : ARRAY[0..9] OF FeldPtr; { 10 Zeiger auf je }
- { einen 60 KB-Block }
- Path : STRING;
-
- BEGIN
- { Programm von Diskette gestartet? }
- GetDir(0, Path);
- IF Path [1] IN ['A', 'B'] THEN BEGIN
- WriteLn('Das Programm benötigt eine Festplatte!');
- Halt;
- END;
- { Genug freier Speicher auf Platte? }
- IF DiskFree(0) < 10 * SizeOf(Feld) THEN BEGIN
- WriteLn('Das Programm benötigt mindestens ',
- 10 * SizeOf(Feld), ' freie Bytes auf der',
- ' Platte!');
- Halt;
- END;
- { Bildschirmaufbau }
- ClrScr;
- GotoXY(30,1);
- Write('----- Swap-Demo -----');
- GotoXY(25,21);
- Write('<0> ... <9> Swappen <E> Ende');
- GotoXY(30,10);
- Write('Lege die Blöcke an ...');
- { Blöcke anlegen }
- FOR I := 0 TO 9 DO BEGIN
- New(Block[I]); { Speicher reservieren }
- FillChar(Block[I]^, SizeOf(Feld), #0);
- { mit 0-en füllen }
- SwapOut(Block[I], SizeOf(Feld)); { und in Swap-Datei }
- { auslagern }
- END;
- REPEAT
- GotoXY(12,4); { Heap Information anzeigen }
- ClrEol;
- Write('Freier Heap (memavail) : ', MemAvail,
- ' Bytes (', memavail DIV 1024, ' KB)');
- GotoXY(12,5);
- ClrEol;
- Write('Größter freier Block (MaxAvail): ', MaxAvail,
- ' Bytes (', MaxAvail DIV 1024,' KB)');
- GotoXY(10,7);
- Write('(Ein Datenblock des Demo-Programms benötigt ',
- SizeOf(Feld), ' Bytes.)');
- FOR I := 0 TO 9 DO BEGIN { Swap Information anzeigen }
- GotoXY(20, 9+I);
- ClrEol;
- IF SwappedOut(Block[I]) THEN
- Write('Block ',I,' befindet sich in der Swap-Datei')
- ELSE
- Write('Block ',I,' befindet sich im Heap');
- END;
- CH := UpCase(ReadKey); { Tastatureingabe lesen }
- IF CH IN ['0'..'9'] THEN BEGIN
- I := Ord(CH) - 48; { Blocknummer feststellen }
- IF SwappedOut(Block[I]) THEN { Wenn ausgelagert }
- IF MaxAvail >= SizeOf(Feld) THEN { Wenn genug Heap }
- { frei }
- SwapIn(Block[I]) { Block lesen }
- ELSE { sonst }
- Write(^G) { Warnton }
- ELSE { sonst }
- SwapOut(Block[I], SizeOf(Feld)); { Block auslagern }
- END;
- UNTIL CH = 'E'; { Ende, wenn Taste <E> gedrückt }
- ClrScr;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SWAPDEM.PAS *)
-
-