Wenn du einen Trigger genau für eine Tabelle schreibst, steht im Triggerbuffer die relative Adresse des Before und Afterimmage.
Also kannst du für Before/After-Immage je eine DS based Pointer definieren:

dcl-s BeforePointer pointer;
dcl-s AfterPointer pointer;

dcl-ds Before ExtName('DATEI') qualified;
end-ds;

dcl-ds After ExtName('DATEI') qualified;
end-ds;

BeforePointer = %addr(TriggerBuffer) + TriggerBuffer.PosBeforeImage;
AfterPointer = %addr(TriggerBuffer) + TriggerBuffer.PosAfterImage;

damit kannst du dann jederzeit native auf beide Strukturen typesave zugreifen.

Quellen von 2004;-), geht heute moderner:

*
* Definitionen der Trigger-Aufrufparameter
* ----------------------------------------
*
*
D TrgBuff DS
D PhysFile 10
D PhysLib 10
D PhysMember 10
D TrigEvent 1
D TrigTime 1
D ComitLevel 1
D Reserv1 3
D CCSIDData 10I 0
D Reserv2 8
D OrigOffset 10I 0
D OrigRecLen 10I 0
D OrigNulMap 10I 0
D OrigNulLen 10I 0
D NewOffset 10I 0
D NewRecLen 10I 0
D NewNulMap 10I 0
D NewNulLen 10I 0
D Reserv3 16

D TrgBuffLen S 10I 0

*
* Definitionen der ben”tigten Konstanten
* --------------------------------------

* Commit-Level
D CmtNone C const('0')
D CmtChg C const('1')
D CmtCs C const('2')
D CmtAll C const('3')

* NULL-Flags
D IsNotNull C const('0')
D IsNull C const('1')

* Event-Ereignisse
D EventIns C const('1')
D EventDel C const('2')
D EventUpd C const('3')

* Trigger-Time
D AfterChg C const('1')
D BeforeChg C const('2')

*
* Definition der ben”tigten Zeiger
* --------------------------------

D OrigRec S *
D OrigNull S *

D NewRec S *
D NewNull S *

*
* Definition der benötigten Zeiger
* --------------------------------

D OrigRec S *
D OrigNull S *

D NewRec S *
D NewNull S *

* --------------------------------------------------------------------
* Strukturen für Vergleich After-/Before-immage
* Before-Image (BI)
* --------------------------------------------------------------------
DBIAFP1 E DS based(OrigRec)
D extname(AFP1)
D prefix(BI)

* --------------------------------------------------------------------
* After-Image (AI)
* --------------------------------------------------------------------
DAIAFP1 E DS based(NewRec)
D extname(AFP1)
D prefix(AI)



* Übergabeparameter für DB/400-Trigger
C *entry plist
C parm TrgBuff
C parm TrgBuffLen

* Initialisierungen der Basiszeiger
C eval OrigRec = %addr(TrgBuff) + OrigOffset
C eval OrigNull = %addr(TrgBuff) + OrigNulMap
C eval NewRec = %addr(TrgBuff) + NewOffset
C eval NewNull = %addr(TrgBuff) + NewNulMap