Here's a template that I brought from a prior job.  Haven't used it 
recently, but I believe it is fairly efficient using pointers instead of 
moving records to data structures.  Obviously you have to add your logic 
in the Insert, Delete and Update routines.
Sam
      *=== Output File ==============================================
     F*RBHDRPA  O    E           K DISK
      *=== Data Structures for Old and New Records ===================
     DOld_Rcd        E DS                  extname($MENUOPT)
     D                                     prefix(O_)
     D                                     based(OPtr)
     DNew_Rcd        E DS                  extname($MENUOPT)
     D                                     prefix(N_)
     D                                     based(NPtr)
     DOPtr             s               *
     DNPtr             s               *
      *=== Passed Trigger Buffer =====================================
     DBuffer           DS         32767
      *--- Physical File Name
     D FileName                      10
      *
      *--- Physical File Library.
     D LibraryName                   10
      *
      *--- Member Name.
     D MemberName                    10
      *
      *--- Trigger Event.
     D TrgEvent                       1
      *
      *--- Trigger Time.
     D TrgTime                        1
      *
      *--- Commit Lock Level.
     D CommitLckLvl                   1
      *
      *--- Reserved.
     D Filler1                        3
      *
      *--- CCSID.
     D CCSID                         10I 0
      *
      *--- Reserved.
     D Filler2                        8
      *
      *--- Offset to the Original Record.
     D OldOff                        10I 0
      *
      *--- Length of the Original Record.
     D OldLen                        10I 0
      *
      *--- Offset to the Original record null byte map.
     D OldNullOffset                 10I 0
      *
      *--- Length of the null byte map.
     D OldNullLength                 10I 0
      *
      *--- Offset to the new record.
     D NewOff                        10I 0
      *
      *--- Length of the new record.
     D NewLen                        10I 0
      *
      *--- Offset to the new record null byte map.
     D NewNullOffset                 10I 0
      *
      *--- Length of the null byte map.
     D NewNullLength                 10I 0
      *
      *--- Reserved.
     D Resv3                         16
     D BufLen          s             10I 0
      *=== Passed Parameters =========================================
     C     *ENTRY        plist
     C     Buffer        parm                    Buffer
     C     BufLen        parm                    BufLen
      //=== Program flow starts here ==================================
      /FREE
       select;
       when TrgEvent = '1';
           exsr Insert;
       when TrgEvent = '2';
           exsr Delete;
       when TrgEvent = '3';
           exsr Update;
       endsl;
       *inlr = *on;
       //=== Insert ====================================================
       //
       begsr Insert;
           NPtr=%addr(Buffer) + NewOff;
       endsr;
       //=== Delete ====================================================
       //
       begsr Delete;
           OPtr=%addr(Buffer) + OldOff;
       endsr;
       //
       //=== Update ====================================================
       //
       begsr Update;
           NPtr=%addr(Buffer) + NewOff;
           OPtr=%addr(Buffer) + OldOff;
       endsr;
      /END-FREE
On 5/10/2011 7:54 PM, jmmckee wrote:
Seeing a working example would be helpful.  Thanks.
John McKee
As an Amazon Associate we earn from qualifying purchases.