        $31 KEEP PROCESS



        void Ptermres( long keepcnt, int retcode );



Diese Funktion ist vergleichbar mit der GEMDOS-Funktion TERMPTERM0 
$00. Auch nach Aufruf dieser Funktion wird das Programm beendet. 
Allerdings unterscheidet sich $31 Ptermres() in einigen wesentlichen 
Punkten von $00.



Nach Abarbeiten des TRAP #1 wird wie bei TERM die Kontrolle an das 
Programm zurckgegeben, welches das soeben beendete Programm 
gestartet hat. Im Unterschied zu TERM jedoch kann dem Aufrufer eine 
Abschlu-Bedingung mitgeteilt werden. Liefert TERM grundstzlich den 
Abschluwert Null (kein Fehler), so kann bei $31 ein beliebiger Wert 
zwischen Null und $FFFF als Abschluwert gewhlt werden. Ein von Null 
unterschiedlicher Wert signalisiert blicherweise 'Fehler bei der 
Programmabarbeitung'.



Ein weiterer wesentlicher Punkt liegt in der Speicherverwaltung des 
GEMDOS begrndet. Wird ein Programm gestartet, so wird ihm der 
gesamte verfgbare Speicherplatz zur Verfgung gestellt. Wird das 
Programm mit TERM beendet, so wird der Speicherplatz wieder 
freigegeben und GEMDOS zur Verfgung gestellt. Der gesamte 
freigegebene wird zudem gelscht, sprich mit Nullen gefllt. Das 
Programm ist tatschlich physikalisch aus dem Speicher verschwunden. 
Mit der Funktion $31 jedoch kann ein beliebiger Speicherbereich ab 
der Start-Adresse des Programms (inclusive Basepage) geschtzt 
werden. Dieser Speicherbereich wird nach dem Beenden des Programms 
nicht freigegeben und auch nicht gelscht. Das Programm knnte wieder 
gestartet werden, ohne es neu zu laden.



Wesentliche Anwendungen fr Ptermres() sind z.B. Spooler, RAM-Disk 
und andere Hilfen, die, einmal installiert, immer im Speicher 
verfgbar sein mssen, um die Daten in der entsprechenden Weise zu 
speichern oder zu verarbeiten. Gleichzeitig mssen aber solche 
Programme nach der Installation korrekt beendet werden, um andere 
Programme laden und starten zu knnen.



KEEP PROCESS wird mit zwei Parametern aufgerufen. Das 
Beispielprogramm zeigt die Parameterbergabe. Wichtig ist auch, da 
zustzlich vom Programm per Malloc..\MEM\MALLOC reservierter 
Speicher nicht freigegeben wird. Sollten jedoch zum Zeitpunkt des 
Ptermres() Dateien geffnet sein, so werden diese vom GEMDOS 
geschlossen.



-----------------------------------------------------------------------
MOVE.W  #0,-(SP)        * Fehlercode kein Fehler, sonst 1

MOVE.L  #$1000,-(SP)    * $1000 Bytes ab Base Page Anfang schtzen

MOVE.W  #$31,-(SP)      * Programm endet ...

TRAP    #1              * ... jetzt!

...                     * und wir mssen nicht mal den Stack aufrumen!

-----------------------------------------------------------------------
