Skip to content

Commit bb73afd

Browse files
committed
Clarify Pexec return value
Fixes #176.
1 parent 41d0dc6 commit bb73afd

File tree

1 file changed

+45
-44
lines changed

1 file changed

+45
-44
lines changed

gemdos/prozess/pexec.ui

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
!begin_node Pexec
66
(!begin_liste) [Availability]
77
!item [Name:]
8-
¯Program execution® - Load and execute a program.
8+
Program execution - Load and execute a program.
99

1010
!item [Opcode:]
1111
75
@@ -168,9 +168,10 @@ Command lines are passed as a (!I)Pascal format(!i) string, i.e. the first
168168
byte contains the length of the line (maximum 124 characters).
169169

170170
!item [(!nolink [Return]) value:]
171-
(!B)Return value:(!b) The function returns the exit code of the child
172-
process. If an overlay was loaded, the result contains the basepage of the
173-
overlay. With a negative result, an error has arisen.
171+
(!B)Return value:(!b) The return value is either a negative 32-bit value
172+
(if an error occurred within Pexec) or a 16-bit value (the value returned by
173+
the executed program using Pterm, Ptermres, or PtermO). If an overlay was
174+
loaded, the result contains the basepage of the overlay.
174175

175176
!item [Availability:]
176177
All (!nolink [GEMDOS]) versions.
@@ -212,7 +213,7 @@ Adresse%=Gemdos(&H4B,W:mode%,L:name%,L:cmdline%,L:env)
212213
!begin_node Pexec
213214
(!begin_liste) [Beschreibung]
214215
!item [Name:]
215-
¯program execution® - Programm laden und ausfhren.
216+
program execution - Programm laden und ausfhren.
216217

217218
!item [Gemdosnummer:]
218219
75
@@ -221,17 +222,17 @@ Adresse%=Gemdos(&H4B,W:mode%,L:name%,L:cmdline%,L:env)
221222
int32_t Pexec ( uint16_t mode, ... );
222223

223224
!item [Beschreibung:]
224-
Die Funktion ldt und startet ein Programm. šber den Parameter (!I)mode(!i)
225-
lassen sich verschiedene Varianten auswhlen:
225+
Die Funktion ldt und startet ein Programm. �ber den Parameter (!I)mode(!i)
226+
lassen sich verschiedene Varianten auswhlen:
226227
!begin_xlist [mode]
227228
!item [mode]
228229
Bedeutung
229230

230231
!item [0]
231232
int32_t Pexec (0, int8_t *name, int8_t *cmdline, int8_t *env);
232233

233-
(!B)Load and go:(!b) Ldt und startet das in (!I)name(!i) angegebene
234-
Programm, und bergibt die Kommandozeile (!I)cmdline(!i). Fr den Parameter
234+
(!B)Load and go:(!b) Ldt und startet das in (!I)name(!i) angegebene
235+
Programm, und bergibt die Kommandozeile (!I)cmdline(!i). Fr den Parameter
235236
(!I)env(!i) gilt:
236237
!begin_xlist !compressed [NULL]
237238
!item [-1]
@@ -246,13 +247,13 @@ Jeder andere Wert ist ein Zeiger auf das zu vererbene Environment.
246247

247248
(!B)Load, don't go:(!b) wird meist zum Starten von Overlays oder zum Laden
248249
von Programmen in einem Debugger benutzt. Entspricht (!I)mode(!i) 0, mit dem
249-
Unterschied, daž das Programm nicht sofort gestartet wird, sondern ein
250-
Zeiger auf die Basepage als LONG zurckgeliefert wird. Der Parent ist der
251-
Eigentmer des Speichers, den die Basepage und das Environment des Childs
252-
belegen und muž ihn freigeben, wenn das Child sich beendet hat. (!nl)
253-
(!B)Achtung:(!b) Der Aufrufer ist dafr verantwortlich, Daten- und Instruktions-caches
254-
ungltig zu machen, auch fr den Fall, daž das Overlay anschliessend mit Pexec Mode 4
255-
ausgefhrt werden soll.
250+
Unterschied, da� das Programm nicht sofort gestartet wird, sondern ein
251+
Zeiger auf die Basepage als LONG zurckgeliefert wird. Der Parent ist der
252+
Eigentmer des Speichers, den die Basepage und das Environment des Childs
253+
belegen und mu� ihn freigeben, wenn das Child sich beendet hat. (!nl)
254+
(!B)Achtung:(!b) Der Aufrufer ist dafr verantwortlich, Daten- und Instruktions-caches
255+
ungltig zu machen, auch fr den Fall, da� das Overlay anschliessend mit Pexec Mode 4
256+
ausgefhrt werden soll.
256257

257258
!item [4]
258259
int32_t Pexec (4, 0L, PD *basepage, 0L); (!nl)
@@ -263,9 +264,9 @@ mit mode 3 oder 5 erzeugt worden sein.
263264
!item [5]
264265
(!nolink [PD]) *Pexec (5, 0L, int8_t *cmdline, int8_t *env); (!nl)
265266

266-
(!B)Create Basepage:(!b) Zunchst legt GEMDOS ein neues Environment an. Dann
267-
wird der gr”žte zusammenhngende Speicherblock alloziert und in den ersten
268-
256 Byte eine Basepage angelegt. Fr den Parameter (!I)env(!i) gilt:
267+
(!B)Create Basepage:(!b) Zunchst legt GEMDOS ein neues Environment an. Dann
268+
wird der gr��te zusammenhngende Speicherblock alloziert und in den ersten
269+
256 Byte eine Basepage angelegt. Fr den Parameter (!I)env(!i) gilt:
269270
!begin_xlist !compressed [NULL]
270271
!item [-1]
271272
= kein Environment anlegen.
@@ -281,28 +282,28 @@ einen Aufruf von Pvfork ohne Blockieren des parent zu emulieren.
281282
int32_t Pexec (6, 0L, PD *basepage, 0L); (!nl)
282283

283284
(!B)Just go, then free:(!b) Entspricht (!I)mode(!i) 4, mit dem Unterschied,
284-
daž allozierter Speicher dem gestarteten Prozess und nicht dem Starter
285-
gehrt, so daž der Speicher, den die Basepage belegt, automatisch
285+
da� allozierter Speicher dem gestarteten Prozess und nicht dem Starter
286+
gehrt, so da� der Speicher, den die Basepage belegt, automatisch
286287
freigegeben wird, wenn das Child mit Pterm terminiert. Zusammen mit Modus 3
287288
kann damit der gleiche Effekt erzielt werden, wie durch Modus 0. Dieser
288-
Modus steht erst ab (!nolink [GEMDOS])-Version 0.15 zur Verfgung.
289+
Modus steht erst ab (!nolink [GEMDOS])-Version 0.15 zur Verfgung.
289290

290291
!item [7]
291292
PD *Pexec (7, uint32_t prgflags, int8_t *cmdline, int8_t *env);
292293

293294
(!B)Create Basepage, respecting prgflags:(!b) Analog (!I)mode(!i) 5, nur
294295
kann in (!I)prgflags(!i) die gleiche Information wie im Feld ph_prgflags des
295-
Programm-Headers bergeben werden. Dieser Modus wird vom BIOS des TT
296+
Programm-Headers bergeben werden. Dieser Modus wird vom BIOS des TT
296297
benutzt, um GEM zu starten, und steht erst ab GEMDOS Version 0.19 zur
297-
Verfgung.
298+
Verfgung.
298299

299300
!item [100]
300301
int32_t Pexec (100, int8_t *name, int8_t *cmdline, int8_t *env);
301302

302303
(!B)Load, go, don't wait:(!b) Analog (!I)mode(!i) 0, nur wartet der
303304
Aufrufer nicht, bis das gestartete Programm beendet wird, d.h. die Funktion
304-
kehrt sofort zum Parent Prozess zurck, whrend das Child startet. Der
305-
Rckgabewert ist ein negativer Fehlercode oder die positive PID des Childs.
305+
kehrt sofort zum Parent Prozess zurck, whrend das Child startet. Der
306+
Rckgabewert ist ein negativer Fehlercode oder die positive PID des Childs.
306307

307308
!item [101]
308309
da dieser Modus nur MagiC-intern zum Vererben von Pfad- und Dateihandles
@@ -319,13 +320,13 @@ int32_t Pexec (104, int8_t *name, PD *basepage, 0L); (!nl)
319320
(!B)Just go, don't wait:(!b) Analog (!I)mode(!i) 4, nur wartet der Aufrufer
320321
nicht, bis das gestartete Programm beendet wird. Es wird ein Prozess
321322
gestartet, dessen Basepage vorher durch einen Modus von 3, 5 oder 7 gesetzt
322-
wurde. Zu beachten ist, daž das Environment und die Basepage des Childs sich
323-
auch im Besitz des Parents befinden (tatschlich erbt der Child allen
323+
wurde. Zu beachten ist, da� das Environment und die Basepage des Childs sich
324+
auch im Besitz des Parents befinden (tatschlich erbt der Child allen
324325
Speicher, der sich im Besitz des Parents befindet). Der Parameter
325326
(!I)name(!i) ist ein Zeiger auf einen String, der den Namen des neuen
326327
Prozesses beschreibt; bei einem NULL-Wert wird der Name des Parent-Prozesses
327328
benutzt. Die Funktion liefert einen negativen Fehlercode, oder die positive
328-
PID des Childs zurck.
329+
PID des Childs zurck.
329330

330331
!item [106]
331332
int32_t Pexec (106, int8_t *name, PD *basepage, 0L); (!nl)
@@ -335,10 +336,10 @@ befinden sich Environment und Basepage des Childs (!I)nicht(!i) im Besitz
335336
des Parents, und der Child hat keinen Zugriff auf Speicher, welcher dem
336337
Parent-Prozess zugeteilt wurde. Beim Beenden des Childs wird dessen
337338
Speicherplatz wieder freigegeben. In Verbindung mit Modus 3 entspricht Pexec
338-
(106, ...) daher dem Modus 100 (whrend Modus 3 gefolgt von Modus 6 einem
339+
(106, ...) daher dem Modus 100 (whrend Modus 3 gefolgt von Modus 6 einem
339340
Aufruf von Pexec (0, ...) entspricht).
340341
(!nl)
341-
Wird ab MagiC 2.0 nicht mehr untersttzt.
342+
Wird ab MagiC 2.0 nicht mehr untersttzt.
342343

343344
!item [107]
344345
entspricht im wesentlichen (!I)mode(!i) 7, und wird intern von MagiC seit Version 2.10
@@ -347,15 +348,15 @@ verwendet. Auf die genaue Syntax wird daher an dieser Stelle verzichtet.
347348
!item [108]
348349
wird von (!nolink [MagiC]) seit Version 2.10 intern zum Starten eines Accessories verwendet.
349350
Da die genaue Syntax offiziell nicht dokumentiert ist, sollten eigene
350-
Programme besser auf shel_write zurckgreifen.
351+
Programme besser auf shel_write zurckgreifen.
351352

352353
!item [200]
353354
int32_t Pexec (200, int8_t *name, int8_t *cmdline, int8_t *env);
354355

355-
(!B)Replace program and go:(!b) Analog (!I)mode(!i) 100, jedoch berschreibt der neue
356-
Prozess den alten vollstndig. Der alte Prozess behlt zwar seine PID und
356+
(!B)Replace program and go:(!b) Analog (!I)mode(!i) 100, jedoch berschreibt der neue
357+
Prozess den alten vollstndig. Der alte Prozess behlt zwar seine PID und
357358
die meisten seiner Attribute, aber sein gesamter Speicherplatz wird
358-
freigegeben. Whrend Pexec (0, ...) als Unterprogrammaufruf (call...return)
359+
freigegeben. Whrend Pexec (0, ...) als Unterprogrammaufruf (call...return)
359360
angesehen werden kann, wirkt dieser Modus eher wie ein 'goto'.
360361

361362
!item [300]
@@ -367,31 +368,31 @@ verzichtet.
367368

368369
!end_xlist
369370
(!B)Hinweis:(!b) Nicht alle Modi sind unter allen Betriebssystemvarianten
370-
verfgbar; deshalb sollte der Rckgabewert der Funktion beachtet werden.
371-
Unbekannte Modi sorgen fr ein Funktionsergebnis von EINVFN.
371+
verfgbar; deshalb sollte der Rckgabewert der Funktion beachtet werden.
372+
Unbekannte Modi sorgen fr ein Funktionsergebnis von EINVFN.
372373

373-
Kommandozeilen werden als String im (!I)Pascal-Format(!i) bergeben, d.h. im
374-
ersten Byte befindet sich die Lnge der Zeile (maximal 124 Zeichen).
374+
Kommandozeilen werden als String im (!I)Pascal-Format(!i) bergeben, d.h. im
375+
ersten Byte befindet sich die Lnge der Zeile (maximal 124 Zeichen).
375376

376377
!item [Ergebnis:]
377-
Die Funktion liefert als Ergebnis den Abschlužcode des Child-Prozesses. Wenn
378-
ein Overlay geladen wurde, enthlt das Ergebnis die Basepage des Overlays.
378+
Die Funktion liefert als Ergebnis den Abschlu�code des Child-Prozesses. Wenn
379+
ein Overlay geladen wurde, enthlt das Ergebnis die Basepage des Overlays.
379380
Bei einem negativen Resultat ist ein Fehler aufgetreten.
380381

381382

382-
!item [Verfgbar:]
383+
!item [Verfgbar:]
383384
Alle GEMDOS Versionen.
384385

385386
!item [Gruppe:]
386387
Prozessfunktionen
387388

388389
!item [Querverweis:]
389-
(!link [Binding] [Bindings fr Pexec]) ~ shel_write ~
390+
(!link [Binding] [Bindings fr Pexec]) ~ shel_write ~
390391
(!link [Programmflags][Die Programmflags]) ~ ARGV-Verfahren
391392
(!ende_liste)
392393

393394

394-
!begin_node Bindings fr Pexec
395+
!begin_node Bindings fr Pexec
395396
!ignore_index
396397
(!begin_liste) [Assembler:]
397398
!item [C:]

0 commit comments

Comments
 (0)