Booth Martin; Contract Programming, Inc.
28 Delmont Avenue
Barre, Vermont 05641
802-476-7942
boothm@ibm.net

A Trigger template program
Thanks to Pete Hall


Trigger template file

 
      /TITLE TRIGGER ** Trigger program shell **

      *                 Pete Hall
      *                 http://www.inwave.com/~peteh/

      * Replace (PFile) with physical file name
      * Replace (AFile) with ancillary file name

      * ---------------------------------------------
      * Ancillary files
      * ---------------------------------------------
     F(AFile)   UF A E           K DISK    Commit(RunCommit) UsrOpn

      * ------------------------------------------
      * Entry Parameters
      * ---------------------------------------------
     DBuffer           DS         32767
     D PFName                        10
     D PFLibrary                     10
     D PFMember                      10
     D TrgEvent                       1
     D TrgTime                        1
     D TrgCmtLvl                      1
     D                                3
     D TrgCCSID                       7B 0
     D                                8
     D OrOffset                       7B 0
     D OrRcdLen                       7B 0
     D OrNBMapOfs                     7B 0
     D OrNBMapLen                     7B 0
     D NwOffset                       7B 0
     D NwRcdLen                       7B 0
     D NwNBMapOfs                     7B 0
     D NwNBMapLen                     7B 0
     D DataSpace               1  32767
     D Bytes                          1    Overlay(DataSpace) Dim(32767)

     DBufferLen        S              7B 0
      * ---------------------------------------------
      * Original Record
      * ---------------------------------------------
     D@OrRecord        S               *   Inz(*Null)

     DOrRecord       E DS                  ExtName((PFile)) Prefix(OR_)
     D                                     Based(@OrRecord)

      * ---------------------------------------------
      * New Record
      * ---------------------------------------------
     D@NwRecord        S               *   Inz(*Null)

     DNwRecord       E DS                  ExtName((PFile)) Prefix(NW_)
     D                                     Based(@NwRecord)

      * ---------------------------------------------
      * Constant Definitions
      * ---------------------------------------------
      * Commit Levels
     DCL_NONE          C                   '0'
     DCL_CHG           C                   '1'
     DCL_CS            C                   '2'
     DCL_ALL           C                   '3'

      * Null byte status
     DNB_NOTNULL       C                   '0'
     DNB_NULL          C                   '1'

      * Trigger events
     DTE_INSERT        C                   '1'
     DTE_DELETE        C                   '2'
     DTE_UPDATE        C                   '3'

      * Trigger times
     DTT_AFTER         C                   '1'
     DTT_BEFORE        C                   '2'
     C     *ENTRY        plist
     C                   parm                    Buffer
     C                   parm                    BufferLen


      * ---------------------------------------------
      * Main-line Procedure
      * ---------------------------------------------

      * Assign the record templates to their data space
     C                   eval      @OrRecord = %Addr(Bytes(OrOffset+1))
     C                   eval      @NwRecord = %Addr(Bytes(NwOffset+1))

      * Execute the correct procedure based on trigger event
     C     TrgEvent      caseq     TE_INSERT     DoInsert
     C     TrgEvent      caseq     TE_DELETE     DoDelete
     C     TrgEvent      caseq     TE_UPDATE     DoUpdate
     C                   endcs
     C                   return

      * ---------------------------------------------
      * Process a delete event
      * ---------------------------------------------
     CSR   DoDelete      BEGSR


     CSR                 ENDSR

      * ---------------------------------------------
      * Process an insert event
      * ---------------------------------------------
     CSR   DoInsert      BEGSR


     CSR                 ENDSR

      * ---------------------------------------------
      * Process an update event
      * ---------------------------------------------
     CSR   DoUpdate      BEGSR


     CSR                 ENDSR

      * ---------------------------------------------
      * Program Initialization
      * ---------------------------------------------
     CSR   *INZSR        BEGSR

     C                   if        TrgCmtLvl > CL_NONE
     C                   move      *ON           RunCommit
     C                   endif
      *                                          > if TrgCmtLvl > CL_NONE      
     C                   open      

     CSR                 ENDSR



For comments or questions leave e-mail
A series of code for FTP of AS/400 files.
Review a sample of my coding work
Return to my home page
Top of page