        $4B EXEC



        long Pexec( int mode, char *ptr1, char *ptr2, char *ptr3 );



Die Pexec()-Funktion erlaubt das Laden und Nachladen von Programmen. 
Wahlweise kann das geladene Programm automatisch gestartet werden. 
Auf dem Stack werden neben der Funktionsnummer die Adressen von drei 
Strings und ein Moduswort erwartet.



Betrachten wir zunchst das Modus-Wort. Dieses Wort darf die Werte 0, 
3, 4 oder 5 enthalten.

Mode = 0 stellt die sogenannte LOAD'N GO-Option dar. In diesem Fall 
wird die Datei von Diskette geladen, deren File- und Pathname in PTR1 
enthalten ist. PRT2 enthlt bei dieser Option den Command Tail, 
vergleichbar den Angaben, die Sie einem .TTP-Programm per Dialogbox 
bergeben knnen. Dabei ist zu beachten, da Command Tail eine 
Zeichenkette im Pascal-Format ist, d.h. im ersten Byte wird die Lnge 
der Zeichenkette angegeben, die Daten fr die Zeichen folgen und 
mssen nicht nullterminiert sein. PTR3 schlielich zeigt auf den 
sogenannten Environment String, der jedoch unter GEMDOS 
(wahrscheinlich) keine Bedeutung besitzt. Sollen die Mglichkeiten 
von Command Tail oder Environment String nicht genutzt werden, so 
sollten beide Zeiger auf ein Null-Byte zeigen.

Nach dem Laden des auf diese Weise angegebenen Programms wird das 
Programm automatisch gestartet. Das aufrufende Programm, also das, 
welches den Pexec-Aufruf gestartet hat, bleibt im Speicher. Eventuell 
geffnete Dateien werden an das neu gestartete Programm (den neu 
gestarteten Proze) weitergereicht. Dieses neue Programm wird auch 
als 'Child Process' bezeichnet. Nach der Beendigung des Child Process 
mittels Pterm0 o.. wird die Kontrolle an das aufrufende Programm, 
den 'Parent Process' zurckgegeben.



Ist das Modus-Wort eine Drei, so werden die Parameter in PTR1 bis 
PTR3 in derselben Form wie auch beim Mode = 0 behandelt. Allerdings 
wird das spezifizierte File nur in den Speicher geladen, es wird 
nicht ausgefhrt. Nach dem Aufruf von Pexec mit Mode = 3 erhlt man 
die Adresse der Base Page des nachgeladenen Programms in D0 zurck.

Das ergibt vielleicht auf den ersten Blick keinen besonderen Sinn. 
Brauchbar ist diese Funktion jedoch zumindest in einem guten 
Debugger. Will man mit Hilfe des Debuggers ein fehlerhaftes Programm 
untersuchen, so darf es ja nicht unmittelbar nach dem Laden 
ausgefhrt werden, da sonst dem Debugger die Kontrolle entzogen 
wrde. Das fehlerhafte Programm wrde statt dessen die Kontrolle 
erhalten und genauso abstrzen wie ohne Debugger. Die LOAD-Option des 
Pexec schafft hier Abhilfe.



Ist das Mode-Wort = 4, so wird ein im Speicher befindliches Programm 
gestartet, als sei es soeben geladen worden. Dazu wird in PTR1 die 
Adresse der bentigten Base Page erwartet. PR2 und PTR3 werden nicht 
genutzt. Auf diese Weise kann ein Programm gestartet werden, welches 
zuvor mit Pexec, Mode = 3, geladen wurde.



Als letzte Mglichkeit gibt es fr das Mode-Wort den Wert Fnf. Mit 
dieser Option wird eine Base Page im Speicher angelegt. Auerdem wird 
der grte freie Speicherblock alloziert. Natrlich sind wesentliche 
Daten der Base Page nach diesem Aufruf nicht ausgefllt. Insbesondere 
sind das die Angaben ber Text-, Data- und BSS-Bereiche. Diese 
Angaben mu der Programmierer selbst eintragen.



----------------------------------------------------------------------
PEA     env             * Environment

PEA     com             * Kommandozeile

PEA     fil             * Filename

MOVE.W  #0,-(SP)        * Laden und Starten bitte

MOVE.W  #$4B,-(SP)      * Funktionsnummer

TRAP    #1

ADD.L   #16,SP          * hier kommen wir erst nach Ende

...                     * des nachgeladenen Programms an

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