home *** CD-ROM | disk | FTP | other *** search
-
- /////////////////////\\\\\\\\\\\\\\\\\\\\\\\
- Dokumentation zur FIDO Unit FSWAP
- \\\\\\\\\\\\\\\\\\\\\///////////////////////
-
- RELEASE 1.01
- ^^^^^^^^^^^^
-
- =========================================================================
- Autor: Peter Holschbach, 2:2450/660.3 @ FidoNet, Remscheid, 01.09.1994
- =========================================================================
-
- 1. Swap :
- -----------
- Die Unit FSWAP.PAS stellt eine Funktion zur Verfügung, mit der
- das aktuelle Pascalprogramm auf die Festplatte, ins XMS oder
- EMS ausgelagert werden kann und eine DOS-Shell oder ein anders
- Programm aufgerufen werden kann.
- Dies ist eine Low Level Unit. Sie benötigt keinerlei Routinen
- anderer Units, mit Ausnahme der in Turbo Pascals (6.0 oder
- höher) Unit-Library TURBO.TPL enhaltenen Standard-Units.
-
- 2. Kurzbeschreibung:
- --------------------
- DosRetValue .......... in dieser Variablen wird der Rückkabewert
- des aufgerufenen DOS-Programms abgelegt.
- ExecSwap ............. führt die Auslagerung durch und ruft
- das externe Programm auf.
- SwapError ............ die Fehlernummer die beim letzten Versuch
- aufgetreten ist.
- SwapFilePath ......... Pfadangabe für die Auslagerungsdatei, wenn
- auf Platte ausgelagert wird.
- TSwapMem ............. Typ für die verschiedenen Auslagerungs-
- varianten (DISK,EMS,XMS,Keine)
- TSwapMemSelect ....... in diesem Feld wird abgelegt, in welcher
- Reihenfolge die verschiedenen Auslagerungs-
- medien abgesucht werden sollen.
-
- 3. Detaillierte Beschreibung:
- -----------------------------
-
- ===============================================================
- ExecSwap
- ---------------------------------------------------------------
- ERSTAUTOR ... Peter Holschbach, 2:2450/660.3 @ FidoNet
-
- ERSTDATUM ... 01.09.1994 LETZTE ÄNDERUNG ...
-
- MODIFIKATION ...
- ---------------------------------------------------------------
-
- BESCHREIBUNG ... Auslagerung / Aufruf / "Einlagerung"
-
- DEKLARATION ... ExecSwap (LastAdr : Pointer;
- WhereToSwap : TSwapMemSelect;
- ProgName,Parameters : String): Boolean;
-
- PARAMETER ... LastAdr = letzte Adresse die gesichert
- werden soll.
- WhereToSwap = Feld mit den gewünschten
- Auslagerungsmedien
- ProgName = Name des Programms daß ausgeführt
- werden soll.
- Parameters = die Parameterzeile die dem
- Programm übergeben werden soll.
-
- ERGEBNIS ... eine Variable des Typs BOOLEAN, die TRUE enthält,
- wenn der Aufruf funktioniert hat.
- Wird False zurückgeliefert, so kann in der
- globalen Variablen SwapError eine Fehlernummer
- abgefragt werden.
-
- 4. Beispiele:
- -------------
- ===============================================================
- ExecSwap
- ---------------------------------------------------------------
-
- Da ein Beispiel mehr als 1000 Worte sagt:
-
- ;---------------------------------------
- Uses FSWAP;
-
- Var SwapField : TSwapMemSelect;
-
- Begin
- SwapField [1] := EMS;
- SwapField [2] := XMS;
- SwapField [3] := DISK;
- SwapFilePath := 'D:\';
- Writeln (ExecSwap (HeapEnd,SwapField,'C:\DOS\COMMAND.COM',''));
- End.
- ;---------------------------------------
-
- An dieser Stelle kommen die 1000 Worte:
-
- Der von FSWAP benötigte Speicher hängt von der Art der
- Einbindung ab. Um möglichst wenig zu verbrauchen, muß
- die Unit immer an letzter Stelle eingebunden werden.
- (Natürlich im Hauptprogramm !)
- Pascal plaziert die Units immer in umgekehrter Reihenfolge
- ihrer Benennung im Speicher.
- Derzeit belegt das gezeigte Beispiel ca. 2,5KB im RAM, wobei
- weitere 4KB für die Kopie von COMMAND.COM verlohren gehen.
-
- Die Variable HeapEnd gibt in TP7 die letzte von Pascal belegte
- Speicheradresse an. Hier kann auch jede andere Adresse stehen.
- Verwendet man aber eine Adresse unterhalb dieser Marke, muß
- sichergestellt sein, daß der darüberliegende Speicher unbenutzt
- ist. ExecSwap gibt nämlich immer den gesamten Speicher frei.
-
- Das Feld vom Typ "TSwapMemSelect" enthält die Medien, die für
- die Auslagerung verwendet werden sollen. Gleichzeitig dient es
- zur festlegung der Priorität (1=höchste, 2=mittlere, 3=niedrige).
- Soll nur auf EMS zugegriffen werden so würde das Programm wie
- folgt aussehen:
-
- ;---------------------------------------
- Uses FSWAP;
-
- Var SwapField : TSwapMemSelect;
-
- Begin
- SwapField [1] := EMS;
- SwapField [2] := None;
- SwapField [3] := None;
- SwapFilePath := 'D:\';
- Writeln (ExecSwap (HeapEnd,SwapField,'C:\DOS\COMMAND.COM',''));
- End.
- ;---------------------------------------
-
- Der Eintrag "None" bedeutet, daß an dieser Stelle kein Versuch
- der Auslagerung unternommen werden soll.
-
- In "ProgName" muß der Programmname übergeben werden. Der Anwender
- muß selbst sicherstellen daß diese Programm existiert und unter
- dem übergebenen Pfadnamen erreichbar ist. PATH wird von ExecSwap
- nicht abgesucht!
-
- In 'Parameters' kann man alle Kommandozeilenparameter übergeben,
- die das Programm benötigt. Die Anzahl der übergebenen Zeichen ist
- durch DOS auf 127 eingeschränkt!
-
- Tritt beim Swapout ein Fehler auf, so kann die Variable SWAPERROR
- abgefragt werden.
-
- 1 = XMS oder EMS nicht vorhanden
- 2 = Angabe des Speicherendes ist fehlerhaft
- 3 = nicht genügend Platz in EMS/DISK/XMS
- 4 = Fehler bei der Ermittlung des freien
- Plattenspeichers
- 5 = Fehler bei Erzeugung einer temporären Datei
- 6 = Fehler beim Schreibzugriff auf die Datei
- 7 = Fehler beim Lesen der Datei
- 8 = Fehler bei der Ermittlung des zu sichernden
- Speicherraums
- 9 = Fehler beim Allocieren des Speichers /EMS/DISK/XMS)
- 10 = Fehler bei der Auslagerung des RAM
-
- Bei einigen Fehlern wird das MSB auf einen bestimmten
- Wert gesetzt und im LSB eine Meldung für das entsprechende
- Medium ausgegeben:
-
- 11 = Fehler bei der Speicherreduktion
- 255 = Fehler vom EMS/XMS-Manager
-
- 5. History:
- -----------
-
-
-
- Neuerungen nach Release ...
- ---------------------------
- ==========================================================================
-
- /////////////////////\\\\\\\\\\\\\\\\\\\\\\\
- Ende der Dokumentation zur FIDO Unit FSWAP
- \\\\\\\\\\\\\\\\\\\\\///////////////////////
-
-
-
-
-
-
-
-