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
|