
 Da der untenstehende Patch offenbar nicht allen verstndlich war, mchte ich
 ihn etwas erlutern: Er dient dazu, aus !eigenen Programmen (trotz Benutzung
 des !alten GEMX) einen sauberen Rckgabewert an den PExec-Aufruf der auf-
 rufenden Shell liefern zu knnen. Dazu ist dann noch ein !expliziter Aufruf
 des Terminators ntig, auch bei normalem Prg.-Schlu (also etwa am Ende des
 Haupt-Moduls z.B. durch CleanUp.ModTerm); sinnvollerweise fgt man noch 'nen
 eigenen ErrorProcessor hinzu. Der Patch ist !nicht geeignet (& das war auch
 nie beabsichtigt!), alten TDI-Programmen die 'stochastischen' Rckgabewerte
 abzugewhnen! (Wenn diese insbesondere beim Aufruf von Compiler, Linker etc.
 die Lieblings-Shell irritieren, gibt's dafr einen anderen Patch, den ich in
 ???????????? beschreibe). Der Patch hat (leider?) auch einen Preis: Die von
 TDI vorgesehene Mimik der Fehler-Rckgabe ber Reg. D0 geht nicht mehr! (Das
 ist aber wohl kaum ein Nachteil :-).
 Es scheint ein anderer Patch mglich zu sein, der den !expliziten Aufruf des
 Terminators berflssig macht (& doch die D0-Mimik erhlt). Er soll bald in
 der ST-Computer beschrieben werden.

 13.2.95 RS

 ----------

 Im alten GEMX von TDI ist leider kein Rckgabe-Wert beim Sprung ber den
 Terminator (aMPD()-40, normales Programm-Ende) mglich. Der folgende Ptsch
 behebt diesen Mangel. Man kann entweder die Source von GEMX ptschen (so
 man sie besitzt) oder aber fertig gelinkte Programme (mit Hilfe eines
 geeigneten Binr-Datei-Monitors); das ptschen von GEMX.LNK ist leider
 etwas problematisch (wegen der checksums) - aber immerhin, wer will, kann
 ja auch das (mit Hilfe des Utilities DECLNK.PRG) unternehmen...

 Man suche die Byte-Folge    20 3C 00 00 00 00   (MOVE.L #0,D0)
  in der Prozedur MODCALL
 und ersetze sie durch       3F 6D FF DC 00 02   (MOVE.W -36(A5),2(A7)).

 Mit etwas Glck ist die angegebene Byte-Folge nur einmal vorhanden. Wegen
 einer Schwche des TDI-Linkers kann es auch sein, da MODCALL doppelt
 eingebunden ist.

 Danach wird der an die Stelle aMPD()-36 geschriebene INTEGER-Wert vom
 TDI-Terminator via PTerm an den PExec-Call der aufrufenden Shell bergeben.


 Dis-Assembling der Prozedur MODCALL (# 38):

    0H  46FC 2700       MOVE   #2700H,SR
    4H  5300            SUBQ.B #1,D0
    6H  5300            SUBQ.B #1,D0
    8H  6608            BNE    [08H] = 12H
    AH  0257 F8FF       ANDI.W #F8FFH,(A7)
    EH  8357            OR.W   D1,(A7)
   10H  4E73            RTE
   12H  5300            SUBQ.B #1,D0
   14H  6604            BNE    [04H] = 1AH
   16H  3E81            MOVE.W D1,(A7)
   18H  4E73            RTE
   1AH  5300            SUBQ.B #1,D0
   1CH  6606            BNE    [06H] = 24H
   1EH  46FC 2000       MOVE   #2000H,SR
   22H  4E73            RTE
   24H  5300            SUBQ.B #1,D0
   26H  6604            BNE    [04H] = 2CH
   28H  4E71            NOP
   2AH  4E73            RTE
   2CH  5300            SUBQ.B #1,D0
   2EH  660A            BNE    [0AH] = 3AH
   30H  2001            MOVE.L D1,D0
   32H  4EB9 0000 0000  JSR    00000000H
   38H  4E73            RTE
   3AH  4E68            MOVE   USP,A0
   3CH  42A0            CLR.L  -(A0)
   3EH  42A0            CLR.L  -(A0)
   40H  42A0            CLR.L  -(A0)
   42H  2039 0000 0040  MOVE.L 40H,D0
   48H  2100            MOVE.L D0,-(A0)
   4AH  42A0            CLR.L  -(A0)
   4CH  2A48            MOVE.L A0,A5
   4EH  90FC 0024       SUBA.W #24H,A0
   52H  43FA 0006       LEA    [6H] = 5AH,A1
   56H  2109            MOVE.L A1,-(A0)
   58H  6016            BRA    [16H] = 70H
   5AH  4EB9 0000 0000  JSR    00000000H
   60H  203C 0000 004C  MOVE.L #4CH,D0
   66H  3F00            MOVE.W D0,-(A7)
 > 68H  203C 0000 0000  MOVE.L #0H,D0
   6EH  4E41            TRAP   #1
   70H  4E60            MOVE   A0,USP
   72H  9DCE            SUBA.L A6,A6
   74H  0257 D8FF       ANDI.W #D8FFH,(A7)
   78H  4E73            RTE
