home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 07_08 / tricks / swapdem.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-02-25  |  3.5 KB  |  97 lines

  1. (* ------------------------------------------------------ *)
  2. (*                  SWAPDEM.PAS                           *)
  3. (*  Demonstriert den Einsatz von SWAP.PAS. 10 große Heap- *)
  4. (*  Strukturen werden angelegt und können in den Heap ein-*)
  5. (*  bzw. ausgeblendet werden.                             *)
  6. (*         (c) 1991 Ralf Homburg & TOOLBOX                *)
  7. (* ------------------------------------------------------ *)
  8. PROGRAM SwapDemo;
  9.  
  10. USES Crt, Dos, Swap;
  11.  
  12. TYPE
  13.   Satz = RECORD                 { x-beliebige Satzstruktur }
  14.            Name,
  15.            Vorname,
  16.            Strasse,
  17.            PLZOrt   : STRING [30];
  18.          END;
  19.   Feld = ARRAY [1..500] OF Satz;      { Feld mit ca. 60 KB }
  20.   FeldPtr = ^Feld;                   { Zeiger auf das Feld }
  21.  
  22. VAR
  23.   I     : INTEGER;                       { Schleifenzähler }
  24.   CH    : CHAR;                          { Tastatureingabe }
  25.   Block : ARRAY[0..9] OF FeldPtr;      { 10 Zeiger auf je  }
  26.                                        { einen 60 KB-Block }
  27.   Path  : STRING;
  28.  
  29. BEGIN
  30.   { Programm von Diskette gestartet? }
  31.   GetDir(0, Path);
  32.   IF Path [1] IN ['A', 'B'] THEN BEGIN
  33.     WriteLn('Das Programm benötigt eine Festplatte!');
  34.     Halt;
  35.   END;
  36.   { Genug freier Speicher auf Platte? }
  37.   IF DiskFree(0) < 10 * SizeOf(Feld) THEN BEGIN
  38.     WriteLn('Das Programm benötigt mindestens ',
  39.             10 * SizeOf(Feld), ' freie Bytes auf der',
  40.             ' Platte!');
  41.     Halt;
  42.   END;
  43.   { Bildschirmaufbau }
  44.   ClrScr;
  45.   GotoXY(30,1);
  46.   Write('----- Swap-Demo -----');
  47.   GotoXY(25,21);
  48.   Write('<0> ... <9> Swappen    <E> Ende');
  49.   GotoXY(30,10);
  50.   Write('Lege die Blöcke an ...');
  51.   { Blöcke anlegen }
  52.   FOR I := 0 TO 9 DO BEGIN
  53.     New(Block[I]);                  { Speicher reservieren }
  54.     FillChar(Block[I]^, SizeOf(Feld), #0);
  55.                                          { mit 0-en füllen }
  56.     SwapOut(Block[I], SizeOf(Feld));   { und in Swap-Datei }
  57.                                        { auslagern         }
  58.   END;
  59.   REPEAT
  60.     GotoXY(12,4);              { Heap Information anzeigen }
  61.     ClrEol;
  62.     Write('Freier Heap (memavail)         : ', MemAvail,
  63.           ' Bytes (', memavail DIV 1024, ' KB)');
  64.     GotoXY(12,5);
  65.     ClrEol;
  66.     Write('Größter freier Block (MaxAvail): ', MaxAvail,
  67.           ' Bytes (', MaxAvail DIV 1024,' KB)');
  68.     GotoXY(10,7);
  69.     Write('(Ein Datenblock des Demo-Programms benötigt ',
  70.           SizeOf(Feld), ' Bytes.)');
  71.     FOR I := 0 TO 9 DO BEGIN   { Swap Information anzeigen }
  72.       GotoXY(20, 9+I);
  73.       ClrEol;
  74.       IF SwappedOut(Block[I]) THEN
  75.         Write('Block ',I,' befindet sich in der Swap-Datei')
  76.       ELSE
  77.         Write('Block ',I,' befindet sich im Heap');
  78.     END;
  79.     CH := UpCase(ReadKey);         { Tastatureingabe lesen }
  80.     IF CH IN ['0'..'9'] THEN BEGIN
  81.       I := Ord(CH) - 48;         { Blocknummer feststellen }
  82.       IF SwappedOut(Block[I]) THEN     { Wenn ausgelagert  }
  83.         IF MaxAvail >= SizeOf(Feld) THEN { Wenn genug Heap }
  84.                                          { frei            }
  85.           SwapIn(Block[I])                 { Block lesen   }
  86.         ELSE                             { sonst           }
  87.           Write(^G)                        { Warnton       }
  88.       ELSE                             { sonst             }
  89.         SwapOut(Block[I], SizeOf(Feld)); { Block auslagern }
  90.     END;
  91.   UNTIL CH = 'E';          { Ende, wenn Taste <E> gedrückt }
  92.   ClrScr;
  93. END.
  94. (* ------------------------------------------------------ *)
  95. (*                Ende von SWAPDEM.PAS                    *)
  96.  
  97.