diff --git a/Build/MortgageApplicationV2/Mortgage-Common/.gitattributes b/Build/MortgageApplicationV2/Mortgage-Common/.gitattributes
new file mode 100644
index 00000000..0ba4ef39
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/.gitattributes
@@ -0,0 +1,12 @@
+
+# line endings
+* text eol=lf
+
+# file encodings
+*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.bms zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.pli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.lnk zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.properties zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/.project b/Build/MortgageApplicationV2/Mortgage-Common/.project
new file mode 100644
index 00000000..4b707240
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/.project
@@ -0,0 +1,13 @@
+
+
+ Mortgage-Common
+
+
+
+
+
+
+ com.ibm.ftt.ui.views.project.navigator.local
+ com.ibm.ftt.dbbz.integration.dbbzprojectnature
+
+
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/application-conf/BMS.properties b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/BMS.properties
new file mode 100644
index 00000000..88487a7f
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/BMS.properties
@@ -0,0 +1,25 @@
+# Build properties used by zAppBuild/language/BMS.groovy
+
+#
+# default BMS map build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+bms_fileBuildRank=
+
+#
+# default BMS maximun RC allowed
+# can be overridden by file properties
+bms_maxRC=0
+
+#
+# default BMS parameters
+# can be overridden by file properties
+bms_copyGenParms=SYSPARM(DSECT),DECK,NOOBJECT
+bms_compileParms=SYSPARM(MAP),DECK,NOOBJECT
+bms_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+
+
+
+
+
+
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/application-conf/Cobol.properties b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/Cobol.properties
new file mode 100644
index 00000000..60f73095
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/Cobol.properties
@@ -0,0 +1,56 @@
+# Build properties used by zAppBuild/language/Cobol.groovy
+
+#
+# default COBOL program build rank - used to sort build file list
+# leave empty - overridden by file properties
+cobol_fileBuildRank=
+
+#
+# COBOL dependency resolution rules
+# Rules defined in application.properties
+cobol_resolutionRules=[${copybookRule}]
+
+#
+# default COBOL compiler version
+# can be overridden by file properties
+cobol_compilerVersion=V6
+
+#
+# default COBOL maximum RCs allowed
+# can be overridden by file properties
+cobol_compileMaxRC=4
+cobol_linkEditMaxRC=0
+
+#
+# default COBOL compiler parameters
+# can be overridden by file properties
+cobol_compileParms=LIB
+cobol_compileCICSParms=CICS
+cobol_compileSQLParms=SQL
+cobol_compileErrorPrefixParms=ADATA,EX(ADX(ELAXMGUX))
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+cobol_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+#
+# execute link edit step
+# can be overridden by file properties
+cobol_linkEdit=true
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+cobol_scanLoadModule=true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/application-conf/LinkEdit.properties b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/LinkEdit.properties
new file mode 100644
index 00000000..73a585e1
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/LinkEdit.properties
@@ -0,0 +1,21 @@
+# Build properties used by zAppBuild/language/LinkEdit.groovy
+
+#
+# default link file build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+linkedit_fileBuildRank=
+
+#
+# default LinkEdit maximum RC allowed
+# can be overridden by file properties
+linkedit_maxRC=0
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+linkEdit_parms=MAP,RENT,COMPAT(PM5)
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+linkedit_scanLoadModule=true
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/application-conf/application.properties b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/application.properties
new file mode 100644
index 00000000..f3d1621f
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/application.properties
@@ -0,0 +1,60 @@
+# Build properties used by zAppBuild/build.groovy
+
+#
+# Comma separated list of additional application property files to load
+# Supports both relative path (to ${application}/application-conf/) and absolute path
+applicationPropFiles=file.properties,BMS.properties,Cobol.properties,LinkEdit.properties
+
+#
+# Comma separated list all source directories included in application build. Supports both absolute
+# and relative paths. Relative assumed to be relative to ${workspace}.
+# ex: applicationSrcDirs=${application},/u/build/common/copybooks
+applicationSrcDirs=${application},Mortgage-EPSC,Mortgage-EPSM
+
+#
+# Comma separated list of the build script processing order
+buildOrder=BMS.groovy,Cobol.groovy,LinkEdit.groovy
+
+#
+# The main build branch. Used for cloning collections for topic branch builds instead
+# of rescanning the entire application.
+mainBuildBranch=master
+
+#
+# exclude list used when scanning or running full build
+excludeFileList=.*,**/*.properties,**/*.xml,**/*.groovy,**/*.md,**/application-conf/*.*
+
+#
+# Impact analysis resolution rules (JSON format)
+impactResolutionRules=[${copybookRule},${bmsRule},${linkRule}]
+
+# Rule to locate Cobol copy books
+copybookRule = {"library": "SYSLIB", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/copybook"}, \
+ {"sourceDir": "${workspace}", "directory": "Mortgage-EPSM/copybook"} \
+ ] \
+ }
+
+# Rule to locate BMS maps
+bmsRule = {"library": "SYSLIB", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "Mortgage-EPSC/bms"}, \
+ {"sourceDir": "${workspace}", "directory": "Mortgage-EPSM/bms"} \
+ ] \
+ }
+
+# Rule to locate COBOL programs and Link files for rebuilding statically linked load modules
+linkRule = {"category": "LINK", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "Mortgage-EPSC/cobol"}, \
+ {"sourceDir": "${workspace}", "directory": "Mortgage-EPSM/cobol"}, \
+ {"sourceDir": "${workspace}", "directory": "Mortgage-EPSM/link"} \
+ ] \
+ }
+
+
+
+
+
+
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/application-conf/file.properties b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/file.properties
new file mode 100644
index 00000000..9b732995
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/application-conf/file.properties
@@ -0,0 +1,22 @@
+# Application script mappings and file property overrides
+
+#
+# Script mappings for all application programs
+dbb.scriptMapping = Assembler.groovy :: **/*.asm
+dbb.scriptMapping = BMS.groovy :: **/*.bms
+dbb.scriptMapping = Cobol.groovy :: **/*.cbl
+dbb.scriptMapping = LinkEdit.groovy :: **/*.lnk
+dbb.scriptMapping = PLI.groovy :: **/*.pli
+
+#
+# Need to build epsnbrvl.cbl first during cobol builds
+cobol_fileBuildRank = 1 :: **/cobol/epsnbrvl.cbl
+
+#
+# Skip creating a load module for these programs as they will be statically linked to other programs
+cobol_linkEdit = false :: **/cobol/epsnbrvl.cbl, **/cobol/epsmlist.cbl
+
+#
+# epsmlist needs to compile as CICS but does not have EXEC CICS statements
+# so is not automatically flagged as CICS by dependency scanner
+isCICS = true :: **/cobol/epsmlist.cbl
\ No newline at end of file
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/copybook/epsnbrpm.cpy b/Build/MortgageApplicationV2/Mortgage-Common/copybook/epsnbrpm.cpy
new file mode 100644
index 00000000..5e47012c
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/copybook/epsnbrpm.cpy
@@ -0,0 +1,10 @@
+ 01 EPS-NUMBER-VALIDATION.
+ * INPUT - change 7
+ 03 EPSPARM-VALIDATE-DATA PIC X(13).
+ 03 EPSPARM-MAX-LENGTH PIC 99.
+ * OUTPUT
+ 03 EPSPARM-NUMBER PIC 9(13).
+ 03 EPSPARM-DECIMAL PIC V9(13).
+ 03 EPSPARM-BINARY-NUMBER PIC 9(9)V99 COMP.
+ 03 EPSPARM-RETURN-ERROR PIC X(80).
+
diff --git a/Build/MortgageApplicationV2/Mortgage-Common/copybook/epspdata.cpy b/Build/MortgageApplicationV2/Mortgage-Common/copybook/epspdata.cpy
new file mode 100644
index 00000000..21570784
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-Common/copybook/epspdata.cpy
@@ -0,0 +1,13 @@
+ 01 EPSPDATA.
+ * INPUT
+ 03 EPSPDATA-PRINCIPLE-DATA PIC S9(9)V99 COMP.
+ 03 EPSPDATA-NUMBER-OF-YEARS PIC S9(4) COMP.
+ 03 EPSPDATA-NUMBER-OF-MONTHS PIC S9(4) COMP.
+ 03 EPSPDATA-QUOTED-INTEREST-RATE
+ PIC S9(2)v9(3) COMP.
+ 03 EPSPDATA-YEAR-MONTH-IND PIC X.
+ * OUTPUT
+ 03 EPSPDATA-RETURN-MONTH-PAYMENT
+ PIC S9(7)V99 COMP.
+ 03 EPSPDATA-RETURN-ERROR PIC X(80).
+
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSC/.gitattributes b/Build/MortgageApplicationV2/Mortgage-EPSC/.gitattributes
new file mode 100644
index 00000000..0ba4ef39
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSC/.gitattributes
@@ -0,0 +1,12 @@
+
+# line endings
+* text eol=lf
+
+# file encodings
+*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.bms zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.pli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.lnk zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.properties zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSC/.project b/Build/MortgageApplicationV2/Mortgage-EPSC/.project
new file mode 100644
index 00000000..64d63a0a
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSC/.project
@@ -0,0 +1,13 @@
+
+
+ Mortgage-EPSC
+
+
+
+
+
+
+ com.ibm.ftt.ui.views.project.navigator.local
+ com.ibm.ftt.dbbz.integration.dbbzprojectnature
+
+
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSC/bms/epsmort.bms b/Build/MortgageApplicationV2/Mortgage-EPSC/bms/epsmort.bms
new file mode 100644
index 00000000..cbf6afce
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSC/bms/epsmort.bms
@@ -0,0 +1,42 @@
+*********************************************************************** 00010000
+EPSMORT DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL, @P3CX0008000
+ STORAGE=AUTO,TIOAPFX=YES,DSATTS=(COLOR,HILIGHT), X00090000
+ MAPATTS=(COLOR,HILIGHT) 00091000
+* MENU MAP.
+EPMENU DFHMDI SIZE=(24,80),CTRL=(PRINT,FREEKB) 00110000
+LITLOAN DFHMDF POS=(8,15),LENGTH=23,INITIAL='Amount of Loan:', *
+ ATTRB=(ASKIP,NORM)
+EPLOAN DFHMDF POS=(8,42),LENGTH=12,INITIAL='999999999.99', *
+ ATTRB=(NUM,FSET,IC,NORM)
+ DFHMDF POS=(8,55), *
+ ATTRB=ASKIP
+LITYEARS DFHMDF POS=(9,15),LENGTH=24, *
+ INITIAL='Length of Loan in Years:', *
+ ATTRB=(PROT,NORM)
+EPYEARS DFHMDF POS=(9,42),LENGTH=2,INITIAL='99', *
+ ATTRB=(NUM,FSET,NORM),COLOR=GREEN
+ DFHMDF POS=(9,45),LENGTH=0, *
+ ATTRB=ASKIP
+EPDIFF1 DFHMDF POS=(10,15),LENGTH=22,INITIAL='Interest Rate: ', *
+ ATTRB=(PROT,NORM)
+EPRATE DFHMDF POS=(10,42),LENGTH=5,INITIAL='99.99', *
+ ATTRB=(NUM,FSET,NORM),COLOR=GREEN
+ DFHMDF POS=(15,7),LENGTH=60, *
+ INITIAL='Press PF9 to see companies that can match or be*
+ at this rate', *
+ ATTRB=(ASKIP,NORM),HILIGHT=OFF,COLOR=BLUE
+ DFHMDF POS=(14,15),LENGTH=43, *
+ INITIAL='Press F3 to quit or Enter to calculate loan', *
+ ATTRB=(ASKIP,NORM),HILIGHT=OFF,COLOR=BLUE
+EPDIFF2 DFHMDF POS=(17,15),LENGTH=22,INITIAL='Monthly Payment: ', *
+ ATTRB=(PROT,NORM)
+EPPAYMNT DFHMDF POS=(17,42),LENGTH=12, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=YELLOW
+MSGERR DFHMDF POS=(24,15),ATTRB=(PROT,DRK),LENGTH=40, X00340000
+ INITIAL='INVALID KEY PRESSED' 00350000
+ DFHMDF POS=(2,48),LENGTH=0, *
+ ATTRB=ASKIP
+ DFHMDF POS=(5,25),LENGTH=26,INITIAL='EPS MORTGAGE CALCULATOR',*
+ ATTRB=(ASKIP,BRT)
+EPSMORT DFHMSD TYPE=FINAL 0036000
+ END 00370000
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epscmort.cbl b/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epscmort.cbl
new file mode 100644
index 00000000..ef0faba9
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epscmort.cbl
@@ -0,0 +1,250 @@
+ ID DIVISION.
+ PROGRAM-ID. EPSCMORT.
+ * THIS DEMONSTRATES CICS/DEBUG - EPSDEMOS 2008
+ *
+ * THIS PROGRAM WILL RECEIVE A DATE AND COVERT THE DATE TO
+ * AN INTEGER IN A CALLED PROGRAM TO DETERMINE DAYS FROM
+ * CURRENT DATE.
+ *
+ * (C) 2017 IBM - JIM HILDNER RESERVED.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. IBM-FLEX-ES.
+ OBJECT-COMPUTER. IBM-FLEX-ES.
+ *
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 W-FLAGS.
+ 10 W-SEND-FLAG PIC X.
+ 88 SEND-ERASE VALUE '1'.
+ 88 SEND-DATAONLY VALUE '2'.
+ 88 SEND-MAPONLY VALUE '3'.
+ 88 SEND-DATAONLY-ALARM VALUE '4'.
+ 88 SEND-ALL VALUE '5'.
+
+ 01 W-CONVERSIONS.
+ 05 W-PMT-CNVRT PIC X(12).
+ 05 W-PMT-NUMBER
+ REDEFINES W-PMT-CNVRT
+ PIC 9(10)V99.
+ 05 WS-FORMAT-NUMBER PIC Z,ZZZ,ZZ9.99.
+ 05 W-PRINC-CNVRT PIC X(12).
+ 05 W-PRINC-NUMBER
+ REDEFINES W-PRINC-CNVRT
+ PIC 9(10)V99.
+
+ 01 W-CALL-PROGRAM PIC X(8).
+ *
+ 01 W-RETIREMENT-WA PIC 9(4).
+ 01 W-COMAREA-LENGTH PIC 9(4) COMP.
+
+ 01 SQL-ERROR-MSG.
+ 03 FILLER PIC X(11) VALUE 'SQL ERROR: '.
+ 03 SQL-ERROR-CODE PIC 9(5) DISPLAY.
+ *
+ EXEC SQL
+ INCLUDE SQLCA
+ END-EXEC.
+ *
+ EXEC SQL DECLARE SYSIBM.SYSDUMMY1 TABLE
+ ( IBMREQD CHAR(1) NOT NULL
+ ) END-EXEC.
+ *
+ 01 IBMREQD PIC X(1).
+ *
+ 01 END-OF-TRANS-MSG PIC X(30)
+ VALUE 'END OF TRANSACTION - THANK YOU'.
+ 01 BLANK-MSG PIC X(1) VALUE ' '.
+ COPY DFHAID.
+ * COPY DFHEIBLK.
+ COPY EPSMORT.
+
+ 01 W-COMMUNICATION-AREA.
+ COPY EPSMTCOM.
+
+ COPY EPSNBRPM.
+
+ LINKAGE SECTION.
+
+ 01 DFHCOMMAREA.
+ COPY EPSMTCOM.
+
+ PROCEDURE DIVISION USING DFHCOMMAREA.
+
+ EPSCMORT-MAINLINE.
+ * Call procedure to do SQL call
+ PERFORM A805-DUMMY-SQL-CALL
+ MOVE LENGTH OF DFHCOMMAREA to W-COMAREA-LENGTH.
+ MOVE DFHCOMMAREA to W-COMMUNICATION-AREA.
+ EVALUATE TRUE
+ WHEN EIBCALEN = ZERO
+ * First time in - Show Screen
+ MOVE LOW-VALUES TO EPMENUO
+ SET SEND-ERASE TO TRUE
+ PERFORM A300-SEND-MAP
+ MOVE '3' TO
+ PROCESS-INDICATOR OF W-COMMUNICATION-AREA
+ WHEN EIBAID = DFHCLEAR
+ * Process CLEAR key
+ MOVE LOW-VALUES TO EPMENUO
+ SET SEND-ERASE TO TRUE
+ PERFORM A300-SEND-MAP
+ WHEN EIBAID = DFHPF3 OR DFHPF12
+ * Process END/RETURN keys
+ IF PROCESS-INDICATOR OF W-COMMUNICATION-AREA = '3'
+ EXEC CICS
+ SEND TEXT FROM (END-OF-TRANS-MSG)
+ ERASE
+ FREEKB
+ END-EXEC
+ EXEC CICS
+ RETURN
+ END-EXEC
+ ELSE
+ SET SEND-ALL TO TRUE
+ EXEC CICS
+ SEND TEXT FROM (BLANK-MSG)
+ ERASE
+ FREEKB
+ END-EXEC
+ PERFORM A300-SEND-MAP
+ MOVE '3' TO
+ PROCESS-INDICATOR OF W-COMMUNICATION-AREA
+ END-IF
+ WHEN EIBAID = DFHPF9
+ MOVE '9' TO
+ PROCESS-INDICATOR OF W-COMMUNICATION-AREA
+ EXEC CICS LINK PROGRAM( 'EPSMLIST' )
+ COMMAREA( W-COMMUNICATION-AREA )
+ END-EXEC
+ WHEN EIBAID = DFHENTER
+ * Process ENTER Key
+ IF PROCESS-INDICATOR OF W-COMMUNICATION-AREA = '3'
+ PERFORM A100-PROCESS-MAP
+ ELSE
+ EXEC CICS LINK PROGRAM('EPSMLIST')
+ COMMAREA( W-COMMUNICATION-AREA )
+ END-EXEC
+ END-IF
+ WHEN OTHER
+ * Process Data
+ IF PROCESS-INDICATOR OF W-COMMUNICATION-AREA = '3'
+ PERFORM A600-CALCULATE-MORTGAGE
+ EXEC CICS RETURN END-EXEC
+ * ELSE
+ * MOVE X'E8' TO MSGERRA
+ * MOVE LOW-VALUES TO EPMENUO
+ * SET SEND-DATAONLY-ALARM TO TRUE
+ * PERFORM A300-SEND-MAP
+ END-IF
+ END-EVALUATE
+ EXEC CICS
+ RETURN TRANSID('EPSP')
+ COMMAREA(W-COMMUNICATION-AREA)
+ LENGTH(W-COMAREA-LENGTH)
+ END-EXEC.
+
+ A100-PROCESS-MAP.
+ PERFORM A400-RECEIVE-MAP.
+ PERFORM A600-CALCULATE-MORTGAGE
+ SET SEND-DATAONLY TO TRUE
+ PERFORM A300-SEND-MAP
+ .
+
+ A300-SEND-MAP.
+ EVALUATE TRUE
+ WHEN SEND-MAPONLY
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ MAPONLY
+ CURSOR
+ END-EXEC
+ WHEN SEND-ERASE
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ FROM(EPMENUO)
+ ERASE
+ CURSOR
+ END-EXEC
+ WHEN SEND-DATAONLY
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ FROM(EPMENUO)
+ DATAONLY
+ CURSOR
+ END-EXEC
+ WHEN SEND-ALL
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ FROM(EPMENUO)
+ END-EXEC.
+
+ A400-RECEIVE-MAP.
+ EXEC CICS
+ RECEIVE MAP('EPMENU')
+ MAPSET('EPSMORT')
+ INTO (EPMENUI)
+ END-EXEC.
+
+ MOVE EPLOANI TO EPSPARM-VALIDATE-DATA.
+ MOVE LENGTH OF EPLOANI
+ TO EPSPARM-MAX-LENGTH.
+ CALL 'EPSNBRVL' USING EPS-NUMBER-VALIDATION.
+ COMPUTE EPSPCOM-PRINCIPLE-DATA
+ OF W-COMMUNICATION-AREA
+ = EPSPARM-NUMBER + EPSPARM-DECIMAL.
+
+ MOVE EPYEARSI TO EPSPARM-VALIDATE-DATA.
+ MOVE LENGTH OF EPYEARSI TO EPSPARM-MAX-LENGTH.
+ CALL 'EPSNBRVL' USING EPS-NUMBER-VALIDATION.
+ COMPUTE EPSPCOM-NUMBER-OF-YEARS
+ OF W-COMMUNICATION-AREA
+ = EPSPARM-NUMBER + EPSPARM-DECIMAL.
+
+ MOVE EPRATEI TO EPSPARM-VALIDATE-DATA.
+ MOVE LENGTH OF EPRATEI TO EPSPARM-MAX-LENGTH.
+ CALL 'EPSNBRVL' USING EPS-NUMBER-VALIDATION.
+ COMPUTE EPSPCOM-QUOTED-INTEREST-RATE
+ OF W-COMMUNICATION-AREA
+ = EPSPARM-NUMBER + EPSPARM-DECIMAL.
+
+
+ A600-CALCULATE-MORTGAGE.
+ MOVE 'Y' TO EPSPCOM-YEAR-MONTH-IND
+ OF W-COMMUNICATION-AREA.
+ MOVE 'EPSCSMRT' TO W-CALL-PROGRAM
+ EXEC CICS LINK PROGRAM( W-CALL-PROGRAM )
+ COMMAREA( W-COMMUNICATION-AREA )
+ END-EXEC
+ .
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT
+ OF W-COMMUNICATION-AREA
+ TO WS-FORMAT-NUMBER.
+
+ MOVE WS-FORMAT-NUMBER
+ TO EPPAYMNTO.
+ MOVE EPSPCOM-ERRMSG
+ OF W-COMMUNICATION-AREA
+ TO MSGERRO.
+
+ A805-DUMMY-SQL-CALL.
+ EXEC SQL
+ SELECT IBMREQD
+ INTO :IBMREQD
+ FROM SYSIBM.SYSDUMMY1
+ END-EXEC.
+ *
+ IF SQLCODE = 100
+ MOVE 'No rows found on SYSDUMM1.' TO MSGERRO
+ ELSE
+ IF SQLCODE NOT = 0
+ MOVE SQLCODE TO SQL-ERROR-CODE
+ MOVE SQL-ERROR-MSG TO MSGERRO
+ END-IF
+ END-IF.
+ *
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epscsmrd.cbl b/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epscsmrd.cbl
new file mode 100644
index 00000000..f8140ddd
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epscsmrd.cbl
@@ -0,0 +1,4052 @@
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,CICS
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Web Services for CICS TS 3.x Converter Driver
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRD'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ * *************************************************************
+ * xx Coded Character Sets Configuration
+ * *************************************************************
+ *XML to Language Structure Input CCSID 1140
+ *XML to Language Structure Output CCSID 1140
+ *Language Structure to XML Output CCSID 1140
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-7.
+ 2 PIC X(40) USAGE DISPLAY
+ VALUE 'Language Environment Service Call Failed'.
+ 1 CONVERTER-ERROR-8.
+ 2 PIC X(35) USAGE DISPLAY
+ VALUE 'Language Environment Message Number'.
+ 1 CONVERTER-ERROR-9.
+ 2 PIC X(31) USAGE DISPLAY
+ VALUE 'XML Converter Is Terminating...'.
+ * *************************************************************
+ * Vendor Program Container Definitions
+ * *************************************************************
+ 1 DFH-BODY-CONTAINER PIC X(16) VALUE 'DFH-BODY'.
+ 1 DFH-DATA-CONTAINER PIC X(16) VALUE 'DFH-DATA'.
+ LOCAL-STORAGE SECTION.
+ * *************************************************************
+ * Storage Items For LE Error Handling
+ * *************************************************************
+ 1 CONVERTER-RETURN-CODE PIC S9(9) BINARY.
+ 1 ROUTINE PROCEDURE-POINTER.
+ 1 TOKEN POINTER.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 OPTIONAL-FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 ERROR-RESPONSE.
+ 2 ERROR-OCCURRED PIC X.
+ 2 ERROR-MESSAGE-NUMBER PIC 9(9).
+ 2 ERROR-REASON-LENGTH PIC 9(9) BINARY.
+ 2 ERROR-REASON PIC X(512).
+ * *************************************************************
+ * Converter Metadata Variables
+ * *************************************************************
+ 1 XML2LS-LANG-BUFFER-LENGTH PIC S9(9) COMP.
+ 1 LS2XML-LANG-BUFFER-LENGTH PIC S9(9) COMP.
+ 1 LS2XML-XML-BUFFER-LENGTH PIC S9(9) COMP.
+ 1 XML2LS-XML-CCSID PIC S9(9) COMP.
+ 1 HOST-LANG-CCSID PIC S9(9) COMP.
+ 1 LS2XML-XML-CCSID PIC S9(9) COMP.
+ * *************************************************************
+ * SOAP Pipeline Work Variables
+ * *************************************************************
+ 1 SOAP-PIPELINE-WORK-VARIABLES.
+ 2 NEXT-CONTAINER PIC X(16).
+ 2 COMMAND-RESP PIC 9(9) BINARY.
+ 2 COMMAND-RESP2 PIC 9(9) BINARY.
+ 2 CONTAINER-BROWSE-TOKEN POINTER.
+ 2 DFH-BODY-PTR POINTER.
+ 2 DFH-BODY-LEN PIC 9(9) BINARY.
+ 2 DFH-DATA-PTR POINTER.
+ 2 DFH-DATA-LEN PIC 9(9) BINARY.
+ 2 WORK-AREA-PTR POINTER.
+ 2 WORK-AREA-LEN PIC 9(9) BINARY.
+ LINKAGE SECTION.
+ 1 DFH-BODY PIC X.
+ 1 DFH-DATA PIC X.
+ * *************************************************************
+ * Business Program Binary Interfaces
+ * *************************************************************
+ 01 X00000175
+ .
+ 10 PROCESS-INDICATOR
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PRINCIPLE-DATA
+ PICTURE S9(9)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-YEARS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-MONTHS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PICTURE S9(2)V9(3)
+ USAGE COMP
+ .
+ 10 EPSPCOM-YEAR-MONTH-IND
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PICTURE S9(7)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-ERRMSG
+ PICTURE X(80)
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE
+ PICTURE 9(4)
+ USAGE DISPLAY
+ .
+ 88 EPS02-REQUEST-SUCCESS
+ VALUE
+ 0
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PICTURE X(4)
+ USAGE DISPLAY
+ .
+ PROCEDURE DIVISION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Initialize Storage and Browse Channel
+ * -------------------------------------------------------------
+ PERFORM REGISTER-EXCEPTION-HANDLER
+ INITIALIZE SOAP-PIPELINE-WORK-VARIABLES
+ PERFORM GET-CONVERTER-METADATA
+ PERFORM BROWSE-VENDOR-CHANNEL
+ * -------------------------------------------------------------
+ * Branch To Processing Logic For Container
+ * -------------------------------------------------------------
+ EVALUATE NEXT-CONTAINER
+ WHEN DFH-BODY-CONTAINER
+ PERFORM PROCESS-DFH-BODY
+ WHEN DFH-DATA-CONTAINER
+ PERFORM PROCESS-DFH-DATA
+ WHEN OTHER
+ EXEC CICS ABEND
+ END-EXEC
+ END-EVALUATE
+ * -------------------------------------------------------------
+ * Finished
+ * -------------------------------------------------------------
+ PERFORM FREE-WORK-AREA
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ EXEC CICS RETURN
+ END-EXEC
+ .
+ BROWSE-VENDOR-CHANNEL.
+ EXEC CICS STARTBROWSE CONTAINER
+ BROWSETOKEN (CONTAINER-BROWSE-TOKEN)
+ END-EXEC
+ PERFORM TEST AFTER UNTIL
+ NEXT-CONTAINER EQUAL DFH-BODY-CONTAINER OR
+ NEXT-CONTAINER EQUAL DFH-DATA-CONTAINER OR
+ COMMAND-RESP2 NOT EQUAL ZERO
+ EXEC CICS GETNEXT CONTAINER (NEXT-CONTAINER)
+ BROWSETOKEN (CONTAINER-BROWSE-TOKEN)
+ RESP(COMMAND-RESP)
+ RESP2(COMMAND-RESP2)
+ END-EXEC
+ END-PERFORM
+ .
+ PROCESS-DFH-BODY.
+ PERFORM RECEIVE-DFH-BODY
+ PERFORM ALLOCATE-DFH-DATA-WORK-AREA
+ MOVE 'N' TO ERROR-OCCURRED
+ PERFORM INBOUND-CONVERSION
+ IF ERROR-OCCURRED = 'Y'
+ PERFORM SEND-SOAP-FAULT
+ ELSE
+ PERFORM SEND-DFH-DATA
+ END-IF
+ .
+ PROCESS-DFH-DATA.
+ PERFORM RECEIVE-DFH-DATA
+ PERFORM ALLOCATE-DFH-BODY-WORK-AREA
+ MOVE 'N' TO ERROR-OCCURRED
+ PERFORM OUTBOUND-CONVERSION
+ IF ERROR-OCCURRED = 'Y'
+ PERFORM SEND-SOAP-FAULT
+ ELSE
+ PERFORM SEND-DFH-BODY
+ END-IF
+ .
+ RECEIVE-DFH-BODY.
+ MOVE 'DFHREQUEST' TO DFH-BODY-CONTAINER
+ EXEC CICS GET CONTAINER(DFH-BODY-CONTAINER)
+ SET(DFH-BODY-PTR)
+ FLENGTH(DFH-BODY-LEN)
+ INTOCCSID(1140)
+ END-EXEC
+ SET ADDRESS OF DFH-BODY
+ TO DFH-BODY-PTR
+ .
+ SEND-DFH-BODY.
+ EXEC CICS PUT CONTAINER(DFH-BODY-CONTAINER)
+ FROM(DFH-BODY)
+ FLENGTH(DFH-BODY-LEN)
+ FROMCCSID(1140)
+ END-EXEC
+ .
+ RECEIVE-DFH-DATA.
+ EXEC CICS GET CONTAINER(DFH-DATA-CONTAINER)
+ SET(DFH-DATA-PTR)
+ FLENGTH(DFH-DATA-LEN)
+ END-EXEC
+ SET ADDRESS OF X00000175
+ TO DFH-DATA-PTR
+ .
+ SEND-DFH-DATA.
+ COMPUTE DFH-DATA-LEN =
+ LENGTH OF X00000175
+ EXEC CICS PUT CONTAINER(DFH-DATA-CONTAINER)
+ FROM(X00000175)
+ FLENGTH(DFH-DATA-LEN)
+ END-EXEC
+ .
+ ALLOCATE-DFH-BODY-WORK-AREA.
+ MOVE LS2XML-XML-BUFFER-LENGTH
+ TO WORK-AREA-LEN
+ EXEC CICS GETMAIN
+ SET(WORK-AREA-PTR)
+ FLENGTH(WORK-AREA-LEN)
+ END-EXEC
+ SET ADDRESS OF DFH-BODY
+ TO WORK-AREA-PTR
+ .
+ ALLOCATE-DFH-DATA-WORK-AREA.
+ MOVE XML2LS-LANG-BUFFER-LENGTH
+ TO WORK-AREA-LEN
+ EXEC CICS GETMAIN
+ SET(WORK-AREA-PTR)
+ FLENGTH(WORK-AREA-LEN)
+ END-EXEC
+ SET ADDRESS OF X00000175
+ TO WORK-AREA-PTR
+ .
+ FREE-WORK-AREA.
+ IF WORK-AREA-PTR NOT EQUAL NULL
+ EXEC CICS FREEMAIN
+ DATAPOINTER(WORK-AREA-PTR)
+ END-EXEC
+ END-IF
+ .
+ GET-CONVERTER-METADATA.
+ CALL 'EPSCSMRX' USING
+ XML2LS-LANG-BUFFER-LENGTH LS2XML-LANG-BUFFER-LENGTH
+ LS2XML-XML-BUFFER-LENGTH XML2LS-XML-CCSID
+ HOST-LANG-CCSID LS2XML-XML-CCSID
+ OMITTED OMITTED
+ .
+ SEND-SOAP-FAULT.
+ EXEC CICS SOAPFAULT CREATE CLIENT
+ FAULTSTRING(ERROR-REASON)
+ FAULTSTRLEN(ERROR-REASON-LENGTH)
+ END-EXEC
+ .
+ INBOUND-CONVERSION.
+ CALL 'EPSCSMRI'
+ USING
+ X00000175
+ DFH-BODY-LEN
+ DFH-BODY
+ OMITTED
+ * OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE
+ .
+ OUTBOUND-CONVERSION.
+ CALL 'EPSCSMRO'
+ USING
+ X00000175
+ DFH-BODY-LEN
+ DFH-BODY
+ OMITTED
+ * OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE
+ .
+ REGISTER-EXCEPTION-HANDLER.
+ SET ROUTINE TO ENTRY 'EPSCSMRF'
+ SET TOKEN TO ADDRESS OF ERROR-RESPONSE
+ CALL 'CEEHDLR' USING ROUTINE TOKEN FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ UNREGISTER-EXCEPTION-HANDLER.
+ CALL 'CEEHDLU' USING ROUTINE FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ CHECK-LE-SERVICE-FC.
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-7
+ DISPLAY CONVERTER-ERROR-8 ' '
+ FACILITY OF FEEDBACK-CODE
+ MSG-NO OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-9
+ STOP RUN
+ END-IF
+ .
+ END PROGRAM 'EPSCSMRD'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Exception Handler
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,NOCICS
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRF'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-5.
+ 2 PIC X(31) USAGE DISPLAY
+ VALUE 'Failed To Get Exception Message'.
+ LOCAL-STORAGE SECTION.
+ 1 MSG-PTR PIC S9(9) COMP.
+ 1 MSG-PART PIC X(80).
+ 1 MSG-OFFSET PIC 9(9) COMP.
+ 1 MSG-PART-LENGTH PIC 9(9) COMP.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ LINKAGE SECTION.
+ 1 TOKEN POINTER.
+ 1 RESULT PIC S9(9) BINARY.
+ 88 RESUME VALUE 10.
+ 1 CURRENT-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION PIC X(12).
+ 1 ERROR-CDATA-PTR PIC X(512).
+ 1 ERROR-RESPONSE.
+ 2 ERROR-OCCURRED PIC X.
+ 2 ERROR-MESSAGE-NUMBER PIC 9(9).
+ 2 ERROR-REASON-LENGTH PIC 9(9) BINARY.
+ 2 ERROR-REASON PIC X(512).
+ PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
+ RESULT NEW-CONDITION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Storage For Saving Exception Details
+ * -------------------------------------------------------------
+ SET ADDRESS OF ERROR-RESPONSE TO TOKEN
+ * -------------------------------------------------------------
+ * Get Exception Message
+ * -------------------------------------------------------------
+ PERFORM FILL-DESCRIPTION-BUFFER
+ * -------------------------------------------------------------
+ * Display Exception Message
+ * -------------------------------------------------------------
+ PERFORM DISPLAY-MESSAGE-TEXT
+ * -------------------------------------------------------------
+ * Recover From Exception To Produce XML Response
+ * -------------------------------------------------------------
+ MOVE 'Y' TO ERROR-OCCURRED
+ SET RESUME TO TRUE
+ * -------------------------------------------------------------
+ * Finished
+ * -------------------------------------------------------------
+ GOBACK
+ .
+ FILL-DESCRIPTION-BUFFER.
+ MOVE 0 TO MSG-PTR
+ MOVE 512 TO ERROR-REASON-LENGTH
+ MOVE SPACES TO MSG-PART ERROR-REASON
+ CALL 'CEEMGET' USING
+ CURRENT-CONDITION MSG-PART
+ MSG-PTR FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE AND
+ NOT CEE0E7 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-5
+ END-IF
+ IF NOT CEE0E7 OF FEEDBACK-CODE
+ PERFORM COMPUTE-PART-LENGTH
+ MOVE MSG-PART-LENGTH TO ERROR-REASON-LENGTH
+ MOVE MSG-PART TO ERROR-REASON
+ ELSE
+ MOVE MSG-PART TO ERROR-REASON
+ MOVE MSG-PTR TO MSG-OFFSET
+ PERFORM UNTIL MSG-PTR = 0
+ MOVE SPACES TO MSG-PART
+ CALL 'CEEMGET' USING
+ CURRENT-CONDITION MSG-PART
+ MSG-PTR FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE AND
+ NOT CEE0E7 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-5
+ END-IF
+ IF MSG-PTR NOT = 0
+ MOVE MSG-PART TO
+ ERROR-REASON(MSG-OFFSET + 1:MSG-PTR)
+ ADD MSG-PTR TO MSG-OFFSET
+ ELSE
+ PERFORM COMPUTE-PART-LENGTH
+ MOVE MSG-PART TO
+ ERROR-REASON(MSG-OFFSET + 1:MSG-PART-LENGTH)
+ ADD MSG-PART-LENGTH TO MSG-OFFSET
+ END-IF
+ END-PERFORM
+ END-IF
+ MOVE MSG-NO OF CURRENT-CONDITION TO
+ ERROR-MESSAGE-NUMBER
+ MOVE MSG-OFFSET TO ERROR-REASON-LENGTH
+ .
+ COMPUTE-PART-LENGTH.
+ PERFORM VARYING MSG-PART-LENGTH FROM 80 BY -1
+ UNTIL MSG-PART(MSG-PART-LENGTH:1) NOT = SPACE
+ OR MSG-PART-LENGTH < 1
+ END-PERFORM
+ .
+ DISPLAY-MESSAGE-TEXT.
+ DISPLAY ERROR-REASON(1:ERROR-REASON-LENGTH)
+ .
+ END PROGRAM 'EPSCSMRF'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Compiled XML Conversion Properties API
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRX'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 XML2LS-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 XML2LS-XML-CCSID PIC 9(9) COMP.
+ 1 HOST-LANG-CCSID PIC 9(9) COMP.
+ 1 LS2XML-XML-CCSID PIC 9(9) COMP.
+ 1 XML2LS-PROPERTIES PIC X.
+ 1 LS2XML-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ XML2LS-LANG-BUFFER-LENGTH
+ LS2XML-LANG-BUFFER-LENGTH
+ LS2XML-XML-BUFFER-LENGTH
+ XML2LS-XML-CCSID
+ HOST-LANG-CCSID
+ LS2XML-XML-CCSID
+ XML2LS-PROPERTIES
+ LS2XML-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF XML2LS-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO XML2LS-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO LS2XML-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-XML-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 758
+ TO LS2XML-XML-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF XML2LS-XML-CCSID
+ NOT EQUAL NULL
+ MOVE 1140
+ TO XML2LS-XML-CCSID
+ END-IF
+ IF ADDRESS OF HOST-LANG-CCSID
+ NOT EQUAL NULL
+ MOVE 1140
+ TO HOST-LANG-CCSID
+ END-IF
+ IF ADDRESS OF LS2XML-XML-CCSID
+ NOT EQUAL NULL
+ MOVE 1140
+ TO LS2XML-XML-CCSID
+ END-IF
+ IF ADDRESS OF XML2LS-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO XML2LS-PROPERTIES
+ END-IF
+ IF ADDRESS OF LS2XML-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO LS2XML-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRX'.
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,NOCICS,XMLPARSE(COMPAT)
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * XML to Language Structure Converter
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRI'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 XML-ROOT-ELEMENT.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA'.
+ 1 ELEMENT-HASH-ENTRIES.
+ 2 X00000064.
+ 3 PIC X(35) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_number_of_years'.
+ 3 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 3.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X00000065.
+ 3 PIC X(36) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_number_of_months'.
+ 3 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 4.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 3.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X00000066.
+ 3 PIC X(40) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_quoted_interest_rate'.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 5.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 3.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 4.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X00000067.
+ 3 PIC X(34) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_year_month_ind'.
+ 3 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 6.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'X'.
+ 2 X00000068.
+ 3 PIC X(11) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA'.
+ 3 PIC X(29) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC X VALUE 'T'.
+ 2 X00000069.
+ 3 PIC X(34) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_principle_data'.
+ 3 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X0000006A.
+ 3 PIC X(40) VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE '-'.
+ 1 ELEMENT-HASH-TABLE REDEFINES ELEMENT-HASH-ENTRIES.
+ 2 EHT-ENTRIES OCCURS 7 TIMES.
+ 3 ELEMENT-NAME PIC X(40).
+ 3 ROUTING-CODE PIC 9(4) USAGE COMP-5.
+ 3 NUMERIC-TARGET-CODE PIC 9(4) USAGE COMP-5.
+ 3 NUMERIC-RESCUE-CODE PIC 9(4) USAGE COMP-5.
+ 3 LANG-STRUCT-ID PIC 9(4) USAGE COMP-5.
+ 3 CONTENT-TYPE PIC X.
+ 1 NUMERIC-SOURCES.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE '.9'.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '.99'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '.999'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '-.9'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '-.99'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-.999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE '-9'.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '-9.9'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-9.99'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-9.999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '-99'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-99.9'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-99.99'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-99.999'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '-999'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-999.9'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-999.99'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-9999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-9999.9'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '-9999.99'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-99999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '-99999.9'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '-99999.99'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-999999'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '-999999.9'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '-999999.99'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '-9999999'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '-9999999.9'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '-9999999.99'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '-99999999'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '-99999999.9'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE '-99999999.99'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '-999999999'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE '-999999999.9'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(13) USAGE DISPLAY
+ VALUE '-999999999.99'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE '9'.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '9.9'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '9.99'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '9.999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE '99'.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '99.9'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '99.99'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '99.999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '999'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '999.9'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '999.99'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '9999'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '9999.9'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '9999.99'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '99999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '99999.9'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '99999.99'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '999999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '999999.9'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '999999.99'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '9999999'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '9999999.9'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '9999999.99'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '99999999'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '99999999.9'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '99999999.99'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '999999999'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '999999999.9'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE '999999999.99'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE SPACES.
+ 1 NUMERIC-SOURCES-ARRAY REDEFINES NUMERIC-SOURCES.
+ 2 NPSA PIC X(13)
+ OCCURS 64 TIMES
+ ASCENDING NPSA INDEXED BY NPSA-NDX.
+ 1 NUMERIC-MOVE-RULES.
+ 2 X0000006B.
+ 3 PIC S9(4) COMP VALUE 1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 2.
+ 2 X0000006C.
+ 3 PIC S9(4) COMP VALUE 3.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 4.
+ 2 X0000006D.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 5.
+ 2 X0000006E.
+ 3 PIC S9(4) COMP VALUE 6.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 7.
+ 2 X0000006F.
+ 3 PIC S9(4) COMP VALUE 8.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 9.
+ 2 X00000070.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 10.
+ 2 X00000071.
+ 3 PIC S9(4) COMP VALUE 11.
+ 3 PIC S9(4) COMP VALUE 12.
+ 3 PIC S9(4) COMP VALUE 13.
+ 2 X00000072.
+ 3 PIC S9(4) COMP VALUE 14.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 15.
+ 2 X00000073.
+ 3 PIC S9(4) COMP VALUE 16.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 17.
+ 2 X00000074.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 18.
+ 2 X00000075.
+ 3 PIC S9(4) COMP VALUE 19.
+ 3 PIC S9(4) COMP VALUE 20.
+ 3 PIC S9(4) COMP VALUE 21.
+ 2 X00000076.
+ 3 PIC S9(4) COMP VALUE 22.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 23.
+ 2 X00000077.
+ 3 PIC S9(4) COMP VALUE 24.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 25.
+ 2 X00000078.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 26.
+ 2 X00000079.
+ 3 PIC S9(4) COMP VALUE 27.
+ 3 PIC S9(4) COMP VALUE 28.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007A.
+ 3 PIC S9(4) COMP VALUE 29.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007B.
+ 3 PIC S9(4) COMP VALUE 30.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007C.
+ 3 PIC S9(4) COMP VALUE 31.
+ 3 PIC S9(4) COMP VALUE 32.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007D.
+ 3 PIC S9(4) COMP VALUE 33.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007E.
+ 3 PIC S9(4) COMP VALUE 34.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007F.
+ 3 PIC S9(4) COMP VALUE 35.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000080.
+ 3 PIC S9(4) COMP VALUE 36.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000081.
+ 3 PIC S9(4) COMP VALUE 37.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000082.
+ 3 PIC S9(4) COMP VALUE 38.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000083.
+ 3 PIC S9(4) COMP VALUE 39.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000084.
+ 3 PIC S9(4) COMP VALUE 40.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000085.
+ 3 PIC S9(4) COMP VALUE 41.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000086.
+ 3 PIC S9(4) COMP VALUE 42.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000087.
+ 3 PIC S9(4) COMP VALUE 43.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000088.
+ 3 PIC S9(4) COMP VALUE 44.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000089.
+ 3 PIC S9(4) COMP VALUE 45.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008A.
+ 3 PIC S9(4) COMP VALUE 46.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008B.
+ 3 PIC S9(4) COMP VALUE 47.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008C.
+ 3 PIC S9(4) COMP VALUE 48.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008D.
+ 3 PIC S9(4) COMP VALUE 49.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008E.
+ 3 PIC S9(4) COMP VALUE 50.
+ 3 PIC S9(4) COMP VALUE 51.
+ 3 PIC S9(4) COMP VALUE 52.
+ 2 X0000008F.
+ 3 PIC S9(4) COMP VALUE 53.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 54.
+ 2 X00000090.
+ 3 PIC S9(4) COMP VALUE 55.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 56.
+ 2 X00000091.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 57.
+ 2 X00000092.
+ 3 PIC S9(4) COMP VALUE 58.
+ 3 PIC S9(4) COMP VALUE 59.
+ 3 PIC S9(4) COMP VALUE 60.
+ 2 X00000093.
+ 3 PIC S9(4) COMP VALUE 61.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 62.
+ 2 X00000094.
+ 3 PIC S9(4) COMP VALUE 63.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 64.
+ 2 X00000095.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 65.
+ 2 X00000096.
+ 3 PIC S9(4) COMP VALUE 66.
+ 3 PIC S9(4) COMP VALUE 67.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000097.
+ 3 PIC S9(4) COMP VALUE 68.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000098.
+ 3 PIC S9(4) COMP VALUE 69.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000099.
+ 3 PIC S9(4) COMP VALUE 70.
+ 3 PIC S9(4) COMP VALUE 71.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009A.
+ 3 PIC S9(4) COMP VALUE 72.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009B.
+ 3 PIC S9(4) COMP VALUE 73.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009C.
+ 3 PIC S9(4) COMP VALUE 74.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009D.
+ 3 PIC S9(4) COMP VALUE 75.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009E.
+ 3 PIC S9(4) COMP VALUE 76.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009F.
+ 3 PIC S9(4) COMP VALUE 77.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A0.
+ 3 PIC S9(4) COMP VALUE 78.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A1.
+ 3 PIC S9(4) COMP VALUE 79.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A2.
+ 3 PIC S9(4) COMP VALUE 80.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A3.
+ 3 PIC S9(4) COMP VALUE 81.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A4.
+ 3 PIC S9(4) COMP VALUE 82.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A5.
+ 3 PIC S9(4) COMP VALUE 83.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A6.
+ 3 PIC S9(4) COMP VALUE 84.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A7.
+ 3 PIC S9(4) COMP VALUE 85.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A8.
+ 3 PIC S9(4) COMP VALUE 86.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A9.
+ 3 PIC S9(4) COMP VALUE 87.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000AA.
+ 3 PIC S9(4) COMP VALUE 88.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 1 NMAR-TABLE REDEFINES NUMERIC-MOVE-RULES.
+ 2 OCCURS 64 TIMES.
+ 3 NMAR-ENTRY PIC S9(4) COMP OCCURS 3 TIMES.
+ 1 ERROR-MESSAGES.
+ 2 CONVERTER-ERROR-3.
+ 3 PIC X(36) USAGE DISPLAY
+ VALUE 'Failed To Register Exception Handler'.
+ 2 CONVERTER-ERROR-4.
+ 3 PIC X(38) USAGE DISPLAY
+ VALUE 'Failed To Unregister Exception Handler'.
+ 2 CONVERTER-ERROR-7.
+ 3 PIC X(40) USAGE DISPLAY
+ VALUE 'Language Environment Service Call Failed'.
+ 2 CONVERTER-ERROR-8.
+ 3 PIC X(35) USAGE DISPLAY
+ VALUE 'Language Environment Message Number'.
+ 2 CONVERTER-ERROR-9.
+ 3 PIC X(31) USAGE DISPLAY
+ VALUE 'XML Converter Is Terminating...'.
+ 1 XPATH-DELIM PIC X VALUE '/'.
+ 1 QNAME-DELIM PIC X VALUE ':'.
+ LOCAL-STORAGE SECTION.
+ 1 NUMERIC-PICTURE-STORAGE.
+ 2 X000000AB PIC X(13).
+ 2 X000000AC PIC X(1).
+ 2 X000000AD PIC X(2).
+ 2 X000000AE PIC X(3).
+ 2 X000000AF PIC X(4).
+ 2 X000000B0 PIC X(5).
+ 2 X000000B1 PIC X(6).
+ 2 X000000B2 PIC X(7).
+ 2 X000000B3 PIC X(8).
+ 2 X000000B4 PIC X(9).
+ 2 X000000B5 PIC X(10).
+ 2 X000000B6 PIC X(11).
+ 2 X000000B7 PIC X(12).
+ 2 X000000B8 PIC X(13).
+ 1 NUMERIC-CHARACTER-STORAGE.
+ 2 X000000B9 PIC X(1).
+ 2 X000000BA PIC X(2).
+ 2 X000000BB PIC X(3).
+ 2 X000000BC PIC X(4).
+ 2 X000000BD PIC X(5).
+ 2 X000000BE PIC X(6).
+ 2 X000000BF PIC X(7).
+ 2 X000000C0 PIC X(8).
+ 2 X000000C1 PIC X(9).
+ 2 X000000C2 PIC X(10).
+ 2 X000000C3 PIC X(11).
+ 2 X000000C4 PIC X(12).
+ 2 X000000C5 PIC X(13).
+ 1 VSTRING.
+ 2 VSTRING-LENGTH PIC S9(4) COMP.
+ 2 VSTRING-DATA PIC X(80).
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 ARRAY-SUBSCRIPTS.
+ 2 X00000012 PIC 9(9) COMP VALUE 0.
+ 1 HASH-TOKEN PIC X(40).
+ 1 REDEFINES HASH-TOKEN.
+ 2 OCCURS 10 TIMES INDEXED BY HASH-DIGIT-NDX.
+ 3 HASH-DIGIT PIC S9(9) COMP.
+ 1 HASH-VALUE PIC S9(9) COMP-5.
+ 1 LANG-STRUCT-HASH-VALUE PIC S9(9) COMP-5 VALUE 0.
+ 1 HASH-DISCARD PIC S9(9) COMP-5.
+ 1 INTEGER-PART PIC S9(20) COMP-3.
+ 1 FRACTION-PART PIC SV9(20) COMP-3.
+ 1 SKIP-ELEMENT PIC X DISPLAY VALUE 'Y'.
+ 1 ELE-NAME-LEN PIC 9(9) COMP VALUE 0.
+ 1 ELE-NAME PIC X(800).
+ 1 ELE-CON-LEN PIC 9(9) COMP VALUE 0.
+ 1 ELE-CON PIC X(128).
+ 1 ELE-CON-NDX PIC 9(9) COMP.
+ 1 ELE-CHAR-LIMIT PIC 9(9) COMP.
+ 1 CON-TXED PIC X DISPLAY.
+ 1 CMP-TMPA PIC S9(9) COMP.
+ 1 CMP-TMPB PIC S9(9) COMP.
+ 1 STOP-SEARCH PIC X DISPLAY.
+ 1 NPSAN PIC 9(9) COMP.
+ 1 ERROR-CODE PIC S9(9) COMP.
+ 1 ELEMENT-HITS PIC 9(9) COMP VALUE 0.
+ 1 SEV PIC S9(4) COMP.
+ 1 MSGNO PIC S9(4) COMP.
+ 1 CASE PIC S9(4) COMP.
+ 1 SEV2 PIC S9(4) COMP.
+ 1 CNTRL PIC S9(4) COMP.
+ 1 FACID PIC X(3) DISPLAY.
+ 1 ISINFO PIC S9(9) COMP.
+ 1 QDATA PIC S9(9) COMP.
+ 1 INSERTNO PIC S9(9) COMP.
+ 1 EEC PIC 9(9) DISPLAY.
+ 1 ROUTINE PROCEDURE-POINTER.
+ 1 TOKEN POINTER.
+ 1 XML2LS-LANG-BUFFER-POINTER POINTER.
+ 1 XML2LS-LANG-BUFFER-ADDRESS
+ REDEFINES XML2LS-LANG-BUFFER-POINTER PIC 9(9) COMP.
+ 1 XML2LS-CONVERTED-LENGTH PIC 9(9) COMP VALUE 0.
+ 1 XPATH PIC X(400).
+ 1 XPOS PIC 9(9) COMP VALUE 1.
+ 1 XSTACK-DEPTH PIC 9(9) COMP VALUE 0.
+ 1 XML-ROOT-FOUND PIC X VALUE 'N'.
+ 1 LANG-STRUCT-NAME PIC X(30).
+ 1 LANG-STRUCT-NAME-LENGTH PIC 9(4) COMP.
+ 1 XML-NAT-CHAR PIC N USAGE NATIONAL.
+ LINKAGE SECTION.
+ 1 X0000005E PIC .9.
+ 1 X00000060 PIC .9(2).
+ 1 X00000062 PIC .9(3).
+ 1 X0000005F PIC -.9.
+ 1 X00000061 PIC -.9(2).
+ 1 X00000063 PIC -.9(3).
+ 1 X00000017 PIC -9.
+ 1 X00000029 PIC -9.9.
+ 1 X0000002B PIC -9.9(2).
+ 1 X0000002D PIC -9.9(3).
+ 1 X00000019 PIC -9(2).
+ 1 X0000002F PIC -9(2).9.
+ 1 X00000031 PIC -9(2).9(2).
+ 1 X00000033 PIC -9(2).9(3).
+ 1 X0000001B PIC -9(3).
+ 1 X00000035 PIC -9(3).9.
+ 1 X00000037 PIC -9(3).9(2).
+ 1 X0000001D PIC -9(4).
+ 1 X0000003B PIC -9(4).9.
+ 1 X0000003D PIC -9(4).9(2).
+ 1 X0000001F PIC -9(5).
+ 1 X00000041 PIC -9(5).9.
+ 1 X00000043 PIC -9(5).9(2).
+ 1 X00000021 PIC -9(6).
+ 1 X00000047 PIC -9(6).9.
+ 1 X00000049 PIC -9(6).9(2).
+ 1 X00000023 PIC -9(7).
+ 1 X0000004D PIC -9(7).9.
+ 1 X0000004F PIC -9(7).9(2).
+ 1 X00000025 PIC -9(8).
+ 1 X00000053 PIC -9(8).9.
+ 1 X00000055 PIC -9(8).9(2).
+ 1 X00000027 PIC -9(9).
+ 1 X00000059 PIC -9(9).9.
+ 1 X0000005B PIC -9(9).9(2).
+ 1 X00000016 PIC 9.
+ 1 X00000028 PIC 9.9.
+ 1 X0000002A PIC 9.9(2).
+ 1 X0000002C PIC 9.9(3).
+ 1 X00000018 PIC 9(2).
+ 1 X0000002E PIC 9(2).9.
+ 1 X00000030 PIC 9(2).9(2).
+ 1 X00000032 PIC 9(2).9(3).
+ 1 X0000001A PIC 9(3).
+ 1 X00000034 PIC 9(3).9.
+ 1 X00000036 PIC 9(3).9(2).
+ 1 X0000001C PIC 9(4).
+ 1 X0000003A PIC 9(4).9.
+ 1 X0000003C PIC 9(4).9(2).
+ 1 X0000001E PIC 9(5).
+ 1 X00000040 PIC 9(5).9.
+ 1 X00000042 PIC 9(5).9(2).
+ 1 X00000020 PIC 9(6).
+ 1 X00000046 PIC 9(6).9.
+ 1 X00000048 PIC 9(6).9(2).
+ 1 X00000022 PIC 9(7).
+ 1 X0000004C PIC 9(7).9.
+ 1 X0000004E PIC 9(7).9(2).
+ 1 X00000024 PIC 9(8).
+ 1 X00000052 PIC 9(8).9.
+ 1 X00000054 PIC 9(8).9(2).
+ 1 X00000026 PIC 9(9).
+ 1 X00000058 PIC 9(9).9.
+ 1 X0000005A PIC 9(9).9(2).
+ 1 X00000013 COMP PIC S9(9)V9(2).
+ 1 X00000014 COMP PIC S9(4).
+ 1 X00000015 COMP PIC S9(2)V9(3).
+ 01 DFHCOMMAREA
+ .
+ 10 PROCESS-INDICATOR
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PRINCIPLE-DATA
+ PICTURE S9(9)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-YEARS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-MONTHS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PICTURE S9(2)V9(3)
+ USAGE COMP
+ .
+ 10 EPSPCOM-YEAR-MONTH-IND
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PICTURE S9(7)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-ERRMSG
+ PICTURE X(80)
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE
+ PICTURE 9(4)
+ USAGE DISPLAY
+ .
+ 88 EPS02-REQUEST-SUCCESS
+ VALUE
+ 0
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PICTURE X(4)
+ USAGE DISPLAY
+ .
+ 1 XML2LS-LANG-BUFFER PIC X(106).
+ 1 XML2LS-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 XML2LS-XML-BUFFER PIC X(33554436).
+ 1 OPTIONAL-FEEDBACK-CODE PIC X(12).
+ 1 CONVERTER-RETURN-CODE PIC 9(9) COMP.
+ PROCEDURE DIVISION USING
+ XML2LS-LANG-BUFFER
+ XML2LS-XML-BUFFER-LENGTH
+ XML2LS-XML-BUFFER
+ OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ MAINLINE SECTION.
+ MOVE 'N'
+ TO NUMVAL-ERROR UNICODE-ERROR OTHER-ERROR
+ PERFORM CHECK-PARAMETERS
+ PERFORM REGISTER-EXCEPTION-HANDLER
+ PERFORM CHECK-INPUT-MESSAGE-LENGTH
+ SET XML2LS-LANG-BUFFER-POINTER
+ TO ADDRESS OF XML2LS-LANG-BUFFER
+ XML PARSE XML2LS-XML-BUFFER (1:XML2LS-XML-BUFFER-LENGTH)
+ PROCESSING PROCEDURE XML-HANDLER
+ THRU GENERAL-LOGIC-EXIT
+ ON EXCEPTION
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ NOT ON EXCEPTION
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ MOVE ZERO TO CONVERTER-RETURN-CODE
+ END-XML
+ GOBACK
+ .
+ CHECK-PARAMETERS.
+ IF ADDRESS OF XML2LS-LANG-BUFFER EQUAL NULL AND
+ ADDRESS OF XML2LS-XML-BUFFER-LENGTH NOT EQUAL NULL
+ CALL 'EPSCSMRJ' USING XML2LS-XML-BUFFER-LENGTH
+ GOBACK
+ END-IF
+ IF ADDRESS OF XML2LS-LANG-BUFFER EQUAL NULL OR
+ ADDRESS OF XML2LS-XML-BUFFER-LENGTH EQUAL NULL OR
+ ADDRESS OF XML2LS-XML-BUFFER EQUAL NULL
+ MOVE 294 TO MSGNO
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ .
+ CHECK-INPUT-MESSAGE-LENGTH.
+ IF XML2LS-XML-BUFFER-LENGTH > 33554436
+ MOVE 285 TO MSGNO
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ .
+ XML-HANDLER.
+ EVALUATE XML-EVENT
+ WHEN 'CONTENT-CHARACTERS'
+ IF SKIP-ELEMENT = 'N'
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (XML-TEXT)
+ COMPUTE CMP-TMPA = ELE-CON-LEN + CMP-TMPB
+ IF CMP-TMPA <= 128
+ MOVE XML-TEXT
+ TO ELE-CON (ELE-CON-NDX:CMP-TMPB)
+ ADD CMP-TMPB TO ELE-CON-LEN ELE-CON-NDX
+ ELSE
+ MOVE CMP-TMPA TO ELE-CON-LEN
+ GO TO CHARACTER-BUFFER-OVERFLOW
+ END-IF
+ END-IF
+ WHEN 'START-OF-ELEMENT'
+ PERFORM PUSH-ELEMENT
+ IF XSTACK-DEPTH > 0 AND
+ (XPOS - 2) <= 40
+ MOVE ALL X'00' TO HASH-TOKEN
+ MOVE XPATH(2:XPOS - 2) TO HASH-TOKEN
+ (40 - (XPOS - 3):XPOS - 2)
+ MOVE 0 TO HASH-VALUE
+ SET HASH-DIGIT-NDX TO 1
+ PERFORM 10 TIMES
+ ADD HASH-DIGIT (HASH-DIGIT-NDX) TO
+ HASH-VALUE
+ SET HASH-DIGIT-NDX UP BY 1
+ END-PERFORM
+ DIVIDE HASH-VALUE BY 7 GIVING HASH-DISCARD
+ REMAINDER HASH-VALUE
+ END-DIVIDE
+ IF HASH-VALUE LESS THAN ZERO
+ ADD 7 TO HASH-VALUE
+ ELSE
+ ADD 1 TO HASH-VALUE
+ END-IF
+ IF ELEMENT-NAME (HASH-VALUE)
+ = XPATH(2:XPOS - 2)
+ MOVE 'N' TO SKIP-ELEMENT
+ ADD 1 TO ELEMENT-HITS
+ MOVE 'N' TO CON-TXED
+ MOVE ZERO TO ELE-CON-LEN
+ MOVE 1 TO ELE-CON-NDX
+ IF CONTENT-TYPE (HASH-VALUE) = 'R'
+ OR CONTENT-TYPE (HASH-VALUE) = 'T'
+ GO TO ROUTE-ELEMENT
+ END-IF
+ ELSE
+ MOVE 'Y' TO SKIP-ELEMENT
+ END-IF
+ ELSE
+ MOVE 'Y' TO SKIP-ELEMENT
+ END-IF
+ WHEN 'END-OF-ELEMENT'
+ IF XSTACK-DEPTH > 0
+ IF LANG-STRUCT-HASH-VALUE > 0 AND
+ ELEMENT-NAME(LANG-STRUCT-HASH-VALUE)
+ = XPATH(2:XPOS - 2)
+ EVALUATE LANG-STRUCT-ID(LANG-STRUCT-HASH-VALUE)
+ WHEN 1
+ COMPUTE CMP-TMPA =
+ LENGTH OF DFHCOMMAREA
+ END-COMPUTE
+ ADD CMP-TMPA
+ TO XML2LS-LANG-BUFFER-ADDRESS
+ XML2LS-CONVERTED-LENGTH
+ END-EVALUATE
+ INITIALIZE LANG-STRUCT-HASH-VALUE
+ PERFORM POP-ELEMENT
+ GO TO GENERAL-LOGIC-EXIT
+ ELSE
+ IF SKIP-ELEMENT = 'N' AND CON-TXED = 'N' AND
+ ELEMENT-NAME(HASH-VALUE)
+ = XPATH(2:XPOS - 2)
+ PERFORM POP-ELEMENT
+ GO TO ROUTE-ELEMENT
+ END-IF
+ END-IF
+ PERFORM POP-ELEMENT
+ END-IF
+ WHEN 'CONTENT-CHARACTER'
+ IF SKIP-ELEMENT = 'N'
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (XML-TEXT)
+ COMPUTE CMP-TMPA = ELE-CON-LEN + CMP-TMPB
+ IF CMP-TMPA <= 128
+ MOVE XML-TEXT
+ TO ELE-CON (ELE-CON-NDX:CMP-TMPB)
+ ADD CMP-TMPB TO ELE-CON-LEN ELE-CON-NDX
+ ELSE
+ MOVE CMP-TMPA TO ELE-CON-LEN
+ GO TO CHARACTER-BUFFER-OVERFLOW
+ END-IF
+ END-IF
+ WHEN 'CONTENT-NATIONAL-CHARACTER'
+ IF SKIP-ELEMENT = 'N'
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (XML-NTEXT)
+ IF CMP-TMPB > 1
+ MOVE SPACE TO XML-NAT-CHAR
+ ELSE
+ MOVE XML-NTEXT TO XML-NAT-CHAR
+ END-IF
+ COMPUTE CMP-TMPA = ELE-CON-LEN + 1
+ IF CMP-TMPA <= 128
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (
+ FUNCTION DISPLAY-OF (XML-NAT-CHAR))
+ IF CMP-TMPB > 1
+ MOVE SPACE
+ TO ELE-CON (ELE-CON-NDX:1)
+ ELSE
+ MOVE FUNCTION DISPLAY-OF (XML-NAT-CHAR)
+ TO ELE-CON (ELE-CON-NDX:1)
+ END-IF
+ ADD 1 TO ELE-CON-LEN ELE-CON-NDX
+ ELSE
+ MOVE CMP-TMPA TO ELE-CON-LEN
+ GO TO CHARACTER-BUFFER-OVERFLOW
+ END-IF
+ END-IF
+ WHEN 'START-OF-DOCUMENT'
+ CALL 'CEE3SRP' USING RECOVERY-POINT FEEDBACK-CODE
+ SERVICE LABEL
+ IF NUMVAL-ERROR = 'Y'
+ MOVE 284 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ IF UNICODE-ERROR = 'Y'
+ MOVE 288 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ IF OTHER-ERROR = 'Y'
+ MOVE -1 TO XML-CODE
+ END-IF
+ WHEN 'END-OF-DOCUMENT'
+ IF ELEMENT-HITS = 0
+ MOVE 282 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ END-IF
+ IF X00000012 < 1
+ MOVE 299 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ END-IF
+ WHEN 'EXCEPTION'
+ IF XML-CODE >= 50 AND XML-CODE <= 99
+ MOVE 0 TO XML-CODE
+ ELSE
+ MOVE 280 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ END-EVALUATE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ PUSH-ELEMENT.
+ PERFORM PARSE-ELEMENT
+ IF XML-ROOT-FOUND = 'N' AND
+ ELE-NAME (1:ELE-NAME-LEN)
+ = XML-ROOT-ELEMENT
+ MOVE 'Y' TO XML-ROOT-FOUND
+ END-IF
+ IF XML-ROOT-FOUND = 'Y'
+ COMPUTE CMP-TMPA = XPOS + (ELE-NAME-LEN + 1)
+ IF CMP-TMPA <= 400
+ MOVE XPATH-DELIM TO XPATH (XPOS:1)
+ MOVE ELE-NAME (1:ELE-NAME-LEN)
+ TO XPATH (XPOS + 1:ELE-NAME-LEN)
+ COMPUTE XPOS = XPOS + (ELE-NAME-LEN + 1)
+ ELSE
+ COMPUTE ELE-NAME-LEN = FUNCTION LENGTH (XML-TEXT)
+ MOVE XML-TEXT TO ELE-NAME
+ MOVE 291 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ ADD 1 TO XSTACK-DEPTH
+ END-IF
+ .
+ POP-ELEMENT.
+ IF XSTACK-DEPTH > 0
+ PERFORM PARSE-ELEMENT
+ COMPUTE XPOS = XPOS - (ELE-NAME-LEN + 1)
+ SUBTRACT 1 FROM XSTACK-DEPTH
+ END-IF
+ .
+ PARSE-ELEMENT.
+ COMPUTE ELE-NAME-LEN = FUNCTION LENGTH (XML-TEXT)
+ MOVE 1 TO CMP-TMPB
+ PERFORM VARYING CMP-TMPA FROM 1 BY 1
+ UNTIL CMP-TMPA > ELE-NAME-LEN
+ IF XML-TEXT (CMP-TMPA:1) = QNAME-DELIM
+ COMPUTE CMP-TMPB = CMP-TMPA + 1
+ MOVE ELE-NAME-LEN TO CMP-TMPA
+ END-IF
+ END-PERFORM
+ IF CMP-TMPB > 1
+ COMPUTE ELE-NAME-LEN
+ = (ELE-NAME-LEN - CMP-TMPB) + 1
+ IF ELE-NAME-LEN <= 28
+ MOVE XML-TEXT (CMP-TMPB:ELE-NAME-LEN)
+ TO ELE-NAME (1:ELE-NAME-LEN)
+ ELSE
+ MOVE 0 TO ELE-NAME-LEN
+ END-IF
+ ELSE
+ IF ELE-NAME-LEN <= 28
+ MOVE XML-TEXT (1:ELE-NAME-LEN)
+ TO ELE-NAME (1:ELE-NAME-LEN)
+ ELSE
+ MOVE 0 TO ELE-NAME-LEN
+ END-IF
+ END-IF
+ IF ELE-NAME-LEN = 0
+ MOVE 1 TO ELE-NAME-LEN
+ MOVE '0' TO ELE-NAME (1:ELE-NAME-LEN)
+ END-IF
+ .
+ ROUTE-ELEMENT.
+ GO TO
+ X000000C6
+ X000000C7
+ X000000C8
+ X000000C9
+ X000000CA
+ X000000CB
+ DEPENDING ON ROUTING-CODE (HASH-VALUE)
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ CONTENT-PROCESSING SECTION.
+ X000000C6.
+ ADD 1 TO X00000012
+ IF X00000012 > 1
+ MOVE 300 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ END-IF
+ SET ADDRESS OF DFHCOMMAREA
+ TO XML2LS-LANG-BUFFER-POINTER
+ MOVE 'DFHCOMMAREA'
+ TO LANG-STRUCT-NAME
+ MOVE 11
+ TO LANG-STRUCT-NAME-LENGTH
+ MOVE HASH-VALUE
+ TO LANG-STRUCT-HASH-VALUE
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X000000C7.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-PRINCIPLE-DATA
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000013 TO ADDRESS OF
+ EPSPCOM-PRINCIPLE-DATA
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ X000000D1
+ X000000D2
+ X000000D3
+ X000000D4
+ X000000D5
+ X000000D6
+ X000000D7
+ X000000D8
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000C8.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000014 TO ADDRESS OF
+ EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000C9.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-NUMBER-OF-MONTHS
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000014 TO ADDRESS OF
+ EPSPCOM-NUMBER-OF-MONTHS
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000CA.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000015 TO ADDRESS OF
+ EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ X000000D1
+ X000000D2
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000CB.
+ IF ELE-CON-LEN = 0
+ MOVE SPACES TO
+ EPSPCOM-YEAR-MONTH-IND
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ IF ELE-CON-LEN <= 1
+ MOVE ELE-CON (1:ELE-CON-LEN) TO
+ EPSPCOM-YEAR-MONTH-IND
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ MOVE 1 TO ELE-CHAR-LIMIT
+ GO TO CHARACTER-CONTENT-OVERFLOW
+ .
+ CHARACTER-CONTENT-OVERFLOW.
+ MOVE 283 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ CHARACTER-BUFFER-OVERFLOW.
+ MOVE 286 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ COMPUTE-LOOKUP-SOURCE SECTION.
+ X000000CC.
+ MOVE ELE-CON (1:1) TO X000000B9 X000000AC
+ INSPECT X000000AC REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AC TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000CD.
+ MOVE ELE-CON (1:2) TO X000000BA X000000AD
+ INSPECT X000000AD REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AD TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000CE.
+ MOVE ELE-CON (1:3) TO X000000BB X000000AE
+ INSPECT X000000AE REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AE TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000CF.
+ MOVE ELE-CON (1:4) TO X000000BC X000000AF
+ INSPECT X000000AF REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AF TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D0.
+ MOVE ELE-CON (1:5) TO X000000BD X000000B0
+ INSPECT X000000B0 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B0 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D1.
+ MOVE ELE-CON (1:6) TO X000000BE X000000B1
+ INSPECT X000000B1 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B1 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D2.
+ MOVE ELE-CON (1:7) TO X000000BF X000000B2
+ INSPECT X000000B2 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B2 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D3.
+ MOVE ELE-CON (1:8) TO X000000C0 X000000B3
+ INSPECT X000000B3 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B3 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D4.
+ MOVE ELE-CON (1:9) TO X000000C1 X000000B4
+ INSPECT X000000B4 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B4 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D5.
+ MOVE ELE-CON (1:10) TO X000000C2 X000000B5
+ INSPECT X000000B5 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B5 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D6.
+ MOVE ELE-CON (1:11) TO X000000C3 X000000B6
+ INSPECT X000000B6 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B6 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D7.
+ MOVE ELE-CON (1:12) TO X000000C4 X000000B7
+ INSPECT X000000B7 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B7 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D8.
+ MOVE ELE-CON (1:13) TO X000000C5 X000000B8
+ INSPECT X000000B8 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B8 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ LOOKUP-SOURCE.
+ SEARCH ALL NPSA
+ AT END
+ GO TO NUMERIC-RESCUE
+ WHEN NPSA (NPSA-NDX) = X000000AB
+ SET NPSAN TO NPSA-NDX
+ END-SEARCH
+ GO TO
+ X000000D9
+ X000000DA
+ X000000DB
+ X000000DC
+ X000000DD
+ X000000DE
+ X000000DF
+ X000000E0
+ X000000E1
+ X000000E2
+ X000000E3
+ X000000E4
+ X000000E5
+ X000000E6
+ X000000E7
+ X000000E8
+ X000000E9
+ X000000EA
+ X000000EB
+ X000000EC
+ X000000ED
+ X000000EE
+ X000000EF
+ X000000F0
+ X000000F1
+ X000000F2
+ X000000F3
+ X000000F4
+ X000000F5
+ X000000F6
+ X000000F7
+ X000000F8
+ X000000F9
+ X000000FA
+ X000000FB
+ X000000FC
+ X000000FD
+ X000000FE
+ X000000FF
+ X00000100
+ X00000101
+ X00000102
+ X00000103
+ X00000104
+ X00000105
+ X00000106
+ X00000107
+ X00000108
+ X00000109
+ X0000010A
+ X0000010B
+ X0000010C
+ X0000010D
+ X0000010E
+ X0000010F
+ X00000110
+ X00000111
+ X00000112
+ X00000113
+ X00000114
+ X00000115
+ X00000116
+ X00000117
+ X00000118
+ DEPENDING ON NPSAN
+ GO TO NUMERIC-RESCUE
+ .
+ SET-NUMERIC-SOURCE SECTION.
+ X000000D9.
+ SET ADDRESS OF X0000005E
+ TO ADDRESS OF X000000BA
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DA.
+ SET ADDRESS OF X00000060
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DB.
+ SET ADDRESS OF X00000062
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DC.
+ SET ADDRESS OF X0000005F
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DD.
+ SET ADDRESS OF X00000061
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DE.
+ SET ADDRESS OF X00000063
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DF.
+ SET ADDRESS OF X00000017
+ TO ADDRESS OF X000000BA
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E0.
+ SET ADDRESS OF X00000029
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E1.
+ SET ADDRESS OF X0000002B
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E2.
+ SET ADDRESS OF X0000002D
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E3.
+ SET ADDRESS OF X00000019
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E4.
+ SET ADDRESS OF X0000002F
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E5.
+ SET ADDRESS OF X00000031
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E6.
+ SET ADDRESS OF X00000033
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E7.
+ SET ADDRESS OF X0000001B
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E8.
+ SET ADDRESS OF X00000035
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E9.
+ SET ADDRESS OF X00000037
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EA.
+ SET ADDRESS OF X0000001D
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EB.
+ SET ADDRESS OF X0000003B
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EC.
+ SET ADDRESS OF X0000003D
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000ED.
+ SET ADDRESS OF X0000001F
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EE.
+ SET ADDRESS OF X00000041
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EF.
+ SET ADDRESS OF X00000043
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F0.
+ SET ADDRESS OF X00000021
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F1.
+ SET ADDRESS OF X00000047
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F2.
+ SET ADDRESS OF X00000049
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F3.
+ SET ADDRESS OF X00000023
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F4.
+ SET ADDRESS OF X0000004D
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F5.
+ SET ADDRESS OF X0000004F
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F6.
+ SET ADDRESS OF X00000025
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F7.
+ SET ADDRESS OF X00000053
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F8.
+ SET ADDRESS OF X00000055
+ TO ADDRESS OF X000000C4
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F9.
+ SET ADDRESS OF X00000027
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FA.
+ SET ADDRESS OF X00000059
+ TO ADDRESS OF X000000C4
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FB.
+ SET ADDRESS OF X0000005B
+ TO ADDRESS OF X000000C5
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FC.
+ SET ADDRESS OF X00000016
+ TO ADDRESS OF X000000B9
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FD.
+ SET ADDRESS OF X00000028
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FE.
+ SET ADDRESS OF X0000002A
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FF.
+ SET ADDRESS OF X0000002C
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000100.
+ SET ADDRESS OF X00000018
+ TO ADDRESS OF X000000BA
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000101.
+ SET ADDRESS OF X0000002E
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000102.
+ SET ADDRESS OF X00000030
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000103.
+ SET ADDRESS OF X00000032
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000104.
+ SET ADDRESS OF X0000001A
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000105.
+ SET ADDRESS OF X00000034
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000106.
+ SET ADDRESS OF X00000036
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000107.
+ SET ADDRESS OF X0000001C
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000108.
+ SET ADDRESS OF X0000003A
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000109.
+ SET ADDRESS OF X0000003C
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010A.
+ SET ADDRESS OF X0000001E
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010B.
+ SET ADDRESS OF X00000040
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010C.
+ SET ADDRESS OF X00000042
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010D.
+ SET ADDRESS OF X00000020
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010E.
+ SET ADDRESS OF X00000046
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010F.
+ SET ADDRESS OF X00000048
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000110.
+ SET ADDRESS OF X00000022
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000111.
+ SET ADDRESS OF X0000004C
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000112.
+ SET ADDRESS OF X0000004E
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000113.
+ SET ADDRESS OF X00000024
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000114.
+ SET ADDRESS OF X00000052
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000115.
+ SET ADDRESS OF X00000054
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000116.
+ SET ADDRESS OF X00000026
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000117.
+ SET ADDRESS OF X00000058
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000118.
+ SET ADDRESS OF X0000005A
+ TO ADDRESS OF X000000C4
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ MOVE-NUMERIC SECTION.
+ COMPLETE-NUMERIC-MOVE.
+ MOVE NUMERIC-TARGET-CODE (HASH-VALUE) TO CMP-TMPA
+ GO TO
+ X00000119
+ X0000011A
+ X0000011B
+ X0000011C
+ X0000011D
+ X0000011E
+ X0000011F
+ X00000120
+ X00000121
+ X00000122
+ X00000123
+ X00000124
+ X00000125
+ X00000126
+ X00000127
+ X00000128
+ X00000129
+ X0000012A
+ X0000012B
+ X0000012C
+ X0000012D
+ X0000012E
+ X0000012F
+ X00000130
+ X00000131
+ X00000132
+ X00000133
+ X00000134
+ X00000135
+ X00000136
+ X00000137
+ X00000138
+ X00000139
+ X0000013A
+ X0000013B
+ X0000013C
+ X0000013D
+ X0000013E
+ X0000013F
+ X00000140
+ X00000141
+ X00000142
+ X00000143
+ X00000144
+ X00000145
+ X00000146
+ X00000147
+ X00000148
+ X00000149
+ X0000014A
+ X0000014B
+ X0000014C
+ X0000014D
+ X0000014E
+ X0000014F
+ X00000150
+ X00000151
+ X00000152
+ X00000153
+ X00000154
+ X00000155
+ X00000156
+ X00000157
+ X00000158
+ X00000159
+ X0000015A
+ X0000015B
+ X0000015C
+ X0000015D
+ X0000015E
+ X0000015F
+ X00000160
+ X00000161
+ X00000162
+ X00000163
+ X00000164
+ X00000165
+ X00000166
+ X00000167
+ X00000168
+ X00000169
+ X0000016A
+ X0000016B
+ X0000016C
+ X0000016D
+ X0000016E
+ X0000016F
+ X00000170
+ DEPENDING ON NMAR-ENTRY (NPSAN, CMP-TMPA)
+ GO TO NUMERIC-RESCUE
+ .
+ X00000119.
+ MOVE X0000005E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011A.
+ MOVE X0000005E TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011B.
+ MOVE X00000060 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011C.
+ MOVE X00000060 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011D.
+ MOVE X00000062 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011E.
+ MOVE X0000005F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011F.
+ MOVE X0000005F TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000120.
+ MOVE X00000061 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000121.
+ MOVE X00000061 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000122.
+ MOVE X00000063 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000123.
+ MOVE X00000017 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000124.
+ MOVE X00000017 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000125.
+ MOVE X00000017 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000126.
+ MOVE X00000029 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000127.
+ MOVE X00000029 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000128.
+ MOVE X0000002B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000129.
+ MOVE X0000002B TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012A.
+ MOVE X0000002D TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012B.
+ MOVE X00000019 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012C.
+ MOVE X00000019 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012D.
+ MOVE X00000019 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012E.
+ MOVE X0000002F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012F.
+ MOVE X0000002F TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000130.
+ MOVE X00000031 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000131.
+ MOVE X00000031 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000132.
+ MOVE X00000033 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000133.
+ MOVE X0000001B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000134.
+ MOVE X0000001B TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000135.
+ MOVE X00000035 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000136.
+ MOVE X00000037 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000137.
+ MOVE X0000001D TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000138.
+ MOVE X0000001D TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000139.
+ MOVE X0000003B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013A.
+ MOVE X0000003D TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013B.
+ MOVE X0000001F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013C.
+ MOVE X00000041 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013D.
+ MOVE X00000043 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013E.
+ MOVE X00000021 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013F.
+ MOVE X00000047 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000140.
+ MOVE X00000049 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000141.
+ MOVE X00000023 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000142.
+ MOVE X0000004D TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000143.
+ MOVE X0000004F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000144.
+ MOVE X00000025 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000145.
+ MOVE X00000053 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000146.
+ MOVE X00000055 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000147.
+ MOVE X00000027 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000148.
+ MOVE X00000059 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000149.
+ MOVE X0000005B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014A.
+ MOVE X00000016 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014B.
+ MOVE X00000016 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014C.
+ MOVE X00000016 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014D.
+ MOVE X00000028 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014E.
+ MOVE X00000028 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014F.
+ MOVE X0000002A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000150.
+ MOVE X0000002A TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000151.
+ MOVE X0000002C TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000152.
+ MOVE X00000018 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000153.
+ MOVE X00000018 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000154.
+ MOVE X00000018 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000155.
+ MOVE X0000002E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000156.
+ MOVE X0000002E TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000157.
+ MOVE X00000030 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000158.
+ MOVE X00000030 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000159.
+ MOVE X00000032 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015A.
+ MOVE X0000001A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015B.
+ MOVE X0000001A TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015C.
+ MOVE X00000034 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015D.
+ MOVE X00000036 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015E.
+ MOVE X0000001C TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015F.
+ MOVE X0000001C TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000160.
+ MOVE X0000003A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000161.
+ MOVE X0000003C TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000162.
+ MOVE X0000001E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000163.
+ MOVE X00000040 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000164.
+ MOVE X00000042 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000165.
+ MOVE X00000020 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000166.
+ MOVE X00000046 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000167.
+ MOVE X00000048 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000168.
+ MOVE X00000022 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000169.
+ MOVE X0000004C TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016A.
+ MOVE X0000004E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016B.
+ MOVE X00000024 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016C.
+ MOVE X00000052 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016D.
+ MOVE X00000054 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016E.
+ MOVE X00000026 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016F.
+ MOVE X00000058 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000170.
+ MOVE X0000005A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ NUMERIC-RESCUE-PROCESSING SECTION.
+ NUMERIC-RESCUE.
+ GO TO
+ X00000171
+ X00000172
+ X00000173
+ X00000174
+ DEPENDING ON NUMERIC-RESCUE-CODE (HASH-VALUE)
+ .
+ X00000171.
+ COMPUTE EPSPCOM-PRINCIPLE-DATA
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ X00000172.
+ COMPUTE EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ X00000173.
+ COMPUTE EPSPCOM-NUMBER-OF-MONTHS
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ X00000174.
+ COMPUTE EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ NUMERIC-RESCUE-FAILED.
+ MOVE 284 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ CONTENT-CONVERTED-EXIT.
+ MOVE 'Y' TO CON-TXED
+ .
+ GENERAL-LOGIC-EXIT.
+ CONTINUE
+ .
+ CONDITION-SIGNALER SECTION.
+ SIGNAL-CONDITION.
+ IF OTHER-ERROR = 'N'
+ MOVE 3 TO SEV SEV2
+ MOVE 1 TO CASE CNTRL
+ MOVE 0 TO ISINFO
+ MOVE 0 TO INSERTNO
+ MOVE 'IGZ' TO FACID
+ CALL 'CEENCOD' USING
+ SEV MSGNO CASE SEV2
+ CNTRL FACID ISINFO
+ NEW-CONDITION FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ MOVE 8 TO VSTRING-LENGTH
+ MOVE 'EPSCSMRI' TO VSTRING-DATA (1:8)
+ PERFORM INSERT-VSTRING
+ EVALUATE MSGNO
+ WHEN 280
+ *IGZ_PARSER_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0280S
+ WHEN 281
+ *IGZ_SUBSCRIPT_RANGE_EXCEEDED_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0281S
+ WHEN 282
+ *IGZ_NO_KNOWN_ELEMENTS_FOUND_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0282S
+ WHEN 283
+ *IGZ_CHARACTER_CONTENT_OVERFLOW_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0283S
+ WHEN 284
+ *IGZ_NUMERIC_TX_FAILURE_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0284S
+ WHEN 285
+ *IGZ_MESSAGE_TOO_LARGE_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0285S
+ WHEN 286
+ *IGZ_CHARACTER_CONTENT_BUFFER_OVERFLOW_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0286S
+ WHEN 288
+ *IGZ_UNICODE_RUNTIME_ERROR
+ PERFORM CEECMI-IGZ0288S
+ WHEN 291
+ *IGZ_XPATH_OVERFLOW_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0291S
+ WHEN 294
+ *IGZ_INVALID_PARAMETERS_MSG_NO
+ PERFORM CEECMI-IGZ0294S
+ WHEN 299
+ *IGZ_XML2LS_LANGUAGE_STRUCTURE_MIN_COUNT_NOT_MET
+ PERFORM CEECMI-IGZ0299S
+ WHEN 300
+ *IGZ_XML2LS_LANGUAGE_STRUCTURE_MAX_COUNT_EXCEEDED
+ PERFORM CEECMI-IGZ0300S
+ END-EVALUATE
+ ELSE
+ MOVE SAVED-CONDITION TO NEW-CONDITION
+ MOVE MSG-NO OF NEW-CONDITION TO ERROR-CODE
+ END-IF
+ MOVE 0 TO QDATA
+ IF ADDRESS OF OPTIONAL-FEEDBACK-CODE = NULL
+ CALL 'CEESGL' USING NEW-CONDITION QDATA OMITTED
+ ELSE
+ MOVE NEW-CONDITION TO OPTIONAL-FEEDBACK-CODE
+ END-IF
+ IF MSGNO NOT EQUAL 294
+ MOVE ERROR-CODE TO CONVERTER-RETURN-CODE
+ END-IF
+ .
+ CEECMI-IGZ0280S.
+ MOVE XML-CODE TO ERROR-CODE
+ MOVE ERROR-CODE TO EEC
+ PERFORM INSERT-NUMBER
+ PERFORM INSERT-ELE-NAME
+ PERFORM INSERT-ELE-CON
+ .
+ CEECMI-IGZ0281S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ .
+ CEECMI-IGZ0282S.
+ MOVE MSGNO TO ERROR-CODE
+ .
+ CEECMI-IGZ0283S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ MOVE ELE-CHAR-LIMIT TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0284S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ PERFORM INSERT-ELE-CON
+ .
+ CEECMI-IGZ0285S.
+ MOVE MSGNO TO ERROR-CODE
+ MOVE XML2LS-XML-BUFFER-LENGTH TO EEC
+ PERFORM INSERT-NUMBER
+ MOVE 33554436 TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0286S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ MOVE ELE-CON-LEN TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0288S.
+ MOVE MSGNO TO ERROR-CODE
+ MOVE 1200 TO EEC
+ PERFORM INSERT-NUMBER
+ MOVE 1140 TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0291S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ PERFORM INSERT-ELE-CON
+ .
+ CEECMI-IGZ0294S.
+ MOVE MSGNO TO ERROR-CODE
+ .
+ CEECMI-IGZ0299S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-STRUCT-NAME
+ .
+ CEECMI-IGZ0300S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-STRUCT-NAME
+ .
+ INSERT-ELE-CON.
+ IF ELE-CON-LEN > 80
+ MOVE 80 TO ELE-CON-LEN
+ MOVE '...' TO ELE-CON (78:3)
+ END-IF
+ IF ELE-CON-LEN <= 0
+ MOVE 1 TO ELE-CON-LEN
+ MOVE '?' TO ELE-CON
+ END-IF
+ MOVE ELE-CON-LEN TO VSTRING-LENGTH
+ MOVE ELE-CON
+ TO VSTRING-DATA (1:80)
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-ELE-NAME.
+ IF ELE-NAME-LEN > 80
+ MOVE 80 TO ELE-NAME-LEN
+ MOVE '...' TO ELE-NAME (78:3)
+ END-IF
+ IF ELE-NAME-LEN <= 0
+ MOVE 1 TO ELE-NAME-LEN
+ MOVE '?' TO ELE-NAME
+ END-IF
+ MOVE ELE-NAME-LEN TO VSTRING-LENGTH
+ MOVE ELE-NAME
+ TO VSTRING-DATA (1:80)
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-NUMBER.
+ MOVE ZERO TO CMP-TMPA
+ INSPECT EEC TALLYING CMP-TMPA FOR LEADING '0'
+ COMPUTE CMP-TMPB = 9 - CMP-TMPA
+ MOVE CMP-TMPB TO VSTRING-LENGTH
+ MOVE EEC (CMP-TMPA + 1:CMP-TMPB) TO VSTRING-DATA
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-STRUCT-NAME.
+ MOVE LANG-STRUCT-NAME-LENGTH TO VSTRING-LENGTH
+ MOVE LANG-STRUCT-NAME TO VSTRING-DATA(1:80)
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-VSTRING.
+ ADD 1 TO INSERTNO
+ CALL 'CEECMI' USING
+ NEW-CONDITION INSERTNO
+ VSTRING FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ CHECK-LE-SERVICE-FC.
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-7
+ DISPLAY CONVERTER-ERROR-8 ' '
+ FACILITY OF FEEDBACK-CODE
+ MSG-NO OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-9
+ STOP RUN
+ END-IF
+ .
+ REGISTER-EXCEPTION-HANDLER.
+ SET ROUTINE TO ENTRY 'EPSCSMRA'
+ SET TOKEN TO ADDRESS OF CEESRP-DATA
+ CALL 'CEEHDLR' USING ROUTINE TOKEN FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-3
+ STOP RUN
+ END-IF
+ .
+ UNREGISTER-EXCEPTION-HANDLER.
+ CALL 'CEEHDLU' USING ROUTINE FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-4
+ STOP RUN
+ END-IF
+ .
+ END PROGRAM 'EPSCSMRI'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Required Length in Bytes of the XML to Language Structure Ou
+ * tput Buffer
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRJ'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 XML2LS-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 XML2LS-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ XML2LS-LANG-BUFFER-LENGTH
+ XML2LS-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF XML2LS-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO XML2LS-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF XML2LS-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO XML2LS-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRJ'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * XML to Language Structure Exception Handler
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRA'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-6.
+ 2 PIC X(39) USAGE DISPLAY
+ VALUE 'Failed To Resume Execution Of Converter'.
+ LOCAL-STORAGE SECTION.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ LINKAGE SECTION.
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 TOKEN POINTER.
+ 1 RESULT PIC S9(9) COMP.
+ 88 RESUME VALUE 10.
+ 1 CURRENT-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
+ RESULT NEW-CONDITION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CEESRP-DATA TO TOKEN
+ CALL 'CEEMRCE' USING RECOVERY-POINT FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-6
+ END-IF
+ SET RESUME TO TRUE
+ IF FACILITY OF CURRENT-CONDITION = 'IGZ'
+ EVALUATE MSG-NO OF CURRENT-CONDITION
+ WHEN 97
+ WHEN 151
+ WHEN 152
+ WHEN 155
+ WHEN 196
+ MOVE 'Y' TO NUMVAL-ERROR
+ WHEN 272
+ MOVE 'Y' TO UNICODE-ERROR
+ WHEN OTHER
+ MOVE 'Y' TO OTHER-ERROR
+ END-EVALUATE
+ ELSE
+ MOVE 'Y' TO OTHER-ERROR
+ END-IF
+ MOVE CURRENT-CONDITION TO SAVED-CONDITION
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRA'.
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,NOCICS
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Language Structure to XML Converter
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRO'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 ERROR-MESSAGES.
+ 2 CONVERTER-ERROR-3.
+ 3 PIC X(36) USAGE DISPLAY
+ VALUE 'Failed To Register Exception Handler'.
+ 2 CONVERTER-ERROR-4.
+ 3 PIC X(38) USAGE DISPLAY
+ VALUE 'Failed To Unregister Exception Handler'.
+ 2 CONVERTER-ERROR-7.
+ 3 PIC X(40) USAGE DISPLAY
+ VALUE 'Language Environment Service Call Failed'.
+ 2 CONVERTER-ERROR-8.
+ 3 PIC X(35) USAGE DISPLAY
+ VALUE 'Language Environment Message Number'.
+ 2 CONVERTER-ERROR-9.
+ 3 PIC X(31) USAGE DISPLAY
+ VALUE 'XML Converter Is Terminating...'.
+ 1 X0000000B.
+ 2 PIC 9(4) COMP VALUE 26.
+ 2 PIC X(26) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000005.
+ 2 PIC 9(4) COMP VALUE 31.
+ 2 PIC X(31) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000001.
+ 2 PIC 9(4) COMP VALUE 30.
+ 2 PIC X(30) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000008.
+ 2 PIC 9(4) COMP VALUE 17.
+ 2 PIC X(17) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000004.
+ 2 PIC 9(4) COMP VALUE 30.
+ 2 PIC X(30) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000000.
+ 2 PIC 9(4) COMP VALUE 88.
+ 2 PIC X(48) USAGE DISPLAY
+ VALUE ''.
+ 1 X0000000A.
+ 2 PIC 9(4) COMP VALUE 25.
+ 2 PIC X(25) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000007.
+ 2 PIC 9(4) COMP VALUE 16.
+ 2 PIC X(16) USAGE DISPLAY
+ VALUE ''.
+ LOCAL-STORAGE SECTION.
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 ROUTINE PROCEDURE-POINTER.
+ 1 TOKEN POINTER.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 VSTRING.
+ 2 VSTRING-LENGTH PIC S9(4) COMP.
+ 2 VSTRING-DATA PIC X(80).
+ 1 SEV PIC S9(4) COMP.
+ 1 MSGNO PIC S9(4) COMP.
+ 1 CASE PIC S9(4) COMP.
+ 1 SEV2 PIC S9(4) COMP.
+ 1 CNTRL PIC S9(4) COMP.
+ 1 FACID PIC X(3) DISPLAY.
+ 1 ISINFO PIC S9(9) COMP.
+ 1 QDATA PIC S9(9) COMP.
+ 1 INSERTNO PIC S9(9) COMP.
+ 1 EEC PIC 9(9) DISPLAY.
+ 1 CMP-TMPA PIC 9(9) COMP.
+ 1 CMP-TMPB PIC 9(9) COMP.
+ 1 ERROR-CODE PIC S9(9) COMP.
+ 1 MSG-VAR-PART-LEN PIC 9(9) COMP.
+ 1 MSGBLD-RETURN-CODE PIC S9(9) COMP.
+ 1 LAST-INSTRUCTION PIC 9(9) COMP.
+ 1 LS2XML-LANG-BUFFER-POINTER POINTER.
+ 1 LS2XML-LANG-BUFFER-ADDRESS
+ REDEFINES LS2XML-LANG-BUFFER-POINTER PIC 9(9) COMP.
+ 1 LANG-STRUCT-NAME PIC X(30).
+ 1 LANG-STRUCT-NAME-LENGTH PIC 9(4) COMP.
+ 1 LS2XML-XML-TEMPLATE-BUFFER PIC X(95).
+ 1 ARRAY-SUBSCRIPTS.
+ 2 X0000000C PIC 9(9) COMP VALUE 0.
+ 1 INSTRUCTIONS.
+ 2 INSTRUCT OCCURS 22 TIMES
+ INDEXED BY INSTRUCT-NDX.
+ 3 MBOPCODE PIC X VALUE X'FF'.
+ 3 MBWSPOPT PIC X.
+ 3 MBDNMPTR POINTER.
+ 3 MBDATPTR POINTER.
+ 3 MBDATLEN PIC 9(9) COMP.
+ 3 MBDATYPE PIC X.
+ 3 MBSTGPTR POINTER.
+ 3 MBETGPTR POINTER.
+ LINKAGE SECTION.
+ 01 DFHCOMMAREA
+ .
+ 10 PROCESS-INDICATOR
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PRINCIPLE-DATA
+ PICTURE S9(9)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-YEARS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-MONTHS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PICTURE S9(2)V9(3)
+ USAGE COMP
+ .
+ 10 EPSPCOM-YEAR-MONTH-IND
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PICTURE S9(7)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-ERRMSG
+ PICTURE X(80)
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE
+ PICTURE 9(4)
+ USAGE DISPLAY
+ .
+ 88 EPS02-REQUEST-SUCCESS
+ VALUE
+ 0
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PICTURE X(4)
+ USAGE DISPLAY
+ .
+ 1 X0000003D.
+ 10 X00000003 PIC -9(7).9(2).
+ 10 X00000006 PIC X(80).
+ 10 X00000009 PIC 9(4).
+ 1 LS2XML-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-XML-BUFFER PIC X(758).
+ 1 LS2XML-LANG-BUFFER PIC X(106).
+ 1 OPTIONAL-FEEDBACK-CODE PIC X(12).
+ 1 CONVERTER-RETURN-CODE PIC S9(9) COMP.
+ PROCEDURE DIVISION USING
+ LS2XML-LANG-BUFFER
+ LS2XML-XML-BUFFER-LENGTH
+ LS2XML-XML-BUFFER
+ OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ MAINLINE SECTION.
+ MOVE 'N' TO NUMVAL-ERROR UNICODE-ERROR OTHER-ERROR
+ PERFORM CHECK-PARAMETERS
+ PERFORM REGISTER-EXCEPTION-HANDLER
+ CALL 'CEE3SRP' USING RECOVERY-POINT FEEDBACK-CODE
+ SERVICE LABEL
+ IF UNICODE-ERROR = 'Y'
+ MOVE 288 TO MSGNO
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ IF OTHER-ERROR = 'Y'
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ SET LS2XML-LANG-BUFFER-POINTER
+ TO ADDRESS OF LS2XML-LANG-BUFFER
+ INITIALIZE LS2XML-XML-BUFFER-LENGTH
+ SET INSTRUCT-NDX TO 1
+ MOVE 'DFHCOMMAREA'
+ TO LANG-STRUCT-NAME
+ MOVE 11
+ TO LANG-STRUCT-NAME-LENGTH
+ SET ADDRESS OF DFHCOMMAREA
+ TO LS2XML-LANG-BUFFER-POINTER
+ SET ADDRESS OF X0000003D
+ TO ADDRESS OF LS2XML-XML-TEMPLATE-BUFFER
+ INITIALIZE X0000003D
+ MOVE X'E0' TO MBOPCODE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000000
+ SET INSTRUCT-NDX UP BY 1
+ MOVE X'B0' TO MBOPCODE(INSTRUCT-NDX)
+ MOVE X'C3' TO MBWSPOPT(INSTRUCT-NDX)
+ MOVE 11 TO MBDATLEN(INSTRUCT-NDX)
+ SET MBDATPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000003
+ MOVE 'N' TO MBDATYPE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000004
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000005
+ SET INSTRUCT-NDX UP BY 1
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT
+ OF DFHCOMMAREA
+ TO X00000003
+ MOVE X'A0' TO MBOPCODE(INSTRUCT-NDX)
+ MOVE X'C3' TO MBWSPOPT(INSTRUCT-NDX)
+ MOVE 80 TO MBDATLEN(INSTRUCT-NDX)
+ SET MBDATPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000006
+ MOVE 'X' TO MBDATYPE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000007
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000008
+ SET INSTRUCT-NDX UP BY 1
+ MOVE EPSPCOM-ERRMSG
+ OF DFHCOMMAREA
+ TO X00000006
+ MOVE X'B0' TO MBOPCODE(INSTRUCT-NDX)
+ MOVE X'C3' TO MBWSPOPT(INSTRUCT-NDX)
+ MOVE 4 TO MBDATLEN(INSTRUCT-NDX)
+ SET MBDATPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000009
+ MOVE 'N' TO MBDATYPE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X0000000A
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X0000000B
+ SET INSTRUCT-NDX UP BY 1
+ IF EPSPCOM-PROGRAM-RETCODE
+ OF DFHCOMMAREA
+ IS NOT NUMERIC
+ MOVE ZEROS TO X00000009
+ ELSE
+ MOVE EPSPCOM-PROGRAM-RETCODE
+ OF DFHCOMMAREA
+ TO X00000009
+ END-IF
+ MOVE X'E1' TO MBOPCODE(INSTRUCT-NDX)
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000001
+ SET INSTRUCT-NDX UP BY 1
+ PERFORM INVOKE-MESSAGE-BUILDER
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ GOBACK
+ .
+ CHECK-PARAMETERS.
+ IF ADDRESS OF LS2XML-LANG-BUFFER EQUAL NULL AND
+ ADDRESS OF LS2XML-XML-BUFFER-LENGTH NOT EQUAL NULL
+ CALL 'EPSCSMRL' USING LS2XML-XML-BUFFER-LENGTH
+ GOBACK
+ ELSE
+ IF ADDRESS OF LS2XML-XML-BUFFER EQUAL NULL AND
+ ADDRESS OF LS2XML-XML-BUFFER-LENGTH NOT EQUAL NULL
+ CALL 'EPSCSMRK' USING LS2XML-XML-BUFFER-LENGTH
+ GOBACK
+ END-IF
+ IF ADDRESS OF LS2XML-LANG-BUFFER EQUAL NULL OR
+ ADDRESS OF LS2XML-XML-BUFFER-LENGTH EQUAL NULL OR
+ ADDRESS OF LS2XML-XML-BUFFER EQUAL NULL
+ MOVE 294 TO MSGNO
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ .
+ INVOKE-MESSAGE-BUILDER.
+ CALL 'EPSCSMRC' USING
+ INSTRUCTIONS LS2XML-XML-BUFFER-LENGTH
+ LS2XML-XML-BUFFER LAST-INSTRUCTION
+ RETURNING
+ MSGBLD-RETURN-CODE
+ IF MSGBLD-RETURN-CODE NOT EQUAL ZERO
+ MOVE MSGBLD-RETURN-CODE
+ TO MSGNO CONVERTER-RETURN-CODE
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ ELSE
+ MOVE ZERO TO CONVERTER-RETURN-CODE
+ END-IF
+ SET INSTRUCT-NDX TO 1
+ MOVE ALL X'FF' TO INSTRUCTIONS
+ .
+ SIGNAL-CONDITION.
+ IF OTHER-ERROR = 'N'
+ MOVE 3 TO SEV SEV2
+ MOVE 1 TO CASE CNTRL
+ MOVE 0 TO ISINFO
+ MOVE 0 TO INSERTNO
+ MOVE 'IGZ' TO FACID
+ CALL 'CEENCOD' USING
+ SEV MSGNO CASE SEV2
+ CNTRL FACID ISINFO
+ NEW-CONDITION FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ MOVE 8 TO VSTRING-LENGTH
+ MOVE 'EPSCSMRO'
+ TO VSTRING-DATA (1:8)
+ PERFORM INSERT-VSTRING
+ MOVE MSGNO TO ERROR-CODE
+ EVALUATE MSGNO
+ WHEN 287
+ MOVE 758 TO EEC
+ PERFORM INSERT-NUMBER
+ WHEN 288
+ MOVE 1140 TO EEC
+ PERFORM INSERT-NUMBER
+ MOVE 1140 TO EEC
+ PERFORM INSERT-NUMBER
+ END-EVALUATE
+ ELSE
+ MOVE SAVED-CONDITION TO NEW-CONDITION
+ MOVE MSG-NO OF NEW-CONDITION TO ERROR-CODE
+ END-IF
+ MOVE 0 TO QDATA
+ IF ADDRESS OF OPTIONAL-FEEDBACK-CODE = NULL
+ CALL 'CEESGL' USING
+ NEW-CONDITION QDATA OMITTED
+ ELSE
+ MOVE NEW-CONDITION TO OPTIONAL-FEEDBACK-CODE
+ END-IF
+ IF MSGNO NOT EQUAL 294
+ MOVE ERROR-CODE TO CONVERTER-RETURN-CODE
+ END-IF
+ .
+ INSERT-NUMBER.
+ MOVE ZERO TO CMP-TMPA
+ INSPECT EEC
+ TALLYING CMP-TMPA FOR LEADING ZEROS
+ COMPUTE CMP-TMPB = 9 - CMP-TMPA
+ MOVE CMP-TMPB TO VSTRING-LENGTH
+ MOVE EEC (CMP-TMPA + 1:CMP-TMPB)
+ TO VSTRING-DATA
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-VSTRING.
+ ADD 1 TO INSERTNO
+ CALL 'CEECMI' USING
+ NEW-CONDITION INSERTNO
+ VSTRING FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ CHECK-LE-SERVICE-FC.
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-7
+ DISPLAY CONVERTER-ERROR-8 ' '
+ FACILITY OF FEEDBACK-CODE
+ MSG-NO OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-9
+ STOP RUN
+ END-IF
+ .
+ REGISTER-EXCEPTION-HANDLER.
+ SET ROUTINE
+ TO ENTRY 'EPSCSMRE'
+ SET TOKEN TO ADDRESS OF CEESRP-DATA
+ CALL 'CEEHDLR' USING
+ ROUTINE TOKEN FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-3
+ STOP RUN
+ END-IF
+ .
+ UNREGISTER-EXCEPTION-HANDLER.
+ CALL 'CEEHDLU' USING
+ ROUTINE FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-4
+ STOP RUN
+ END-IF
+ .
+ END PROGRAM 'EPSCSMRO'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Language Structure to XML Markup Generator
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRC'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ LOCAL-STORAGE SECTION.
+ 1 CMP-TMPA PIC 9(9) COMP.
+ 1 CMP-TMPB PIC 9(9) COMP.
+ 1 VALID-TEXT-FLAG PIC X VALUE 'Y'.
+ 1 NEXT-CHAR PIC X.
+ LINKAGE SECTION.
+ 1 INSTRUCTIONS.
+ 2 INSTRUCT OCCURS 22 TIMES
+ INDEXED BY INSTRUCT-NDX.
+ 3 MBOPCODE PIC X.
+ 3 MBWSPOPT PIC X.
+ 3 MBDNMPTR POINTER.
+ 3 MBDATPTR POINTER.
+ 3 MBDATLEN PIC 9(9) COMP.
+ 3 MBDATYPE PIC X.
+ 3 MBSTGPTR POINTER.
+ 3 MBETGPTR POINTER.
+ 1 XML-BUFFER-OFFSET PIC 9(9) COMP.
+ 1 XML-BUFFER PIC X(758).
+ 1 MSGBLD-RETURN-CODE PIC S9(9) COMP.
+ 1 XML-TAG-DESCRIPTOR.
+ 2 XML-TAG-LEN PIC 9(4) COMP.
+ 2 XML-TAG PIC X(88).
+ 1 CONTENT-TXT PIC X(128).
+ 1 LAST-INSTRUCTION PIC 9(9) COMP.
+ PROCEDURE DIVISION USING
+ INSTRUCTIONS XML-BUFFER-OFFSET
+ XML-BUFFER LAST-INSTRUCTION
+ RETURNING
+ MSGBLD-RETURN-CODE.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET INSTRUCT-NDX TO 1
+ PERFORM UNTIL MBOPCODE(INSTRUCT-NDX) = X'FF'
+ EVALUATE MBOPCODE(INSTRUCT-NDX)
+ WHEN X'E0'
+ PERFORM START-TAG
+ WHEN X'E1'
+ PERFORM END-TAG
+ WHEN X'B0'
+ PERFORM START-TAG
+ PERFORM CONVERT-NUMERIC
+ PERFORM END-TAG
+ WHEN X'A0'
+ PERFORM START-TAG
+ PERFORM CONVERT-ALPHANUMERIC
+ PERFORM END-TAG
+ WHEN X'F0'
+ PERFORM START-TAG
+ PERFORM CONVERT-FLOAT
+ PERFORM END-TAG
+ END-EVALUATE
+ SET INSTRUCT-NDX UP BY 1
+ END-PERFORM
+ GOBACK
+ .
+ START-TAG.
+ SET ADDRESS OF XML-TAG-DESCRIPTOR
+ TO MBSTGPTR(INSTRUCT-NDX)
+ MOVE XML-TAG(1:XML-TAG-LEN)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:XML-TAG-LEN)
+ ADD XML-TAG-LEN TO XML-BUFFER-OFFSET
+ .
+ END-TAG.
+ SET ADDRESS OF XML-TAG-DESCRIPTOR
+ TO MBETGPTR(INSTRUCT-NDX)
+ MOVE XML-TAG(1:XML-TAG-LEN)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:XML-TAG-LEN)
+ ADD XML-TAG-LEN TO XML-BUFFER-OFFSET
+ .
+ CONVERT-ALPHANUMERIC.
+ CALL 'XCHRFLTR' USING
+ BY VALUE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE VALID-TEXT-FLAG
+ IF VALID-TEXT-FLAG EQUAL 'Y'
+ CALL 'XWSPFLTR' USING
+ BY VALUE MBWSPOPT(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATYPE(INSTRUCT-NDX)
+ SET ADDRESS OF CONTENT-TXT
+ TO MBDATPTR(INSTRUCT-NDX)
+ PERFORM VARYING CMP-TMPA FROM 1 BY 1
+ UNTIL CMP-TMPA > MBDATLEN(INSTRUCT-NDX)
+ MOVE CONTENT-TXT(CMP-TMPA:1) TO NEXT-CHAR
+ EVALUATE NEXT-CHAR
+ WHEN '&'
+ MOVE '&'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:5)
+ ADD 5 TO XML-BUFFER-OFFSET
+ WHEN '<'
+ MOVE '<'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:4)
+ ADD 4 TO XML-BUFFER-OFFSET
+ WHEN '>'
+ MOVE '>'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:4)
+ ADD 4 TO XML-BUFFER-OFFSET
+ WHEN ''''
+ MOVE '''
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:6)
+ ADD 6 TO XML-BUFFER-OFFSET
+ WHEN '"'
+ MOVE '"'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:6)
+ ADD 6 TO XML-BUFFER-OFFSET
+ WHEN OTHER
+ MOVE NEXT-CHAR
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:1)
+ ADD 1 TO XML-BUFFER-OFFSET
+ END-EVALUATE
+ END-PERFORM
+ END-IF
+ .
+ CONVERT-NUMERIC.
+ SET ADDRESS OF CONTENT-TXT
+ TO MBDATPTR(INSTRUCT-NDX)
+ CALL 'XWSPFLTR' USING
+ BY VALUE MBWSPOPT(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATYPE(INSTRUCT-NDX)
+ MOVE MBDATLEN(INSTRUCT-NDX)
+ TO CMP-TMPA
+ IF CMP-TMPA > 0
+ MOVE CONTENT-TXT(1:CMP-TMPA)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:CMP-TMPA)
+ ADD CMP-TMPA TO XML-BUFFER-OFFSET
+ ELSE
+ MOVE '0'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:1)
+ ADD 1 TO XML-BUFFER-OFFSET
+ END-IF
+ .
+ CONVERT-FLOAT.
+ SET ADDRESS OF CONTENT-TXT
+ TO MBDATPTR(INSTRUCT-NDX)
+ CALL 'XWSPFLTR' USING
+ BY VALUE MBWSPOPT(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATYPE(INSTRUCT-NDX)
+ MOVE MBDATLEN(INSTRUCT-NDX)
+ TO CMP-TMPA
+ MOVE CONTENT-TXT(1:CMP-TMPA)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:CMP-TMPA)
+ ADD CMP-TMPA TO XML-BUFFER-OFFSET
+ .
+ * -------------------------------------------------------------
+ * Language Structure to XML Character Filter
+ * -------------------------------------------------------------
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'XCHRFLTR'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 X0000003E.
+ 2 PIC X(24) USAGE DISPLAY
+ VALUE X'0001020304060708090A0B0C0E0F1011121314161718191A'.
+ 2 PIC X(24) USAGE DISPLAY
+ VALUE X'1B1C1D1E1F2021222324262728292A2B2C2D2E2F30313233'.
+ 2 PIC X(13) USAGE DISPLAY
+ VALUE X'3435363738393A3B3C3D3E3FFF'.
+ 1 ILLEGAL-XML-CHARS REDEFINES X0000003E
+ PIC X(61).
+ LOCAL-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 CONTENT-LEN PIC 9(9) COMP.
+ 1 CONTENT-PTR POINTER.
+ 1 CONTENT-TXT PIC X(128).
+ 1 VALID-TEXT-FLAG PIC X.
+ PROCEDURE DIVISION USING BY VALUE CONTENT-LEN CONTENT-PTR
+ BY REFERENCE VALID-TEXT-FLAG.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CONTENT-TXT TO CONTENT-PTR
+ INSPECT CONTENT-TXT(1:CONTENT-LEN) CONVERTING
+ ILLEGAL-XML-CHARS TO SPACES
+ MOVE 'Y' TO VALID-TEXT-FLAG
+ GOBACK
+ .
+ END PROGRAM 'XCHRFLTR'.
+ * -------------------------------------------------------------
+ * Language Structure to XML WhiteSpace Filter
+ * -------------------------------------------------------------
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'XWSPFLTR'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LOCAL-STORAGE SECTION.
+ 1 CONTENT-BUF PIC X(128).
+ 1 CONTENT-BUF-NDX PIC 9(9) COMP.
+ 1 CONTENT-TXT-NDX PIC 9(9) COMP.
+ 1 CMP-TMPA PIC 9(9) COMP.
+ 1 CMP-TMPB PIC 9(9) COMP.
+ LINKAGE SECTION.
+ 1 CONTENT-WSP PIC X.
+ 1 CONTENT-PTR POINTER.
+ 1 CONTENT-LEN PIC 9(9) COMP.
+ 1 CONTENT-TYPE PIC X.
+ 1 CONTENT-TXT PIC X(128).
+ PROCEDURE DIVISION USING
+ BY VALUE CONTENT-WSP
+ BY VALUE CONTENT-PTR
+ BY REFERENCE CONTENT-LEN
+ BY VALUE CONTENT-TYPE
+ .
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CONTENT-TXT
+ TO CONTENT-PTR
+ IF CONTENT-TYPE = 'X' OR
+ CONTENT-TYPE = 'D' OR
+ CONTENT-TYPE = 'U'
+ EVALUATE CONTENT-WSP
+ WHEN X'C3'
+ PERFORM REPLACE-CTRL-CHARS
+ PERFORM TRIM-LEADING-SPACES
+ PERFORM TRIM-TRAILING-SPACES
+ PERFORM COLLAPSE-SPACES
+ WHEN X'C1'
+ PERFORM REPLACE-CTRL-CHARS
+ WHEN X'C2'
+ PERFORM TRIM-TRAILING-SPACES-COMPAT
+ END-EVALUATE
+ ELSE
+ IF CONTENT-TYPE = 'N' OR
+ CONTENT-TYPE = 'F' OR
+ CONTENT-TYPE = 'B'
+ PERFORM TRIM-LEADING-SPACES
+ PERFORM TRIM-TRAILING-SPACES
+ END-IF
+ IF CONTENT-TYPE = 'N'
+ PERFORM TRIM-LEADING-ZEROS
+ END-IF
+ END-IF
+ GOBACK
+ .
+ TRIM-LEADING-SPACES.
+ MOVE 1 TO CONTENT-TXT-NDX
+ PERFORM TEST BEFORE
+ UNTIL CONTENT-TXT-NDX >= CONTENT-LEN OR
+ CONTENT-TXT(CONTENT-TXT-NDX:1) NOT = SPACE
+ ADD 1 TO CONTENT-TXT-NDX
+ END-PERFORM
+ IF CONTENT-TXT-NDX > 1
+ COMPUTE CONTENT-LEN
+ = CONTENT-LEN - (CONTENT-TXT-NDX - 1)
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:CONTENT-LEN)
+ TO CONTENT-BUF(1:CONTENT-LEN)
+ MOVE CONTENT-BUF(1:CONTENT-LEN)
+ TO CONTENT-TXT(1:CONTENT-LEN)
+ END-IF
+ .
+ TRIM-TRAILING-SPACES.
+ PERFORM TEST BEFORE
+ VARYING CONTENT-LEN FROM CONTENT-LEN BY -1
+ UNTIL CONTENT-LEN = 0
+ OR CONTENT-TXT(CONTENT-LEN:1) NOT = SPACE
+ END-PERFORM
+ .
+ TRIM-TRAILING-SPACES-COMPAT.
+ PERFORM TEST BEFORE
+ VARYING CONTENT-LEN FROM CONTENT-LEN BY -1
+ UNTIL CONTENT-LEN = 1
+ OR CONTENT-TXT(CONTENT-LEN:1) NOT = SPACE
+ END-PERFORM
+ .
+ REPLACE-CTRL-CHARS.
+ INSPECT CONTENT-TXT(1:CONTENT-LEN) REPLACING ALL
+ X'05' BY SPACE X'0B' BY SPACE
+ X'0D' BY SPACE X'25' BY SPACE
+ .
+ COLLAPSE-SPACES.
+ MOVE 1 TO CONTENT-TXT-NDX
+ MOVE 1 TO CONTENT-BUF-NDX
+ PERFORM TEST BEFORE
+ UNTIL CONTENT-TXT-NDX > CONTENT-LEN
+ IF CONTENT-TXT(CONTENT-TXT-NDX:1) = SPACE
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:1)
+ TO CONTENT-BUF(CONTENT-BUF-NDX:1)
+ ADD 1 TO CONTENT-TXT-NDX
+ ADD 1 TO CONTENT-BUF-NDX
+ PERFORM TEST BEFORE
+ UNTIL CONTENT-TXT-NDX > CONTENT-LEN OR
+ CONTENT-TXT(CONTENT-TXT-NDX:1) NOT = SPACE
+ ADD 1 TO CONTENT-TXT-NDX
+ END-PERFORM
+ ELSE
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:1)
+ TO CONTENT-BUF(CONTENT-BUF-NDX:1)
+ ADD 1 TO CONTENT-TXT-NDX
+ ADD 1 TO CONTENT-BUF-NDX
+ END-IF
+ END-PERFORM
+ COMPUTE CONTENT-LEN = CONTENT-BUF-NDX - 1
+ MOVE CONTENT-BUF(1:CONTENT-LEN)
+ TO CONTENT-TXT(1:CONTENT-LEN)
+ .
+ TRIM-LEADING-ZEROS.
+ MOVE 1 TO CONTENT-TXT-NDX
+ MOVE 1 TO CONTENT-BUF-NDX
+ IF CONTENT-LEN > 0
+ AND CONTENT-TXT(1:1) = '-'
+ MOVE CONTENT-TXT(1:1)
+ TO CONTENT-BUF(1:1)
+ ADD 1 TO CONTENT-TXT-NDX
+ ADD 1 TO CONTENT-BUF-NDX
+ END-IF
+ COMPUTE CMP-TMPA
+ = CONTENT-LEN - (CONTENT-TXT-NDX - 1)
+ IF CMP-TMPA > 0 AND
+ CONTENT-TXT(CONTENT-TXT-NDX:1) = '0'
+ INITIALIZE CMP-TMPB
+ INSPECT CONTENT-TXT(CONTENT-TXT-NDX:CMP-TMPA)
+ TALLYING CMP-TMPB FOR LEADING '0'
+ IF CMP-TMPB > 0
+ COMPUTE CMP-TMPA
+ = CONTENT-TXT-NDX + CMP-TMPB
+ IF CONTENT-TXT(CMP-TMPA:1) = '.'
+ SUBTRACT 1 FROM CMP-TMPB
+ END-IF
+ ADD CMP-TMPB TO CONTENT-TXT-NDX
+ END-IF
+ END-IF
+ COMPUTE CMP-TMPA
+ = CONTENT-LEN - (CONTENT-TXT-NDX - 1)
+ IF CMP-TMPA > 0
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:CMP-TMPA)
+ TO CONTENT-BUF(CONTENT-BUF-NDX:CMP-TMPA)
+ ADD CMP-TMPA TO CONTENT-BUF-NDX
+ END-IF
+ COMPUTE CONTENT-LEN = CONTENT-BUF-NDX - 1
+ IF CONTENT-LEN > 0
+ MOVE CONTENT-BUF(1:CONTENT-LEN)
+ TO CONTENT-TXT(1:CONTENT-LEN)
+ END-IF
+ .
+ END PROGRAM 'XWSPFLTR'.
+ END PROGRAM 'EPSCSMRC'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Required Length in Bytes of the Language Structure to XML Ou
+ * tput Buffer
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRK'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 LS2XML-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ LS2XML-XML-BUFFER-LENGTH
+ LS2XML-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF LS2XML-XML-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 758
+ TO LS2XML-XML-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO LS2XML-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRK'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Maximum Length in Bytes of the Language Structure to XML Inp
+ * ut Buffer
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRL'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 LS2XML-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ LS2XML-LANG-BUFFER-LENGTH
+ LS2XML-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF LS2XML-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO LS2XML-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO LS2XML-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRL'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Language Structure to XML Exception Handler
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRE'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-6.
+ 2 PIC X(39) USAGE DISPLAY
+ VALUE 'Failed To Resume Execution Of Converter'.
+ LOCAL-STORAGE SECTION.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ LINKAGE SECTION.
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 TOKEN POINTER.
+ 1 RESULT PIC S9(9) COMP.
+ 88 RESUME VALUE 10.
+ 1 CURRENT-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION PIC X(12).
+ PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
+ RESULT NEW-CONDITION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CEESRP-DATA TO TOKEN
+ SET RESUME TO TRUE
+ CALL 'CEEMRCE' USING RECOVERY-POINT FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-6
+ END-IF
+ IF FACILITY OF CURRENT-CONDITION = 'IGZ'
+ EVALUATE MSG-NO OF CURRENT-CONDITION
+ WHEN 272
+ MOVE 'Y' TO UNICODE-ERROR
+ WHEN OTHER
+ MOVE 'Y' TO OTHER-ERROR
+ END-EVALUATE
+ ELSE
+ MOVE 'Y' TO OTHER-ERROR
+ END-IF
+ MOVE CURRENT-CONDITION TO SAVED-CONDITION
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRE'.
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epsnbrvl.cbl b/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epsnbrvl.cbl
new file mode 100644
index 00000000..c6e819a0
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSC/cobol/epsnbrvl.cbl
@@ -0,0 +1,186 @@
+ ID DIVISION.
+ PROGRAM-ID. EPSNBRVL
+ * THIS IS A CALLED PROGRAM EXAMPLE FOR DEMONSTRATION
+ *
+ * THIS PROGRAM WILL BE CALLED BY ANOTHER, RECEIVE
+ * THE FOLLOWING INFOMATION AND RETURN A MONTLY PAYMENT AMOUNT
+ * INPUT:
+ * ORIGINAL PRINCIPLE AMOUNT
+ * YEARS OR MONTH INDICATOR
+ * NUMBER OF YEARS
+ * NUMBER OF MONTHS
+ * INTEREST RATE
+ * OUTPUT:
+ * MONTHLY PAYMENT
+ *
+ * (C) 2019 IBM - Jim Hildner
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. FLEX-ES.
+ OBJECT-COMPUTER. FLEX-ES.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 WS-STATIC-DATA.
+ 03 STATIC-ERRORS.
+ 05 FILLER PIC 99 VALUE 1.
+ 05 FILLER PIC X(80)
+ VALUE 'NO NUMBER PRESENT'.
+ 05 FILLER PIC 99 VALUE 2.
+ 05 FILLER PIC X(80)
+ VALUE 'SPACES IN NUMBER'.
+ 05 FILLER PIC 99 VALUE 3.
+ 05 FILLER PIC X(80)
+ VALUE 'TOO MANY DEICMAL POINTS'.
+ 05 FILLER PIC 99 VALUE 4.
+ 05 FILLER PIC X(80)
+ VALUE 'YEARS INDICATED, BUT YEARS ZERO OR LESS'.
+ 05 FILLER PIC 99 VALUE 5.
+ 05 FILLER PIC X(80)
+ VALUE 'ZERO OR LESS MONTHS'.
+ 05 FILLER PIC 99 VALUE 6.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 7.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 8.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 9.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 10.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 03 STATIC-ERROR-TBL REDEFINES STATIC-ERRORS.
+ 05 STATIC-ERROR-TABLE OCCURS 10 TIMES.
+ 07 ERROR-INDICATOR PIC 99.
+ 07 ERROR-TEXT PIC X(80).
+ 01 WS-WORK-AMOUNTS.
+ 03 WS-LEADING-SPACES PIC 9(4) COMP VALUE 1.
+ 03 WS-TRAILING-SPACES PIC 9(4) COMP VALUE 0.
+ 03 WS-END-SPACE PIC 9(4) COMP VALUE 0.
+ 03 WS-DECIMAL-SPACE PIC 99 VALUE 0.
+ 03 WS-IDX PIC 9(2) COMP.
+ 03 WS-DEC-IDX PIC 9(2) COMP.
+ 03 WS-NUM-IDX PIC 9(2) COMP.
+
+ 03 WS-MAX-NUMBER-LGTH PIC 9(2) COMP.
+ 03 WS-MAX-FIELD PIC 9(2) COMP.
+ 03 WS-DEC-ADJUST PIC 9.
+
+
+ LINKAGE SECTION.
+ *
+ COPY EPSNBRPM.
+
+ PROCEDURE DIVISION USING EPS-NUMBER-VALIDATION.
+ *
+ A000-MAINLINE.
+ MOVE EPSPARM-MAX-LENGTH TO WS-IDX.
+ MOVE LENGTH OF EPSPARM-VALIDATE-DATA TO WS-MAX-FIELD
+ IF WS-IDX > WS-MAX-FIELD
+ MOVE WS-MAX-FIELD TO WS-IDX
+ ELSE
+ MOVE WS-IDX TO WS-MAX-FIELD
+ END-IF.
+
+ MOVE ZERO TO WS-END-SPACE.
+ MOVE SPACES TO EPSPARM-RETURN-ERROR.
+ MOVE ZERO TO EPSPARM-BINARY-NUMBER
+ EPSPARM-NUMBER
+ EPSPARM-DECIMAL.
+
+ * FIND TRAILING SPACES
+ PERFORM UNTIL WS-IDX = 0
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = SPACES
+ ADD 1 TO WS-TRAILING-SPACES
+ SUBTRACT 1 FROM WS-IDX
+ ELSE
+ MOVE WS-IDX TO WS-END-SPACE
+ MOVE 0 TO WS-IDX
+ END-IF
+ END-PERFORM.
+
+ * FIND LEADING SPACES
+ MOVE 1 TO WS-LEADING-SPACES.
+
+ IF WS-END-SPACE NOT = 0
+ MOVE 1 TO WS-IDX
+ PERFORM UNTIL WS-IDX >= WS-END-SPACE
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = SPACES
+ ADD 1 TO WS-LEADING-SPACES
+ ADD 1 TO WS-IDX
+ ELSE
+ COMPUTE WS-IDX = WS-END-SPACE + 1
+ END-IF
+ END-PERFORM
+ ELSE
+ MOVE STATIC-ERROR-TABLE(1) TO EPSPARM-RETURN-ERROR
+ END-IF.
+
+ MOVE WS-LEADING-SPACES TO WS-IDX.
+ MOVE 1 TO WS-DEC-IDX.
+ MOVE 0 TO WS-DECIMAL-SPACE.
+
+ * FIND DECIMAL POINT
+ PERFORM A002-COMPUTE-DECIMAL
+ UNTIL WS-IDX > WS-END-SPACE
+ .
+
+ IF WS-DECIMAL-SPACE > 0
+ COMPUTE WS-END-SPACE = WS-DECIMAL-SPACE - 1
+ END-IF.
+
+ * VALIDATE NO INTERNAL BLANKS
+ MOVE WS-END-SPACE TO WS-IDX.
+ MOVE LENGTH OF EPSPARM-NUMBER TO WS-NUM-IDX.
+ * SUBTRACT 1 FROM WS-NUM-IDX.
+
+ PERFORM A001-COMPUTE-INTEGER
+ UNTIL WS-IDX < WS-LEADING-SPACES
+ .
+
+ IF EPSPARM-RETURN-ERROR = SPACES
+ COMPUTE EPSPARM-BINARY-NUMBER = EPSPARM-NUMBER
+ + EPSPARM-DECIMAL
+ END-IF.
+ GOBACK
+ .
+
+ A001-COMPUTE-INTEGER.
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = ','
+ SUBTRACT 1 FROM WS-IDX
+ ELSE
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = SPACE
+ OR EPSPARM-VALIDATE-DATA(WS-IDX:1) IS NOT NUMERIC
+ MOVE STATIC-ERROR-TABLE(2) TO EPSPARM-RETURN-ERROR
+ MOVE 0 TO WS-IDX
+ ELSE
+ MOVE EPSPARM-VALIDATE-DATA(WS-IDX:1) TO
+ EPSPARM-NUMBER(WS-NUM-IDX:1)
+ SUBTRACT 1 FROM WS-IDX
+ WS-NUM-IDX
+ END-IF
+ END-IF
+ .
+
+ A002-COMPUTE-DECIMAL.
+ IF WS-DECIMAL-SPACE = 0
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = '.'
+ MOVE WS-IDX TO WS-DECIMAL-SPACE
+ END-IF
+ ELSE
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = '.'
+ MOVE STATIC-ERROR-TABLE(3) TO EPSPARM-RETURN-ERROR
+ MOVE WS-END-SPACE TO WS-IDX
+ MOVE 1 TO WS-DEC-IDX
+ ELSE
+ MOVE EPSPARM-VALIDATE-DATA(WS-IDX:1) TO
+ EPSPARM-DECIMAL(WS-DEC-IDX:1)
+ ADD 1 TO WS-DEC-IDX
+ END-IF
+ END-IF
+ ADD 1 TO WS-IDX
+ .
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/.gitattributes b/Build/MortgageApplicationV2/Mortgage-EPSM/.gitattributes
new file mode 100644
index 00000000..0ba4ef39
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/.gitattributes
@@ -0,0 +1,12 @@
+
+# line endings
+* text eol=lf
+
+# file encodings
+*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.bms zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.pli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.lnk zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.properties zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/.project b/Build/MortgageApplicationV2/Mortgage-EPSM/.project
new file mode 100644
index 00000000..1adfdcb4
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/.project
@@ -0,0 +1,13 @@
+
+
+ Mortgage-EPSM
+
+
+
+
+
+
+ com.ibm.ftt.ui.views.project.navigator.local
+ com.ibm.ftt.dbbz.integration.dbbzprojectnature
+
+
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/bms/epsmlis.bms b/Build/MortgageApplicationV2/Mortgage-EPSM/bms/epsmlis.bms
new file mode 100644
index 00000000..7d551053
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/bms/epsmlis.bms
@@ -0,0 +1,112 @@
+*********************************************************************** 00010000
+EPSMLIS DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL, X
+ STORAGE=AUTO,TIOAPFX=YES,DSATTS=(COLOR,HILIGHT), X 0009000
+ MAPATTS=(COLOR,HILIGHT) 0009100
+EPSMLIS DFHMDI SIZE=(24,80),CTRL=(PRINT,FREEKB) 0011000
+ DFHMDF POS=(1,24),LENGTH=26,INITIAL='Better Mortgage Rates', *
+ ATTRB=(ASKIP,BRT)
+ DFHMDF POS=(24,58),LENGTH=0, *
+ ATTRB=ASKIP
+* MENU MORTGAGE LIST.
+
+LITCOMP DFHMDF POS=(3,1),LENGTH=24,INITIAL='Company', *
+ ATTRB=(ASKIP,NORM)
+LITPHN DFHMDF POS=(3,26),LENGTH=13,INITIAL='Phone Number', *
+ ATTRB=(PROT,NORM)
+EPDIFF1 DFHMDF POS=(3,40),LENGTH=13,INITIAL='Interest Rate', *
+ ATTRB=(PROT,NORM)
+EPDIFF2 DFHMDF POS=(3,54),LENGTH=16,INITIAL='Monthly Payment', *
+ ATTRB=(PROT,NORM)
+LITPHN1 DFHMDF POS=(3,71),LENGTH=7,INITIAL='# Years', *
+ ATTRB=(PROT,NORM)
+EPCMP1 DFHMDF POS=(4,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN1 DFHMDF POS=(4,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE1 DFHMDF POS=(4,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN1 DFHMDF POS=(4,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS1 DFHMDF POS=(4,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP2 DFHMDF POS=(5,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN2 DFHMDF POS=(5,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE2 DFHMDF POS=(5,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN2 DFHMDF POS=(5,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS2 DFHMDF POS=(5,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP3 DFHMDF POS=(6,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN3 DFHMDF POS=(6,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE3 DFHMDF POS=(6,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN3 DFHMDF POS=(6,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS3 DFHMDF POS=(6,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP4 DFHMDF POS=(7,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN4 DFHMDF POS=(7,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE4 DFHMDF POS=(7,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN4 DFHMDF POS=(7,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS4 DFHMDF POS=(7,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP5 DFHMDF POS=(8,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN5 DFHMDF POS=(8,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE5 DFHMDF POS=(8,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN5 DFHMDF POS=(8,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS5 DFHMDF POS=(8,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP6 DFHMDF POS=(9,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN6 DFHMDF POS=(9,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE6 DFHMDF POS=(9,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN6 DFHMDF POS=(9,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS6 DFHMDF POS=(9,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP7 DFHMDF POS=(10,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN7 DFHMDF POS=(10,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE7 DFHMDF POS=(10,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN7 DFHMDF POS=(10,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS7 DFHMDF POS=(10,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP8 DFHMDF POS=(11,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN8 DFHMDF POS=(11,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE8 DFHMDF POS=(11,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN8 DFHMDF POS=(11,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+ DFHMDF POS=(11,69), *
+ ATTRB=ASKIP
+EPYEARS8 DFHMDF POS=(11,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+ DFHMDF POS=(11,77),LENGTH=0, *
+ ATTRB=ASKIP
+ DFHMDF POS=(23,17),LENGTH=43, *
+ INITIAL='Press F3 to quit or Enter to calculate loan', *
+ ATTRB=(ASKIP,NORM),HILIGHT=OFF,COLOR=BLUE
+MSGERR DFHMDF POS=(24,17),LENGTH=40,INITIAL='INVALID KEY PRESSED', X
+ ATTRB=(PROT,DRK)
+EPSMLIS DFHMSD TYPE=FINAL
+ END
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/cobol/epsmlist.cbl b/Build/MortgageApplicationV2/Mortgage-EPSM/cobol/epsmlist.cbl
new file mode 100644
index 00000000..1c794be2
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/cobol/epsmlist.cbl
@@ -0,0 +1,224 @@
+ ID DIVISION.
+ PROGRAM-ID. EPSMLIST.
+ * THIS DEMONSTRATES CICS/DEBUG - EPSDEMOS 2008
+ *
+ * THIS PROGRAM WILL RECEIVE A DATE AND COVERT THE DATE TO
+ * AN INTEGER IN A CALLED PROGRAM TO DETERMINE DAYS FROM
+ * CURRENT DATE.
+ *
+ * (C) 2008 IBM - JIM HILDNER RESERVED.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. IBM-FLEX-ES.
+ OBJECT-COMPUTER. IBM-FLEX-ES.
+ *
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 W-FLAGS.
+ 10 W-SEND-FLAG PIC X.
+ 88 SEND-ERASE VALUE '1'.
+ 88 SEND-DATAONLY VALUE '2'.
+ 88 SEND-MAPONLY VALUE '3'.
+ 88 SEND-DATAONLY-ALARM VALUE '4'.
+
+ 01 W-CONVERSIONS.
+ 05 W-PMT-CNVRT PIC X(12).
+ 05 W-PMT-NUMBER
+ REDEFINES W-PMT-CNVRT
+ PIC 9(10)V99.
+ 05 WS-FORMAT-NUMBER PIC Z,ZZZ,ZZ9.99.
+ 05 W-PRINC-CNVRT PIC X(12).
+ 05 W-PRINC-NUMBER
+ REDEFINES W-PRINC-CNVRT
+ PIC 9(10)V99.
+
+ 01 W-CALL-PROGRAM PIC X(8).
+ 01 RESPONSE PIC S9(8) COMP.
+ 01 INTERNAL-PROGRAM-VARIABLES.
+ 05 RID-LENGTH PIC S9(9) COMP.
+ 05 DISP-COUNT PIC S9(4) COMP.
+ 05 MAX-LOOP PIC S9(4) COMP
+ VALUE IS 8.
+ 05 END-OF-FILE PIC X.
+ 05 CLOSE-FILE PIC X.
+ *
+ 01 W-RETIREMENT-WA PIC 9(4).
+ 01 W-COMAREA-LENGTH PIC 9(4) COMP.
+
+ 01 SAVE-COMM-AREA.
+ COPY EPSMTCOM.
+
+ 01 END-OF-TRANS-MSG PIC X(30)
+ VALUE 'END OF TRANSACTION - THANK YOU'.
+ COPY DFHAID.
+ * COPY DFHEIBLK.
+
+ COPY EPSMLIS.
+ 01 OUTMAP REDEFINES EPSMLISI.
+ 03 FILLER PIC X(110).
+ 03 OUTMAP-REPEATE OCCURS 8 TIMES.
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-COMPANY PIC X(24).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-PHONE-NUM PIC X(13).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-RATE PIC X(5).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-LOAN PIC X(12).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-YEARS PIC X(2).
+ 03 FILLER PIC X(5).
+ 03 OUTMAP-MSG PIC X(40).
+
+ COPY EPSNBRPM.
+
+ COPY EPSMORTF.
+
+ 01 W-COMMUNICATION-AREA.
+ COPY EPSMTCOM.
+
+ LINKAGE SECTION.
+
+ 01 DFHCOMMAREA.
+ COPY EPSMTCOM.
+
+ PROCEDURE DIVISION USING DFHCOMMAREA.
+
+ * JPH - DO I need this for files
+ * EXEC CICS HANDLE CONDITION H900-NOT-FOUND
+
+
+ EPSCMORT-MAINLINE.
+ MOVE LENGTH OF DFHCOMMAREA to W-COMAREA-LENGTH.
+ MOVE DFHCOMMAREA TO SAVE-COMM-AREA.
+ EVALUATE TRUE
+ WHEN EIBCALEN = ZERO
+ * First time in - Show Screen
+ PERFORM A100-PROCESS-MAP
+ WHEN EIBAID = DFHCLEAR
+ * Process CLEAR key
+ EXEC CICS
+ RETURN
+ END-EXEC
+ WHEN EIBAID = DFHPF3 OR DFHPF12
+ * Process END/RETURN keys
+ EXEC CICS
+ RETURN
+ END-EXEC
+ WHEN EIBAID = DFHENTER
+ * Process ENTER Key
+ PERFORM A100-PROCESS-MAP
+ WHEN OTHER
+ * Present Invalid Key
+ PERFORM A100-PROCESS-MAP
+ END-EVALUATE
+ .
+ MOVE SAVE-COMM-AREA TO DFHCOMMAREA.
+ EXEC CICS RETURN END-EXEC.
+
+ A100-PROCESS-MAP.
+
+ PERFORM A310-ERASE-MAP.
+
+ MOVE 0 TO RID-LENGTH.
+ MOVE 'N' TO CLOSE-FILE.
+ MOVE 'N' TO END-OF-FILE.
+
+ EXEC CICS STARTBR DATASET('EPSMORTF')
+ RIDFLD(RID-LENGTH) RBA
+ EQUAL
+ RESP(RESPONSE) END-EXEC.
+
+ IF (RESPONSE = DFHRESP(NORMAL))
+ MOVE 'Y' TO CLOSE-FILE
+ MOVE 1 TO DISP-COUNT
+ PERFORM A150-PROCESS-FILE
+ UNTIL END-OF-FILE = 'Y'
+ OR DISP-COUNT > MAX-LOOP
+ ELSE
+ MOVE 'ERROR WITH START' TO EPCMP1O
+ MOVE RESPONSE TO EPLOAN1O
+ END-IF
+ .
+
+
+ IF CLOSE-FILE = 'Y'
+ EXEC CICS ENDBR FILE('EPSMORTF') END-EXEC
+ END-IF
+ .
+
+ PERFORM A300-SEND-MAP.
+
+ A150-PROCESS-FILE.
+
+ EXEC CICS READNEXT FILE('EPSMORTF')
+ INTO(MORTGAGE-COMPANY-INFO)
+ RIDFLD(RID-LENGTH)
+ RBA RESP(RESPONSE)
+ END-EXEC
+ .
+ IF (RESPONSE = DFHRESP(NORMAL))
+ IF EPSPCOM-PRINCIPLE-DATA OF SAVE-COMM-AREA
+ < MORT-FILE-LOAN
+ AND EPSPCOM-QUOTED-INTEREST-RATE OF SAVE-COMM-AREA
+ > MORT-FILE-RATE
+ MOVE MORT-FILE-COMPANY
+ TO OUTMAP-COMPANY(DISP-COUNT)
+ MOVE MORT-FILE-PHONE-NUM
+ TO OUTMAP-PHONE-NUM(DISP-COUNT)
+ PERFORM A600-CALCULATE-MORTGAGE
+ MOVE MORT-FILE-RATE
+ TO WS-FORMAT-NUMBER
+ MOVE WS-FORMAT-NUMBER(7:5)
+ TO OUTMAP-RATE(DISP-COUNT)
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT OF DFHCOMMAREA
+ TO WS-FORMAT-NUMBER
+ MOVE WS-FORMAT-NUMBER TO OUTMAP-LOAN(DISP-COUNT)
+ MOVE MORT-FILE-YEARS
+ TO OUTMAP-YEARS(DISP-COUNT)
+ ADD 1 TO DISP-COUNT
+ END-IF
+ ELSE
+ IF (RESPONSE NOT = DFHRESP(ENDFILE))
+ MOVE 'ERROR WITH READ NEXT' TO EPCMP1O
+ MOVE RESPONSE TO EPLOAN1O
+ ELSE
+ MOVE 'Y' TO END-OF-FILE
+ END-IF
+ END-IF
+ .
+
+ A300-SEND-MAP.
+ EXEC CICS
+ SEND MAP ('EPSMLIS')
+ MAPSET('EPSMLIS')
+ FROM(EPSMLISO)
+ END-EXEC.
+
+ A310-ERASE-MAP.
+ MOVE LOW-VALUES TO EPSMLISO.
+ EXEC CICS
+ SEND MAP ('EPSMLIS')
+ MAPSET('EPSMLIS')
+ FROM(EPSMLISO)
+ ERASE
+ END-EXEC.
+
+
+ A600-CALCULATE-MORTGAGE.
+ MOVE SAVE-COMM-AREA TO DFHCOMMAREA.
+ MOVE 'Y' TO EPSPCOM-YEAR-MONTH-IND
+ OF DFHCOMMAREA.
+ MOVE MORT-FILE-RATE TO EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA.
+ MOVE MORT-FILE-YEARS TO EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA.
+ MOVE 'EPSCSMRT' TO W-CALL-PROGRAM
+ EXEC CICS LINK PROGRAM( W-CALL-PROGRAM )
+ COMMAREA( DFHCOMMAREA )
+ END-EXEC
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT
+ OF DFHCOMMAREA
+ TO WS-FORMAT-NUMBER.
+ MOVE WS-FORMAT-NUMBER TO OUTMAP-LOAN(DISP-COUNT).
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/cobol/epsmpmt.cbl b/Build/MortgageApplicationV2/Mortgage-EPSM/cobol/epsmpmt.cbl
new file mode 100644
index 00000000..39b765f8
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/cobol/epsmpmt.cbl
@@ -0,0 +1,154 @@
+ CBL NUMPROC(MIG),FLAG(I,W),RENT
+ ID DIVISION.
+ PROGRAM-ID. EPSMPMT.
+ * THIS IS A CALLED PROGRAM EXAMPLE FOR DEMONSTRATION
+ *
+ * THIS PROGRAM WILL BE CALLED BY ANOTHER, RECEIVE
+ * THE FOLLOWING INFOMATION AND RETURN A MONTLY PAYMENT AMOUNT
+ * INPUT:
+ * ORIGINAL PRINCIPLE AMOUNT
+ * YEARS OR MONTH INDICATOR
+ * NUMBER OF YEARS
+ * NUMBER OF MONTHS
+ * INTEREST RATE
+ * OUTPUT:
+ * MONTHLY PAYMENT
+ *
+ * (C) 2019 IBM - Jim Hildner
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. FLEX-ES.
+ OBJECT-COMPUTER. FLEX-ES.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 WS-STATIC-DATA.
+ 03 STATIC-MAXIMUM-PRINCIPLE PIC 9(9)V99
+ VALUE 100000000.01.
+ 03 STATIC-ERRORS.
+ 05 FILLER PIC 99 VALUE 1.
+ 05 FILLER PIC X(80)
+ VALUE 'PRINCIPLE AMOUNT IS NEGATIVE'.
+ 05 FILLER PIC 99 VALUE 2.
+ 05 FILLER PIC X(80)
+ VALUE 'PRINCIPLE EXCEEDED MAXIMUM AMOUNT'.
+ 05 FILLER PIC 99 VALUE 3.
+ 05 FILLER PIC X(80)
+ VALUE 'NEGATIVE INTEREST RATE'.
+ 05 FILLER PIC 99 VALUE 4.
+ 05 FILLER PIC X(80)
+ VALUE 'YEARS INDICATED, BUT YEARS ZERO OR LESS'.
+ 05 FILLER PIC 99 VALUE 5.
+ 05 FILLER PIC X(80)
+ VALUE 'ZERO OR LESS MONTHS'.
+ 05 FILLER PIC 99 VALUE 6.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 7.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 8.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 9.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 10.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 03 STATIC-ERROR-TBL REDEFINES STATIC-ERRORS.
+ 05 STATIC-ERROR-TABLE OCCURS 10 TIMES.
+ 07 ERROR-INDICATOR PIC 99.
+ 07 ERROR-TEXT PIC X(80).
+ 01 WS-INDICATORS-AND-FLAGS.
+ 03 VALIDATION-INDICATOR PIC 9.
+ 01 WS-WORK-AMOUNTS.
+ 03 WS-NUMBER-OF-MONTHS PIC 9(9)V99 COMP.
+ 03 WS-CALC-INTEREST COMP-1.
+ * 03 L COMP-1.
+ * 03 C COMP-1.
+ * 03 N PIC S9(5) COMP.
+ * 03 P COMP-1.
+ 01 Loan Pic 9(9)V99.
+ 01 Payment Pic 9(9)V99.
+ 01 Interest Pic 9(9)V9999.
+ 01 Number-Periods Pic 999.
+ *
+ LINKAGE SECTION.
+ *
+ COPY EPSPDATA.
+
+ PROCEDURE DIVISION USING EPSPDATA.
+ *
+ A000-MAINLINE.
+ MOVE 0 TO VALIDATION-INDICATOR.
+ MOVE 0 TO WS-NUMBER-OF-MONTHS.
+ PERFORM A100-VALIDATE-INPUT.
+ IF VALIDATION-INDICATOR = 0
+ PERFORM A200-CALULATE-MONTH-PAYMENT
+ * PERFORM A300-TRY2
+ ELSE
+ PERFORM A999-RETURN-ERROR-TEXT
+ END-IF.
+ GOBACK
+ .
+ *
+ A100-VALIDATE-INPUT.
+ MOVE SPACES TO EPSPDATA-RETURN-ERROR.
+ IF EPSPDATA-PRINCIPLE-DATA > 0
+ IF EPSPDATA-PRINCIPLE-DATA > STATIC-MAXIMUM-PRINCIPLE
+ MOVE 2 TO VALIDATION-INDICATOR
+ END-IF
+ ELSE
+ MOVE 1 TO VALIDATION-INDICATOR
+ END-IF
+ .
+ IF VALIDATION-INDICATOR = 0
+ IF EPSPDATA-QUOTED-INTEREST-RATE <= 0
+ MOVE 3 TO VALIDATION-INDICATOR
+ ELSE
+ IF EPSPDATA-YEAR-MONTH-IND = 'Y'
+ COMPUTE WS-NUMBER-OF-MONTHS =
+ EPSPDATA-NUMBER-OF-YEARS * 12
+ ELSE
+ MOVE EPSPDATA-NUMBER-OF-MONTHS TO
+ WS-NUMBER-OF-MONTHS
+ END-IF
+ END-IF
+ END-IF
+ .
+ COMPUTE WS-CALC-INTEREST =
+ (EPSPDATA-QUOTED-INTEREST-RATE / 100) / 12
+ .
+
+ A200-CALULATE-MONTH-PAYMENT.
+ COMPUTE EPSPDATA-RETURN-MONTH-PAYMENT
+ = EPSPDATA-PRINCIPLE-DATA *
+ (WS-CALC-INTEREST *
+ (1 + WS-CALC-INTEREST) ** WS-NUMBER-OF-MONTHS) /
+ (((1 + WS-CALC-INTEREST )
+ ** WS-NUMBER-OF-MONTHS) - 1)
+ .
+ * DISPLAY 'RETURN PAYMENT = ' EPSPDATA-RETURN-MONTH-PAYMENT.
+ * COMPUTE C = WS-CALC-INTEREST.
+ * COMPUTE N = WS-NUMBER-OF-MONTHS.
+ * COMPUTE L = EPSPDATA-PRINCIPLE-DATA.
+ * COMPUTE P = L * (C * (1 + C ) ** N)/(((1 + C) ** N) - 1).
+
+
+ * DEAD CODE USED FOR TESTING
+ A300-TRY2.
+ MOVE EPSPDATA-PRINCIPLE-DATA TO Loan.
+ COMPUTE Interest = EPSPDATA-QUOTED-INTEREST-RATE / 100.
+ MOVE WS-NUMBER-OF-MONTHS TO Number-Periods.
+ Compute Payment =
+ Loan * Function Annuity((Interest / 12) Number-Periods)
+ DISPLAY 'Verify Payment = ' Payment.
+
+ A999-RETURN-ERROR-TEXT.
+ MOVE ERROR-TEXT(VALIDATION-INDICATOR) TO
+ EPSPDATA-RETURN-ERROR
+ GOBACK
+ .
+
+ *
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmortf.cpy b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmortf.cpy
new file mode 100644
index 00000000..04fee56d
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmortf.cpy
@@ -0,0 +1,11 @@
+000100 01 MORTGAGE-COMPANY-INFO.
+000200 03 MORT-FILE-COMPANY PIC X(24).
+000300 03 MORT-FILE-PHONE-NUM PIC X(13).
+000400 03 MORT-FILE-RATE PIC 9(3)V99.
+000401 03 MORT-FILE-RATE-RDF REDEFINES MORT-FILE-RATE
+000403 PIC X(5).
+000500 03 MORT-FILE-LOAN PIC 9(10)V99.
+000501 03 MORT-FILE-LOAN-RDF REDEFINES MORT-FILE-LOAN
+000503 PIC X(12).
+000600 03 MORT-FILE-YEARS PIC 9(2).
+ * Comment 10
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtcom.cpy b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtcom.cpy
new file mode 100644
index 00000000..29de4bfe
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtcom.cpy
@@ -0,0 +1,4 @@
+ 10 PROCESS-INDICATOR PIC X.
+
+ COPY EPSMTINP.
+ COPY EPSMTOUT.
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtinp.cpy b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtinp.cpy
new file mode 100644
index 00000000..955020d4
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtinp.cpy
@@ -0,0 +1,7 @@
+ * INPUT
+ 10 EPSPCOM-PRINCIPLE-DATA PIC S9(9)V99 COMP.
+ 10 EPSPCOM-NUMBER-OF-YEARS PIC S9(4) COMP.
+ 10 EPSPCOM-NUMBER-OF-MONTHS PIC S9(4) COMP.
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PIC S9(2)v9(3) COMP.
+ 10 EPSPCOM-YEAR-MONTH-IND PIC X.
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtout.cpy b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtout.cpy
new file mode 100644
index 00000000..9dcad4f3
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/copybook/epsmtout.cpy
@@ -0,0 +1,9 @@
+ * OUTPUT
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PIC S9(7)V99 COMP.
+ 10 EPSPCOM-ERRMSG PIC X(80).
+ 10 EPSPCOM-PROGRAM-RETCODE PIC 9(4).
+ 88 EPS02-REQUEST-SUCCESS VALUE 0.
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF
+ REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PIC X(4).
diff --git a/Build/MortgageApplicationV2/Mortgage-EPSM/link/epsmlist.lnk b/Build/MortgageApplicationV2/Mortgage-EPSM/link/epsmlist.lnk
new file mode 100644
index 00000000..c45713d0
--- /dev/null
+++ b/Build/MortgageApplicationV2/Mortgage-EPSM/link/epsmlist.lnk
@@ -0,0 +1,3 @@
+ INCLUDE SYSLMOD(EPSMPMT)
+ INCLUDE SYSLIB(EPSMLIST)
+ NAME EPSMLIST(R)
\ No newline at end of file
diff --git a/Build/MortgageApplicationV2/MortgageApplication/.gitattributes b/Build/MortgageApplicationV2/MortgageApplication/.gitattributes
new file mode 100644
index 00000000..0ba4ef39
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/.gitattributes
@@ -0,0 +1,12 @@
+
+# line endings
+* text eol=lf
+
+# file encodings
+*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.bms zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.pli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.lnk zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.properties zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/.project b/Build/MortgageApplicationV2/MortgageApplication/.project
new file mode 100644
index 00000000..0bc37fa9
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/.project
@@ -0,0 +1,13 @@
+
+
+ MortgageApplication
+
+
+
+
+
+
+ com.ibm.ftt.ui.views.project.navigator.local
+ com.ibm.ftt.dbbz.integration.dbbzprojectnature
+
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/Assembler.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/Assembler.properties
new file mode 100644
index 00000000..c50f2506
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/Assembler.properties
@@ -0,0 +1,11 @@
+# Project properties used by zAppBuild/language/Assembler.groovy
+
+#
+# default Assemble program build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+assembler_fileBuildRank=
+
+#
+# default Assembler maximum RC allowed
+# can be overridden by file properties
+assembler_maxRC=0
\ No newline at end of file
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/BMS.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/BMS.properties
new file mode 100644
index 00000000..2f42d5f3
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/BMS.properties
@@ -0,0 +1,25 @@
+# Project properties used by zAppBuild/language/Assembler.groovy
+
+#
+# default BMS map build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+bms_fileBuildRank=
+
+#
+# default BMS maximun RC allowed
+# can be overridden by file properties
+bms_maxRC=0
+
+#
+# default BMS parameters
+# can be overridden by file properties
+bms_copyGenParms=SYSPARM(DSECT),DECK,NOOBJECT
+bms_compileParms=SYSPARM(MAP),DECK,NOOBJECT
+bms_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+
+
+
+
+
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/Cobol.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/Cobol.properties
new file mode 100644
index 00000000..a1d6caf0
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/Cobol.properties
@@ -0,0 +1,56 @@
+# Project properties used by zAppBuild/language/Cobol.groovy
+
+#
+# default COBOL program build rank - used to sort build file list
+# leave empty - overridden by file properties
+cobol_fileBuildRank=
+
+#
+# COBOL dependency resolution rules
+# Rules defined in application.properties
+cobol_resolutionRules=[${copybookRule}]
+
+#
+# default COBOL compiler version
+# can be overridden by file properties
+cobol_compilerVersion=V6
+
+#
+# default COBOL maximum RCs allowed
+# can be overridden by file properties
+cobol_compileMaxRC=4
+cobol_linkEditMaxRC=0
+
+#
+# default COBOL compiler parameters
+# can be overridden by file properties
+cobol_compileParms=LIB
+cobol_compileCICSParms=CICS
+cobol_compileSQLParms=SQL
+cobol_compileErrorPrefixParms=ADATA,EX(ADX(ELAXMGUX))
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+cobol_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+#
+# execute link edit step
+# can be overridden by file properties
+cobol_linkEdit=true
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+cobol_scanLoadModule=true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/LinkEdit.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/LinkEdit.properties
new file mode 100644
index 00000000..eba53613
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/LinkEdit.properties
@@ -0,0 +1,21 @@
+# Project properties used by zAppBuild/language/LinkEdit.groovy
+
+#
+# default link file build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+linkedit_fileBuildRank=
+
+#
+# default LinkEdit maximum RC allowed
+# can be overridden by file properties
+linkedit_maxRC=0
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+linkEdit_parms=MAP,RENT,COMPAT(PM5)
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+linkedit_scanLoadModule=true
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/PLI.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/PLI.properties
new file mode 100644
index 00000000..d893a180
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/PLI.properties
@@ -0,0 +1,12 @@
+# Project properties used by zAppBuild/language/PLI.groovy
+
+#
+# default PLI program build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+pli_fileBuildRank=
+
+#
+# default Assembler maximum RC allowed
+# can be overridden by file properties
+pli_maxRC=0
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/README.md b/Build/MortgageApplicationV2/MortgageApplication/application-conf/README.md
new file mode 100644
index 00000000..a86e7cf8
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/README.md
@@ -0,0 +1,98 @@
+# Application Configuration
+This folder contains application specific configuration properties used by the zAppBuild Groovy build and utility scripts. It is intended to be copied as a high level folder in the application repository or main application repository if the application source files are distributed across multiple repositories. Once copied to the application repository, users should review the default property files and modify any values as needed.
+
+At the beginning of the build, the `application-conf/application.properties` file will automatically be loaded into the [DBB BuildProperties class](https://www.ibm.com/support/knowledgecenter/SS6T76_1.0.4/scriptorg.html#build-properties-class). Use the `applicationPropFiles` property (see table below) to load additional application property files.
+
+## Property File Descriptions
+Since all properties will be loaded into a single static instance of BuildProperties, the organization and naming convention of the *property files* are somewhat arbitrary and targeted more for self documentation and understanding.
+
+### application.properties
+This property file is loaded automatically at the beginning of the build and contains application specific properties used mainly by `build.groovy` but can also be a place to declare properties used by multiple language scripts. Additional property files are loaded based on the content of the `applicationPropFiles` property.
+
+Property | Description
+--- | ---
+applicationPropFiles | Comma separated list of additional application property files to load. Supports both absolute and relative file paths. Relative paths assumed to be relative to ${workspace}/${application}/application-conf/.
+applicationSrcDirs | Comma separated list of all source directories included in application build. Each directory is assumed to be a local Git repository clone. Supports both absolute and relative paths though for maximum reuse of collected dependency data relative paths should be used. Relative paths assumed to be relative to ${workspace}.
+buildOrder | Comma separated list of the build script processing order.
+mainBuildBranch | The main build branch of the main application repository. Used for cloning collections for topic branch builds instead of rescanning the entire application.
+excludeFileList | Files to exclude when scanning or running full build.
+impactResolutionRules | Comma separated list of resolution rule properties used for impact builds. Sample resolution rule properties (in JSON format) are included below.
+
+### file.properties
+Location of file properties, script mappings and file level property overrides. All file properties for the entire application, including source files in distributed repositories of the application need to be contained either in this file or in other property files in the `application-conf` directory. Look for column 'Overridable' in the tables below for build properties that can have file level property overrides.
+
+Property | Description
+--- | ---
+dbb.scriptMapping | DBB configuration file properties associtation build files to language scripts
+
+### Assembler.properties
+Application properties used by zAppBuild/language/Assembler.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+assembler_fileBuildRank | Default Assemble program build rank. Used to sort Assembler build file sub-list. Leave empty. | true
+assembler_pgmParms | Default Assembler parameters. | true
+assembler_linkEditParms | Default parameters for the link edit step. | true
+assembler_linkEdit | Flag indicating to execute the link edit step to produce a load module for the source file. If false then a object deck will be created instead for later linking. | true
+assembler_maxRC | Default Assembler maximum RC allowed. | true
+assembler_linkEditMaxRC | Default link edit maximum RC allowed. | true
+assembler_resolutionRules | Assembler dependency resolution rules used to create a Assmebler dependency resolver. Format is a JSON array of resolution rule property keys. Resolution rule properties are defined in `application-conf/application.properties`. | true
+cobol_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
+### BMS.properties
+Application properties used by zAppBuild/language/BMS.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+bms_fileBuildRank | Default BMS program build rank. Used to sort BMS build file sub-list. Leave empty. | true
+bms_maxRC | Default BMS maximum RC allowed. | true
+bms_copyGenParms | Default parameters for the copybook generation step. | true
+bms_compileParms | Default parameters for the compilation step. | true
+bms_linkEditParms | Default parameters for the link edit step. | true
+
+### Cobol.properties
+Application properties used by zAppBuild/language/Cobol.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+cobol_fileBuildRank | Default Cobol program build rank. Used to sort Cobol build file sub-list. Leave empty. | true
+cobol_resolutionRules | Cobol dependency resolution rules used to create a Cobol dependency resolver. Format is a JSON array of resolution rule property keys. Resolution rule properties are defined in `application-conf/application.properties`. | true
+cobol_compilerVersion | Default Cobol compiler version. | true
+cobol_compileMaxRC | Default compile maximum RC allowed. | true
+cobol_linkEditMaxRC | Default link edit maximum RC allowed. | true
+cobol_compileParms | Default base compile parameters. | true
+cobol_compileCICSParms | Default CICS compile parameters. Appended to base parameters if has value.| true
+cobol_compileSQLParms | Default SQL compile parameters. Appended to base parameters if has value. | true
+cobol_compileErrorPrefixParms | IDz user build parameters. Appended to base parameters if has value. | true
+cobol_linkEditParms | Default link edit parameters. | true
+cobol_linkEdit | Flag indicating to execute the link edit step to produce a load module for the source file. If false then a object deck will be created instead for later linking. | true
+cobol_isMQ | Flag indicating that the program contains MQ calls | true
+cobol_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
+### LinkEdit.properties
+Application properties used by zAppBuild/language/LinkEdit.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+linkedit_fileBuildRank | Default link card build rank. Used to sort link card build sub-list. Leave empty. | true
+linkedit_maxRC | Default link edit maximum RC allowed. | true
+linkedit_parms | Default link edit parameters. | true
+linkedit_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
+### PLI.properties
+Application properties used by zAppBuild/language/LinkEdit.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+pli_fileBuildRank | Default PLI program build rank. Used to sort PLI program sub-list. Leave empty. | true
+pli_resolutionRules | PLI dependency resolution rules used to create a PLI dependency resolver. Format is a JSON array of resolution rule property keys. Resolution rule properties are defined in `application-conf/application.properties`. | true
+pli_compilerVersion | Default PLI compiler version. | true
+pli_compileMaxRC | Default compile maximum RC allowed. | true
+pli_linkEditMaxRC | Default link edit maximum RC allowed. | true
+pli_compileParms | Default base compile parameters. | true
+pli_compileCICSParms | Default CICS compile parameters. Appended to base parameters if has value.| true
+pli_compileSQLParms | Default SQL compile parameters. Appended to base parameters if has value. | true
+pli_compileErrorPrefixParms | IDz user build parameters. Appended to base parameters if has value. | true
+pli_linkEditParms | Default link edit parameters. | true
+pli_linkEdit | Flag indicating to execute the link edit step to produce a load module for the source file. If false then a object deck will be created instead for later linking. | true
+plil_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/application.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/application.properties
new file mode 100644
index 00000000..5cd3fe51
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/application.properties
@@ -0,0 +1,57 @@
+# Build properties used by zAppBuild/build.groovy
+
+#
+# Comma separated list of additional application property files to load
+# Supports both relative path (to ${application}/application-conf/) and absolute path
+applicationPropFiles=file.properties,BMS.properties,Cobol.properties,LinkEdit.properties
+
+#
+# Comma separated list all source directories included in application build. Supports both absolute
+# and relative paths. Relative assumed to be relative to ${workspace}.
+# ex: applicationSrcDirs=${application},/u/build/common/copybooks
+applicationSrcDirs=${application}
+
+#
+# Comma separated list of the build script processing order
+buildOrder=BMS.groovy,Cobol.groovy,LinkEdit.groovy
+
+#
+# The main build branch. Used for cloning collections for topic branch builds instead
+# of rescanning the entire application.
+mainBuildBranch=master
+
+#
+# exclude list used when scanning or running full build
+excludeFileList=.*,**/*.properties,**/*.xml,**/*.groovy,**/*.md,**/application-conf/*.*
+
+#
+# Impact analysis resolution rules (JSON format)
+impactResolutionRules=[${copybookRule},${bmsRule},${linkRule}]
+
+# Rule to locate Cobol copy books
+copybookRule = {"library": "SYSLIB", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/copybook"} \
+ ] \
+ }
+
+# Rule to locate BMS maps
+bmsRule = {"library": "SYSLIB", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/bms"} \
+ ] \
+ }
+
+# Rule to locate COBOL programs and Link files for rebuilding statically linked load modules
+linkRule = {"category": "LINK", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/cobol"}, \
+ {"sourceDir": "${workspace}", "directory": "${application}/link"} \
+ ] \
+ }
+
+
+
+
+
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/application-conf/file.properties b/Build/MortgageApplicationV2/MortgageApplication/application-conf/file.properties
new file mode 100644
index 00000000..9b732995
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/application-conf/file.properties
@@ -0,0 +1,22 @@
+# Application script mappings and file property overrides
+
+#
+# Script mappings for all application programs
+dbb.scriptMapping = Assembler.groovy :: **/*.asm
+dbb.scriptMapping = BMS.groovy :: **/*.bms
+dbb.scriptMapping = Cobol.groovy :: **/*.cbl
+dbb.scriptMapping = LinkEdit.groovy :: **/*.lnk
+dbb.scriptMapping = PLI.groovy :: **/*.pli
+
+#
+# Need to build epsnbrvl.cbl first during cobol builds
+cobol_fileBuildRank = 1 :: **/cobol/epsnbrvl.cbl
+
+#
+# Skip creating a load module for these programs as they will be statically linked to other programs
+cobol_linkEdit = false :: **/cobol/epsnbrvl.cbl, **/cobol/epsmlist.cbl
+
+#
+# epsmlist needs to compile as CICS but does not have EXEC CICS statements
+# so is not automatically flagged as CICS by dependency scanner
+isCICS = true :: **/cobol/epsmlist.cbl
\ No newline at end of file
diff --git a/Build/MortgageApplicationV2/MortgageApplication/bms/epsmlis.bms b/Build/MortgageApplicationV2/MortgageApplication/bms/epsmlis.bms
new file mode 100644
index 00000000..12fa8832
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/bms/epsmlis.bms
@@ -0,0 +1,112 @@
+*********************************************************************** 00010000
+EPSMLIS DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL, X
+ STORAGE=AUTO,TIOAPFX=YES,DSATTS=(COLOR,HILIGHT), X 0009000
+ MAPATTS=(COLOR,HILIGHT) 0009100
+EPSMLIS DFHMDI SIZE=(24,80),CTRL=(PRINT,FREEKB) 0011000
+ DFHMDF POS=(1,24),LENGTH=26,INITIAL='Better Mortgage Rates', *
+ ATTRB=(ASKIP,BRT)
+ DFHMDF POS=(24,58),LENGTH=0, *
+ ATTRB=ASKIP
+* MENU MORTGAGE LIST.
+
+LITCOMP DFHMDF POS=(3,1),LENGTH=24,INITIAL='Company', *
+ ATTRB=(ASKIP,NORM)
+LITPHN DFHMDF POS=(3,26),LENGTH=13,INITIAL='Phone Number', *
+ ATTRB=(PROT,NORM)
+EPDIFF1 DFHMDF POS=(3,40),LENGTH=13,INITIAL='Interest Rate', *
+ ATTRB=(PROT,NORM)
+EPDIFF2 DFHMDF POS=(3,54),LENGTH=16,INITIAL='Monthly Payment', *
+ ATTRB=(PROT,NORM)
+LITPHN1 DFHMDF POS=(3,71),LENGTH=7,INITIAL='# Years', *
+ ATTRB=(PROT,NORM)
+EPCMP1 DFHMDF POS=(4,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN1 DFHMDF POS=(4,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE1 DFHMDF POS=(4,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN1 DFHMDF POS=(4,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS1 DFHMDF POS=(4,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP2 DFHMDF POS=(5,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN2 DFHMDF POS=(5,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE2 DFHMDF POS=(5,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN2 DFHMDF POS=(5,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS2 DFHMDF POS=(5,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP3 DFHMDF POS=(6,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN3 DFHMDF POS=(6,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE3 DFHMDF POS=(6,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN3 DFHMDF POS=(6,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS3 DFHMDF POS=(6,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP4 DFHMDF POS=(7,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN4 DFHMDF POS=(7,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE4 DFHMDF POS=(7,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN4 DFHMDF POS=(7,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS4 DFHMDF POS=(7,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP5 DFHMDF POS=(8,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN5 DFHMDF POS=(8,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE5 DFHMDF POS=(8,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN5 DFHMDF POS=(8,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS5 DFHMDF POS=(8,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP6 DFHMDF POS=(9,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN6 DFHMDF POS=(9,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE6 DFHMDF POS=(9,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN6 DFHMDF POS=(9,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS6 DFHMDF POS=(9,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP7 DFHMDF POS=(10,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN7 DFHMDF POS=(10,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE7 DFHMDF POS=(10,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN7 DFHMDF POS=(10,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+EPYEARS7 DFHMDF POS=(10,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPCMP8 DFHMDF POS=(11,1),LENGTH=24, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPPHN8 DFHMDF POS=(11,26),LENGTH=13, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=GREEN
+EPRATE8 DFHMDF POS=(11,45),LENGTH=5, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+EPLOAN8 DFHMDF POS=(11,56),LENGTH=12, *
+ ATTRB=(NUM,IC,NORM)
+ DFHMDF POS=(11,69), *
+ ATTRB=ASKIP
+EPYEARS8 DFHMDF POS=(11,74),LENGTH=2, *
+ ATTRB=(NUM,NORM),COLOR=GREEN
+ DFHMDF POS=(11,77),LENGTH=0, *
+ ATTRB=ASKIP
+ DFHMDF POS=(23,17),LENGTH=43, *
+ INITIAL='Press F3 to quit or Enter to calculate loan', *
+ ATTRB=(ASKIP,NORM),HILIGHT=OFF,COLOR=BLUE
+MSGERR DFHMDF POS=(24,17),LENGTH=40,INITIAL='INVALID KEY PRESSED', X
+ ATTRB=(PROT,DRK)
+EPSMLIS DFHMSD TYPE=FINAL
+ END
diff --git a/Build/MortgageApplicationV2/MortgageApplication/bms/epsmort.bms b/Build/MortgageApplicationV2/MortgageApplication/bms/epsmort.bms
new file mode 100644
index 00000000..61aa91e4
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/bms/epsmort.bms
@@ -0,0 +1,42 @@
+*********************************************************************** 00010000
+EPSMORT DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL, @P3CX0008000
+ STORAGE=AUTO,TIOAPFX=YES,DSATTS=(COLOR,HILIGHT), X00090000
+ MAPATTS=(COLOR,HILIGHT) 00091000
+* MENU MAP..
+EPMENU DFHMDI SIZE=(24,80),CTRL=(PRINT,FREEKB) 00110000
+LITLOAN DFHMDF POS=(8,15),LENGTH=23,INITIAL='Amount of Loan:', *
+ ATTRB=(ASKIP,NORM)
+EPLOAN DFHMDF POS=(8,42),LENGTH=12,INITIAL='999999999.99', *
+ ATTRB=(NUM,FSET,IC,NORM)
+ DFHMDF POS=(8,55), *
+ ATTRB=ASKIP
+LITYEARS DFHMDF POS=(9,15),LENGTH=24, *
+ INITIAL='Length of Loan in Years:', *
+ ATTRB=(PROT,NORM)
+EPYEARS DFHMDF POS=(9,42),LENGTH=2,INITIAL='99', *
+ ATTRB=(NUM,FSET,NORM),COLOR=GREEN
+ DFHMDF POS=(9,45),LENGTH=0, *
+ ATTRB=ASKIP
+EPDIFF1 DFHMDF POS=(10,15),LENGTH=22,INITIAL='Interest Rate: ', *
+ ATTRB=(PROT,NORM)
+EPRATE DFHMDF POS=(10,42),LENGTH=5,INITIAL='99.99', *
+ ATTRB=(NUM,FSET,NORM),COLOR=GREEN
+ DFHMDF POS=(15,7),LENGTH=60, *
+ INITIAL='Press PF9 to see companies that can match or be*
+ at this rate', *
+ ATTRB=(ASKIP,NORM),HILIGHT=OFF,COLOR=BLUE
+ DFHMDF POS=(14,15),LENGTH=43, *
+ INITIAL='Press F3 to quit or Enter to calculate loan', *
+ ATTRB=(ASKIP,NORM),HILIGHT=OFF,COLOR=BLUE
+EPDIFF2 DFHMDF POS=(17,15),LENGTH=22,INITIAL='Monthly Payment: ', *
+ ATTRB=(PROT,NORM)
+EPPAYMNT DFHMDF POS=(17,42),LENGTH=12, *
+ ATTRB=(PROT,NORM),HILIGHT=OFF,COLOR=YELLOW
+MSGERR DFHMDF POS=(24,15),ATTRB=(PROT,DRK),LENGTH=40, X00340000
+ INITIAL='INVALID KEY PRESSED' 00350000
+ DFHMDF POS=(2,48),LENGTH=0, *
+ ATTRB=ASKIP
+ DFHMDF POS=(5,25),LENGTH=26,INITIAL='EPS MORTGAGE CALCULATOR',*
+ ATTRB=(ASKIP,BRT)
+EPSMORT DFHMSD TYPE=FINAL 0036000
+ END 00370000
diff --git a/Build/MortgageApplicationV2/MortgageApplication/cobol/epscmort.cbl b/Build/MortgageApplicationV2/MortgageApplication/cobol/epscmort.cbl
new file mode 100644
index 00000000..ef0faba9
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/cobol/epscmort.cbl
@@ -0,0 +1,250 @@
+ ID DIVISION.
+ PROGRAM-ID. EPSCMORT.
+ * THIS DEMONSTRATES CICS/DEBUG - EPSDEMOS 2008
+ *
+ * THIS PROGRAM WILL RECEIVE A DATE AND COVERT THE DATE TO
+ * AN INTEGER IN A CALLED PROGRAM TO DETERMINE DAYS FROM
+ * CURRENT DATE.
+ *
+ * (C) 2017 IBM - JIM HILDNER RESERVED.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. IBM-FLEX-ES.
+ OBJECT-COMPUTER. IBM-FLEX-ES.
+ *
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 W-FLAGS.
+ 10 W-SEND-FLAG PIC X.
+ 88 SEND-ERASE VALUE '1'.
+ 88 SEND-DATAONLY VALUE '2'.
+ 88 SEND-MAPONLY VALUE '3'.
+ 88 SEND-DATAONLY-ALARM VALUE '4'.
+ 88 SEND-ALL VALUE '5'.
+
+ 01 W-CONVERSIONS.
+ 05 W-PMT-CNVRT PIC X(12).
+ 05 W-PMT-NUMBER
+ REDEFINES W-PMT-CNVRT
+ PIC 9(10)V99.
+ 05 WS-FORMAT-NUMBER PIC Z,ZZZ,ZZ9.99.
+ 05 W-PRINC-CNVRT PIC X(12).
+ 05 W-PRINC-NUMBER
+ REDEFINES W-PRINC-CNVRT
+ PIC 9(10)V99.
+
+ 01 W-CALL-PROGRAM PIC X(8).
+ *
+ 01 W-RETIREMENT-WA PIC 9(4).
+ 01 W-COMAREA-LENGTH PIC 9(4) COMP.
+
+ 01 SQL-ERROR-MSG.
+ 03 FILLER PIC X(11) VALUE 'SQL ERROR: '.
+ 03 SQL-ERROR-CODE PIC 9(5) DISPLAY.
+ *
+ EXEC SQL
+ INCLUDE SQLCA
+ END-EXEC.
+ *
+ EXEC SQL DECLARE SYSIBM.SYSDUMMY1 TABLE
+ ( IBMREQD CHAR(1) NOT NULL
+ ) END-EXEC.
+ *
+ 01 IBMREQD PIC X(1).
+ *
+ 01 END-OF-TRANS-MSG PIC X(30)
+ VALUE 'END OF TRANSACTION - THANK YOU'.
+ 01 BLANK-MSG PIC X(1) VALUE ' '.
+ COPY DFHAID.
+ * COPY DFHEIBLK.
+ COPY EPSMORT.
+
+ 01 W-COMMUNICATION-AREA.
+ COPY EPSMTCOM.
+
+ COPY EPSNBRPM.
+
+ LINKAGE SECTION.
+
+ 01 DFHCOMMAREA.
+ COPY EPSMTCOM.
+
+ PROCEDURE DIVISION USING DFHCOMMAREA.
+
+ EPSCMORT-MAINLINE.
+ * Call procedure to do SQL call
+ PERFORM A805-DUMMY-SQL-CALL
+ MOVE LENGTH OF DFHCOMMAREA to W-COMAREA-LENGTH.
+ MOVE DFHCOMMAREA to W-COMMUNICATION-AREA.
+ EVALUATE TRUE
+ WHEN EIBCALEN = ZERO
+ * First time in - Show Screen
+ MOVE LOW-VALUES TO EPMENUO
+ SET SEND-ERASE TO TRUE
+ PERFORM A300-SEND-MAP
+ MOVE '3' TO
+ PROCESS-INDICATOR OF W-COMMUNICATION-AREA
+ WHEN EIBAID = DFHCLEAR
+ * Process CLEAR key
+ MOVE LOW-VALUES TO EPMENUO
+ SET SEND-ERASE TO TRUE
+ PERFORM A300-SEND-MAP
+ WHEN EIBAID = DFHPF3 OR DFHPF12
+ * Process END/RETURN keys
+ IF PROCESS-INDICATOR OF W-COMMUNICATION-AREA = '3'
+ EXEC CICS
+ SEND TEXT FROM (END-OF-TRANS-MSG)
+ ERASE
+ FREEKB
+ END-EXEC
+ EXEC CICS
+ RETURN
+ END-EXEC
+ ELSE
+ SET SEND-ALL TO TRUE
+ EXEC CICS
+ SEND TEXT FROM (BLANK-MSG)
+ ERASE
+ FREEKB
+ END-EXEC
+ PERFORM A300-SEND-MAP
+ MOVE '3' TO
+ PROCESS-INDICATOR OF W-COMMUNICATION-AREA
+ END-IF
+ WHEN EIBAID = DFHPF9
+ MOVE '9' TO
+ PROCESS-INDICATOR OF W-COMMUNICATION-AREA
+ EXEC CICS LINK PROGRAM( 'EPSMLIST' )
+ COMMAREA( W-COMMUNICATION-AREA )
+ END-EXEC
+ WHEN EIBAID = DFHENTER
+ * Process ENTER Key
+ IF PROCESS-INDICATOR OF W-COMMUNICATION-AREA = '3'
+ PERFORM A100-PROCESS-MAP
+ ELSE
+ EXEC CICS LINK PROGRAM('EPSMLIST')
+ COMMAREA( W-COMMUNICATION-AREA )
+ END-EXEC
+ END-IF
+ WHEN OTHER
+ * Process Data
+ IF PROCESS-INDICATOR OF W-COMMUNICATION-AREA = '3'
+ PERFORM A600-CALCULATE-MORTGAGE
+ EXEC CICS RETURN END-EXEC
+ * ELSE
+ * MOVE X'E8' TO MSGERRA
+ * MOVE LOW-VALUES TO EPMENUO
+ * SET SEND-DATAONLY-ALARM TO TRUE
+ * PERFORM A300-SEND-MAP
+ END-IF
+ END-EVALUATE
+ EXEC CICS
+ RETURN TRANSID('EPSP')
+ COMMAREA(W-COMMUNICATION-AREA)
+ LENGTH(W-COMAREA-LENGTH)
+ END-EXEC.
+
+ A100-PROCESS-MAP.
+ PERFORM A400-RECEIVE-MAP.
+ PERFORM A600-CALCULATE-MORTGAGE
+ SET SEND-DATAONLY TO TRUE
+ PERFORM A300-SEND-MAP
+ .
+
+ A300-SEND-MAP.
+ EVALUATE TRUE
+ WHEN SEND-MAPONLY
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ MAPONLY
+ CURSOR
+ END-EXEC
+ WHEN SEND-ERASE
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ FROM(EPMENUO)
+ ERASE
+ CURSOR
+ END-EXEC
+ WHEN SEND-DATAONLY
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ FROM(EPMENUO)
+ DATAONLY
+ CURSOR
+ END-EXEC
+ WHEN SEND-ALL
+ EXEC CICS
+ SEND MAP ('EPMENU')
+ MAPSET('EPSMORT')
+ FROM(EPMENUO)
+ END-EXEC.
+
+ A400-RECEIVE-MAP.
+ EXEC CICS
+ RECEIVE MAP('EPMENU')
+ MAPSET('EPSMORT')
+ INTO (EPMENUI)
+ END-EXEC.
+
+ MOVE EPLOANI TO EPSPARM-VALIDATE-DATA.
+ MOVE LENGTH OF EPLOANI
+ TO EPSPARM-MAX-LENGTH.
+ CALL 'EPSNBRVL' USING EPS-NUMBER-VALIDATION.
+ COMPUTE EPSPCOM-PRINCIPLE-DATA
+ OF W-COMMUNICATION-AREA
+ = EPSPARM-NUMBER + EPSPARM-DECIMAL.
+
+ MOVE EPYEARSI TO EPSPARM-VALIDATE-DATA.
+ MOVE LENGTH OF EPYEARSI TO EPSPARM-MAX-LENGTH.
+ CALL 'EPSNBRVL' USING EPS-NUMBER-VALIDATION.
+ COMPUTE EPSPCOM-NUMBER-OF-YEARS
+ OF W-COMMUNICATION-AREA
+ = EPSPARM-NUMBER + EPSPARM-DECIMAL.
+
+ MOVE EPRATEI TO EPSPARM-VALIDATE-DATA.
+ MOVE LENGTH OF EPRATEI TO EPSPARM-MAX-LENGTH.
+ CALL 'EPSNBRVL' USING EPS-NUMBER-VALIDATION.
+ COMPUTE EPSPCOM-QUOTED-INTEREST-RATE
+ OF W-COMMUNICATION-AREA
+ = EPSPARM-NUMBER + EPSPARM-DECIMAL.
+
+
+ A600-CALCULATE-MORTGAGE.
+ MOVE 'Y' TO EPSPCOM-YEAR-MONTH-IND
+ OF W-COMMUNICATION-AREA.
+ MOVE 'EPSCSMRT' TO W-CALL-PROGRAM
+ EXEC CICS LINK PROGRAM( W-CALL-PROGRAM )
+ COMMAREA( W-COMMUNICATION-AREA )
+ END-EXEC
+ .
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT
+ OF W-COMMUNICATION-AREA
+ TO WS-FORMAT-NUMBER.
+
+ MOVE WS-FORMAT-NUMBER
+ TO EPPAYMNTO.
+ MOVE EPSPCOM-ERRMSG
+ OF W-COMMUNICATION-AREA
+ TO MSGERRO.
+
+ A805-DUMMY-SQL-CALL.
+ EXEC SQL
+ SELECT IBMREQD
+ INTO :IBMREQD
+ FROM SYSIBM.SYSDUMMY1
+ END-EXEC.
+ *
+ IF SQLCODE = 100
+ MOVE 'No rows found on SYSDUMM1.' TO MSGERRO
+ ELSE
+ IF SQLCODE NOT = 0
+ MOVE SQLCODE TO SQL-ERROR-CODE
+ MOVE SQL-ERROR-MSG TO MSGERRO
+ END-IF
+ END-IF.
+ *
diff --git a/Build/MortgageApplicationV2/MortgageApplication/cobol/epscsmrd.cbl b/Build/MortgageApplicationV2/MortgageApplication/cobol/epscsmrd.cbl
new file mode 100644
index 00000000..f8140ddd
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/cobol/epscsmrd.cbl
@@ -0,0 +1,4052 @@
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,CICS
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Web Services for CICS TS 3.x Converter Driver
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRD'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ * *************************************************************
+ * xx Coded Character Sets Configuration
+ * *************************************************************
+ *XML to Language Structure Input CCSID 1140
+ *XML to Language Structure Output CCSID 1140
+ *Language Structure to XML Output CCSID 1140
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-7.
+ 2 PIC X(40) USAGE DISPLAY
+ VALUE 'Language Environment Service Call Failed'.
+ 1 CONVERTER-ERROR-8.
+ 2 PIC X(35) USAGE DISPLAY
+ VALUE 'Language Environment Message Number'.
+ 1 CONVERTER-ERROR-9.
+ 2 PIC X(31) USAGE DISPLAY
+ VALUE 'XML Converter Is Terminating...'.
+ * *************************************************************
+ * Vendor Program Container Definitions
+ * *************************************************************
+ 1 DFH-BODY-CONTAINER PIC X(16) VALUE 'DFH-BODY'.
+ 1 DFH-DATA-CONTAINER PIC X(16) VALUE 'DFH-DATA'.
+ LOCAL-STORAGE SECTION.
+ * *************************************************************
+ * Storage Items For LE Error Handling
+ * *************************************************************
+ 1 CONVERTER-RETURN-CODE PIC S9(9) BINARY.
+ 1 ROUTINE PROCEDURE-POINTER.
+ 1 TOKEN POINTER.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 OPTIONAL-FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 ERROR-RESPONSE.
+ 2 ERROR-OCCURRED PIC X.
+ 2 ERROR-MESSAGE-NUMBER PIC 9(9).
+ 2 ERROR-REASON-LENGTH PIC 9(9) BINARY.
+ 2 ERROR-REASON PIC X(512).
+ * *************************************************************
+ * Converter Metadata Variables
+ * *************************************************************
+ 1 XML2LS-LANG-BUFFER-LENGTH PIC S9(9) COMP.
+ 1 LS2XML-LANG-BUFFER-LENGTH PIC S9(9) COMP.
+ 1 LS2XML-XML-BUFFER-LENGTH PIC S9(9) COMP.
+ 1 XML2LS-XML-CCSID PIC S9(9) COMP.
+ 1 HOST-LANG-CCSID PIC S9(9) COMP.
+ 1 LS2XML-XML-CCSID PIC S9(9) COMP.
+ * *************************************************************
+ * SOAP Pipeline Work Variables
+ * *************************************************************
+ 1 SOAP-PIPELINE-WORK-VARIABLES.
+ 2 NEXT-CONTAINER PIC X(16).
+ 2 COMMAND-RESP PIC 9(9) BINARY.
+ 2 COMMAND-RESP2 PIC 9(9) BINARY.
+ 2 CONTAINER-BROWSE-TOKEN POINTER.
+ 2 DFH-BODY-PTR POINTER.
+ 2 DFH-BODY-LEN PIC 9(9) BINARY.
+ 2 DFH-DATA-PTR POINTER.
+ 2 DFH-DATA-LEN PIC 9(9) BINARY.
+ 2 WORK-AREA-PTR POINTER.
+ 2 WORK-AREA-LEN PIC 9(9) BINARY.
+ LINKAGE SECTION.
+ 1 DFH-BODY PIC X.
+ 1 DFH-DATA PIC X.
+ * *************************************************************
+ * Business Program Binary Interfaces
+ * *************************************************************
+ 01 X00000175
+ .
+ 10 PROCESS-INDICATOR
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PRINCIPLE-DATA
+ PICTURE S9(9)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-YEARS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-MONTHS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PICTURE S9(2)V9(3)
+ USAGE COMP
+ .
+ 10 EPSPCOM-YEAR-MONTH-IND
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PICTURE S9(7)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-ERRMSG
+ PICTURE X(80)
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE
+ PICTURE 9(4)
+ USAGE DISPLAY
+ .
+ 88 EPS02-REQUEST-SUCCESS
+ VALUE
+ 0
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PICTURE X(4)
+ USAGE DISPLAY
+ .
+ PROCEDURE DIVISION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Initialize Storage and Browse Channel
+ * -------------------------------------------------------------
+ PERFORM REGISTER-EXCEPTION-HANDLER
+ INITIALIZE SOAP-PIPELINE-WORK-VARIABLES
+ PERFORM GET-CONVERTER-METADATA
+ PERFORM BROWSE-VENDOR-CHANNEL
+ * -------------------------------------------------------------
+ * Branch To Processing Logic For Container
+ * -------------------------------------------------------------
+ EVALUATE NEXT-CONTAINER
+ WHEN DFH-BODY-CONTAINER
+ PERFORM PROCESS-DFH-BODY
+ WHEN DFH-DATA-CONTAINER
+ PERFORM PROCESS-DFH-DATA
+ WHEN OTHER
+ EXEC CICS ABEND
+ END-EXEC
+ END-EVALUATE
+ * -------------------------------------------------------------
+ * Finished
+ * -------------------------------------------------------------
+ PERFORM FREE-WORK-AREA
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ EXEC CICS RETURN
+ END-EXEC
+ .
+ BROWSE-VENDOR-CHANNEL.
+ EXEC CICS STARTBROWSE CONTAINER
+ BROWSETOKEN (CONTAINER-BROWSE-TOKEN)
+ END-EXEC
+ PERFORM TEST AFTER UNTIL
+ NEXT-CONTAINER EQUAL DFH-BODY-CONTAINER OR
+ NEXT-CONTAINER EQUAL DFH-DATA-CONTAINER OR
+ COMMAND-RESP2 NOT EQUAL ZERO
+ EXEC CICS GETNEXT CONTAINER (NEXT-CONTAINER)
+ BROWSETOKEN (CONTAINER-BROWSE-TOKEN)
+ RESP(COMMAND-RESP)
+ RESP2(COMMAND-RESP2)
+ END-EXEC
+ END-PERFORM
+ .
+ PROCESS-DFH-BODY.
+ PERFORM RECEIVE-DFH-BODY
+ PERFORM ALLOCATE-DFH-DATA-WORK-AREA
+ MOVE 'N' TO ERROR-OCCURRED
+ PERFORM INBOUND-CONVERSION
+ IF ERROR-OCCURRED = 'Y'
+ PERFORM SEND-SOAP-FAULT
+ ELSE
+ PERFORM SEND-DFH-DATA
+ END-IF
+ .
+ PROCESS-DFH-DATA.
+ PERFORM RECEIVE-DFH-DATA
+ PERFORM ALLOCATE-DFH-BODY-WORK-AREA
+ MOVE 'N' TO ERROR-OCCURRED
+ PERFORM OUTBOUND-CONVERSION
+ IF ERROR-OCCURRED = 'Y'
+ PERFORM SEND-SOAP-FAULT
+ ELSE
+ PERFORM SEND-DFH-BODY
+ END-IF
+ .
+ RECEIVE-DFH-BODY.
+ MOVE 'DFHREQUEST' TO DFH-BODY-CONTAINER
+ EXEC CICS GET CONTAINER(DFH-BODY-CONTAINER)
+ SET(DFH-BODY-PTR)
+ FLENGTH(DFH-BODY-LEN)
+ INTOCCSID(1140)
+ END-EXEC
+ SET ADDRESS OF DFH-BODY
+ TO DFH-BODY-PTR
+ .
+ SEND-DFH-BODY.
+ EXEC CICS PUT CONTAINER(DFH-BODY-CONTAINER)
+ FROM(DFH-BODY)
+ FLENGTH(DFH-BODY-LEN)
+ FROMCCSID(1140)
+ END-EXEC
+ .
+ RECEIVE-DFH-DATA.
+ EXEC CICS GET CONTAINER(DFH-DATA-CONTAINER)
+ SET(DFH-DATA-PTR)
+ FLENGTH(DFH-DATA-LEN)
+ END-EXEC
+ SET ADDRESS OF X00000175
+ TO DFH-DATA-PTR
+ .
+ SEND-DFH-DATA.
+ COMPUTE DFH-DATA-LEN =
+ LENGTH OF X00000175
+ EXEC CICS PUT CONTAINER(DFH-DATA-CONTAINER)
+ FROM(X00000175)
+ FLENGTH(DFH-DATA-LEN)
+ END-EXEC
+ .
+ ALLOCATE-DFH-BODY-WORK-AREA.
+ MOVE LS2XML-XML-BUFFER-LENGTH
+ TO WORK-AREA-LEN
+ EXEC CICS GETMAIN
+ SET(WORK-AREA-PTR)
+ FLENGTH(WORK-AREA-LEN)
+ END-EXEC
+ SET ADDRESS OF DFH-BODY
+ TO WORK-AREA-PTR
+ .
+ ALLOCATE-DFH-DATA-WORK-AREA.
+ MOVE XML2LS-LANG-BUFFER-LENGTH
+ TO WORK-AREA-LEN
+ EXEC CICS GETMAIN
+ SET(WORK-AREA-PTR)
+ FLENGTH(WORK-AREA-LEN)
+ END-EXEC
+ SET ADDRESS OF X00000175
+ TO WORK-AREA-PTR
+ .
+ FREE-WORK-AREA.
+ IF WORK-AREA-PTR NOT EQUAL NULL
+ EXEC CICS FREEMAIN
+ DATAPOINTER(WORK-AREA-PTR)
+ END-EXEC
+ END-IF
+ .
+ GET-CONVERTER-METADATA.
+ CALL 'EPSCSMRX' USING
+ XML2LS-LANG-BUFFER-LENGTH LS2XML-LANG-BUFFER-LENGTH
+ LS2XML-XML-BUFFER-LENGTH XML2LS-XML-CCSID
+ HOST-LANG-CCSID LS2XML-XML-CCSID
+ OMITTED OMITTED
+ .
+ SEND-SOAP-FAULT.
+ EXEC CICS SOAPFAULT CREATE CLIENT
+ FAULTSTRING(ERROR-REASON)
+ FAULTSTRLEN(ERROR-REASON-LENGTH)
+ END-EXEC
+ .
+ INBOUND-CONVERSION.
+ CALL 'EPSCSMRI'
+ USING
+ X00000175
+ DFH-BODY-LEN
+ DFH-BODY
+ OMITTED
+ * OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE
+ .
+ OUTBOUND-CONVERSION.
+ CALL 'EPSCSMRO'
+ USING
+ X00000175
+ DFH-BODY-LEN
+ DFH-BODY
+ OMITTED
+ * OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE
+ .
+ REGISTER-EXCEPTION-HANDLER.
+ SET ROUTINE TO ENTRY 'EPSCSMRF'
+ SET TOKEN TO ADDRESS OF ERROR-RESPONSE
+ CALL 'CEEHDLR' USING ROUTINE TOKEN FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ UNREGISTER-EXCEPTION-HANDLER.
+ CALL 'CEEHDLU' USING ROUTINE FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ CHECK-LE-SERVICE-FC.
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-7
+ DISPLAY CONVERTER-ERROR-8 ' '
+ FACILITY OF FEEDBACK-CODE
+ MSG-NO OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-9
+ STOP RUN
+ END-IF
+ .
+ END PROGRAM 'EPSCSMRD'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Exception Handler
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,NOCICS
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRF'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-5.
+ 2 PIC X(31) USAGE DISPLAY
+ VALUE 'Failed To Get Exception Message'.
+ LOCAL-STORAGE SECTION.
+ 1 MSG-PTR PIC S9(9) COMP.
+ 1 MSG-PART PIC X(80).
+ 1 MSG-OFFSET PIC 9(9) COMP.
+ 1 MSG-PART-LENGTH PIC 9(9) COMP.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ LINKAGE SECTION.
+ 1 TOKEN POINTER.
+ 1 RESULT PIC S9(9) BINARY.
+ 88 RESUME VALUE 10.
+ 1 CURRENT-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION PIC X(12).
+ 1 ERROR-CDATA-PTR PIC X(512).
+ 1 ERROR-RESPONSE.
+ 2 ERROR-OCCURRED PIC X.
+ 2 ERROR-MESSAGE-NUMBER PIC 9(9).
+ 2 ERROR-REASON-LENGTH PIC 9(9) BINARY.
+ 2 ERROR-REASON PIC X(512).
+ PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
+ RESULT NEW-CONDITION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Storage For Saving Exception Details
+ * -------------------------------------------------------------
+ SET ADDRESS OF ERROR-RESPONSE TO TOKEN
+ * -------------------------------------------------------------
+ * Get Exception Message
+ * -------------------------------------------------------------
+ PERFORM FILL-DESCRIPTION-BUFFER
+ * -------------------------------------------------------------
+ * Display Exception Message
+ * -------------------------------------------------------------
+ PERFORM DISPLAY-MESSAGE-TEXT
+ * -------------------------------------------------------------
+ * Recover From Exception To Produce XML Response
+ * -------------------------------------------------------------
+ MOVE 'Y' TO ERROR-OCCURRED
+ SET RESUME TO TRUE
+ * -------------------------------------------------------------
+ * Finished
+ * -------------------------------------------------------------
+ GOBACK
+ .
+ FILL-DESCRIPTION-BUFFER.
+ MOVE 0 TO MSG-PTR
+ MOVE 512 TO ERROR-REASON-LENGTH
+ MOVE SPACES TO MSG-PART ERROR-REASON
+ CALL 'CEEMGET' USING
+ CURRENT-CONDITION MSG-PART
+ MSG-PTR FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE AND
+ NOT CEE0E7 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-5
+ END-IF
+ IF NOT CEE0E7 OF FEEDBACK-CODE
+ PERFORM COMPUTE-PART-LENGTH
+ MOVE MSG-PART-LENGTH TO ERROR-REASON-LENGTH
+ MOVE MSG-PART TO ERROR-REASON
+ ELSE
+ MOVE MSG-PART TO ERROR-REASON
+ MOVE MSG-PTR TO MSG-OFFSET
+ PERFORM UNTIL MSG-PTR = 0
+ MOVE SPACES TO MSG-PART
+ CALL 'CEEMGET' USING
+ CURRENT-CONDITION MSG-PART
+ MSG-PTR FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE AND
+ NOT CEE0E7 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-5
+ END-IF
+ IF MSG-PTR NOT = 0
+ MOVE MSG-PART TO
+ ERROR-REASON(MSG-OFFSET + 1:MSG-PTR)
+ ADD MSG-PTR TO MSG-OFFSET
+ ELSE
+ PERFORM COMPUTE-PART-LENGTH
+ MOVE MSG-PART TO
+ ERROR-REASON(MSG-OFFSET + 1:MSG-PART-LENGTH)
+ ADD MSG-PART-LENGTH TO MSG-OFFSET
+ END-IF
+ END-PERFORM
+ END-IF
+ MOVE MSG-NO OF CURRENT-CONDITION TO
+ ERROR-MESSAGE-NUMBER
+ MOVE MSG-OFFSET TO ERROR-REASON-LENGTH
+ .
+ COMPUTE-PART-LENGTH.
+ PERFORM VARYING MSG-PART-LENGTH FROM 80 BY -1
+ UNTIL MSG-PART(MSG-PART-LENGTH:1) NOT = SPACE
+ OR MSG-PART-LENGTH < 1
+ END-PERFORM
+ .
+ DISPLAY-MESSAGE-TEXT.
+ DISPLAY ERROR-REASON(1:ERROR-REASON-LENGTH)
+ .
+ END PROGRAM 'EPSCSMRF'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Compiled XML Conversion Properties API
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRX'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 XML2LS-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 XML2LS-XML-CCSID PIC 9(9) COMP.
+ 1 HOST-LANG-CCSID PIC 9(9) COMP.
+ 1 LS2XML-XML-CCSID PIC 9(9) COMP.
+ 1 XML2LS-PROPERTIES PIC X.
+ 1 LS2XML-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ XML2LS-LANG-BUFFER-LENGTH
+ LS2XML-LANG-BUFFER-LENGTH
+ LS2XML-XML-BUFFER-LENGTH
+ XML2LS-XML-CCSID
+ HOST-LANG-CCSID
+ LS2XML-XML-CCSID
+ XML2LS-PROPERTIES
+ LS2XML-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF XML2LS-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO XML2LS-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO LS2XML-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-XML-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 758
+ TO LS2XML-XML-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF XML2LS-XML-CCSID
+ NOT EQUAL NULL
+ MOVE 1140
+ TO XML2LS-XML-CCSID
+ END-IF
+ IF ADDRESS OF HOST-LANG-CCSID
+ NOT EQUAL NULL
+ MOVE 1140
+ TO HOST-LANG-CCSID
+ END-IF
+ IF ADDRESS OF LS2XML-XML-CCSID
+ NOT EQUAL NULL
+ MOVE 1140
+ TO LS2XML-XML-CCSID
+ END-IF
+ IF ADDRESS OF XML2LS-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO XML2LS-PROPERTIES
+ END-IF
+ IF ADDRESS OF LS2XML-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO LS2XML-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRX'.
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,NOCICS,XMLPARSE(COMPAT)
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * XML to Language Structure Converter
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRI'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 XML-ROOT-ELEMENT.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA'.
+ 1 ELEMENT-HASH-ENTRIES.
+ 2 X00000064.
+ 3 PIC X(35) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_number_of_years'.
+ 3 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 3.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X00000065.
+ 3 PIC X(36) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_number_of_months'.
+ 3 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 4.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 3.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X00000066.
+ 3 PIC X(40) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_quoted_interest_rate'.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 5.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 3.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 4.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X00000067.
+ 3 PIC X(34) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_year_month_ind'.
+ 3 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 6.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'X'.
+ 2 X00000068.
+ 3 PIC X(11) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA'.
+ 3 PIC X(29) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC X VALUE 'T'.
+ 2 X00000069.
+ 3 PIC X(34) USAGE DISPLAY
+ VALUE 'DFHCOMMAREA/epspcom_principle_data'.
+ 3 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 2.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC 9(4) USAGE COMP-5 VALUE 1.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE 'N'.
+ 2 X0000006A.
+ 3 PIC X(40) VALUE SPACES.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC 9(4) USAGE COMP-5.
+ 3 PIC X VALUE '-'.
+ 1 ELEMENT-HASH-TABLE REDEFINES ELEMENT-HASH-ENTRIES.
+ 2 EHT-ENTRIES OCCURS 7 TIMES.
+ 3 ELEMENT-NAME PIC X(40).
+ 3 ROUTING-CODE PIC 9(4) USAGE COMP-5.
+ 3 NUMERIC-TARGET-CODE PIC 9(4) USAGE COMP-5.
+ 3 NUMERIC-RESCUE-CODE PIC 9(4) USAGE COMP-5.
+ 3 LANG-STRUCT-ID PIC 9(4) USAGE COMP-5.
+ 3 CONTENT-TYPE PIC X.
+ 1 NUMERIC-SOURCES.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE '.9'.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '.99'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '.999'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '-.9'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '-.99'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-.999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE '-9'.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '-9.9'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-9.99'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-9.999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '-99'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-99.9'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-99.99'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-99.999'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '-999'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-999.9'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-999.99'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '-9999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-9999.9'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '-9999.99'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '-99999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '-99999.9'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '-99999.99'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '-999999'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '-999999.9'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '-999999.99'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '-9999999'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '-9999999.9'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '-9999999.99'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '-99999999'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '-99999999.9'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE '-99999999.99'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '-999999999'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE '-999999999.9'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(13) USAGE DISPLAY
+ VALUE '-999999999.99'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE '9'.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '9.9'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '9.99'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '9.999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE '99'.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '99.9'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '99.99'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '99.999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE '999'.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '999.9'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '999.99'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE '9999'.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '9999.9'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '9999.99'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE '99999'.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '99999.9'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '99999.99'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE '999999'.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '999999.9'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '999999.99'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(7) USAGE DISPLAY
+ VALUE '9999999'.
+ 2 PIC X(6) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '9999999.9'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '9999999.99'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(8) USAGE DISPLAY
+ VALUE '99999999'.
+ 2 PIC X(5) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(10) USAGE DISPLAY
+ VALUE '99999999.9'.
+ 2 PIC X(3) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '99999999.99'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(9) USAGE DISPLAY
+ VALUE '999999999'.
+ 2 PIC X(4) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(11) USAGE DISPLAY
+ VALUE '999999999.9'.
+ 2 PIC X(2) USAGE DISPLAY
+ VALUE SPACES.
+ 2 PIC X(12) USAGE DISPLAY
+ VALUE '999999999.99'.
+ 2 PIC X(1) USAGE DISPLAY
+ VALUE SPACES.
+ 1 NUMERIC-SOURCES-ARRAY REDEFINES NUMERIC-SOURCES.
+ 2 NPSA PIC X(13)
+ OCCURS 64 TIMES
+ ASCENDING NPSA INDEXED BY NPSA-NDX.
+ 1 NUMERIC-MOVE-RULES.
+ 2 X0000006B.
+ 3 PIC S9(4) COMP VALUE 1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 2.
+ 2 X0000006C.
+ 3 PIC S9(4) COMP VALUE 3.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 4.
+ 2 X0000006D.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 5.
+ 2 X0000006E.
+ 3 PIC S9(4) COMP VALUE 6.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 7.
+ 2 X0000006F.
+ 3 PIC S9(4) COMP VALUE 8.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 9.
+ 2 X00000070.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 10.
+ 2 X00000071.
+ 3 PIC S9(4) COMP VALUE 11.
+ 3 PIC S9(4) COMP VALUE 12.
+ 3 PIC S9(4) COMP VALUE 13.
+ 2 X00000072.
+ 3 PIC S9(4) COMP VALUE 14.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 15.
+ 2 X00000073.
+ 3 PIC S9(4) COMP VALUE 16.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 17.
+ 2 X00000074.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 18.
+ 2 X00000075.
+ 3 PIC S9(4) COMP VALUE 19.
+ 3 PIC S9(4) COMP VALUE 20.
+ 3 PIC S9(4) COMP VALUE 21.
+ 2 X00000076.
+ 3 PIC S9(4) COMP VALUE 22.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 23.
+ 2 X00000077.
+ 3 PIC S9(4) COMP VALUE 24.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 25.
+ 2 X00000078.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 26.
+ 2 X00000079.
+ 3 PIC S9(4) COMP VALUE 27.
+ 3 PIC S9(4) COMP VALUE 28.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007A.
+ 3 PIC S9(4) COMP VALUE 29.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007B.
+ 3 PIC S9(4) COMP VALUE 30.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007C.
+ 3 PIC S9(4) COMP VALUE 31.
+ 3 PIC S9(4) COMP VALUE 32.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007D.
+ 3 PIC S9(4) COMP VALUE 33.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007E.
+ 3 PIC S9(4) COMP VALUE 34.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000007F.
+ 3 PIC S9(4) COMP VALUE 35.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000080.
+ 3 PIC S9(4) COMP VALUE 36.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000081.
+ 3 PIC S9(4) COMP VALUE 37.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000082.
+ 3 PIC S9(4) COMP VALUE 38.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000083.
+ 3 PIC S9(4) COMP VALUE 39.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000084.
+ 3 PIC S9(4) COMP VALUE 40.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000085.
+ 3 PIC S9(4) COMP VALUE 41.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000086.
+ 3 PIC S9(4) COMP VALUE 42.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000087.
+ 3 PIC S9(4) COMP VALUE 43.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000088.
+ 3 PIC S9(4) COMP VALUE 44.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000089.
+ 3 PIC S9(4) COMP VALUE 45.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008A.
+ 3 PIC S9(4) COMP VALUE 46.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008B.
+ 3 PIC S9(4) COMP VALUE 47.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008C.
+ 3 PIC S9(4) COMP VALUE 48.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008D.
+ 3 PIC S9(4) COMP VALUE 49.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000008E.
+ 3 PIC S9(4) COMP VALUE 50.
+ 3 PIC S9(4) COMP VALUE 51.
+ 3 PIC S9(4) COMP VALUE 52.
+ 2 X0000008F.
+ 3 PIC S9(4) COMP VALUE 53.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 54.
+ 2 X00000090.
+ 3 PIC S9(4) COMP VALUE 55.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 56.
+ 2 X00000091.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 57.
+ 2 X00000092.
+ 3 PIC S9(4) COMP VALUE 58.
+ 3 PIC S9(4) COMP VALUE 59.
+ 3 PIC S9(4) COMP VALUE 60.
+ 2 X00000093.
+ 3 PIC S9(4) COMP VALUE 61.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 62.
+ 2 X00000094.
+ 3 PIC S9(4) COMP VALUE 63.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 64.
+ 2 X00000095.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE 65.
+ 2 X00000096.
+ 3 PIC S9(4) COMP VALUE 66.
+ 3 PIC S9(4) COMP VALUE 67.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000097.
+ 3 PIC S9(4) COMP VALUE 68.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000098.
+ 3 PIC S9(4) COMP VALUE 69.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X00000099.
+ 3 PIC S9(4) COMP VALUE 70.
+ 3 PIC S9(4) COMP VALUE 71.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009A.
+ 3 PIC S9(4) COMP VALUE 72.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009B.
+ 3 PIC S9(4) COMP VALUE 73.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009C.
+ 3 PIC S9(4) COMP VALUE 74.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009D.
+ 3 PIC S9(4) COMP VALUE 75.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009E.
+ 3 PIC S9(4) COMP VALUE 76.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X0000009F.
+ 3 PIC S9(4) COMP VALUE 77.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A0.
+ 3 PIC S9(4) COMP VALUE 78.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A1.
+ 3 PIC S9(4) COMP VALUE 79.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A2.
+ 3 PIC S9(4) COMP VALUE 80.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A3.
+ 3 PIC S9(4) COMP VALUE 81.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A4.
+ 3 PIC S9(4) COMP VALUE 82.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A5.
+ 3 PIC S9(4) COMP VALUE 83.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A6.
+ 3 PIC S9(4) COMP VALUE 84.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A7.
+ 3 PIC S9(4) COMP VALUE 85.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A8.
+ 3 PIC S9(4) COMP VALUE 86.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000A9.
+ 3 PIC S9(4) COMP VALUE 87.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 2 X000000AA.
+ 3 PIC S9(4) COMP VALUE 88.
+ 3 PIC S9(4) COMP VALUE -1.
+ 3 PIC S9(4) COMP VALUE -1.
+ 1 NMAR-TABLE REDEFINES NUMERIC-MOVE-RULES.
+ 2 OCCURS 64 TIMES.
+ 3 NMAR-ENTRY PIC S9(4) COMP OCCURS 3 TIMES.
+ 1 ERROR-MESSAGES.
+ 2 CONVERTER-ERROR-3.
+ 3 PIC X(36) USAGE DISPLAY
+ VALUE 'Failed To Register Exception Handler'.
+ 2 CONVERTER-ERROR-4.
+ 3 PIC X(38) USAGE DISPLAY
+ VALUE 'Failed To Unregister Exception Handler'.
+ 2 CONVERTER-ERROR-7.
+ 3 PIC X(40) USAGE DISPLAY
+ VALUE 'Language Environment Service Call Failed'.
+ 2 CONVERTER-ERROR-8.
+ 3 PIC X(35) USAGE DISPLAY
+ VALUE 'Language Environment Message Number'.
+ 2 CONVERTER-ERROR-9.
+ 3 PIC X(31) USAGE DISPLAY
+ VALUE 'XML Converter Is Terminating...'.
+ 1 XPATH-DELIM PIC X VALUE '/'.
+ 1 QNAME-DELIM PIC X VALUE ':'.
+ LOCAL-STORAGE SECTION.
+ 1 NUMERIC-PICTURE-STORAGE.
+ 2 X000000AB PIC X(13).
+ 2 X000000AC PIC X(1).
+ 2 X000000AD PIC X(2).
+ 2 X000000AE PIC X(3).
+ 2 X000000AF PIC X(4).
+ 2 X000000B0 PIC X(5).
+ 2 X000000B1 PIC X(6).
+ 2 X000000B2 PIC X(7).
+ 2 X000000B3 PIC X(8).
+ 2 X000000B4 PIC X(9).
+ 2 X000000B5 PIC X(10).
+ 2 X000000B6 PIC X(11).
+ 2 X000000B7 PIC X(12).
+ 2 X000000B8 PIC X(13).
+ 1 NUMERIC-CHARACTER-STORAGE.
+ 2 X000000B9 PIC X(1).
+ 2 X000000BA PIC X(2).
+ 2 X000000BB PIC X(3).
+ 2 X000000BC PIC X(4).
+ 2 X000000BD PIC X(5).
+ 2 X000000BE PIC X(6).
+ 2 X000000BF PIC X(7).
+ 2 X000000C0 PIC X(8).
+ 2 X000000C1 PIC X(9).
+ 2 X000000C2 PIC X(10).
+ 2 X000000C3 PIC X(11).
+ 2 X000000C4 PIC X(12).
+ 2 X000000C5 PIC X(13).
+ 1 VSTRING.
+ 2 VSTRING-LENGTH PIC S9(4) COMP.
+ 2 VSTRING-DATA PIC X(80).
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 ARRAY-SUBSCRIPTS.
+ 2 X00000012 PIC 9(9) COMP VALUE 0.
+ 1 HASH-TOKEN PIC X(40).
+ 1 REDEFINES HASH-TOKEN.
+ 2 OCCURS 10 TIMES INDEXED BY HASH-DIGIT-NDX.
+ 3 HASH-DIGIT PIC S9(9) COMP.
+ 1 HASH-VALUE PIC S9(9) COMP-5.
+ 1 LANG-STRUCT-HASH-VALUE PIC S9(9) COMP-5 VALUE 0.
+ 1 HASH-DISCARD PIC S9(9) COMP-5.
+ 1 INTEGER-PART PIC S9(20) COMP-3.
+ 1 FRACTION-PART PIC SV9(20) COMP-3.
+ 1 SKIP-ELEMENT PIC X DISPLAY VALUE 'Y'.
+ 1 ELE-NAME-LEN PIC 9(9) COMP VALUE 0.
+ 1 ELE-NAME PIC X(800).
+ 1 ELE-CON-LEN PIC 9(9) COMP VALUE 0.
+ 1 ELE-CON PIC X(128).
+ 1 ELE-CON-NDX PIC 9(9) COMP.
+ 1 ELE-CHAR-LIMIT PIC 9(9) COMP.
+ 1 CON-TXED PIC X DISPLAY.
+ 1 CMP-TMPA PIC S9(9) COMP.
+ 1 CMP-TMPB PIC S9(9) COMP.
+ 1 STOP-SEARCH PIC X DISPLAY.
+ 1 NPSAN PIC 9(9) COMP.
+ 1 ERROR-CODE PIC S9(9) COMP.
+ 1 ELEMENT-HITS PIC 9(9) COMP VALUE 0.
+ 1 SEV PIC S9(4) COMP.
+ 1 MSGNO PIC S9(4) COMP.
+ 1 CASE PIC S9(4) COMP.
+ 1 SEV2 PIC S9(4) COMP.
+ 1 CNTRL PIC S9(4) COMP.
+ 1 FACID PIC X(3) DISPLAY.
+ 1 ISINFO PIC S9(9) COMP.
+ 1 QDATA PIC S9(9) COMP.
+ 1 INSERTNO PIC S9(9) COMP.
+ 1 EEC PIC 9(9) DISPLAY.
+ 1 ROUTINE PROCEDURE-POINTER.
+ 1 TOKEN POINTER.
+ 1 XML2LS-LANG-BUFFER-POINTER POINTER.
+ 1 XML2LS-LANG-BUFFER-ADDRESS
+ REDEFINES XML2LS-LANG-BUFFER-POINTER PIC 9(9) COMP.
+ 1 XML2LS-CONVERTED-LENGTH PIC 9(9) COMP VALUE 0.
+ 1 XPATH PIC X(400).
+ 1 XPOS PIC 9(9) COMP VALUE 1.
+ 1 XSTACK-DEPTH PIC 9(9) COMP VALUE 0.
+ 1 XML-ROOT-FOUND PIC X VALUE 'N'.
+ 1 LANG-STRUCT-NAME PIC X(30).
+ 1 LANG-STRUCT-NAME-LENGTH PIC 9(4) COMP.
+ 1 XML-NAT-CHAR PIC N USAGE NATIONAL.
+ LINKAGE SECTION.
+ 1 X0000005E PIC .9.
+ 1 X00000060 PIC .9(2).
+ 1 X00000062 PIC .9(3).
+ 1 X0000005F PIC -.9.
+ 1 X00000061 PIC -.9(2).
+ 1 X00000063 PIC -.9(3).
+ 1 X00000017 PIC -9.
+ 1 X00000029 PIC -9.9.
+ 1 X0000002B PIC -9.9(2).
+ 1 X0000002D PIC -9.9(3).
+ 1 X00000019 PIC -9(2).
+ 1 X0000002F PIC -9(2).9.
+ 1 X00000031 PIC -9(2).9(2).
+ 1 X00000033 PIC -9(2).9(3).
+ 1 X0000001B PIC -9(3).
+ 1 X00000035 PIC -9(3).9.
+ 1 X00000037 PIC -9(3).9(2).
+ 1 X0000001D PIC -9(4).
+ 1 X0000003B PIC -9(4).9.
+ 1 X0000003D PIC -9(4).9(2).
+ 1 X0000001F PIC -9(5).
+ 1 X00000041 PIC -9(5).9.
+ 1 X00000043 PIC -9(5).9(2).
+ 1 X00000021 PIC -9(6).
+ 1 X00000047 PIC -9(6).9.
+ 1 X00000049 PIC -9(6).9(2).
+ 1 X00000023 PIC -9(7).
+ 1 X0000004D PIC -9(7).9.
+ 1 X0000004F PIC -9(7).9(2).
+ 1 X00000025 PIC -9(8).
+ 1 X00000053 PIC -9(8).9.
+ 1 X00000055 PIC -9(8).9(2).
+ 1 X00000027 PIC -9(9).
+ 1 X00000059 PIC -9(9).9.
+ 1 X0000005B PIC -9(9).9(2).
+ 1 X00000016 PIC 9.
+ 1 X00000028 PIC 9.9.
+ 1 X0000002A PIC 9.9(2).
+ 1 X0000002C PIC 9.9(3).
+ 1 X00000018 PIC 9(2).
+ 1 X0000002E PIC 9(2).9.
+ 1 X00000030 PIC 9(2).9(2).
+ 1 X00000032 PIC 9(2).9(3).
+ 1 X0000001A PIC 9(3).
+ 1 X00000034 PIC 9(3).9.
+ 1 X00000036 PIC 9(3).9(2).
+ 1 X0000001C PIC 9(4).
+ 1 X0000003A PIC 9(4).9.
+ 1 X0000003C PIC 9(4).9(2).
+ 1 X0000001E PIC 9(5).
+ 1 X00000040 PIC 9(5).9.
+ 1 X00000042 PIC 9(5).9(2).
+ 1 X00000020 PIC 9(6).
+ 1 X00000046 PIC 9(6).9.
+ 1 X00000048 PIC 9(6).9(2).
+ 1 X00000022 PIC 9(7).
+ 1 X0000004C PIC 9(7).9.
+ 1 X0000004E PIC 9(7).9(2).
+ 1 X00000024 PIC 9(8).
+ 1 X00000052 PIC 9(8).9.
+ 1 X00000054 PIC 9(8).9(2).
+ 1 X00000026 PIC 9(9).
+ 1 X00000058 PIC 9(9).9.
+ 1 X0000005A PIC 9(9).9(2).
+ 1 X00000013 COMP PIC S9(9)V9(2).
+ 1 X00000014 COMP PIC S9(4).
+ 1 X00000015 COMP PIC S9(2)V9(3).
+ 01 DFHCOMMAREA
+ .
+ 10 PROCESS-INDICATOR
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PRINCIPLE-DATA
+ PICTURE S9(9)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-YEARS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-MONTHS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PICTURE S9(2)V9(3)
+ USAGE COMP
+ .
+ 10 EPSPCOM-YEAR-MONTH-IND
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PICTURE S9(7)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-ERRMSG
+ PICTURE X(80)
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE
+ PICTURE 9(4)
+ USAGE DISPLAY
+ .
+ 88 EPS02-REQUEST-SUCCESS
+ VALUE
+ 0
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PICTURE X(4)
+ USAGE DISPLAY
+ .
+ 1 XML2LS-LANG-BUFFER PIC X(106).
+ 1 XML2LS-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 XML2LS-XML-BUFFER PIC X(33554436).
+ 1 OPTIONAL-FEEDBACK-CODE PIC X(12).
+ 1 CONVERTER-RETURN-CODE PIC 9(9) COMP.
+ PROCEDURE DIVISION USING
+ XML2LS-LANG-BUFFER
+ XML2LS-XML-BUFFER-LENGTH
+ XML2LS-XML-BUFFER
+ OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ MAINLINE SECTION.
+ MOVE 'N'
+ TO NUMVAL-ERROR UNICODE-ERROR OTHER-ERROR
+ PERFORM CHECK-PARAMETERS
+ PERFORM REGISTER-EXCEPTION-HANDLER
+ PERFORM CHECK-INPUT-MESSAGE-LENGTH
+ SET XML2LS-LANG-BUFFER-POINTER
+ TO ADDRESS OF XML2LS-LANG-BUFFER
+ XML PARSE XML2LS-XML-BUFFER (1:XML2LS-XML-BUFFER-LENGTH)
+ PROCESSING PROCEDURE XML-HANDLER
+ THRU GENERAL-LOGIC-EXIT
+ ON EXCEPTION
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ NOT ON EXCEPTION
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ MOVE ZERO TO CONVERTER-RETURN-CODE
+ END-XML
+ GOBACK
+ .
+ CHECK-PARAMETERS.
+ IF ADDRESS OF XML2LS-LANG-BUFFER EQUAL NULL AND
+ ADDRESS OF XML2LS-XML-BUFFER-LENGTH NOT EQUAL NULL
+ CALL 'EPSCSMRJ' USING XML2LS-XML-BUFFER-LENGTH
+ GOBACK
+ END-IF
+ IF ADDRESS OF XML2LS-LANG-BUFFER EQUAL NULL OR
+ ADDRESS OF XML2LS-XML-BUFFER-LENGTH EQUAL NULL OR
+ ADDRESS OF XML2LS-XML-BUFFER EQUAL NULL
+ MOVE 294 TO MSGNO
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ .
+ CHECK-INPUT-MESSAGE-LENGTH.
+ IF XML2LS-XML-BUFFER-LENGTH > 33554436
+ MOVE 285 TO MSGNO
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ .
+ XML-HANDLER.
+ EVALUATE XML-EVENT
+ WHEN 'CONTENT-CHARACTERS'
+ IF SKIP-ELEMENT = 'N'
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (XML-TEXT)
+ COMPUTE CMP-TMPA = ELE-CON-LEN + CMP-TMPB
+ IF CMP-TMPA <= 128
+ MOVE XML-TEXT
+ TO ELE-CON (ELE-CON-NDX:CMP-TMPB)
+ ADD CMP-TMPB TO ELE-CON-LEN ELE-CON-NDX
+ ELSE
+ MOVE CMP-TMPA TO ELE-CON-LEN
+ GO TO CHARACTER-BUFFER-OVERFLOW
+ END-IF
+ END-IF
+ WHEN 'START-OF-ELEMENT'
+ PERFORM PUSH-ELEMENT
+ IF XSTACK-DEPTH > 0 AND
+ (XPOS - 2) <= 40
+ MOVE ALL X'00' TO HASH-TOKEN
+ MOVE XPATH(2:XPOS - 2) TO HASH-TOKEN
+ (40 - (XPOS - 3):XPOS - 2)
+ MOVE 0 TO HASH-VALUE
+ SET HASH-DIGIT-NDX TO 1
+ PERFORM 10 TIMES
+ ADD HASH-DIGIT (HASH-DIGIT-NDX) TO
+ HASH-VALUE
+ SET HASH-DIGIT-NDX UP BY 1
+ END-PERFORM
+ DIVIDE HASH-VALUE BY 7 GIVING HASH-DISCARD
+ REMAINDER HASH-VALUE
+ END-DIVIDE
+ IF HASH-VALUE LESS THAN ZERO
+ ADD 7 TO HASH-VALUE
+ ELSE
+ ADD 1 TO HASH-VALUE
+ END-IF
+ IF ELEMENT-NAME (HASH-VALUE)
+ = XPATH(2:XPOS - 2)
+ MOVE 'N' TO SKIP-ELEMENT
+ ADD 1 TO ELEMENT-HITS
+ MOVE 'N' TO CON-TXED
+ MOVE ZERO TO ELE-CON-LEN
+ MOVE 1 TO ELE-CON-NDX
+ IF CONTENT-TYPE (HASH-VALUE) = 'R'
+ OR CONTENT-TYPE (HASH-VALUE) = 'T'
+ GO TO ROUTE-ELEMENT
+ END-IF
+ ELSE
+ MOVE 'Y' TO SKIP-ELEMENT
+ END-IF
+ ELSE
+ MOVE 'Y' TO SKIP-ELEMENT
+ END-IF
+ WHEN 'END-OF-ELEMENT'
+ IF XSTACK-DEPTH > 0
+ IF LANG-STRUCT-HASH-VALUE > 0 AND
+ ELEMENT-NAME(LANG-STRUCT-HASH-VALUE)
+ = XPATH(2:XPOS - 2)
+ EVALUATE LANG-STRUCT-ID(LANG-STRUCT-HASH-VALUE)
+ WHEN 1
+ COMPUTE CMP-TMPA =
+ LENGTH OF DFHCOMMAREA
+ END-COMPUTE
+ ADD CMP-TMPA
+ TO XML2LS-LANG-BUFFER-ADDRESS
+ XML2LS-CONVERTED-LENGTH
+ END-EVALUATE
+ INITIALIZE LANG-STRUCT-HASH-VALUE
+ PERFORM POP-ELEMENT
+ GO TO GENERAL-LOGIC-EXIT
+ ELSE
+ IF SKIP-ELEMENT = 'N' AND CON-TXED = 'N' AND
+ ELEMENT-NAME(HASH-VALUE)
+ = XPATH(2:XPOS - 2)
+ PERFORM POP-ELEMENT
+ GO TO ROUTE-ELEMENT
+ END-IF
+ END-IF
+ PERFORM POP-ELEMENT
+ END-IF
+ WHEN 'CONTENT-CHARACTER'
+ IF SKIP-ELEMENT = 'N'
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (XML-TEXT)
+ COMPUTE CMP-TMPA = ELE-CON-LEN + CMP-TMPB
+ IF CMP-TMPA <= 128
+ MOVE XML-TEXT
+ TO ELE-CON (ELE-CON-NDX:CMP-TMPB)
+ ADD CMP-TMPB TO ELE-CON-LEN ELE-CON-NDX
+ ELSE
+ MOVE CMP-TMPA TO ELE-CON-LEN
+ GO TO CHARACTER-BUFFER-OVERFLOW
+ END-IF
+ END-IF
+ WHEN 'CONTENT-NATIONAL-CHARACTER'
+ IF SKIP-ELEMENT = 'N'
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (XML-NTEXT)
+ IF CMP-TMPB > 1
+ MOVE SPACE TO XML-NAT-CHAR
+ ELSE
+ MOVE XML-NTEXT TO XML-NAT-CHAR
+ END-IF
+ COMPUTE CMP-TMPA = ELE-CON-LEN + 1
+ IF CMP-TMPA <= 128
+ COMPUTE CMP-TMPB = FUNCTION LENGTH (
+ FUNCTION DISPLAY-OF (XML-NAT-CHAR))
+ IF CMP-TMPB > 1
+ MOVE SPACE
+ TO ELE-CON (ELE-CON-NDX:1)
+ ELSE
+ MOVE FUNCTION DISPLAY-OF (XML-NAT-CHAR)
+ TO ELE-CON (ELE-CON-NDX:1)
+ END-IF
+ ADD 1 TO ELE-CON-LEN ELE-CON-NDX
+ ELSE
+ MOVE CMP-TMPA TO ELE-CON-LEN
+ GO TO CHARACTER-BUFFER-OVERFLOW
+ END-IF
+ END-IF
+ WHEN 'START-OF-DOCUMENT'
+ CALL 'CEE3SRP' USING RECOVERY-POINT FEEDBACK-CODE
+ SERVICE LABEL
+ IF NUMVAL-ERROR = 'Y'
+ MOVE 284 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ IF UNICODE-ERROR = 'Y'
+ MOVE 288 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ IF OTHER-ERROR = 'Y'
+ MOVE -1 TO XML-CODE
+ END-IF
+ WHEN 'END-OF-DOCUMENT'
+ IF ELEMENT-HITS = 0
+ MOVE 282 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ END-IF
+ IF X00000012 < 1
+ MOVE 299 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ END-IF
+ WHEN 'EXCEPTION'
+ IF XML-CODE >= 50 AND XML-CODE <= 99
+ MOVE 0 TO XML-CODE
+ ELSE
+ MOVE 280 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ END-EVALUATE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ PUSH-ELEMENT.
+ PERFORM PARSE-ELEMENT
+ IF XML-ROOT-FOUND = 'N' AND
+ ELE-NAME (1:ELE-NAME-LEN)
+ = XML-ROOT-ELEMENT
+ MOVE 'Y' TO XML-ROOT-FOUND
+ END-IF
+ IF XML-ROOT-FOUND = 'Y'
+ COMPUTE CMP-TMPA = XPOS + (ELE-NAME-LEN + 1)
+ IF CMP-TMPA <= 400
+ MOVE XPATH-DELIM TO XPATH (XPOS:1)
+ MOVE ELE-NAME (1:ELE-NAME-LEN)
+ TO XPATH (XPOS + 1:ELE-NAME-LEN)
+ COMPUTE XPOS = XPOS + (ELE-NAME-LEN + 1)
+ ELSE
+ COMPUTE ELE-NAME-LEN = FUNCTION LENGTH (XML-TEXT)
+ MOVE XML-TEXT TO ELE-NAME
+ MOVE 291 TO MSGNO
+ MOVE -1 TO XML-CODE
+ END-IF
+ ADD 1 TO XSTACK-DEPTH
+ END-IF
+ .
+ POP-ELEMENT.
+ IF XSTACK-DEPTH > 0
+ PERFORM PARSE-ELEMENT
+ COMPUTE XPOS = XPOS - (ELE-NAME-LEN + 1)
+ SUBTRACT 1 FROM XSTACK-DEPTH
+ END-IF
+ .
+ PARSE-ELEMENT.
+ COMPUTE ELE-NAME-LEN = FUNCTION LENGTH (XML-TEXT)
+ MOVE 1 TO CMP-TMPB
+ PERFORM VARYING CMP-TMPA FROM 1 BY 1
+ UNTIL CMP-TMPA > ELE-NAME-LEN
+ IF XML-TEXT (CMP-TMPA:1) = QNAME-DELIM
+ COMPUTE CMP-TMPB = CMP-TMPA + 1
+ MOVE ELE-NAME-LEN TO CMP-TMPA
+ END-IF
+ END-PERFORM
+ IF CMP-TMPB > 1
+ COMPUTE ELE-NAME-LEN
+ = (ELE-NAME-LEN - CMP-TMPB) + 1
+ IF ELE-NAME-LEN <= 28
+ MOVE XML-TEXT (CMP-TMPB:ELE-NAME-LEN)
+ TO ELE-NAME (1:ELE-NAME-LEN)
+ ELSE
+ MOVE 0 TO ELE-NAME-LEN
+ END-IF
+ ELSE
+ IF ELE-NAME-LEN <= 28
+ MOVE XML-TEXT (1:ELE-NAME-LEN)
+ TO ELE-NAME (1:ELE-NAME-LEN)
+ ELSE
+ MOVE 0 TO ELE-NAME-LEN
+ END-IF
+ END-IF
+ IF ELE-NAME-LEN = 0
+ MOVE 1 TO ELE-NAME-LEN
+ MOVE '0' TO ELE-NAME (1:ELE-NAME-LEN)
+ END-IF
+ .
+ ROUTE-ELEMENT.
+ GO TO
+ X000000C6
+ X000000C7
+ X000000C8
+ X000000C9
+ X000000CA
+ X000000CB
+ DEPENDING ON ROUTING-CODE (HASH-VALUE)
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ CONTENT-PROCESSING SECTION.
+ X000000C6.
+ ADD 1 TO X00000012
+ IF X00000012 > 1
+ MOVE 300 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ END-IF
+ SET ADDRESS OF DFHCOMMAREA
+ TO XML2LS-LANG-BUFFER-POINTER
+ MOVE 'DFHCOMMAREA'
+ TO LANG-STRUCT-NAME
+ MOVE 11
+ TO LANG-STRUCT-NAME-LENGTH
+ MOVE HASH-VALUE
+ TO LANG-STRUCT-HASH-VALUE
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X000000C7.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-PRINCIPLE-DATA
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000013 TO ADDRESS OF
+ EPSPCOM-PRINCIPLE-DATA
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ X000000D1
+ X000000D2
+ X000000D3
+ X000000D4
+ X000000D5
+ X000000D6
+ X000000D7
+ X000000D8
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000C8.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000014 TO ADDRESS OF
+ EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000C9.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-NUMBER-OF-MONTHS
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000014 TO ADDRESS OF
+ EPSPCOM-NUMBER-OF-MONTHS
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000CA.
+ IF ELE-CON-LEN = 0
+ MOVE ZEROS TO
+ EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ SET ADDRESS OF X00000015 TO ADDRESS OF
+ EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA
+ GO TO
+ X000000CC
+ X000000CD
+ X000000CE
+ X000000CF
+ X000000D0
+ X000000D1
+ X000000D2
+ DEPENDING ON ELE-CON-LEN
+ GO TO NUMERIC-RESCUE
+ .
+ X000000CB.
+ IF ELE-CON-LEN = 0
+ MOVE SPACES TO
+ EPSPCOM-YEAR-MONTH-IND
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ IF ELE-CON-LEN <= 1
+ MOVE ELE-CON (1:ELE-CON-LEN) TO
+ EPSPCOM-YEAR-MONTH-IND
+ OF DFHCOMMAREA
+ GO TO CONTENT-CONVERTED-EXIT
+ END-IF
+ MOVE 1 TO ELE-CHAR-LIMIT
+ GO TO CHARACTER-CONTENT-OVERFLOW
+ .
+ CHARACTER-CONTENT-OVERFLOW.
+ MOVE 283 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ CHARACTER-BUFFER-OVERFLOW.
+ MOVE 286 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ COMPUTE-LOOKUP-SOURCE SECTION.
+ X000000CC.
+ MOVE ELE-CON (1:1) TO X000000B9 X000000AC
+ INSPECT X000000AC REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AC TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000CD.
+ MOVE ELE-CON (1:2) TO X000000BA X000000AD
+ INSPECT X000000AD REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AD TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000CE.
+ MOVE ELE-CON (1:3) TO X000000BB X000000AE
+ INSPECT X000000AE REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AE TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000CF.
+ MOVE ELE-CON (1:4) TO X000000BC X000000AF
+ INSPECT X000000AF REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000AF TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D0.
+ MOVE ELE-CON (1:5) TO X000000BD X000000B0
+ INSPECT X000000B0 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B0 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D1.
+ MOVE ELE-CON (1:6) TO X000000BE X000000B1
+ INSPECT X000000B1 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B1 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D2.
+ MOVE ELE-CON (1:7) TO X000000BF X000000B2
+ INSPECT X000000B2 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B2 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D3.
+ MOVE ELE-CON (1:8) TO X000000C0 X000000B3
+ INSPECT X000000B3 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B3 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D4.
+ MOVE ELE-CON (1:9) TO X000000C1 X000000B4
+ INSPECT X000000B4 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B4 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D5.
+ MOVE ELE-CON (1:10) TO X000000C2 X000000B5
+ INSPECT X000000B5 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B5 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D6.
+ MOVE ELE-CON (1:11) TO X000000C3 X000000B6
+ INSPECT X000000B6 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B6 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D7.
+ MOVE ELE-CON (1:12) TO X000000C4 X000000B7
+ INSPECT X000000B7 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B7 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ X000000D8.
+ MOVE ELE-CON (1:13) TO X000000C5 X000000B8
+ INSPECT X000000B8 REPLACING ALL
+ '0' BY '9' '1' BY '9' '2' BY '9' '3' BY '9' '4' BY '9'
+ '5' BY '9' '6' BY '9' '7' BY '9' '8' BY '9' ' ' BY '?'
+ MOVE X000000B8 TO X000000AB
+ GO TO LOOKUP-SOURCE
+ .
+ LOOKUP-SOURCE.
+ SEARCH ALL NPSA
+ AT END
+ GO TO NUMERIC-RESCUE
+ WHEN NPSA (NPSA-NDX) = X000000AB
+ SET NPSAN TO NPSA-NDX
+ END-SEARCH
+ GO TO
+ X000000D9
+ X000000DA
+ X000000DB
+ X000000DC
+ X000000DD
+ X000000DE
+ X000000DF
+ X000000E0
+ X000000E1
+ X000000E2
+ X000000E3
+ X000000E4
+ X000000E5
+ X000000E6
+ X000000E7
+ X000000E8
+ X000000E9
+ X000000EA
+ X000000EB
+ X000000EC
+ X000000ED
+ X000000EE
+ X000000EF
+ X000000F0
+ X000000F1
+ X000000F2
+ X000000F3
+ X000000F4
+ X000000F5
+ X000000F6
+ X000000F7
+ X000000F8
+ X000000F9
+ X000000FA
+ X000000FB
+ X000000FC
+ X000000FD
+ X000000FE
+ X000000FF
+ X00000100
+ X00000101
+ X00000102
+ X00000103
+ X00000104
+ X00000105
+ X00000106
+ X00000107
+ X00000108
+ X00000109
+ X0000010A
+ X0000010B
+ X0000010C
+ X0000010D
+ X0000010E
+ X0000010F
+ X00000110
+ X00000111
+ X00000112
+ X00000113
+ X00000114
+ X00000115
+ X00000116
+ X00000117
+ X00000118
+ DEPENDING ON NPSAN
+ GO TO NUMERIC-RESCUE
+ .
+ SET-NUMERIC-SOURCE SECTION.
+ X000000D9.
+ SET ADDRESS OF X0000005E
+ TO ADDRESS OF X000000BA
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DA.
+ SET ADDRESS OF X00000060
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DB.
+ SET ADDRESS OF X00000062
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DC.
+ SET ADDRESS OF X0000005F
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DD.
+ SET ADDRESS OF X00000061
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DE.
+ SET ADDRESS OF X00000063
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000DF.
+ SET ADDRESS OF X00000017
+ TO ADDRESS OF X000000BA
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E0.
+ SET ADDRESS OF X00000029
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E1.
+ SET ADDRESS OF X0000002B
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E2.
+ SET ADDRESS OF X0000002D
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E3.
+ SET ADDRESS OF X00000019
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E4.
+ SET ADDRESS OF X0000002F
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E5.
+ SET ADDRESS OF X00000031
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E6.
+ SET ADDRESS OF X00000033
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E7.
+ SET ADDRESS OF X0000001B
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E8.
+ SET ADDRESS OF X00000035
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000E9.
+ SET ADDRESS OF X00000037
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EA.
+ SET ADDRESS OF X0000001D
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EB.
+ SET ADDRESS OF X0000003B
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EC.
+ SET ADDRESS OF X0000003D
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000ED.
+ SET ADDRESS OF X0000001F
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EE.
+ SET ADDRESS OF X00000041
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000EF.
+ SET ADDRESS OF X00000043
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F0.
+ SET ADDRESS OF X00000021
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F1.
+ SET ADDRESS OF X00000047
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F2.
+ SET ADDRESS OF X00000049
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F3.
+ SET ADDRESS OF X00000023
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F4.
+ SET ADDRESS OF X0000004D
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F5.
+ SET ADDRESS OF X0000004F
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F6.
+ SET ADDRESS OF X00000025
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F7.
+ SET ADDRESS OF X00000053
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F8.
+ SET ADDRESS OF X00000055
+ TO ADDRESS OF X000000C4
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000F9.
+ SET ADDRESS OF X00000027
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FA.
+ SET ADDRESS OF X00000059
+ TO ADDRESS OF X000000C4
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FB.
+ SET ADDRESS OF X0000005B
+ TO ADDRESS OF X000000C5
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FC.
+ SET ADDRESS OF X00000016
+ TO ADDRESS OF X000000B9
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FD.
+ SET ADDRESS OF X00000028
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FE.
+ SET ADDRESS OF X0000002A
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X000000FF.
+ SET ADDRESS OF X0000002C
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000100.
+ SET ADDRESS OF X00000018
+ TO ADDRESS OF X000000BA
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000101.
+ SET ADDRESS OF X0000002E
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000102.
+ SET ADDRESS OF X00000030
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000103.
+ SET ADDRESS OF X00000032
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000104.
+ SET ADDRESS OF X0000001A
+ TO ADDRESS OF X000000BB
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000105.
+ SET ADDRESS OF X00000034
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000106.
+ SET ADDRESS OF X00000036
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000107.
+ SET ADDRESS OF X0000001C
+ TO ADDRESS OF X000000BC
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000108.
+ SET ADDRESS OF X0000003A
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000109.
+ SET ADDRESS OF X0000003C
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010A.
+ SET ADDRESS OF X0000001E
+ TO ADDRESS OF X000000BD
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010B.
+ SET ADDRESS OF X00000040
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010C.
+ SET ADDRESS OF X00000042
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010D.
+ SET ADDRESS OF X00000020
+ TO ADDRESS OF X000000BE
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010E.
+ SET ADDRESS OF X00000046
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X0000010F.
+ SET ADDRESS OF X00000048
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000110.
+ SET ADDRESS OF X00000022
+ TO ADDRESS OF X000000BF
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000111.
+ SET ADDRESS OF X0000004C
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000112.
+ SET ADDRESS OF X0000004E
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000113.
+ SET ADDRESS OF X00000024
+ TO ADDRESS OF X000000C0
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000114.
+ SET ADDRESS OF X00000052
+ TO ADDRESS OF X000000C2
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000115.
+ SET ADDRESS OF X00000054
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000116.
+ SET ADDRESS OF X00000026
+ TO ADDRESS OF X000000C1
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000117.
+ SET ADDRESS OF X00000058
+ TO ADDRESS OF X000000C3
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ X00000118.
+ SET ADDRESS OF X0000005A
+ TO ADDRESS OF X000000C4
+ GO TO COMPLETE-NUMERIC-MOVE
+ .
+ MOVE-NUMERIC SECTION.
+ COMPLETE-NUMERIC-MOVE.
+ MOVE NUMERIC-TARGET-CODE (HASH-VALUE) TO CMP-TMPA
+ GO TO
+ X00000119
+ X0000011A
+ X0000011B
+ X0000011C
+ X0000011D
+ X0000011E
+ X0000011F
+ X00000120
+ X00000121
+ X00000122
+ X00000123
+ X00000124
+ X00000125
+ X00000126
+ X00000127
+ X00000128
+ X00000129
+ X0000012A
+ X0000012B
+ X0000012C
+ X0000012D
+ X0000012E
+ X0000012F
+ X00000130
+ X00000131
+ X00000132
+ X00000133
+ X00000134
+ X00000135
+ X00000136
+ X00000137
+ X00000138
+ X00000139
+ X0000013A
+ X0000013B
+ X0000013C
+ X0000013D
+ X0000013E
+ X0000013F
+ X00000140
+ X00000141
+ X00000142
+ X00000143
+ X00000144
+ X00000145
+ X00000146
+ X00000147
+ X00000148
+ X00000149
+ X0000014A
+ X0000014B
+ X0000014C
+ X0000014D
+ X0000014E
+ X0000014F
+ X00000150
+ X00000151
+ X00000152
+ X00000153
+ X00000154
+ X00000155
+ X00000156
+ X00000157
+ X00000158
+ X00000159
+ X0000015A
+ X0000015B
+ X0000015C
+ X0000015D
+ X0000015E
+ X0000015F
+ X00000160
+ X00000161
+ X00000162
+ X00000163
+ X00000164
+ X00000165
+ X00000166
+ X00000167
+ X00000168
+ X00000169
+ X0000016A
+ X0000016B
+ X0000016C
+ X0000016D
+ X0000016E
+ X0000016F
+ X00000170
+ DEPENDING ON NMAR-ENTRY (NPSAN, CMP-TMPA)
+ GO TO NUMERIC-RESCUE
+ .
+ X00000119.
+ MOVE X0000005E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011A.
+ MOVE X0000005E TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011B.
+ MOVE X00000060 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011C.
+ MOVE X00000060 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011D.
+ MOVE X00000062 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011E.
+ MOVE X0000005F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000011F.
+ MOVE X0000005F TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000120.
+ MOVE X00000061 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000121.
+ MOVE X00000061 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000122.
+ MOVE X00000063 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000123.
+ MOVE X00000017 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000124.
+ MOVE X00000017 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000125.
+ MOVE X00000017 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000126.
+ MOVE X00000029 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000127.
+ MOVE X00000029 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000128.
+ MOVE X0000002B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000129.
+ MOVE X0000002B TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012A.
+ MOVE X0000002D TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012B.
+ MOVE X00000019 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012C.
+ MOVE X00000019 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012D.
+ MOVE X00000019 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012E.
+ MOVE X0000002F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000012F.
+ MOVE X0000002F TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000130.
+ MOVE X00000031 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000131.
+ MOVE X00000031 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000132.
+ MOVE X00000033 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000133.
+ MOVE X0000001B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000134.
+ MOVE X0000001B TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000135.
+ MOVE X00000035 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000136.
+ MOVE X00000037 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000137.
+ MOVE X0000001D TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000138.
+ MOVE X0000001D TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000139.
+ MOVE X0000003B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013A.
+ MOVE X0000003D TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013B.
+ MOVE X0000001F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013C.
+ MOVE X00000041 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013D.
+ MOVE X00000043 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013E.
+ MOVE X00000021 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000013F.
+ MOVE X00000047 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000140.
+ MOVE X00000049 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000141.
+ MOVE X00000023 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000142.
+ MOVE X0000004D TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000143.
+ MOVE X0000004F TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000144.
+ MOVE X00000025 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000145.
+ MOVE X00000053 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000146.
+ MOVE X00000055 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000147.
+ MOVE X00000027 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000148.
+ MOVE X00000059 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000149.
+ MOVE X0000005B TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014A.
+ MOVE X00000016 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014B.
+ MOVE X00000016 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014C.
+ MOVE X00000016 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014D.
+ MOVE X00000028 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014E.
+ MOVE X00000028 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000014F.
+ MOVE X0000002A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000150.
+ MOVE X0000002A TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000151.
+ MOVE X0000002C TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000152.
+ MOVE X00000018 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000153.
+ MOVE X00000018 TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000154.
+ MOVE X00000018 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000155.
+ MOVE X0000002E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000156.
+ MOVE X0000002E TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000157.
+ MOVE X00000030 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000158.
+ MOVE X00000030 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000159.
+ MOVE X00000032 TO X00000015
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015A.
+ MOVE X0000001A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015B.
+ MOVE X0000001A TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015C.
+ MOVE X00000034 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015D.
+ MOVE X00000036 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015E.
+ MOVE X0000001C TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000015F.
+ MOVE X0000001C TO X00000014
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000160.
+ MOVE X0000003A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000161.
+ MOVE X0000003C TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000162.
+ MOVE X0000001E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000163.
+ MOVE X00000040 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000164.
+ MOVE X00000042 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000165.
+ MOVE X00000020 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000166.
+ MOVE X00000046 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000167.
+ MOVE X00000048 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000168.
+ MOVE X00000022 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000169.
+ MOVE X0000004C TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016A.
+ MOVE X0000004E TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016B.
+ MOVE X00000024 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016C.
+ MOVE X00000052 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016D.
+ MOVE X00000054 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016E.
+ MOVE X00000026 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X0000016F.
+ MOVE X00000058 TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ X00000170.
+ MOVE X0000005A TO X00000013
+ GO TO CONTENT-CONVERTED-EXIT
+ .
+ NUMERIC-RESCUE-PROCESSING SECTION.
+ NUMERIC-RESCUE.
+ GO TO
+ X00000171
+ X00000172
+ X00000173
+ X00000174
+ DEPENDING ON NUMERIC-RESCUE-CODE (HASH-VALUE)
+ .
+ X00000171.
+ COMPUTE EPSPCOM-PRINCIPLE-DATA
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ X00000172.
+ COMPUTE EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ X00000173.
+ COMPUTE EPSPCOM-NUMBER-OF-MONTHS
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ X00000174.
+ COMPUTE EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA
+ = FUNCTION NUMVAL-C(ELE-CON (1:ELE-CON-LEN))
+ ON SIZE ERROR
+ GO TO NUMERIC-RESCUE-FAILED
+ NOT ON SIZE ERROR
+ GO TO CONTENT-CONVERTED-EXIT
+ END-COMPUTE
+ .
+ NUMERIC-RESCUE-FAILED.
+ MOVE 284 TO MSGNO
+ MOVE -1 TO XML-CODE
+ GO TO GENERAL-LOGIC-EXIT
+ .
+ CONTENT-CONVERTED-EXIT.
+ MOVE 'Y' TO CON-TXED
+ .
+ GENERAL-LOGIC-EXIT.
+ CONTINUE
+ .
+ CONDITION-SIGNALER SECTION.
+ SIGNAL-CONDITION.
+ IF OTHER-ERROR = 'N'
+ MOVE 3 TO SEV SEV2
+ MOVE 1 TO CASE CNTRL
+ MOVE 0 TO ISINFO
+ MOVE 0 TO INSERTNO
+ MOVE 'IGZ' TO FACID
+ CALL 'CEENCOD' USING
+ SEV MSGNO CASE SEV2
+ CNTRL FACID ISINFO
+ NEW-CONDITION FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ MOVE 8 TO VSTRING-LENGTH
+ MOVE 'EPSCSMRI' TO VSTRING-DATA (1:8)
+ PERFORM INSERT-VSTRING
+ EVALUATE MSGNO
+ WHEN 280
+ *IGZ_PARSER_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0280S
+ WHEN 281
+ *IGZ_SUBSCRIPT_RANGE_EXCEEDED_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0281S
+ WHEN 282
+ *IGZ_NO_KNOWN_ELEMENTS_FOUND_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0282S
+ WHEN 283
+ *IGZ_CHARACTER_CONTENT_OVERFLOW_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0283S
+ WHEN 284
+ *IGZ_NUMERIC_TX_FAILURE_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0284S
+ WHEN 285
+ *IGZ_MESSAGE_TOO_LARGE_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0285S
+ WHEN 286
+ *IGZ_CHARACTER_CONTENT_BUFFER_OVERFLOW_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0286S
+ WHEN 288
+ *IGZ_UNICODE_RUNTIME_ERROR
+ PERFORM CEECMI-IGZ0288S
+ WHEN 291
+ *IGZ_XPATH_OVERFLOW_ERROR_MSG_NO
+ PERFORM CEECMI-IGZ0291S
+ WHEN 294
+ *IGZ_INVALID_PARAMETERS_MSG_NO
+ PERFORM CEECMI-IGZ0294S
+ WHEN 299
+ *IGZ_XML2LS_LANGUAGE_STRUCTURE_MIN_COUNT_NOT_MET
+ PERFORM CEECMI-IGZ0299S
+ WHEN 300
+ *IGZ_XML2LS_LANGUAGE_STRUCTURE_MAX_COUNT_EXCEEDED
+ PERFORM CEECMI-IGZ0300S
+ END-EVALUATE
+ ELSE
+ MOVE SAVED-CONDITION TO NEW-CONDITION
+ MOVE MSG-NO OF NEW-CONDITION TO ERROR-CODE
+ END-IF
+ MOVE 0 TO QDATA
+ IF ADDRESS OF OPTIONAL-FEEDBACK-CODE = NULL
+ CALL 'CEESGL' USING NEW-CONDITION QDATA OMITTED
+ ELSE
+ MOVE NEW-CONDITION TO OPTIONAL-FEEDBACK-CODE
+ END-IF
+ IF MSGNO NOT EQUAL 294
+ MOVE ERROR-CODE TO CONVERTER-RETURN-CODE
+ END-IF
+ .
+ CEECMI-IGZ0280S.
+ MOVE XML-CODE TO ERROR-CODE
+ MOVE ERROR-CODE TO EEC
+ PERFORM INSERT-NUMBER
+ PERFORM INSERT-ELE-NAME
+ PERFORM INSERT-ELE-CON
+ .
+ CEECMI-IGZ0281S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ .
+ CEECMI-IGZ0282S.
+ MOVE MSGNO TO ERROR-CODE
+ .
+ CEECMI-IGZ0283S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ MOVE ELE-CHAR-LIMIT TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0284S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ PERFORM INSERT-ELE-CON
+ .
+ CEECMI-IGZ0285S.
+ MOVE MSGNO TO ERROR-CODE
+ MOVE XML2LS-XML-BUFFER-LENGTH TO EEC
+ PERFORM INSERT-NUMBER
+ MOVE 33554436 TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0286S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ MOVE ELE-CON-LEN TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0288S.
+ MOVE MSGNO TO ERROR-CODE
+ MOVE 1200 TO EEC
+ PERFORM INSERT-NUMBER
+ MOVE 1140 TO EEC
+ PERFORM INSERT-NUMBER
+ .
+ CEECMI-IGZ0291S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-ELE-NAME
+ PERFORM INSERT-ELE-CON
+ .
+ CEECMI-IGZ0294S.
+ MOVE MSGNO TO ERROR-CODE
+ .
+ CEECMI-IGZ0299S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-STRUCT-NAME
+ .
+ CEECMI-IGZ0300S.
+ MOVE MSGNO TO ERROR-CODE
+ PERFORM INSERT-STRUCT-NAME
+ .
+ INSERT-ELE-CON.
+ IF ELE-CON-LEN > 80
+ MOVE 80 TO ELE-CON-LEN
+ MOVE '...' TO ELE-CON (78:3)
+ END-IF
+ IF ELE-CON-LEN <= 0
+ MOVE 1 TO ELE-CON-LEN
+ MOVE '?' TO ELE-CON
+ END-IF
+ MOVE ELE-CON-LEN TO VSTRING-LENGTH
+ MOVE ELE-CON
+ TO VSTRING-DATA (1:80)
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-ELE-NAME.
+ IF ELE-NAME-LEN > 80
+ MOVE 80 TO ELE-NAME-LEN
+ MOVE '...' TO ELE-NAME (78:3)
+ END-IF
+ IF ELE-NAME-LEN <= 0
+ MOVE 1 TO ELE-NAME-LEN
+ MOVE '?' TO ELE-NAME
+ END-IF
+ MOVE ELE-NAME-LEN TO VSTRING-LENGTH
+ MOVE ELE-NAME
+ TO VSTRING-DATA (1:80)
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-NUMBER.
+ MOVE ZERO TO CMP-TMPA
+ INSPECT EEC TALLYING CMP-TMPA FOR LEADING '0'
+ COMPUTE CMP-TMPB = 9 - CMP-TMPA
+ MOVE CMP-TMPB TO VSTRING-LENGTH
+ MOVE EEC (CMP-TMPA + 1:CMP-TMPB) TO VSTRING-DATA
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-STRUCT-NAME.
+ MOVE LANG-STRUCT-NAME-LENGTH TO VSTRING-LENGTH
+ MOVE LANG-STRUCT-NAME TO VSTRING-DATA(1:80)
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-VSTRING.
+ ADD 1 TO INSERTNO
+ CALL 'CEECMI' USING
+ NEW-CONDITION INSERTNO
+ VSTRING FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ CHECK-LE-SERVICE-FC.
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-7
+ DISPLAY CONVERTER-ERROR-8 ' '
+ FACILITY OF FEEDBACK-CODE
+ MSG-NO OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-9
+ STOP RUN
+ END-IF
+ .
+ REGISTER-EXCEPTION-HANDLER.
+ SET ROUTINE TO ENTRY 'EPSCSMRA'
+ SET TOKEN TO ADDRESS OF CEESRP-DATA
+ CALL 'CEEHDLR' USING ROUTINE TOKEN FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-3
+ STOP RUN
+ END-IF
+ .
+ UNREGISTER-EXCEPTION-HANDLER.
+ CALL 'CEEHDLU' USING ROUTINE FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-4
+ STOP RUN
+ END-IF
+ .
+ END PROGRAM 'EPSCSMRI'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Required Length in Bytes of the XML to Language Structure Ou
+ * tput Buffer
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRJ'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 XML2LS-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 XML2LS-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ XML2LS-LANG-BUFFER-LENGTH
+ XML2LS-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF XML2LS-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO XML2LS-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF XML2LS-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO XML2LS-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRJ'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * XML to Language Structure Exception Handler
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRA'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-6.
+ 2 PIC X(39) USAGE DISPLAY
+ VALUE 'Failed To Resume Execution Of Converter'.
+ LOCAL-STORAGE SECTION.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ LINKAGE SECTION.
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 TOKEN POINTER.
+ 1 RESULT PIC S9(9) COMP.
+ 88 RESUME VALUE 10.
+ 1 CURRENT-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
+ RESULT NEW-CONDITION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CEESRP-DATA TO TOKEN
+ CALL 'CEEMRCE' USING RECOVERY-POINT FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-6
+ END-IF
+ SET RESUME TO TRUE
+ IF FACILITY OF CURRENT-CONDITION = 'IGZ'
+ EVALUATE MSG-NO OF CURRENT-CONDITION
+ WHEN 97
+ WHEN 151
+ WHEN 152
+ WHEN 155
+ WHEN 196
+ MOVE 'Y' TO NUMVAL-ERROR
+ WHEN 272
+ MOVE 'Y' TO UNICODE-ERROR
+ WHEN OTHER
+ MOVE 'Y' TO OTHER-ERROR
+ END-EVALUATE
+ ELSE
+ MOVE 'Y' TO OTHER-ERROR
+ END-IF
+ MOVE CURRENT-CONDITION TO SAVED-CONDITION
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRA'.
+ PROCESS NODYNAM,CODEPAGE(1140),NSYMBOL(NATIONAL)
+ PROCESS ARITH(EXTEND),OPT,NOCICS
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Language Structure to XML Converter
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRO'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 ERROR-MESSAGES.
+ 2 CONVERTER-ERROR-3.
+ 3 PIC X(36) USAGE DISPLAY
+ VALUE 'Failed To Register Exception Handler'.
+ 2 CONVERTER-ERROR-4.
+ 3 PIC X(38) USAGE DISPLAY
+ VALUE 'Failed To Unregister Exception Handler'.
+ 2 CONVERTER-ERROR-7.
+ 3 PIC X(40) USAGE DISPLAY
+ VALUE 'Language Environment Service Call Failed'.
+ 2 CONVERTER-ERROR-8.
+ 3 PIC X(35) USAGE DISPLAY
+ VALUE 'Language Environment Message Number'.
+ 2 CONVERTER-ERROR-9.
+ 3 PIC X(31) USAGE DISPLAY
+ VALUE 'XML Converter Is Terminating...'.
+ 1 X0000000B.
+ 2 PIC 9(4) COMP VALUE 26.
+ 2 PIC X(26) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000005.
+ 2 PIC 9(4) COMP VALUE 31.
+ 2 PIC X(31) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000001.
+ 2 PIC 9(4) COMP VALUE 30.
+ 2 PIC X(30) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000008.
+ 2 PIC 9(4) COMP VALUE 17.
+ 2 PIC X(17) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000004.
+ 2 PIC 9(4) COMP VALUE 30.
+ 2 PIC X(30) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000000.
+ 2 PIC 9(4) COMP VALUE 88.
+ 2 PIC X(48) USAGE DISPLAY
+ VALUE ''.
+ 1 X0000000A.
+ 2 PIC 9(4) COMP VALUE 25.
+ 2 PIC X(25) USAGE DISPLAY
+ VALUE ''.
+ 1 X00000007.
+ 2 PIC 9(4) COMP VALUE 16.
+ 2 PIC X(16) USAGE DISPLAY
+ VALUE ''.
+ LOCAL-STORAGE SECTION.
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 ROUTINE PROCEDURE-POINTER.
+ 1 TOKEN POINTER.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 VSTRING.
+ 2 VSTRING-LENGTH PIC S9(4) COMP.
+ 2 VSTRING-DATA PIC X(80).
+ 1 SEV PIC S9(4) COMP.
+ 1 MSGNO PIC S9(4) COMP.
+ 1 CASE PIC S9(4) COMP.
+ 1 SEV2 PIC S9(4) COMP.
+ 1 CNTRL PIC S9(4) COMP.
+ 1 FACID PIC X(3) DISPLAY.
+ 1 ISINFO PIC S9(9) COMP.
+ 1 QDATA PIC S9(9) COMP.
+ 1 INSERTNO PIC S9(9) COMP.
+ 1 EEC PIC 9(9) DISPLAY.
+ 1 CMP-TMPA PIC 9(9) COMP.
+ 1 CMP-TMPB PIC 9(9) COMP.
+ 1 ERROR-CODE PIC S9(9) COMP.
+ 1 MSG-VAR-PART-LEN PIC 9(9) COMP.
+ 1 MSGBLD-RETURN-CODE PIC S9(9) COMP.
+ 1 LAST-INSTRUCTION PIC 9(9) COMP.
+ 1 LS2XML-LANG-BUFFER-POINTER POINTER.
+ 1 LS2XML-LANG-BUFFER-ADDRESS
+ REDEFINES LS2XML-LANG-BUFFER-POINTER PIC 9(9) COMP.
+ 1 LANG-STRUCT-NAME PIC X(30).
+ 1 LANG-STRUCT-NAME-LENGTH PIC 9(4) COMP.
+ 1 LS2XML-XML-TEMPLATE-BUFFER PIC X(95).
+ 1 ARRAY-SUBSCRIPTS.
+ 2 X0000000C PIC 9(9) COMP VALUE 0.
+ 1 INSTRUCTIONS.
+ 2 INSTRUCT OCCURS 22 TIMES
+ INDEXED BY INSTRUCT-NDX.
+ 3 MBOPCODE PIC X VALUE X'FF'.
+ 3 MBWSPOPT PIC X.
+ 3 MBDNMPTR POINTER.
+ 3 MBDATPTR POINTER.
+ 3 MBDATLEN PIC 9(9) COMP.
+ 3 MBDATYPE PIC X.
+ 3 MBSTGPTR POINTER.
+ 3 MBETGPTR POINTER.
+ LINKAGE SECTION.
+ 01 DFHCOMMAREA
+ .
+ 10 PROCESS-INDICATOR
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PRINCIPLE-DATA
+ PICTURE S9(9)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-YEARS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-NUMBER-OF-MONTHS
+ PICTURE S9(4)
+ USAGE COMP
+ .
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PICTURE S9(2)V9(3)
+ USAGE COMP
+ .
+ 10 EPSPCOM-YEAR-MONTH-IND
+ PICTURE X
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PICTURE S9(7)V9(2)
+ USAGE COMP
+ .
+ 10 EPSPCOM-ERRMSG
+ PICTURE X(80)
+ USAGE DISPLAY
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE
+ PICTURE 9(4)
+ USAGE DISPLAY
+ .
+ 88 EPS02-REQUEST-SUCCESS
+ VALUE
+ 0
+ .
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PICTURE X(4)
+ USAGE DISPLAY
+ .
+ 1 X0000003D.
+ 10 X00000003 PIC -9(7).9(2).
+ 10 X00000006 PIC X(80).
+ 10 X00000009 PIC 9(4).
+ 1 LS2XML-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-XML-BUFFER PIC X(758).
+ 1 LS2XML-LANG-BUFFER PIC X(106).
+ 1 OPTIONAL-FEEDBACK-CODE PIC X(12).
+ 1 CONVERTER-RETURN-CODE PIC S9(9) COMP.
+ PROCEDURE DIVISION USING
+ LS2XML-LANG-BUFFER
+ LS2XML-XML-BUFFER-LENGTH
+ LS2XML-XML-BUFFER
+ OPTIONAL-FEEDBACK-CODE
+ RETURNING
+ CONVERTER-RETURN-CODE.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ MAINLINE SECTION.
+ MOVE 'N' TO NUMVAL-ERROR UNICODE-ERROR OTHER-ERROR
+ PERFORM CHECK-PARAMETERS
+ PERFORM REGISTER-EXCEPTION-HANDLER
+ CALL 'CEE3SRP' USING RECOVERY-POINT FEEDBACK-CODE
+ SERVICE LABEL
+ IF UNICODE-ERROR = 'Y'
+ MOVE 288 TO MSGNO
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ IF OTHER-ERROR = 'Y'
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ SET LS2XML-LANG-BUFFER-POINTER
+ TO ADDRESS OF LS2XML-LANG-BUFFER
+ INITIALIZE LS2XML-XML-BUFFER-LENGTH
+ SET INSTRUCT-NDX TO 1
+ MOVE 'DFHCOMMAREA'
+ TO LANG-STRUCT-NAME
+ MOVE 11
+ TO LANG-STRUCT-NAME-LENGTH
+ SET ADDRESS OF DFHCOMMAREA
+ TO LS2XML-LANG-BUFFER-POINTER
+ SET ADDRESS OF X0000003D
+ TO ADDRESS OF LS2XML-XML-TEMPLATE-BUFFER
+ INITIALIZE X0000003D
+ MOVE X'E0' TO MBOPCODE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000000
+ SET INSTRUCT-NDX UP BY 1
+ MOVE X'B0' TO MBOPCODE(INSTRUCT-NDX)
+ MOVE X'C3' TO MBWSPOPT(INSTRUCT-NDX)
+ MOVE 11 TO MBDATLEN(INSTRUCT-NDX)
+ SET MBDATPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000003
+ MOVE 'N' TO MBDATYPE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000004
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000005
+ SET INSTRUCT-NDX UP BY 1
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT
+ OF DFHCOMMAREA
+ TO X00000003
+ MOVE X'A0' TO MBOPCODE(INSTRUCT-NDX)
+ MOVE X'C3' TO MBWSPOPT(INSTRUCT-NDX)
+ MOVE 80 TO MBDATLEN(INSTRUCT-NDX)
+ SET MBDATPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000006
+ MOVE 'X' TO MBDATYPE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000007
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000008
+ SET INSTRUCT-NDX UP BY 1
+ MOVE EPSPCOM-ERRMSG
+ OF DFHCOMMAREA
+ TO X00000006
+ MOVE X'B0' TO MBOPCODE(INSTRUCT-NDX)
+ MOVE X'C3' TO MBWSPOPT(INSTRUCT-NDX)
+ MOVE 4 TO MBDATLEN(INSTRUCT-NDX)
+ SET MBDATPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000009
+ MOVE 'N' TO MBDATYPE(INSTRUCT-NDX)
+ SET MBSTGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X0000000A
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X0000000B
+ SET INSTRUCT-NDX UP BY 1
+ IF EPSPCOM-PROGRAM-RETCODE
+ OF DFHCOMMAREA
+ IS NOT NUMERIC
+ MOVE ZEROS TO X00000009
+ ELSE
+ MOVE EPSPCOM-PROGRAM-RETCODE
+ OF DFHCOMMAREA
+ TO X00000009
+ END-IF
+ MOVE X'E1' TO MBOPCODE(INSTRUCT-NDX)
+ SET MBETGPTR(INSTRUCT-NDX)
+ TO ADDRESS OF X00000001
+ SET INSTRUCT-NDX UP BY 1
+ PERFORM INVOKE-MESSAGE-BUILDER
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ GOBACK
+ .
+ CHECK-PARAMETERS.
+ IF ADDRESS OF LS2XML-LANG-BUFFER EQUAL NULL AND
+ ADDRESS OF LS2XML-XML-BUFFER-LENGTH NOT EQUAL NULL
+ CALL 'EPSCSMRL' USING LS2XML-XML-BUFFER-LENGTH
+ GOBACK
+ ELSE
+ IF ADDRESS OF LS2XML-XML-BUFFER EQUAL NULL AND
+ ADDRESS OF LS2XML-XML-BUFFER-LENGTH NOT EQUAL NULL
+ CALL 'EPSCSMRK' USING LS2XML-XML-BUFFER-LENGTH
+ GOBACK
+ END-IF
+ IF ADDRESS OF LS2XML-LANG-BUFFER EQUAL NULL OR
+ ADDRESS OF LS2XML-XML-BUFFER-LENGTH EQUAL NULL OR
+ ADDRESS OF LS2XML-XML-BUFFER EQUAL NULL
+ MOVE 294 TO MSGNO
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ END-IF
+ .
+ INVOKE-MESSAGE-BUILDER.
+ CALL 'EPSCSMRC' USING
+ INSTRUCTIONS LS2XML-XML-BUFFER-LENGTH
+ LS2XML-XML-BUFFER LAST-INSTRUCTION
+ RETURNING
+ MSGBLD-RETURN-CODE
+ IF MSGBLD-RETURN-CODE NOT EQUAL ZERO
+ MOVE MSGBLD-RETURN-CODE
+ TO MSGNO CONVERTER-RETURN-CODE
+ PERFORM UNREGISTER-EXCEPTION-HANDLER
+ PERFORM SIGNAL-CONDITION
+ GOBACK
+ ELSE
+ MOVE ZERO TO CONVERTER-RETURN-CODE
+ END-IF
+ SET INSTRUCT-NDX TO 1
+ MOVE ALL X'FF' TO INSTRUCTIONS
+ .
+ SIGNAL-CONDITION.
+ IF OTHER-ERROR = 'N'
+ MOVE 3 TO SEV SEV2
+ MOVE 1 TO CASE CNTRL
+ MOVE 0 TO ISINFO
+ MOVE 0 TO INSERTNO
+ MOVE 'IGZ' TO FACID
+ CALL 'CEENCOD' USING
+ SEV MSGNO CASE SEV2
+ CNTRL FACID ISINFO
+ NEW-CONDITION FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ MOVE 8 TO VSTRING-LENGTH
+ MOVE 'EPSCSMRO'
+ TO VSTRING-DATA (1:8)
+ PERFORM INSERT-VSTRING
+ MOVE MSGNO TO ERROR-CODE
+ EVALUATE MSGNO
+ WHEN 287
+ MOVE 758 TO EEC
+ PERFORM INSERT-NUMBER
+ WHEN 288
+ MOVE 1140 TO EEC
+ PERFORM INSERT-NUMBER
+ MOVE 1140 TO EEC
+ PERFORM INSERT-NUMBER
+ END-EVALUATE
+ ELSE
+ MOVE SAVED-CONDITION TO NEW-CONDITION
+ MOVE MSG-NO OF NEW-CONDITION TO ERROR-CODE
+ END-IF
+ MOVE 0 TO QDATA
+ IF ADDRESS OF OPTIONAL-FEEDBACK-CODE = NULL
+ CALL 'CEESGL' USING
+ NEW-CONDITION QDATA OMITTED
+ ELSE
+ MOVE NEW-CONDITION TO OPTIONAL-FEEDBACK-CODE
+ END-IF
+ IF MSGNO NOT EQUAL 294
+ MOVE ERROR-CODE TO CONVERTER-RETURN-CODE
+ END-IF
+ .
+ INSERT-NUMBER.
+ MOVE ZERO TO CMP-TMPA
+ INSPECT EEC
+ TALLYING CMP-TMPA FOR LEADING ZEROS
+ COMPUTE CMP-TMPB = 9 - CMP-TMPA
+ MOVE CMP-TMPB TO VSTRING-LENGTH
+ MOVE EEC (CMP-TMPA + 1:CMP-TMPB)
+ TO VSTRING-DATA
+ PERFORM INSERT-VSTRING
+ .
+ INSERT-VSTRING.
+ ADD 1 TO INSERTNO
+ CALL 'CEECMI' USING
+ NEW-CONDITION INSERTNO
+ VSTRING FEEDBACK-CODE
+ PERFORM CHECK-LE-SERVICE-FC
+ .
+ CHECK-LE-SERVICE-FC.
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-7
+ DISPLAY CONVERTER-ERROR-8 ' '
+ FACILITY OF FEEDBACK-CODE
+ MSG-NO OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-9
+ STOP RUN
+ END-IF
+ .
+ REGISTER-EXCEPTION-HANDLER.
+ SET ROUTINE
+ TO ENTRY 'EPSCSMRE'
+ SET TOKEN TO ADDRESS OF CEESRP-DATA
+ CALL 'CEEHDLR' USING
+ ROUTINE TOKEN FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-3
+ STOP RUN
+ END-IF
+ .
+ UNREGISTER-EXCEPTION-HANDLER.
+ CALL 'CEEHDLU' USING
+ ROUTINE FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-4
+ STOP RUN
+ END-IF
+ .
+ END PROGRAM 'EPSCSMRO'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Language Structure to XML Markup Generator
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRC'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ LOCAL-STORAGE SECTION.
+ 1 CMP-TMPA PIC 9(9) COMP.
+ 1 CMP-TMPB PIC 9(9) COMP.
+ 1 VALID-TEXT-FLAG PIC X VALUE 'Y'.
+ 1 NEXT-CHAR PIC X.
+ LINKAGE SECTION.
+ 1 INSTRUCTIONS.
+ 2 INSTRUCT OCCURS 22 TIMES
+ INDEXED BY INSTRUCT-NDX.
+ 3 MBOPCODE PIC X.
+ 3 MBWSPOPT PIC X.
+ 3 MBDNMPTR POINTER.
+ 3 MBDATPTR POINTER.
+ 3 MBDATLEN PIC 9(9) COMP.
+ 3 MBDATYPE PIC X.
+ 3 MBSTGPTR POINTER.
+ 3 MBETGPTR POINTER.
+ 1 XML-BUFFER-OFFSET PIC 9(9) COMP.
+ 1 XML-BUFFER PIC X(758).
+ 1 MSGBLD-RETURN-CODE PIC S9(9) COMP.
+ 1 XML-TAG-DESCRIPTOR.
+ 2 XML-TAG-LEN PIC 9(4) COMP.
+ 2 XML-TAG PIC X(88).
+ 1 CONTENT-TXT PIC X(128).
+ 1 LAST-INSTRUCTION PIC 9(9) COMP.
+ PROCEDURE DIVISION USING
+ INSTRUCTIONS XML-BUFFER-OFFSET
+ XML-BUFFER LAST-INSTRUCTION
+ RETURNING
+ MSGBLD-RETURN-CODE.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET INSTRUCT-NDX TO 1
+ PERFORM UNTIL MBOPCODE(INSTRUCT-NDX) = X'FF'
+ EVALUATE MBOPCODE(INSTRUCT-NDX)
+ WHEN X'E0'
+ PERFORM START-TAG
+ WHEN X'E1'
+ PERFORM END-TAG
+ WHEN X'B0'
+ PERFORM START-TAG
+ PERFORM CONVERT-NUMERIC
+ PERFORM END-TAG
+ WHEN X'A0'
+ PERFORM START-TAG
+ PERFORM CONVERT-ALPHANUMERIC
+ PERFORM END-TAG
+ WHEN X'F0'
+ PERFORM START-TAG
+ PERFORM CONVERT-FLOAT
+ PERFORM END-TAG
+ END-EVALUATE
+ SET INSTRUCT-NDX UP BY 1
+ END-PERFORM
+ GOBACK
+ .
+ START-TAG.
+ SET ADDRESS OF XML-TAG-DESCRIPTOR
+ TO MBSTGPTR(INSTRUCT-NDX)
+ MOVE XML-TAG(1:XML-TAG-LEN)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:XML-TAG-LEN)
+ ADD XML-TAG-LEN TO XML-BUFFER-OFFSET
+ .
+ END-TAG.
+ SET ADDRESS OF XML-TAG-DESCRIPTOR
+ TO MBETGPTR(INSTRUCT-NDX)
+ MOVE XML-TAG(1:XML-TAG-LEN)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:XML-TAG-LEN)
+ ADD XML-TAG-LEN TO XML-BUFFER-OFFSET
+ .
+ CONVERT-ALPHANUMERIC.
+ CALL 'XCHRFLTR' USING
+ BY VALUE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE VALID-TEXT-FLAG
+ IF VALID-TEXT-FLAG EQUAL 'Y'
+ CALL 'XWSPFLTR' USING
+ BY VALUE MBWSPOPT(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATYPE(INSTRUCT-NDX)
+ SET ADDRESS OF CONTENT-TXT
+ TO MBDATPTR(INSTRUCT-NDX)
+ PERFORM VARYING CMP-TMPA FROM 1 BY 1
+ UNTIL CMP-TMPA > MBDATLEN(INSTRUCT-NDX)
+ MOVE CONTENT-TXT(CMP-TMPA:1) TO NEXT-CHAR
+ EVALUATE NEXT-CHAR
+ WHEN '&'
+ MOVE '&'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:5)
+ ADD 5 TO XML-BUFFER-OFFSET
+ WHEN '<'
+ MOVE '<'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:4)
+ ADD 4 TO XML-BUFFER-OFFSET
+ WHEN '>'
+ MOVE '>'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:4)
+ ADD 4 TO XML-BUFFER-OFFSET
+ WHEN ''''
+ MOVE '''
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:6)
+ ADD 6 TO XML-BUFFER-OFFSET
+ WHEN '"'
+ MOVE '"'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:6)
+ ADD 6 TO XML-BUFFER-OFFSET
+ WHEN OTHER
+ MOVE NEXT-CHAR
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:1)
+ ADD 1 TO XML-BUFFER-OFFSET
+ END-EVALUATE
+ END-PERFORM
+ END-IF
+ .
+ CONVERT-NUMERIC.
+ SET ADDRESS OF CONTENT-TXT
+ TO MBDATPTR(INSTRUCT-NDX)
+ CALL 'XWSPFLTR' USING
+ BY VALUE MBWSPOPT(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATYPE(INSTRUCT-NDX)
+ MOVE MBDATLEN(INSTRUCT-NDX)
+ TO CMP-TMPA
+ IF CMP-TMPA > 0
+ MOVE CONTENT-TXT(1:CMP-TMPA)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:CMP-TMPA)
+ ADD CMP-TMPA TO XML-BUFFER-OFFSET
+ ELSE
+ MOVE '0'
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:1)
+ ADD 1 TO XML-BUFFER-OFFSET
+ END-IF
+ .
+ CONVERT-FLOAT.
+ SET ADDRESS OF CONTENT-TXT
+ TO MBDATPTR(INSTRUCT-NDX)
+ CALL 'XWSPFLTR' USING
+ BY VALUE MBWSPOPT(INSTRUCT-NDX)
+ BY VALUE MBDATPTR(INSTRUCT-NDX)
+ BY REFERENCE MBDATLEN(INSTRUCT-NDX)
+ BY VALUE MBDATYPE(INSTRUCT-NDX)
+ MOVE MBDATLEN(INSTRUCT-NDX)
+ TO CMP-TMPA
+ MOVE CONTENT-TXT(1:CMP-TMPA)
+ TO XML-BUFFER(XML-BUFFER-OFFSET + 1:CMP-TMPA)
+ ADD CMP-TMPA TO XML-BUFFER-OFFSET
+ .
+ * -------------------------------------------------------------
+ * Language Structure to XML Character Filter
+ * -------------------------------------------------------------
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'XCHRFLTR'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 X0000003E.
+ 2 PIC X(24) USAGE DISPLAY
+ VALUE X'0001020304060708090A0B0C0E0F1011121314161718191A'.
+ 2 PIC X(24) USAGE DISPLAY
+ VALUE X'1B1C1D1E1F2021222324262728292A2B2C2D2E2F30313233'.
+ 2 PIC X(13) USAGE DISPLAY
+ VALUE X'3435363738393A3B3C3D3E3FFF'.
+ 1 ILLEGAL-XML-CHARS REDEFINES X0000003E
+ PIC X(61).
+ LOCAL-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 CONTENT-LEN PIC 9(9) COMP.
+ 1 CONTENT-PTR POINTER.
+ 1 CONTENT-TXT PIC X(128).
+ 1 VALID-TEXT-FLAG PIC X.
+ PROCEDURE DIVISION USING BY VALUE CONTENT-LEN CONTENT-PTR
+ BY REFERENCE VALID-TEXT-FLAG.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CONTENT-TXT TO CONTENT-PTR
+ INSPECT CONTENT-TXT(1:CONTENT-LEN) CONVERTING
+ ILLEGAL-XML-CHARS TO SPACES
+ MOVE 'Y' TO VALID-TEXT-FLAG
+ GOBACK
+ .
+ END PROGRAM 'XCHRFLTR'.
+ * -------------------------------------------------------------
+ * Language Structure to XML WhiteSpace Filter
+ * -------------------------------------------------------------
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'XWSPFLTR'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LOCAL-STORAGE SECTION.
+ 1 CONTENT-BUF PIC X(128).
+ 1 CONTENT-BUF-NDX PIC 9(9) COMP.
+ 1 CONTENT-TXT-NDX PIC 9(9) COMP.
+ 1 CMP-TMPA PIC 9(9) COMP.
+ 1 CMP-TMPB PIC 9(9) COMP.
+ LINKAGE SECTION.
+ 1 CONTENT-WSP PIC X.
+ 1 CONTENT-PTR POINTER.
+ 1 CONTENT-LEN PIC 9(9) COMP.
+ 1 CONTENT-TYPE PIC X.
+ 1 CONTENT-TXT PIC X(128).
+ PROCEDURE DIVISION USING
+ BY VALUE CONTENT-WSP
+ BY VALUE CONTENT-PTR
+ BY REFERENCE CONTENT-LEN
+ BY VALUE CONTENT-TYPE
+ .
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CONTENT-TXT
+ TO CONTENT-PTR
+ IF CONTENT-TYPE = 'X' OR
+ CONTENT-TYPE = 'D' OR
+ CONTENT-TYPE = 'U'
+ EVALUATE CONTENT-WSP
+ WHEN X'C3'
+ PERFORM REPLACE-CTRL-CHARS
+ PERFORM TRIM-LEADING-SPACES
+ PERFORM TRIM-TRAILING-SPACES
+ PERFORM COLLAPSE-SPACES
+ WHEN X'C1'
+ PERFORM REPLACE-CTRL-CHARS
+ WHEN X'C2'
+ PERFORM TRIM-TRAILING-SPACES-COMPAT
+ END-EVALUATE
+ ELSE
+ IF CONTENT-TYPE = 'N' OR
+ CONTENT-TYPE = 'F' OR
+ CONTENT-TYPE = 'B'
+ PERFORM TRIM-LEADING-SPACES
+ PERFORM TRIM-TRAILING-SPACES
+ END-IF
+ IF CONTENT-TYPE = 'N'
+ PERFORM TRIM-LEADING-ZEROS
+ END-IF
+ END-IF
+ GOBACK
+ .
+ TRIM-LEADING-SPACES.
+ MOVE 1 TO CONTENT-TXT-NDX
+ PERFORM TEST BEFORE
+ UNTIL CONTENT-TXT-NDX >= CONTENT-LEN OR
+ CONTENT-TXT(CONTENT-TXT-NDX:1) NOT = SPACE
+ ADD 1 TO CONTENT-TXT-NDX
+ END-PERFORM
+ IF CONTENT-TXT-NDX > 1
+ COMPUTE CONTENT-LEN
+ = CONTENT-LEN - (CONTENT-TXT-NDX - 1)
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:CONTENT-LEN)
+ TO CONTENT-BUF(1:CONTENT-LEN)
+ MOVE CONTENT-BUF(1:CONTENT-LEN)
+ TO CONTENT-TXT(1:CONTENT-LEN)
+ END-IF
+ .
+ TRIM-TRAILING-SPACES.
+ PERFORM TEST BEFORE
+ VARYING CONTENT-LEN FROM CONTENT-LEN BY -1
+ UNTIL CONTENT-LEN = 0
+ OR CONTENT-TXT(CONTENT-LEN:1) NOT = SPACE
+ END-PERFORM
+ .
+ TRIM-TRAILING-SPACES-COMPAT.
+ PERFORM TEST BEFORE
+ VARYING CONTENT-LEN FROM CONTENT-LEN BY -1
+ UNTIL CONTENT-LEN = 1
+ OR CONTENT-TXT(CONTENT-LEN:1) NOT = SPACE
+ END-PERFORM
+ .
+ REPLACE-CTRL-CHARS.
+ INSPECT CONTENT-TXT(1:CONTENT-LEN) REPLACING ALL
+ X'05' BY SPACE X'0B' BY SPACE
+ X'0D' BY SPACE X'25' BY SPACE
+ .
+ COLLAPSE-SPACES.
+ MOVE 1 TO CONTENT-TXT-NDX
+ MOVE 1 TO CONTENT-BUF-NDX
+ PERFORM TEST BEFORE
+ UNTIL CONTENT-TXT-NDX > CONTENT-LEN
+ IF CONTENT-TXT(CONTENT-TXT-NDX:1) = SPACE
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:1)
+ TO CONTENT-BUF(CONTENT-BUF-NDX:1)
+ ADD 1 TO CONTENT-TXT-NDX
+ ADD 1 TO CONTENT-BUF-NDX
+ PERFORM TEST BEFORE
+ UNTIL CONTENT-TXT-NDX > CONTENT-LEN OR
+ CONTENT-TXT(CONTENT-TXT-NDX:1) NOT = SPACE
+ ADD 1 TO CONTENT-TXT-NDX
+ END-PERFORM
+ ELSE
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:1)
+ TO CONTENT-BUF(CONTENT-BUF-NDX:1)
+ ADD 1 TO CONTENT-TXT-NDX
+ ADD 1 TO CONTENT-BUF-NDX
+ END-IF
+ END-PERFORM
+ COMPUTE CONTENT-LEN = CONTENT-BUF-NDX - 1
+ MOVE CONTENT-BUF(1:CONTENT-LEN)
+ TO CONTENT-TXT(1:CONTENT-LEN)
+ .
+ TRIM-LEADING-ZEROS.
+ MOVE 1 TO CONTENT-TXT-NDX
+ MOVE 1 TO CONTENT-BUF-NDX
+ IF CONTENT-LEN > 0
+ AND CONTENT-TXT(1:1) = '-'
+ MOVE CONTENT-TXT(1:1)
+ TO CONTENT-BUF(1:1)
+ ADD 1 TO CONTENT-TXT-NDX
+ ADD 1 TO CONTENT-BUF-NDX
+ END-IF
+ COMPUTE CMP-TMPA
+ = CONTENT-LEN - (CONTENT-TXT-NDX - 1)
+ IF CMP-TMPA > 0 AND
+ CONTENT-TXT(CONTENT-TXT-NDX:1) = '0'
+ INITIALIZE CMP-TMPB
+ INSPECT CONTENT-TXT(CONTENT-TXT-NDX:CMP-TMPA)
+ TALLYING CMP-TMPB FOR LEADING '0'
+ IF CMP-TMPB > 0
+ COMPUTE CMP-TMPA
+ = CONTENT-TXT-NDX + CMP-TMPB
+ IF CONTENT-TXT(CMP-TMPA:1) = '.'
+ SUBTRACT 1 FROM CMP-TMPB
+ END-IF
+ ADD CMP-TMPB TO CONTENT-TXT-NDX
+ END-IF
+ END-IF
+ COMPUTE CMP-TMPA
+ = CONTENT-LEN - (CONTENT-TXT-NDX - 1)
+ IF CMP-TMPA > 0
+ MOVE CONTENT-TXT(CONTENT-TXT-NDX:CMP-TMPA)
+ TO CONTENT-BUF(CONTENT-BUF-NDX:CMP-TMPA)
+ ADD CMP-TMPA TO CONTENT-BUF-NDX
+ END-IF
+ COMPUTE CONTENT-LEN = CONTENT-BUF-NDX - 1
+ IF CONTENT-LEN > 0
+ MOVE CONTENT-BUF(1:CONTENT-LEN)
+ TO CONTENT-TXT(1:CONTENT-LEN)
+ END-IF
+ .
+ END PROGRAM 'XWSPFLTR'.
+ END PROGRAM 'EPSCSMRC'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Required Length in Bytes of the Language Structure to XML Ou
+ * tput Buffer
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRK'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 LS2XML-XML-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ LS2XML-XML-BUFFER-LENGTH
+ LS2XML-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF LS2XML-XML-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 758
+ TO LS2XML-XML-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO LS2XML-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRK'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Maximum Length in Bytes of the Language Structure to XML Inp
+ * ut Buffer
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRL'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ LINKAGE SECTION.
+ 1 LS2XML-LANG-BUFFER-LENGTH PIC 9(9) COMP.
+ 1 LS2XML-PROPERTIES PIC X.
+ PROCEDURE DIVISION USING
+ LS2XML-LANG-BUFFER-LENGTH
+ LS2XML-PROPERTIES
+ .
+ MAINLINE SECTION.
+ IF ADDRESS OF LS2XML-LANG-BUFFER-LENGTH
+ NOT EQUAL NULL
+ MOVE 106
+ TO LS2XML-LANG-BUFFER-LENGTH
+ END-IF
+ IF ADDRESS OF LS2XML-PROPERTIES
+ NOT EQUAL NULL
+ MOVE X'00'
+ TO LS2XML-PROPERTIES
+ END-IF
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRL'.
+ * *********************************************
+ * ************************RD/z**7.5************************
+ * *************************************************************
+ * Language Structure to XML Exception Handler
+ * *************************************************************
+ * ************************RD/z**7.5************************
+ * *********************************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'EPSCSMRE'.
+ AUTHOR. WD4Z.
+ INSTALLATION. 9.0.0.V200809191411.
+ DATE-WRITTEN. 1/19/09 2:11 PM.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 CONVERTER-ERROR-6.
+ 2 PIC X(39) USAGE DISPLAY
+ VALUE 'Failed To Resume Execution Of Converter'.
+ LOCAL-STORAGE SECTION.
+ 1 FEEDBACK-CODE.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ LINKAGE SECTION.
+ 1 CEESRP-DATA.
+ 2 RECOVERY-POINT PIC S9(9) COMP.
+ 2 NUMVAL-ERROR PIC X.
+ 2 UNICODE-ERROR PIC X.
+ 2 OTHER-ERROR PIC X.
+ 2 SAVED-CONDITION PIC X(12).
+ 1 TOKEN POINTER.
+ 1 RESULT PIC S9(9) COMP.
+ 88 RESUME VALUE 10.
+ 1 CURRENT-CONDITION.
+ 2 CONDITION-TOKEN-VALUE.
+ 88 CEE000 VALUE X'0000000000000000'.
+ 88 CEE0E7 VALUE X'000101C749C3C5C5'.
+ 3 SEVERITY PIC S9(4) BINARY.
+ 3 MSG-NO PIC S9(4) BINARY.
+ 3 CASE-SEV-CTL PIC X.
+ 3 FACILITY PIC XXX.
+ 2 I-S-INFO PIC S9(9) BINARY.
+ 1 NEW-CONDITION PIC X(12).
+ PROCEDURE DIVISION USING CURRENT-CONDITION TOKEN
+ RESULT NEW-CONDITION.
+ MAINLINE SECTION.
+ * -------------------------------------------------------------
+ * Please Do Not Modify This Program
+ * -------------------------------------------------------------
+ SET ADDRESS OF CEESRP-DATA TO TOKEN
+ SET RESUME TO TRUE
+ CALL 'CEEMRCE' USING RECOVERY-POINT FEEDBACK-CODE
+ IF NOT CEE000 OF FEEDBACK-CODE
+ DISPLAY CONVERTER-ERROR-6
+ END-IF
+ IF FACILITY OF CURRENT-CONDITION = 'IGZ'
+ EVALUATE MSG-NO OF CURRENT-CONDITION
+ WHEN 272
+ MOVE 'Y' TO UNICODE-ERROR
+ WHEN OTHER
+ MOVE 'Y' TO OTHER-ERROR
+ END-EVALUATE
+ ELSE
+ MOVE 'Y' TO OTHER-ERROR
+ END-IF
+ MOVE CURRENT-CONDITION TO SAVED-CONDITION
+ GOBACK
+ .
+ END PROGRAM 'EPSCSMRE'.
diff --git a/Build/MortgageApplicationV2/MortgageApplication/cobol/epsmlist.cbl b/Build/MortgageApplicationV2/MortgageApplication/cobol/epsmlist.cbl
new file mode 100644
index 00000000..e44b8b92
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/cobol/epsmlist.cbl
@@ -0,0 +1,224 @@
+ ID DIVISION.
+ PROGRAM-ID. EPSMLIST.
+ * THIS DEMONSTRATES CICS/DEBUG - EPSDEMOS 2008
+ *
+ * THIS PROGRAM WILL RECEIVE A DATE AND COVERT THE DATE TO
+ * AN INTEGER IN A CALLED PROGRAM TO DETERMINE DAYS FROM
+ * CURRENT DATE.
+ *
+ * (C) 2008 IBM.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. IBM-FLEX-ES.
+ OBJECT-COMPUTER. IBM-FLEX-ES.
+ *
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 W-FLAGS.
+ 10 W-SEND-FLAG PIC X.
+ 88 SEND-ERASE VALUE '1'.
+ 88 SEND-DATAONLY VALUE '2'.
+ 88 SEND-MAPONLY VALUE '3'.
+ 88 SEND-DATAONLY-ALARM VALUE '4'.
+
+ 01 W-CONVERSIONS.
+ 05 W-PMT-CNVRT PIC X(12).
+ 05 W-PMT-NUMBER
+ REDEFINES W-PMT-CNVRT
+ PIC 9(10)V99.
+ 05 WS-FORMAT-NUMBER PIC Z,ZZZ,ZZ9.99.
+ 05 W-PRINC-CNVRT PIC X(12).
+ 05 W-PRINC-NUMBER
+ REDEFINES W-PRINC-CNVRT
+ PIC 9(10)V99.
+
+ 01 W-CALL-PROGRAM PIC X(8).
+ 01 RESPONSE PIC S9(8) COMP.
+ 01 INTERNAL-PROGRAM-VARIABLES.
+ 05 RID-LENGTH PIC S9(9) COMP.
+ 05 DISP-COUNT PIC S9(4) COMP.
+ 05 MAX-LOOP PIC S9(4) COMP
+ VALUE IS 8.
+ 05 END-OF-FILE PIC X.
+ 05 CLOSE-FILE PIC X.
+ *
+ 01 W-RETIREMENT-WA PIC 9(4).
+ 01 W-COMAREA-LENGTH PIC 9(4) COMP.
+
+ 01 SAVE-COMM-AREA.
+ COPY EPSMTCOM.
+
+ 01 END-OF-TRANS-MSG PIC X(30)
+ VALUE 'END OF TRANSACTION - THANK YOU'.
+ COPY DFHAID.
+ * COPY DFHEIBLK.
+
+ COPY EPSMLIS.
+ 01 OUTMAP REDEFINES EPSMLISI.
+ 03 FILLER PIC X(110).
+ 03 OUTMAP-REPEATE OCCURS 8 TIMES.
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-COMPANY PIC X(24).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-PHONE-NUM PIC X(13).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-RATE PIC X(5).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-LOAN PIC X(12).
+ 05 FILLER PIC X(5).
+ 05 OUTMAP-YEARS PIC X(2).
+ 03 FILLER PIC X(5).
+ 03 OUTMAP-MSG PIC X(40).
+
+ COPY EPSNBRPM.
+
+ COPY EPSMORTF.
+
+ 01 W-COMMUNICATION-AREA.
+ COPY EPSMTCOM.
+
+ LINKAGE SECTION.
+
+ 01 DFHCOMMAREA.
+ COPY EPSMTCOM.
+
+ PROCEDURE DIVISION USING DFHCOMMAREA.
+
+ * JPH - DO I need this for files
+ * EXEC CICS HANDLE CONDITION H900-NOT-FOUND
+
+
+ EPSCMORT-MAINLINE.
+ MOVE LENGTH OF DFHCOMMAREA to W-COMAREA-LENGTH.
+ MOVE DFHCOMMAREA TO SAVE-COMM-AREA.
+ EVALUATE TRUE
+ WHEN EIBCALEN = ZERO
+ * First time in - Show Screen
+ PERFORM A100-PROCESS-MAP
+ WHEN EIBAID = DFHCLEAR
+ * Process CLEAR key
+ EXEC CICS
+ RETURN
+ END-EXEC
+ WHEN EIBAID = DFHPF3 OR DFHPF12
+ * Process END/RETURN keys
+ EXEC CICS
+ RETURN
+ END-EXEC
+ WHEN EIBAID = DFHENTER
+ * Process ENTER Key
+ PERFORM A100-PROCESS-MAP
+ WHEN OTHER
+ * Present Invalid Key
+ PERFORM A100-PROCESS-MAP
+ END-EVALUATE
+ .
+ MOVE SAVE-COMM-AREA TO DFHCOMMAREA.
+ EXEC CICS RETURN END-EXEC.
+
+ A100-PROCESS-MAP.
+
+ PERFORM A310-ERASE-MAP.
+
+ MOVE 0 TO RID-LENGTH.
+ MOVE 'N' TO CLOSE-FILE.
+ MOVE 'N' TO END-OF-FILE.
+
+ EXEC CICS STARTBR DATASET('EPSMORTF')
+ RIDFLD(RID-LENGTH) RBA
+ EQUAL
+ RESP(RESPONSE) END-EXEC.
+
+ IF (RESPONSE = DFHRESP(NORMAL))
+ MOVE 'Y' TO CLOSE-FILE
+ MOVE 1 TO DISP-COUNT
+ PERFORM A150-PROCESS-FILE
+ UNTIL END-OF-FILE = 'Y'
+ OR DISP-COUNT > MAX-LOOP
+ ELSE
+ MOVE 'ERROR WITH START' TO EPCMP1O
+ MOVE RESPONSE TO EPLOAN1O
+ END-IF
+ .
+
+
+ IF CLOSE-FILE = 'Y'
+ EXEC CICS ENDBR FILE('EPSMORTF') END-EXEC
+ END-IF
+ .
+
+ PERFORM A300-SEND-MAP.
+
+ A150-PROCESS-FILE.
+
+ EXEC CICS READNEXT FILE('EPSMORTF')
+ INTO(MORTGAGE-COMPANY-INFO)
+ RIDFLD(RID-LENGTH)
+ RBA RESP(RESPONSE)
+ END-EXEC
+ .
+ IF (RESPONSE = DFHRESP(NORMAL))
+ IF EPSPCOM-PRINCIPLE-DATA OF SAVE-COMM-AREA
+ < MORT-FILE-LOAN
+ AND EPSPCOM-QUOTED-INTEREST-RATE OF SAVE-COMM-AREA
+ > MORT-FILE-RATE
+ MOVE MORT-FILE-COMPANY
+ TO OUTMAP-COMPANY(DISP-COUNT)
+ MOVE MORT-FILE-PHONE-NUM
+ TO OUTMAP-PHONE-NUM(DISP-COUNT)
+ PERFORM A600-CALCULATE-MORTGAGE
+ MOVE MORT-FILE-RATE
+ TO WS-FORMAT-NUMBER
+ MOVE WS-FORMAT-NUMBER(7:5)
+ TO OUTMAP-RATE(DISP-COUNT)
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT OF DFHCOMMAREA
+ TO WS-FORMAT-NUMBER
+ MOVE WS-FORMAT-NUMBER TO OUTMAP-LOAN(DISP-COUNT)
+ MOVE MORT-FILE-YEARS
+ TO OUTMAP-YEARS(DISP-COUNT)
+ ADD 1 TO DISP-COUNT
+ END-IF
+ ELSE
+ IF (RESPONSE NOT = DFHRESP(ENDFILE))
+ MOVE 'ERROR WITH READ NEXT' TO EPCMP1O
+ MOVE RESPONSE TO EPLOAN1O
+ ELSE
+ MOVE 'Y' TO END-OF-FILE
+ END-IF
+ END-IF
+ .
+
+ A300-SEND-MAP.
+ EXEC CICS
+ SEND MAP ('EPSMLIS')
+ MAPSET('EPSMLIS')
+ FROM(EPSMLISO)
+ END-EXEC.
+
+ A310-ERASE-MAP.
+ MOVE LOW-VALUES TO EPSMLISO.
+ EXEC CICS
+ SEND MAP ('EPSMLIS')
+ MAPSET('EPSMLIS')
+ FROM(EPSMLISO)
+ ERASE
+ END-EXEC.
+
+
+ A600-CALCULATE-MORTGAGE.
+ MOVE SAVE-COMM-AREA TO DFHCOMMAREA.
+ MOVE 'Y' TO EPSPCOM-YEAR-MONTH-IND
+ OF DFHCOMMAREA.
+ MOVE MORT-FILE-RATE TO EPSPCOM-QUOTED-INTEREST-RATE
+ OF DFHCOMMAREA.
+ MOVE MORT-FILE-YEARS TO EPSPCOM-NUMBER-OF-YEARS
+ OF DFHCOMMAREA.
+ MOVE 'EPSCSMRT' TO W-CALL-PROGRAM
+ EXEC CICS LINK PROGRAM( W-CALL-PROGRAM )
+ COMMAREA( DFHCOMMAREA )
+ END-EXEC
+ MOVE EPSPCOM-RETURN-MONTH-PAYMENT
+ OF DFHCOMMAREA
+ TO WS-FORMAT-NUMBER.
+ MOVE WS-FORMAT-NUMBER TO OUTMAP-LOAN(DISP-COUNT).
diff --git a/Build/MortgageApplicationV2/MortgageApplication/cobol/epsmpmt.cbl b/Build/MortgageApplicationV2/MortgageApplication/cobol/epsmpmt.cbl
new file mode 100644
index 00000000..9a148e65
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/cobol/epsmpmt.cbl
@@ -0,0 +1,154 @@
+ CBL NUMPROC(MIG),FLAG(I,W),RENT
+ ID DIVISION.
+ PROGRAM-ID. EPSMPMT.
+ * THIS IS A CALLED PROGRAM EXAMPLE FOR DEMONSTRATION
+ *
+ * THIS PROGRAM WILL BE CALLED BY ANOTHER, RECEIVE
+ * THE FOLLOWING INFOMATION AND RETURN A MONTLY PAYMENT AMOUNT
+ * INPUT:
+ * ORIGINAL PRINCIPLE AMOUNT
+ * YEARS OR MONTH INDICATOR
+ * NUMBER OF YEARS
+ * NUMBER OF MONTHS
+ * INTEREST RATE
+ * OUTPUT:
+ * MONTHLY PAYMENT
+ *
+ * (C) 2019 IBM
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. FLEX-ES.
+ OBJECT-COMPUTER. FLEX-ES.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 WS-STATIC-DATA.
+ 03 STATIC-MAXIMUM-PRINCIPLE PIC 9(9)V99
+ VALUE 100000000.01.
+ 03 STATIC-ERRORS.
+ 05 FILLER PIC 99 VALUE 1.
+ 05 FILLER PIC X(80)
+ VALUE 'PRINCIPLE AMOUNT IS NEGATIVE'.
+ 05 FILLER PIC 99 VALUE 2.
+ 05 FILLER PIC X(80)
+ VALUE 'PRINCIPLE EXCEEDED MAXIMUM AMOUNT'.
+ 05 FILLER PIC 99 VALUE 3.
+ 05 FILLER PIC X(80)
+ VALUE 'NEGATIVE INTEREST RATE'.
+ 05 FILLER PIC 99 VALUE 4.
+ 05 FILLER PIC X(80)
+ VALUE 'YEARS INDICATED, BUT YEARS ZERO OR LESS'.
+ 05 FILLER PIC 99 VALUE 5.
+ 05 FILLER PIC X(80)
+ VALUE 'ZERO OR LESS MONTHS'.
+ 05 FILLER PIC 99 VALUE 6.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 7.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 8.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 9.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 10.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 03 STATIC-ERROR-TBL REDEFINES STATIC-ERRORS.
+ 05 STATIC-ERROR-TABLE OCCURS 10 TIMES.
+ 07 ERROR-INDICATOR PIC 99.
+ 07 ERROR-TEXT PIC X(80).
+ 01 WS-INDICATORS-AND-FLAGS.
+ 03 VALIDATION-INDICATOR PIC 9.
+ 01 WS-WORK-AMOUNTS.
+ 03 WS-NUMBER-OF-MONTHS PIC 9(9)V99 COMP.
+ 03 WS-CALC-INTEREST COMP-1.
+ * 03 L COMP-1.
+ * 03 C COMP-1.
+ * 03 N PIC S9(5) COMP.
+ * 03 P COMP-1.
+ 01 Loan Pic 9(9)V99.
+ 01 Payment Pic 9(9)V99.
+ 01 Interest Pic 9(9)V9999.
+ 01 Number-Periods Pic 999.
+ *
+ LINKAGE SECTION.
+ *
+ COPY EPSPDATA.
+
+ PROCEDURE DIVISION USING EPSPDATA.
+ *
+ A000-MAINLINE.
+ MOVE 0 TO VALIDATION-INDICATOR.
+ MOVE 0 TO WS-NUMBER-OF-MONTHS.
+ PERFORM A100-VALIDATE-INPUT.
+ IF VALIDATION-INDICATOR = 0
+ PERFORM A200-CALULATE-MONTH-PAYMENT
+ * PERFORM A300-TRY2
+ ELSE
+ PERFORM A999-RETURN-ERROR-TEXT
+ END-IF.
+ GOBACK
+ .
+ *
+ A100-VALIDATE-INPUT.
+ MOVE SPACES TO EPSPDATA-RETURN-ERROR.
+ IF EPSPDATA-PRINCIPLE-DATA > 0
+ IF EPSPDATA-PRINCIPLE-DATA > STATIC-MAXIMUM-PRINCIPLE
+ MOVE 2 TO VALIDATION-INDICATOR
+ END-IF
+ ELSE
+ MOVE 1 TO VALIDATION-INDICATOR
+ END-IF
+ .
+ IF VALIDATION-INDICATOR = 0
+ IF EPSPDATA-QUOTED-INTEREST-RATE <= 0
+ MOVE 3 TO VALIDATION-INDICATOR
+ ELSE
+ IF EPSPDATA-YEAR-MONTH-IND = 'Y'
+ COMPUTE WS-NUMBER-OF-MONTHS =
+ EPSPDATA-NUMBER-OF-YEARS * 12
+ ELSE
+ MOVE EPSPDATA-NUMBER-OF-MONTHS TO
+ WS-NUMBER-OF-MONTHS
+ END-IF
+ END-IF
+ END-IF
+ .
+ COMPUTE WS-CALC-INTEREST =
+ (EPSPDATA-QUOTED-INTEREST-RATE / 100) / 12
+ .
+
+ A200-CALULATE-MONTH-PAYMENT.
+ COMPUTE EPSPDATA-RETURN-MONTH-PAYMENT
+ = EPSPDATA-PRINCIPLE-DATA *
+ (WS-CALC-INTEREST *
+ (1 + WS-CALC-INTEREST) ** WS-NUMBER-OF-MONTHS) /
+ (((1 + WS-CALC-INTEREST )
+ ** WS-NUMBER-OF-MONTHS) - 1)
+ .
+ * DISPLAY 'RETURN PAYMENT = ' EPSPDATA-RETURN-MONTH-PAYMENT.
+ * COMPUTE C = WS-CALC-INTEREST.
+ * COMPUTE N = WS-NUMBER-OF-MONTHS.
+ * COMPUTE L = EPSPDATA-PRINCIPLE-DATA.
+ * COMPUTE P = L * (C * (1 + C ) ** N)/(((1 + C) ** N) - 1).
+
+
+ * DEAD CODE USED FOR TESTING
+ A300-TRY2.
+ MOVE EPSPDATA-PRINCIPLE-DATA TO Loan.
+ COMPUTE Interest = EPSPDATA-QUOTED-INTEREST-RATE / 100.
+ MOVE WS-NUMBER-OF-MONTHS TO Number-Periods.
+ Compute Payment =
+ Loan * Function Annuity((Interest / 12) Number-Periods)
+ DISPLAY 'Verify Payment = ' Payment.
+
+ A999-RETURN-ERROR-TEXT.
+ MOVE ERROR-TEXT(VALIDATION-INDICATOR) TO
+ EPSPDATA-RETURN-ERROR
+ GOBACK
+ .
+
+ *
diff --git a/Build/MortgageApplicationV2/MortgageApplication/cobol/epsnbrvl.cbl b/Build/MortgageApplicationV2/MortgageApplication/cobol/epsnbrvl.cbl
new file mode 100644
index 00000000..8990c45e
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/cobol/epsnbrvl.cbl
@@ -0,0 +1,186 @@
+ ID DIVISION.
+ PROGRAM-ID. EPSNBRVL
+ * THIS IS A CALLED PROGRAM EXAMPLE FOR DEMONSTRATION
+ *
+ * THIS PROGRAM WILL BE CALLED BY ANOTHER, RECEIVE
+ * THE FOLLOWING INFOMATION AND RETURN A MONTLY PAYMENT AMOUNT
+ * INPUT:
+ * ORIGINAL PRINCIPLE AMOUNT
+ * YEARS OR MONTH INDICATOR
+ * NUMBER OF YEARS
+ * NUMBER OF MONTHS
+ * INTEREST RATE
+ * OUTPUT:
+ * MONTHLY PAYMENT
+ *
+ * (C) 2020 IBM
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. FLEX-ES.
+ OBJECT-COMPUTER. FLEX-ES.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ *
+ 01 WS-STATIC-DATA.
+ 03 STATIC-ERRORS.
+ 05 FILLER PIC 99 VALUE 1.
+ 05 FILLER PIC X(80)
+ VALUE 'NO NUMBER PRESENT'.
+ 05 FILLER PIC 99 VALUE 2.
+ 05 FILLER PIC X(80)
+ VALUE 'SPACES IN NUMBER'.
+ 05 FILLER PIC 99 VALUE 3.
+ 05 FILLER PIC X(80)
+ VALUE 'TOO MANY DEICMAL POINTS'.
+ 05 FILLER PIC 99 VALUE 4.
+ 05 FILLER PIC X(80)
+ VALUE 'YEARS INDICATED, BUT YEARS ZERO OR LESS'.
+ 05 FILLER PIC 99 VALUE 5.
+ 05 FILLER PIC X(80)
+ VALUE 'ZERO OR LESS MONTHS'.
+ 05 FILLER PIC 99 VALUE 6.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 7.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 8.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 9.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 05 FILLER PIC 99 VALUE 10.
+ 05 FILLER PIC X(80)
+ VALUE ' '.
+ 03 STATIC-ERROR-TBL REDEFINES STATIC-ERRORS.
+ 05 STATIC-ERROR-TABLE OCCURS 10 TIMES.
+ 07 ERROR-INDICATOR PIC 99.
+ 07 ERROR-TEXT PIC X(80).
+ 01 WS-WORK-AMOUNTS.
+ 03 WS-LEADING-SPACES PIC 9(4) COMP VALUE 1.
+ 03 WS-TRAILING-SPACES PIC 9(4) COMP VALUE 0.
+ 03 WS-END-SPACE PIC 9(4) COMP VALUE 0.
+ 03 WS-DECIMAL-SPACE PIC 99 VALUE 0.
+ 03 WS-IDX PIC 9(2) COMP.
+ 03 WS-DEC-IDX PIC 9(2) COMP.
+ 03 WS-NUM-IDX PIC 9(2) COMP.
+
+ 03 WS-MAX-NUMBER-LGTH PIC 9(2) COMP.
+ 03 WS-MAX-FIELD PIC 9(2) COMP.
+ 03 WS-DEC-ADJUST PIC 9.
+
+
+ LINKAGE SECTION.
+ *
+ COPY EPSNBRPM.
+
+ PROCEDURE DIVISION USING EPS-NUMBER-VALIDATION.
+ *
+ A000-MAINLINE.
+ MOVE EPSPARM-MAX-LENGTH TO WS-IDX.
+ MOVE LENGTH OF EPSPARM-VALIDATE-DATA TO WS-MAX-FIELD
+ IF WS-IDX > WS-MAX-FIELD
+ MOVE WS-MAX-FIELD TO WS-IDX
+ ELSE
+ MOVE WS-IDX TO WS-MAX-FIELD
+ END-IF.
+
+ MOVE ZERO TO WS-END-SPACE.
+ MOVE SPACES TO EPSPARM-RETURN-ERROR.
+ MOVE ZERO TO EPSPARM-BINARY-NUMBER
+ EPSPARM-NUMBER
+ EPSPARM-DECIMAL.
+
+ * FIND TRAILING SPACES
+ PERFORM UNTIL WS-IDX = 0
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = SPACES
+ ADD 1 TO WS-TRAILING-SPACES
+ SUBTRACT 1 FROM WS-IDX
+ ELSE
+ MOVE WS-IDX TO WS-END-SPACE
+ MOVE 0 TO WS-IDX
+ END-IF
+ END-PERFORM.
+
+ * FIND LEADING SPACES
+ MOVE 1 TO WS-LEADING-SPACES.
+
+ IF WS-END-SPACE NOT = 0
+ MOVE 1 TO WS-IDX
+ PERFORM UNTIL WS-IDX >= WS-END-SPACE
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = SPACES
+ ADD 1 TO WS-LEADING-SPACES
+ ADD 1 TO WS-IDX
+ ELSE
+ COMPUTE WS-IDX = WS-END-SPACE + 1
+ END-IF
+ END-PERFORM
+ ELSE
+ MOVE STATIC-ERROR-TABLE(1) TO EPSPARM-RETURN-ERROR
+ END-IF.
+
+ MOVE WS-LEADING-SPACES TO WS-IDX.
+ MOVE 1 TO WS-DEC-IDX.
+ MOVE 0 TO WS-DECIMAL-SPACE.
+
+ * FIND DECIMAL POINT
+ PERFORM A002-COMPUTE-DECIMAL
+ UNTIL WS-IDX > WS-END-SPACE
+ .
+
+ IF WS-DECIMAL-SPACE > 0
+ COMPUTE WS-END-SPACE = WS-DECIMAL-SPACE - 1
+ END-IF.
+
+ * VALIDATE NO INTERNAL BLANKS
+ MOVE WS-END-SPACE TO WS-IDX.
+ MOVE LENGTH OF EPSPARM-NUMBER TO WS-NUM-IDX.
+ * SUBTRACT 1 FROM WS-NUM-IDX.
+
+ PERFORM A001-COMPUTE-INTEGER
+ UNTIL WS-IDX < WS-LEADING-SPACES
+ .
+
+ IF EPSPARM-RETURN-ERROR = SPACES
+ COMPUTE EPSPARM-BINARY-NUMBER = EPSPARM-NUMBER
+ + EPSPARM-DECIMAL
+ END-IF.
+ GOBACK
+ .
+
+ A001-COMPUTE-INTEGER.
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = ','
+ SUBTRACT 1 FROM WS-IDX
+ ELSE
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = SPACE
+ OR EPSPARM-VALIDATE-DATA(WS-IDX:1) IS NOT NUMERIC
+ MOVE STATIC-ERROR-TABLE(2) TO EPSPARM-RETURN-ERROR
+ MOVE 0 TO WS-IDX
+ ELSE
+ MOVE EPSPARM-VALIDATE-DATA(WS-IDX:1) TO
+ EPSPARM-NUMBER(WS-NUM-IDX:1)
+ SUBTRACT 1 FROM WS-IDX
+ WS-NUM-IDX
+ END-IF
+ END-IF
+ .
+
+ A002-COMPUTE-DECIMAL.
+ IF WS-DECIMAL-SPACE = 0
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = '.'
+ MOVE WS-IDX TO WS-DECIMAL-SPACE
+ END-IF
+ ELSE
+ IF EPSPARM-VALIDATE-DATA(WS-IDX:1) = '.'
+ MOVE STATIC-ERROR-TABLE(3) TO EPSPARM-RETURN-ERROR
+ MOVE WS-END-SPACE TO WS-IDX
+ MOVE 1 TO WS-DEC-IDX
+ ELSE
+ MOVE EPSPARM-VALIDATE-DATA(WS-IDX:1) TO
+ EPSPARM-DECIMAL(WS-DEC-IDX:1)
+ ADD 1 TO WS-DEC-IDX
+ END-IF
+ END-IF
+ ADD 1 TO WS-IDX
+ .
diff --git a/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmortf.cpy b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmortf.cpy
new file mode 100644
index 00000000..04fee56d
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmortf.cpy
@@ -0,0 +1,11 @@
+000100 01 MORTGAGE-COMPANY-INFO.
+000200 03 MORT-FILE-COMPANY PIC X(24).
+000300 03 MORT-FILE-PHONE-NUM PIC X(13).
+000400 03 MORT-FILE-RATE PIC 9(3)V99.
+000401 03 MORT-FILE-RATE-RDF REDEFINES MORT-FILE-RATE
+000403 PIC X(5).
+000500 03 MORT-FILE-LOAN PIC 9(10)V99.
+000501 03 MORT-FILE-LOAN-RDF REDEFINES MORT-FILE-LOAN
+000503 PIC X(12).
+000600 03 MORT-FILE-YEARS PIC 9(2).
+ * Comment 10
diff --git a/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtcom.cpy b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtcom.cpy
new file mode 100644
index 00000000..29de4bfe
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtcom.cpy
@@ -0,0 +1,4 @@
+ 10 PROCESS-INDICATOR PIC X.
+
+ COPY EPSMTINP.
+ COPY EPSMTOUT.
diff --git a/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtinp.cpy b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtinp.cpy
new file mode 100644
index 00000000..955020d4
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtinp.cpy
@@ -0,0 +1,7 @@
+ * INPUT
+ 10 EPSPCOM-PRINCIPLE-DATA PIC S9(9)V99 COMP.
+ 10 EPSPCOM-NUMBER-OF-YEARS PIC S9(4) COMP.
+ 10 EPSPCOM-NUMBER-OF-MONTHS PIC S9(4) COMP.
+ 10 EPSPCOM-QUOTED-INTEREST-RATE
+ PIC S9(2)v9(3) COMP.
+ 10 EPSPCOM-YEAR-MONTH-IND PIC X.
diff --git a/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtout.cpy b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtout.cpy
new file mode 100644
index 00000000..9dcad4f3
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsmtout.cpy
@@ -0,0 +1,9 @@
+ * OUTPUT
+ 10 EPSPCOM-RETURN-MONTH-PAYMENT
+ PIC S9(7)V99 COMP.
+ 10 EPSPCOM-ERRMSG PIC X(80).
+ 10 EPSPCOM-PROGRAM-RETCODE PIC 9(4).
+ 88 EPS02-REQUEST-SUCCESS VALUE 0.
+ 10 EPSPCOM-PROGRAM-RETCODE-RDF
+ REDEFINES EPSPCOM-PROGRAM-RETCODE
+ PIC X(4).
diff --git a/Build/MortgageApplicationV2/MortgageApplication/copybook/epsnbrpm.cpy b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsnbrpm.cpy
new file mode 100644
index 00000000..5e47012c
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/copybook/epsnbrpm.cpy
@@ -0,0 +1,10 @@
+ 01 EPS-NUMBER-VALIDATION.
+ * INPUT - change 7
+ 03 EPSPARM-VALIDATE-DATA PIC X(13).
+ 03 EPSPARM-MAX-LENGTH PIC 99.
+ * OUTPUT
+ 03 EPSPARM-NUMBER PIC 9(13).
+ 03 EPSPARM-DECIMAL PIC V9(13).
+ 03 EPSPARM-BINARY-NUMBER PIC 9(9)V99 COMP.
+ 03 EPSPARM-RETURN-ERROR PIC X(80).
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/copybook/epspdata.cpy b/Build/MortgageApplicationV2/MortgageApplication/copybook/epspdata.cpy
new file mode 100644
index 00000000..21570784
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/copybook/epspdata.cpy
@@ -0,0 +1,13 @@
+ 01 EPSPDATA.
+ * INPUT
+ 03 EPSPDATA-PRINCIPLE-DATA PIC S9(9)V99 COMP.
+ 03 EPSPDATA-NUMBER-OF-YEARS PIC S9(4) COMP.
+ 03 EPSPDATA-NUMBER-OF-MONTHS PIC S9(4) COMP.
+ 03 EPSPDATA-QUOTED-INTEREST-RATE
+ PIC S9(2)v9(3) COMP.
+ 03 EPSPDATA-YEAR-MONTH-IND PIC X.
+ * OUTPUT
+ 03 EPSPDATA-RETURN-MONTH-PAYMENT
+ PIC S9(7)V99 COMP.
+ 03 EPSPDATA-RETURN-ERROR PIC X(80).
+
diff --git a/Build/MortgageApplicationV2/MortgageApplication/link/epsmlist.lnk b/Build/MortgageApplicationV2/MortgageApplication/link/epsmlist.lnk
new file mode 100644
index 00000000..c45713d0
--- /dev/null
+++ b/Build/MortgageApplicationV2/MortgageApplication/link/epsmlist.lnk
@@ -0,0 +1,3 @@
+ INCLUDE SYSLMOD(EPSMPMT)
+ INCLUDE SYSLIB(EPSMLIST)
+ NAME EPSMLIST(R)
\ No newline at end of file
diff --git a/Build/MortgageApplicationV2/README.md b/Build/MortgageApplicationV2/README.md
new file mode 100644
index 00000000..65f4ef7c
--- /dev/null
+++ b/Build/MortgageApplicationV2/README.md
@@ -0,0 +1,43 @@
+# MortgageApplicationV2
+This folder contains two updated versions of the [MortgageApplication](../MortgageApplication) sample designed to be built by [zAppBuild](../zAppBuild). Each of the subfolders in MortgageApplicationV2 is intended to be deployed as a stand alone Git repository in order to correctly calculate changed files using Git commands and also to demonstrate how to configure and buid an application whose source files are distributed across multiple Git repositories.
+
+## Sample Applications
+
+### MortgageApplicaton
+This version of the Mortgage application is configured so that all source files are contained in a single repository.
+
+**Example showing how to build all programs in MortgageApplication**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application MortgageApplication --outDir /u/build/out --hlq BUILD.MORTAPP --fullBuild
+```
+
+### Mortgage-Common
+This version of Mortgage application is configured so that the source files are distributed across three repositories:
+* Mortgage-Common - contains the configuration files for the Mortgage application as well as common copybooks
+* Mortgage-EPSC - contains the source files for the EPCS component of the Mortgage application
+* Mortgage-EPSM - contains the source files for the EPSM component of the Mortgage application
+
+**Example showing hot to build all programs in the Mortgage-Common**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application Mortgage-Common --outDir /u/build/out --hlq BUILD.MORTCOM --fullBuild
+```
+
+See [zAppBuild/BUILD.md](../zAppBuild/BUILD.md) for additional information about building applications using zAppBuild.
+
+## Creating stand alone Git repositories from MortgageApplicationV2 subfolders
+
+### Create a local Git repository for the subfolder
+1. Clone the DBB community repository to either a Linux or Windows machine.
+2. Copy the subfolder you want to convert to a stand alone repository to another location on the machine outside of the cloned `dbb` local repository.
+3. Change directory to the new new directory.
+4. Type `git init` to create the local repository.
+5. Type `git add *` to add all files in to the local repository.
+6. Type `git commit -m ""` to do an initial commit to the local repositry.
+
+### Push the new local repository to a remote central repository.
+1. Create the remote repository with the same name as the new directory using the appropriate method for the remote Git server. Examples: GitHub, GitLab, Bitbucket.
+2. Change directory to the new directory on the local machine.
+3. Type `git remote add origin /.git`
+3. Type `git push -u origin master`
+
+The new remote repository is now ready to clone to USS.
diff --git a/Build/zAppBuild/.gitattributes b/Build/zAppBuild/.gitattributes
new file mode 100644
index 00000000..eba0c73c
--- /dev/null
+++ b/Build/zAppBuild/.gitattributes
@@ -0,0 +1,18 @@
+# line endings
+* text eol=lf
+
+# file encodings
+*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.bms zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.pli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.mfs zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.bnd zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.lnk zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.txt zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.groovy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.sh zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.properties zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.asm zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.jcl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
+*.mac zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
diff --git a/Build/zAppBuild/.project b/Build/zAppBuild/.project
new file mode 100644
index 00000000..866274ea
--- /dev/null
+++ b/Build/zAppBuild/.project
@@ -0,0 +1,13 @@
+
+
+ zAppBuild
+
+
+
+
+
+
+ com.ibm.ftt.ui.views.project.navigator.local
+ com.ibm.ftt.dbbz.integration.dbbzprojectnature
+
+
diff --git a/Build/zAppBuild/BUILD.md b/Build/zAppBuild/BUILD.md
new file mode 100644
index 00000000..dada100a
--- /dev/null
+++ b/Build/zAppBuild/BUILD.md
@@ -0,0 +1,83 @@
+# Building Applications with zAppBuild
+The main or start build script for zAppBuild is `build.groovy`. Dependency Based Build (DBB) requires that the DBB_HOME environment variable be set when executing a Groovy script that uses DBB APIs. In order to build an application using zAppBuild, change directory to the zAppBuild directory on USS and type `$DBB_HOME/bin/groovyz build.groovy`.
+
+However this will result in an error message because the build.groovy script has four required arguments that must be present during each invocation:
+* --workspace - Absolute path to workspace (root) directory containing all required source directories or local Git repositories to build the application.
+* --application - Application local repository directory name (relative to workspace).
+* --outDir - Absolute path to the build output root directory on USS
+* --hlq - High level qualifier for created build partition data sets
+
+Example:
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application app1 --outDir /u/build/out --hlq BUILD.APP1
+```
+Since we are still missing a build target or calculated build option, the build will run successfully but not actually build any programs.
+
+## Common Invocation Examples
+
+**Build one program**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application app1 --outDir /u/build/out --hlq BUILD.APP1 cobol/epsmpmt.cbl
+```
+**Build a list of programs contained in a text file**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application app1 --outDir /u/build/out --hlq BUILD.APP1 buildList.txt
+```
+**Build all programs in the application**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application app1 --outDir /u/build/out --hlq BUILD.APP1 --fullBuild
+```
+**Build only programs that have changed or are impacted by changed copybooks or include files since the last successful build**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application app1 --outDir /u/build/out --hlq BUILD.APP1 --impactBuild
+```
+**Only scan source files in the application to collect dependency data without actually creating load modules**
+```
+$DBB_HOME/bin/groovyz build.groovy --workspace /u/build/repos --application app1 --outDir /u/build/out --hlq BUILD.APP1 --fullBuild --scanOnly
+```
+
+## Command Line Options Summary
+```
+$DBB_HOME/bin/groovyz /zAppBuild/build.groovy [options] buildfile
+
+buildFile (optional): Path of the source file to build (relative to workspace).
+If buildFile is a text file (*.txt), then it is assumed to be a build list file.
+
+Options:
+
+required options:
+ -w,--workspace Absolute path to workspace (root) directory
+ containing all required source directories
+ -a,--application Project directory name (relative to workspace)
+ -o,--outDir Absolute path to the build output root directory
+ -h,--hlq High level qualifier for partition data sets
+
+build options:
+ -p,--propFiles Comma separated list of additional property files
+ to load. Absolute paths or relative to workspace
+ -f,--fullBuild Flag indicating to build all programs for
+ project
+ -i,--impactBuild Flag indicating to build only programs impacted
+ by changed files since last successful build.
+ Provide a *.txt build file to scope the build
+ list
+ -s,--scanOnly Flag indicating to only scan files for project
+ -r,--reset Deletes the application's dependency collections
+ and build result group from the DBB repository
+ -v,--verbose Flag to turn on script trace
+ -l,--logEncoding Encoding of output logs. Default is EBCDIC
+
+web application credentials
+ -url,--url DBB repository URL
+ -id,--id DBB repository id
+ -pw,--pw DBB repository password
+ -pf,--pwFile Absolute or relative (from workspace) path to
+ file containing DBB password
+
+IDz/ZOD User Build options
+ -u,--userBuild Flag indicating running a user build
+ -e,--errPrefix Unique id used for IDz error message datasets
+
+utility options
+ -help,--help Prints this message
+ ```
diff --git a/Build/zAppBuild/INSTALL.md b/Build/zAppBuild/INSTALL.md
new file mode 100644
index 00000000..ed16f937
--- /dev/null
+++ b/Build/zAppBuild/INSTALL.md
@@ -0,0 +1,18 @@
+# Creating a zAppBuild stand alone Git repository
+zAppBuild is intended to be maintained as a stand alone Git repository by the release engineering team of a corporation or organization. It is intended to be cloned to a single location on USS to be used to build all of your z/OS applications.
+
+## Create a local Git repository for zAppBuild
+1. Clone the DBB community repository to either a Linux or Windows machine.
+2. Copy the `Build/zAppBuild` folder to another location on the machine outside of the cloned `dbb` local repository.
+3. Change directory to the new zAppBuild directory.
+4. Type `git init` to create the local repository.
+5. Type `git add *` to add all files to the local repository.
+6. Type `git commit -m ""` to do an initial commit to the local repositry.
+
+## Push the new local repository to a remote central repository.
+1. Create the remote repository called "zAppBuild" using the appropriate method for the remote Git server. Examples: GitHub, GitLab, Bitbucket.
+2. Change directory to the new zAppBuild directory on the local machine.
+3. Type `git remote add origin /zAppBuild.git`
+3. Type `git push -u origin master`
+
+The zAppBuild remote repository is now ready to clone to USS.
diff --git a/Build/zAppBuild/README.md b/Build/zAppBuild/README.md
new file mode 100644
index 00000000..e44900cc
--- /dev/null
+++ b/Build/zAppBuild/README.md
@@ -0,0 +1,39 @@
+# zAppBuild
+zAppBuild is a generic build solution for building z/OS applications using Apache Groovy build scripts and IBM Dependency Based Build (DBB) APIs. It is intended to be cloned to a single location on USS and used to build all of your z/OS applications. This is done by simply copying the supplied `application-conf` folder to the application source repository you want to build and then verify/update the contained default configuration property values to ensure they meet the build requirements of your application. See [MortgageApplicationV2](../MortgageApplicationV2) for two examples of applications that are designed to be built by zAppBuild. Instructions on how to create a stand alone Git repository for zAppBuild is included in [INSTALL.md](INSTALL.md).
+
+**IMPORTANT** : The [datasets.properties](build-conf/datasets.properties) must be configured for your build machine before executing a build! See [build-conf/README.md](build-conf/README.md) for more information.
+
+## Supported Languages
+The zAppBuild sample provides the following *language* build scripts by default:
+* Assembler.groovy
+* BMS.groovy
+* Cobol.groovy
+* LinkEdit.groovy (for building link cards)
+* PLI.groovy
+
+All language scripts both compile and optionally link-edit programs. The language build scripts are intended to be useful out of the box but depending on the complexity of your applications' build requirements, may require modifications to meet your development team's needs. By following the examples used in the existing language build scripts of keeping all application specific references out of the build scripts and instead using configuration properties with strong default values, the zAppBuild sample can continue to be a generic build solution for all of your specific applications.
+
+## Build Scope
+The build scope of zAppBuild is an application which is loosely defined as one or more Git repositories containing all the z/OS source files required to build the application. There are no specific rules as to the structure of the repositories except that one repository must contain the high level `application-conf` folder provided by zAppBuild which contains all of the configuration properties for building the application programs.
+
+**NOTE:** All source repositories that make up the application must be cloned on the build machine under a common *workspace* directory prior to calling build.groovy.
+
+zAppBuild supports a number of build scenarios:
+* **Single Program** - Build a single program in the application.
+* **List of Programs** - Build a list of programs provided by a text file.
+* **Full Build** - Build all programs (or buildable files) of an application.
+* **Impact Build** - Build only programs impacted by source files that have changed since the last successful build.
+* **Topic Branch Build** - Detects when building a topic branch for the first time and will automatically clone the dependency data collections from the main build branch in order to avoid having to rescan the entire application.
+* **Scan Only** - Skip the actual building and only scan source files for dependency data.
+
+Links to additional documentation is provided in the table below. Instructions on invoking a zAppBuild is included in [BUILD.md](BUILD.md).
+
+## Repository Legend
+Folder/File | Description | Documentation Link
+--- | --- | ---
+application/application-conf | The `application-conf` folder contains application specific configuration properties used by build.groovy and language build scripts. It is intended to be copied as a high level folder to the application repository and configured to meet the build requirments of the application. Ex. `myAppRepository/application-conf` | [application/application-conf/README.md](application/application-conf/README.md)
+build-conf | This folder contains global configuration properties used by build.groovy and language build scripts. | [build-conf/README.md](build-conf/README.md)
+languages | This folder contains the language specific build scripts that are associated to build files via script mappings (see `application/application-conf/files.properties`) and called by build.groovy. | [languages/README.md](languages/README.md)
+utilities | This folder contains utility scripts which provide common utility functions used by the various zAppBuild build scripts. | [utilities/README.md](utilities/README.md)
+build.groovy | This is the main build script that is called to start the build process. | [BUILD.md](BUILD.md)
+
diff --git a/Build/zAppBuild/application/application-conf/Assembler.properties b/Build/zAppBuild/application/application-conf/Assembler.properties
new file mode 100644
index 00000000..fcb5dd30
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/Assembler.properties
@@ -0,0 +1,35 @@
+# Application properties used by zAppBuild/language/Assembler.groovy
+
+#
+# default Assemble program build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+assembler_fileBuildRank=
+
+#
+# default Assembler parameters
+# can be overridden by file properties
+assembler_pgmParms=LIST
+assembler_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+#
+# execute link edit step
+# can be overridden by file properties
+assembler_linkEdit=true
+
+#
+# default Assembler maximum RCs allowed
+# can be overridden by file properties
+assembler_maxRC=4
+assembler_linkEditMaxRC=0
+
+#
+# ASM Dependency resolution rules
+# Rules defined in app-properties file
+assembler_resolutionRules=[${maclibRule}]
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+assembler_scanLoadModule=true
+
+
diff --git a/Build/zAppBuild/application/application-conf/BMS.properties b/Build/zAppBuild/application/application-conf/BMS.properties
new file mode 100644
index 00000000..2d746c39
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/BMS.properties
@@ -0,0 +1,25 @@
+# Application properties used by zAppBuild/language/Assembler.groovy
+
+#
+# default BMS map build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+bms_fileBuildRank=
+
+#
+# default BMS maximum RC allowed
+# can be overridden by file properties
+bms_maxRC=0
+
+#
+# default BMS parameters
+# can be overridden by file properties
+bms_copyGenParms=SYSPARM(DSECT),DECK,NOOBJECT
+bms_compileParms=SYSPARM(MAP),DECK,NOOBJECT
+bms_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+
+
+
+
+
+
diff --git a/Build/zAppBuild/application/application-conf/Cobol.properties b/Build/zAppBuild/application/application-conf/Cobol.properties
new file mode 100644
index 00000000..3934cdd2
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/Cobol.properties
@@ -0,0 +1,56 @@
+# Application properties used by zAppBuild/language/Cobol.groovy
+
+#
+# default COBOL program build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+cobol_fileBuildRank=
+
+#
+# COBOL dependency resolution rules
+# Rules defined in application.properties
+cobol_resolutionRules=[${copybookRule}]
+
+#
+# default COBOL compiler version
+# can be overridden by file properties
+cobol_compilerVersion=V6
+
+#
+# default COBOL maximum RCs allowed
+# can be overridden by file properties
+cobol_compileMaxRC=4
+cobol_linkEditMaxRC=0
+
+#
+# default COBOL compiler parameters
+# can be overridden by file properties
+cobol_compileParms=LIB
+cobol_compileCICSParms=CICS
+cobol_compileSQLParms=SQL
+cobol_compileErrorPrefixParms=ADATA,EX(ADX(ELAXMGUX))
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+cobol_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+#
+# execute link edit step
+# can be overridden by file properties
+cobol_linkEdit=true
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+cobol_scanLoadModule=true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Build/zAppBuild/application/application-conf/LinkEdit.properties b/Build/zAppBuild/application/application-conf/LinkEdit.properties
new file mode 100644
index 00000000..8a282aa9
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/LinkEdit.properties
@@ -0,0 +1,21 @@
+# Application properties used by zAppBuild/language/LinkEdit.groovy
+
+#
+# default link file build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+linkedit_fileBuildRank=
+
+#
+# default LinkEdit maximum RC allowed
+# can be overridden by file properties
+linkedit_maxRC=0
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+linkEdit_parms=MAP,RENT,COMPAT(PM5)
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+linkedit_scanLoadModule=true
diff --git a/Build/zAppBuild/application/application-conf/PLI.properties b/Build/zAppBuild/application/application-conf/PLI.properties
new file mode 100644
index 00000000..8c943ebd
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/PLI.properties
@@ -0,0 +1,45 @@
+# Application properties used by zAppBuild/language/PLI.groovy
+
+#
+# default PLI program build rank - used to sort language build file list
+# leave empty - overridden by file properties if sorting needed
+pli_fileBuildRank=
+
+#
+# PLI dependency resolution rules
+# Rules defined in rules.properties
+pli_resolutionRules=[${plincRule}]
+
+#
+# default PLI compiler version
+# can be overridden by file properties
+pli_compilerVersion=V52
+
+#
+# default PLI maximum RCs allowed
+# can be overridden by file properties
+pli_compileMaxRC=4
+pli_linkEditMaxRC=0
+
+#
+# default PLI compiler parameters
+# can be overridden by file properties
+pli_compileParms=PP(INCLUDE('ID(++INCLUDE)'))
+pli_compileCICSParms=SYSTEM(CICS),PP(MACRO,CICS)
+pli_compileSQLParms=PP(SQL)
+pli_compileErrorPrefixParms=ADATA,EX(ADX(ELAXMGUX))
+
+#
+# default LinkEdit parameters
+# can be overridden by file properties
+pli_linkEditParms=MAP,RENT,COMPAT(PM5)
+
+#
+# execute link edit step
+# can be overridden by file properties
+pli_linkEdit=true
+
+#
+# scan link edit load module for link dependencies
+# can be overridden by file properties
+pli_scanLoadModule=true
diff --git a/Build/zAppBuild/application/application-conf/README.md b/Build/zAppBuild/application/application-conf/README.md
new file mode 100644
index 00000000..5560ce30
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/README.md
@@ -0,0 +1,99 @@
+# Application Configuration
+This folder contains application specific configuration properties used by the zAppBuild Groovy build and utility scripts. It is intended to be copied as a high level folder in the application repository or main application repository if the application source files are distributed across multiple repositories. Once copied to the application repository, users should review the default property files and modify any values as needed.
+
+At the beginning of the build, the `application-conf/application.properties` file will automatically be loaded into the [DBB BuildProperties class](https://www.ibm.com/support/knowledgecenter/SS6T76_1.0.4/scriptorg.html#build-properties-class). Use the `applicationPropFiles` property (see table below) to load additional application property files.
+
+## Property File Descriptions
+Since all properties will be loaded into a single static instance of BuildProperties, the organization and naming convention of the *property files* are somewhat arbitrary and targeted more for self documentation and understanding.
+
+### application.properties
+This property file is loaded automatically at the beginning of the build and contains application specific properties used mainly by `build.groovy` but can also be a place to declare properties used by multiple language scripts. Additional property files are loaded based on the content of the `applicationPropFiles` property.
+
+Property | Description
+--- | ---
+applicationPropFiles | Comma separated list of additional application property files to load. Supports both absolute and relative file paths. Relative paths assumed to be relative to ${workspace}/${application}/application-conf/.
+applicationSrcDirs | Comma separated list of all source directories included in application build. Each directory is assumed to be a local Git repository clone. Supports both absolute and relative paths though for maximum reuse of collected dependency data relative paths should be used. Relative paths assumed to be relative to ${workspace}.
+buildOrder | Comma separated list of the build script processing order.
+mainBuildBranch | The main build branch of the main application repository. Used for cloning collections for topic branch builds instead of rescanning the entire application.
+excludeFileList | Files to exclude when scanning or running full build.
+impactResolutionRules | Comma separated list of resolution rule properties used for impact builds. Sample resolution rule properties (in JSON format) are included below.
+
+### file.properties
+Location of file properties, script mappings and file level property overrides. All file properties for the entire application, including source files in distributed repositories of the application need to be contained either in this file or in other property files in the `application-conf` directory. Look for column 'Overridable' in the tables below for build properties that can have file level property overrides.
+
+Property | Description
+--- | ---
+dbb.scriptMapping | DBB configuration file properties associtation build files to language scripts
+
+### Assembler.properties
+Application properties used by zAppBuild/language/Assembler.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+assembler_fileBuildRank | Default Assemble program build rank. Used to sort Assembler build file sub-list. Leave empty. | true
+assembler_pgmParms | Default Assembler parameters. | true
+assembler_linkEditParms | Default parameters for the link edit step. | true
+assembler_linkEdit | Flag indicating to execute the link edit step to produce a load module for the source file. If false then a object deck will be created instead for later linking. | true
+assembler_maxRC | Default Assembler maximum RC allowed. | true
+assembler_linkEditMaxRC | Default link edit maximum RC allowed. | true
+assembler_resolutionRules | Assembler dependency resolution rules used to create a Assmebler dependency resolver. Format is a JSON array of resolution rule property keys. Resolution rule properties are defined in `application-conf/application.properties`. | true
+cobol_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
+### BMS.properties
+Application properties used by zAppBuild/language/BMS.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+bms_fileBuildRank | Default BMS program build rank. Used to sort BMS build file sub-list. Leave empty. | true
+bms_maxRC | Default BMS maximum RC allowed. | true
+bms_copyGenParms | Default parameters for the copybook generation step. | true
+bms_compileParms | Default parameters for the compilation step. | true
+bms_linkEditParms | Default parameters for the link edit step. | true
+
+### Cobol.properties
+Application properties used by zAppBuild/language/Cobol.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+cobol_fileBuildRank | Default Cobol program build rank. Used to sort Cobol build file sub-list. Leave empty. | true
+cobol_resolutionRules | Cobol dependency resolution rules used to create a Cobol dependency resolver. Format is a JSON array of resolution rule property keys. Resolution rule properties are defined in `application-conf/application.properties`. | true
+cobol_compilerVersion | Default Cobol compiler version. | true
+cobol_compileMaxRC | Default compile maximum RC allowed. | true
+cobol_linkEditMaxRC | Default link edit maximum RC allowed. | true
+cobol_compileParms | Default base compile parameters. | true
+cobol_compileCICSParms | Default CICS compile parameters. Appended to base parameters if has value.| true
+cobol_compileSQLParms | Default SQL compile parameters. Appended to base parameters if has value. | true
+cobol_compileErrorPrefixParms | IDz user build parameters. Appended to base parameters if has value. | true
+cobol_linkEditParms | Default link edit parameters. | true
+cobol_linkEdit | Flag indicating to execute the link edit step to produce a load module for the source file. If false then a object deck will be created instead for later linking. | true
+cobol_isMQ | Flag indicating that the program contains MQ calls | true
+cobol_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
+### LinkEdit.properties
+Application properties used by zAppBuild/language/LinkEdit.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+linkedit_fileBuildRank | Default link card build rank. Used to sort link card build sub-list. Leave empty. | true
+linkedit_maxRC | Default link edit maximum RC allowed. | true
+linkedit_parms | Default link edit parameters. | true
+linkedit_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
+### PLI.properties
+Application properties used by zAppBuild/language/LinkEdit.groovy
+
+Property | Description | Overridable
+--- | --- | ---
+pli_fileBuildRank | Default PLI program build rank. Used to sort PLI program sub-list. Leave empty. | true
+pli_resolutionRules | PLI dependency resolution rules used to create a PLI dependency resolver. Format is a JSON array of resolution rule property keys. Resolution rule properties are defined in `application-conf/application.properties`. | true
+pli_compilerVersion | Default PLI compiler version. | true
+pli_compileMaxRC | Default compile maximum RC allowed. | true
+pli_linkEditMaxRC | Default link edit maximum RC allowed. | true
+pli_compileParms | Default base compile parameters. | true
+pli_compileCICSParms | Default CICS compile parameters. Appended to base parameters if has value.| true
+pli_compileSQLParms | Default SQL compile parameters. Appended to base parameters if has value. | true
+pli_compileErrorPrefixParms | IDz user build parameters. Appended to base parameters if has value. | true
+pli_linkEditParms | Default link edit parameters. | true
+pli_linkEdit | Flag indicating to execute the link edit step to produce a load module for the source file. If false then a object deck will be created instead for later linking. | true
+plil_scanLoadModule | Flag indicating to scan the load module for link dependencies and store in the application's outputs collection. | true
+
diff --git a/Build/zAppBuild/application/application-conf/application.properties b/Build/zAppBuild/application/application-conf/application.properties
new file mode 100644
index 00000000..cf8d8514
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/application.properties
@@ -0,0 +1,55 @@
+# Build properties used by zAppBuild/build.groovy
+
+#
+# Comma separated list of additional application property files to load
+# Supports both relative path (to ${application}/application-conf/) and absolute path
+applicationPropFiles=file.properties,Assembler.properties,BMS.properties,Cobol.properties,LinkEdit.properties,PLI.properties
+
+#
+# Comma separated list all source directories included in application build. Supports both absolute
+# and relative paths. Relative assumed to be relative to ${workspace}.
+# ex: applicationSrcDirs=${application},/u/build/common/copybooks
+applicationSrcDirs=${application}
+
+#
+# Comma separated list of the build script processing order
+buildOrder=BMS.groovy,Cobol.groovy,Assembler.groovy,PLI.groovy,LinkEdit.groovy
+
+#
+# The main build branch. Used for cloning collections for topic branch builds instead
+# of rescanning the entire application.
+mainBuildBranch=master
+
+#
+# exclude list used when scanning or running full build
+excludeFileList=.*,**/*.properties,**/*.xml,**/*.groovy,**/*.md,**/application-conf/*.*
+
+#
+# Impact analysis resolution rules (JSON format).
+# Defaults to just looking for local application dependency folders
+impactResolutionRules=[${copybookRule},${plincRule},${maclibRule}]
+
+# Rule to locate Cobol copy books. This rule defaults to the local copybook folder
+# in the main application folder.
+copybookRule = {"library": "SYSLIB", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/copybook"} \
+ ] \
+ }
+
+# Rule to locate PLI include files. This rule defaults to the local plinc folder
+# in the main application folder.
+plincRule = {"library": "SYSLIB", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/plinc"} \
+ ] \
+ }
+
+# Rule to locate ASM macros. This rule defaults to the local maclib folder
+# in the main application folder.
+# Category filters on what you want to include during the scanner (i.e. excludes macro-def keyword)
+maclibRule = {"library": "SYSLIB", "category": "MACRO", \
+ "searchPath": [ \
+ {"sourceDir": "${workspace}", "directory": "${application}/maclib"} \
+ ] \
+ }
\ No newline at end of file
diff --git a/Build/zAppBuild/application/application-conf/file.properties b/Build/zAppBuild/application/application-conf/file.properties
new file mode 100644
index 00000000..9f8f2725
--- /dev/null
+++ b/Build/zAppBuild/application/application-conf/file.properties
@@ -0,0 +1,9 @@
+# Application script mappings and file property overrides
+
+#
+# Script mappings for all application programs
+dbb.scriptMapping = Assembler.groovy :: **/*.asm
+dbb.scriptMapping = BMS.groovy :: **/*.bms
+dbb.scriptMapping = Cobol.groovy :: **/*.cbl
+dbb.scriptMapping = LinkEdit.groovy :: **/*.lnk
+dbb.scriptMapping = PLI.groovy :: **/*.pli
\ No newline at end of file
diff --git a/Build/zAppBuild/build-conf/Assembler.properties b/Build/zAppBuild/build-conf/Assembler.properties
new file mode 100644
index 00000000..f3cf89d7
--- /dev/null
+++ b/Build/zAppBuild/build-conf/Assembler.properties
@@ -0,0 +1,36 @@
+# Releng properties used by language/Assembler.groovy
+
+#
+# Comma separated list of required build properties for language/Assembler.groovy
+assembler_requiredBuildPropeties=assembler_srcPDS,assembler_macroPDS,assembler_objPDS,assembler_loadPDS, \
+ assembler_pgm,assembler_linkEditor,assembler_tempOptions,assembler_maxRC, \
+ SASMMOD1,SDFHLOAD,SDFHMAC,MACLIB,SCEELKED,SCEEMAC
+
+#
+# assembler source data sets
+assembler_srcPDS=${hlq}.ASM
+assembler_macroPDS=${hlq}.MACRO
+assembler_objPDS=${hlq}.OBJ
+assembler_dbrmPDS=${hlq}.DBRM
+
+#
+# assembler load data sets
+assembler_loadPDS=${hlq}.LOAD
+
+#
+# List the data sets that need to be created and their creation options
+assembler_srcDatasets=${assembler_srcPDS},${assembler_macroPDS},${assembler_objPDS},${assembler_dbrmPDS}
+assembler_srcOptions=cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
+
+assembler_loadDatasets=${assembler_loadPDS}
+assembler_loadOptions=cyl space(1,1) dsorg(PO) recfm(U) blksize(32760) dsntype(library)
+
+assembler_tempOptions=cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new
+
+#
+# default assembler properties
+assembler_pgm=ASMA90
+assembler_linkEditor=IEWBLINK
+
+# ASM scanner language hint
+dbb.DependencyScanner.languageHint=ASM :: **/*.asm, **/*.mac
diff --git a/Build/zAppBuild/build-conf/BMS.properties b/Build/zAppBuild/build-conf/BMS.properties
new file mode 100644
index 00000000..1016589a
--- /dev/null
+++ b/Build/zAppBuild/build-conf/BMS.properties
@@ -0,0 +1,39 @@
+# Releng properties used by language/BMS.groovy
+
+#
+# Comma separated list of required build properties for language/BMS.groovy
+bms_requiredBuildProperties=bms_srcPDS,bms_cpyPDS,bms_loadPDS, \
+ bms_assembler,bms_linkEditor,bms_tempOptions,bms_maxRC, \
+ SASMMOD1,SDFHLOAD,SDFHMAC,MACLIB,SCEELKED
+
+#
+# BMS source data sets
+bms_srcPDS=${hlq}.BMS
+bms_cpyPDS=${hlq}.BMS.COPY
+
+#
+# BMS load data sets
+bms_loadPDS=${hlq}.LOAD
+
+#
+# List the data sets that need to be created and their creation options
+bms_srcDatasets=${bms_srcPDS},${bms_cpyPDS}
+bms_srcOptions=cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
+
+bms_loadDatasets=${bms_loadPDS}
+bms_loadOptions=cyl space(1,1) dsorg(PO) recfm(U) blksize(32760) dsntype(library)
+
+bms_tempOptions=cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new
+
+#
+# default BMS properties
+bms_assembler=ASMA90
+bms_linkEditor=IEWBLINK
+
+
+
+
+
+
+
+
diff --git a/Build/zAppBuild/build-conf/Cobol.properties b/Build/zAppBuild/build-conf/Cobol.properties
new file mode 100644
index 00000000..1932bf49
--- /dev/null
+++ b/Build/zAppBuild/build-conf/Cobol.properties
@@ -0,0 +1,56 @@
+# Releng properties used by language/Cobol.groovy
+
+#
+# Comma separated list of required build properties for Cobol.groovy
+cobol_requiredBuildProperties=cobol_srcPDS,cobol_cpyPDS,cobol_objPDS,cobol_loadPDS,\
+ cobol_compiler,cobol_linkEditor,cobol_tempOptions,applicationOutputsCollectionName,\
+ SDFHCOB,SDFHLOAD,SDSNLOAD,SCEELKED
+
+#
+# COBOL compiler name
+cobol_compiler=IGYCRCTL
+
+#
+# linker name
+cobol_linkEditor=IEWBLINK
+
+#
+# COBOL source data sets
+cobol_srcPDS=${hlq}.COBOL
+cobol_cpyPDS=${hlq}.COPY
+cobol_objPDS=${hlq}.OBJ
+cobol_dbrmPDS=${hlq}.DBRM
+
+#
+# COBOL load data sets
+cobol_loadPDS=${hlq}.LOAD
+
+#
+# List the data sets that need to be created and their creation options
+cobol_srcDatasets=${cobol_srcPDS},${cobol_cpyPDS},${cobol_objPDS},${cobol_dbrmPDS}
+cobol_srcOptions=cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
+
+cobol_loadDatasets=${cobol_loadPDS}
+cobol_loadOptions=cyl space(1,1) dsorg(PO) recfm(U) blksize(32760) dsntype(library)
+
+cobol_tempOptions=cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new
+
+#
+# COBOL scanner language hint
+dbb.DependencyScanner.languageHint=COB :: **/*.cbl, **/*.cpy
+
+#
+# Set filter used to exclude certain information from the link edit scanning.
+# The value contains a comma separated list of patterns.
+# example: A filter of *.SUB1, *.SUB2 will exclude modules SUB1 and SUB2
+# from any dataset. To exclude member HELLO in PDS TEST.COBOL will
+# be matched by the pattern TEST.COBOL.HELLO. The pattern TEST.COBOL.*
+# will match any member in the data set TEST.COBOL.
+# The following filter excludes CICS and LE Library references.
+dbb.LinkEditScanner.excludeFilter = ${SDFHLOAD}.*, ${SCEELKED}.*
+
+
+
+
+
+
diff --git a/Build/zAppBuild/build-conf/LinkEdit.properties b/Build/zAppBuild/build-conf/LinkEdit.properties
new file mode 100644
index 00000000..23a864ce
--- /dev/null
+++ b/Build/zAppBuild/build-conf/LinkEdit.properties
@@ -0,0 +1,31 @@
+# Releng properties used by language/LinkEdit.groovy
+
+#
+# Comma separated list of required build properties for LinkEdit.groovy
+linkedit_requiredBuildProperties=linkedit_srcPDS,linkedit_objPDS,linkedit_loadPDS,\
+ linkedit_linkEditor,linkedit_tempOptions,applicationOutputsCollectionName,\
+ SDFHLOAD,SCEELKED
+
+#
+# linker name
+linkedit_linkEditor=IEWBLINK
+
+#
+# Link edit source data sets
+linkedit_srcPDS=${hlq}.LINK
+linkedit_objPDS=${hlq}.OBJ
+
+#
+# Link edit load data sets
+linkedit_loadPDS=${hlq}.LOAD
+
+#
+# List the data sets that need to be created and their creation options
+linkedit_srcDatasets=${linkedit_srcPDS},${linkedit_objPDS}
+linkedit_srcOptions=cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
+
+linkedit_loadDatasets=${linkedit_loadPDS}
+linkedit_loadOptions=cyl space(1,1) dsorg(PO) recfm(U) blksize(32760) dsntype(library)
+
+linkedit_tempOptions=cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new
+
diff --git a/Build/zAppBuild/build-conf/PLI.properties b/Build/zAppBuild/build-conf/PLI.properties
new file mode 100644
index 00000000..f2d7d29e
--- /dev/null
+++ b/Build/zAppBuild/build-conf/PLI.properties
@@ -0,0 +1,41 @@
+# Releng properties used by language/PLI.groovy
+
+#
+# Comma separated list of required build properties for PLI.groovy
+pli_requiredBuildPropeties=pli_srcPDS,pli_incPDS,pli_objPDS,pli_loadPDS,\
+pli_compiler,pli_linkEditor,pli_tempOptions,applicationOutputsCollectionName,\
+SDFHCOB,SDFHLOAD,SDSNLOAD,SCEELKED
+
+#
+# PL/I compiler name
+pli_compiler=IBMZPLI
+
+#
+# linker name
+pli_linkEditor=IEWBLINK
+
+#
+# PL/I source data sets
+pli_srcPDS=${hlq}.PLI
+pli_incPDS=${hlq}.PLI.INCLUDE
+pli_objPDS=${hlq}.OBJ
+pli_dbrmPDS=${hlq}.DBRM
+
+#
+# PL/I load data sets
+pli_loadPDS=${hlq}.LOAD
+
+#
+# List the data sets that need to be created and their creation options
+pli_srcDatasets=${pli_srcPDS},${pli_incPDS},${pli_objPDS},${pli_dbrmPDS}
+pli_srcOptions=cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
+
+pli_loadDatasets=${pli_loadPDS}
+pli_loadOptions=cyl space(1,1) dsorg(PO) recfm(U) blksize(32760) dsntype(library)
+
+pli_tempOptions=cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new
+pli_listOptions=cyl space(5,5) unit(vio) blksize(0) lrecl(137) recfm(v,b) new
+
+#
+# PL/I scanner language hint
+dbb.DependencyScanner.languageHint=PLI :: **/*.pli, **/*.inc, **/*.cpy
diff --git a/Build/zAppBuild/build-conf/README.md b/Build/zAppBuild/build-conf/README.md
new file mode 100644
index 00000000..18697a92
--- /dev/null
+++ b/Build/zAppBuild/build-conf/README.md
@@ -0,0 +1,140 @@
+# Build Configuration
+This folder contains general build configuration properties used by the zAppBuild Groovy build and utility scripts. They are separated from the application specific configuration properties contained in `application/application-conf` which should be copied and modified in application repositories.
+
+***NOTE : datasets.properties (described below) must be configured for your build machine!***
+
+At the beginning of the build, the `build-conf/build.properties` file will automatically be loaded into the [DBB BuildProperties class](https://www.ibm.com/support/knowledgecenter/SS6T76_1.0.4/scriptorg.html#build-properties-class). Use the `buildPropFiles` property (see table below) to load additional build property files.
+## Property File Descriptions
+Since all properties will be loaded into a single static instance of BuildProperties, the organization and naming convention of the *property files* are somewhat arbitrary and targeted more for self documentation and understanding.
+
+### datasets.properties
+Build properties for Partition Data Sets (PDS) used by zAppBuild language build scripts. ***Must be configured for your build machine!***
+
+Property | Description
+--- | ---
+MACLIB | z/OS macro library. Example: SYS1.MACLIB
+SCEEMAC | Assmebler macro library. Example: CEE.SCEEMAC
+SCEELKED | LE (Language Environment) load library. Example: CEE.SCEELKED
+SASMMOD1 | High Level Assembler (HLASM) load library. Example: ASM.SASMMOD1
+SIGYCOMP_V4 | Cobol Compiler Data Set for version 4.x.x. Example: COBOL.V4R1M0.SIGYCOMP
+SIGYCOMP_V6 | Cobol Compiler Data Set for version 6.x.x. Example: IGY.V6R1M0.SIGYCOMP
+IBMZPLI_V52 | PLI Compiler Data Set for version 5.2. Example: PLI.V5R2M0.SIBMZCMP
+IBMZPLI_V51 | PLI Compiler Data Set for version 5.1. Example: PLI.V5R1M0.SIBMZCMP
+SDFHMAC | CICS Macro Library. Example: CICSTS.V3R2M0.CICS.SDFHMAC
+SDFHLOAD | CICS Load Library. Example: CICSTS.V3R2M0.CICS.SDFHLOAD
+SDFHCOB | CICS COBOL Library. Example: CICSTS.V3R2M0.CICS.SDFHCOB
+SCSQCOBC | MQ COBOL Library. Example: CSQ.V9R1M0.SCSQCOBC
+SCSQLOAD | MQ Load Library. Example: CSQ.V9R1M0.SCSQLOAD
+SDSNLOAD | DB2 Load Library. Example: DB2.V9R1M0.SDSNLOAD
+SFELLOAD | Optional IDz Load Library. Example: FEL.V14R0M0.SFELLOAD
+
+### build.properties
+General properties used mainly by `build.groovy` but can also be a place to declare properties used by multiple language scripts.
+
+Property | Description
+--- | ---
+buildPropFiles | Comma separated list of additional build property files to load. Supports both absolute and relative file paths. Relative paths assumed to be relative to `zAppBuild/build-conf/`.
+buildListFileExt | File extension that indicates the build file is really a build list.
+languagePropertyQualifiers | List of language script property qualifiers. Each language script property has a unique qualifier to avoid collision with other language script properties.
+applicationConfRootDir | Alternate root directory for application-conf location. Allows for the deployment of the application-conf directories to a static location. Defaults to ${workspace}/${application}
+requiredBuildProperties | Comma separated list of required build properties for zAppBuild/build.groovy. Build and language scripts will validate that *required* build properties have been set before the script runs. If any are missing or empty, then a validation error will be thrown.
+dbb.LinkEditScanner.excludeFilter | DBB configuration property used by the link edit scanner to exclude load module entries
+dbb.RepositoryClient.url | DBB configuration property for web application URL. ***Can be overridden by build.groovy option -url, --url***
+dbb.RepositoryClient.userId | DBB configuration property for web application logon id. ***Can be overridden by build.groovy option -id, --id***
+dbb.RepositoryClient.password | DBB configuration property for web application logon password. ***Can be overridden by build.groovy option -pw, --pw***
+dbb.RepositoryClient.passwordFile | DBB configuration property for web application logon password file. ***Can be overridden by build.groovy option -pf, --pf***
+
+
+### Assembler.properties
+Build properties used by zAppBuild/language/Assembler.groovy
+
+Property | Description
+--- | ---
+assembler_requiredBuildProperties | Comma separated list of required build properties for language/Assembler.groovy
+assembler_srcPDS | Dataset to move assembler source files to from USS
+assembler_macroPDS | Dataset to move macro files to from USS
+assembler_objPDS | Dataset to create object decks in from Assembler step
+assembler_dbrmPDS | Dataset to create DB2 DBRM modules in from Assembler step
+assembler_loadPDS | Dataset to create load modules in from link edit step
+assembler_srcDataSets | Comma separated list of 'source' type data sets
+assembler_srcOptions | BPXWDYN creation options for creating 'source' type data sets
+assembler_loadDatasets | Comma separated list of 'load module' type data sets
+assembler_loadOptions | BPXWDYN creation options for 'load module' type data sets
+assembler_tempOptions | BPXWDYN creation options for temporary data sets
+assembler_pgm | MVS program name of the high level assembler
+assembler_linkEditor | MVS program name of the link editor
+dbb.DependencyScanner.languageHint | DBB configuration property used by the dependency scanner to disambiguate a source file's language
+
+### BMS.properties
+Build properties used by zAppBuild/language/BMS.groovy
+
+Property | Description
+--- | ---
+bms_requiredBuildProperties | Comma separated list of required build properties for language/BMS.groovy
+bms_srcPDS | Dataset to move bms source files to from USS
+bms_copyPDS | Dataset to create generated BMS copybooks in from copy gen step
+bms_loadPDS | Dataset to create load modules in from link edit step
+bms_srcDataSets | Comma separated list of 'source' type data sets
+bms_srcOptions | BPXWDYN creation options for creating 'source' type data sets
+bms_loadDatasets | Comma separated list of 'load module' type data sets
+bms_loadOptions | BPXWDYN creation options for 'load module' type data sets
+bms_tempOptions | BPXWDYN creation options for temporary data sets
+bms_assembler | MVS program name of the high level assembler
+bms_linkEditor | MVS program name of the link editor
+
+### Cobol.properties
+Build properties used by zAppBuild/language/Cobol.groovy
+
+Property | Description
+--- | ---
+cobol_requiredBuildProperties | Comma separated list of required build properties for language/Cobol.groovy
+cobol_srcPDS | Dataset to move COBOL source files to from USS
+cobol_cpyPDS | Dataset to move COBOL copybooks to from USS
+cobol_objPDS | Dataset to create object decks in from compile step
+cobol_dbrmPDS | Dataset to create DB2 DBRM modules in from compile step
+cobol_loadPDS | Dataset to create load modules in from link edit step
+cobol_srcDataSets | Comma separated list of 'source' type data sets
+cobol_srcOptions | BPXWDYN creation options for creating 'source' type data sets
+cobol_loadDatasets | Comma separated list of 'load module' type data sets
+cobol_loadOptions | BPXWDYN creation options for 'load module' type data sets
+cobol_tempOptions | BPXWDYN creation options for temporary data sets
+cobol_compiler | MVS program name of the COBOL compiler
+cobol_linkEditor | MVS program name of the link editor
+dbb.DependencyScanner.languageHint | DBB configuration property used by the dependency scanner to disambiguate a source file's language
+
+### LinkEdit.properties
+Build properties used by zAppBuild/language/LinkEdit.groovy
+
+Property | Description
+--- | ---
+linkedit_requiredBuildProperties | Comma separated list of required build properties for language/Cobol.groovy
+linkedit_linkEditor | MVS program name of the link editor
+linkedit_srcPDS | Dataset to move COBOL source files to from USS
+linkedit_objPDS | Dataset to create object decks in from compile step
+linkedit_loadPDS | Dataset to create load modules in from link edit step
+linkedit_srcDataSets | Comma separated list of 'source' type data sets
+linkedit_srcOptions | BPXWDYN creation options for creating 'source' type data sets
+linkedit_loadDatasets | Comma separated list of 'load module' type data sets
+linkedit_loadOptions | BPXWDYN creation options for 'load module' type data sets
+linkedit_tempOptions | BPXWDYN creation options for temporary data sets
+
+### PLI.properties
+Build properties used by zAppBuild/language/PLI.groovy
+
+Property | Description
+--- | ---
+pli_requiredBuildProperties | Comma separated list of required build properties for language/Cobol.groovy
+pli_compiler | MVS program name of the COBOL compiler
+pli_linkEditor | MVS program name of the link editor
+pli_srcPDS | Dataset to move PLI source files to from USS
+pli_incPDS | Dataset to move PLI include files to from USS
+pli_objPDS | Dataset to create object decks in from compile step
+pli_dbrmPDS | Dataset to create DB2 DBRM modules in from compile step
+pli_loadPDS | Dataset to create load modules in from link edit step
+pli_srcDataSets | Comma separated list of 'source' type data sets
+pli_srcOptions | BPXWDYN creation options for creating 'source' type data sets
+pli_loadDatasets | Comma separated list of 'load module' type data sets
+pli_loadOptions | BPXWDYN creation options for 'load module' type data sets
+pli_tempOptions | BPXWDYN creation options for temporary data sets
+pli_listOptions | BPXWDYN creation options for LIST data sets
+dbb.DependencyScanner.languageHint | DBB configuration property used by the dependency scanner to disambiguate a source file's language
diff --git a/Build/zAppBuild/build-conf/build.properties b/Build/zAppBuild/build-conf/build.properties
new file mode 100644
index 00000000..f0181b26
--- /dev/null
+++ b/Build/zAppBuild/build-conf/build.properties
@@ -0,0 +1,58 @@
+# Build properties used by build.groovy
+
+#
+# Comma separated list of additional build property files to load
+# Supports both relative path (to zAppBuild/build-conf/) and absolute path
+buildPropFiles=datasets.properties,Assembler.properties,BMS.properties,Cobol.properties,LinkEdit.properties,PLI.properties
+
+#
+# file extension that indicates the build file is really a build list or build list filter
+buildListFileExt=txt
+
+#
+# List of language script property qualifiers
+languagePropertyQualifiers=assembler,bms,cobol,linkedit,pli
+
+#
+# Alternate root directory for application-conf location. Allows for the deployment of
+# the application-conf directories to a static location.
+# Defaults to ${workspace}/${application}
+applicationConfRootDir=
+
+#
+# Comma separated list of required build properties for zAppBuild/build.groovy
+requiredBuildProperties=buildOrder,buildListFileExt,languagePropertyQualifiers
+
+
+# Set filter used to exclude certain information from the link edit scanning.
+# The value contains a comma separated list of patterns.
+# example: A filter of *.SUB1, *.SUB2 will exclude modules SUB1 and SUB2
+# from any dataset. To exclude member HELLO in PDS TEST.ASM will
+# be matched by the pattern TEST.ASM.HELLO. The pattern TEST.ASM.*
+# will match any member in the data set TEST.COBOL.
+# The following filter excludes CICS and LE Library references.
+dbb.LinkEditScanner.excludeFilter = ${SDFHLOAD}.*, ${SCEELKED}.*
+
+#
+# default DBB Repository Web Application authentication properties
+# can be overridden by build.groovy script options
+
+# build.groovy option -url, --url
+dbb.RepositoryClient.url=
+
+# build.groovy option -id, --id
+dbb.RepositoryClient.userId=ADMIN
+
+# build.groovy option -pw, --pw
+#dbb.RepositoryClient.password=
+
+# build.groovy option -pf, --pf
+dbb.RepositoryClient.passwordFile=${zAppBuildDir}/utilities/ADMIN.pw
+
+
+
+
+
+
+
+
diff --git a/Build/zAppBuild/build-conf/datasets.properties b/Build/zAppBuild/build-conf/datasets.properties
new file mode 100644
index 00000000..47b3f291
--- /dev/null
+++ b/Build/zAppBuild/build-conf/datasets.properties
@@ -0,0 +1,46 @@
+# Dataset references
+# Build properties for Partition Data Sets (PDS) used by zAppBuild build scripts.
+# Please provide a fully qualified DSN for each build property below.
+# Ex:
+# MACLIB=SYS1.MACLIB
+
+# z/OS macro library. Example: SYS1.MACLIB
+MACLIB=
+
+# Assembler macro library. Example: CEE.SCEEMAC
+SCEEMAC=
+
+# LE (Language Environment) load library. Example: CEE.SCEELKED
+SCEELKED=
+
+# High Level Assembler (HLASM) load library. Example: ASM.SASMMOD1
+SASMMOD1=
+
+# Cobol Compiler Data Sets. Example: COBOL.V4R1M0.SIGYCOMP
+SIGYCOMP_V4=
+SIGYCOMP_V6=
+
+# PL/I Compiler Data Sets. Example: PLI.V5R2M0.SIBMZCMP
+IBMZPLI_V52=
+IBMZPLI_V51=
+
+# CICS Macro Library. Example: CICSTS.V3R2M0.CICS.SDFHMAC
+SDFHMAC=
+
+# CICS Load Library. Example: CICSTS.V3R2M0.CICS.SDFHLOAD
+SDFHLOAD=
+
+# CICS COBOL Library. Example: CICSTS.V3R2M0.CICS.SDFHCOB
+SDFHCOB=
+
+# MQ COBOL Library. Example: CSQ.V9R1M0.SCSQCOBC
+SCSQCOBC=
+
+# MQ Load Library. Example: CSQ.V9R1M0.SCSQLOAD
+SCSQLOAD=
+
+# DB2 Load Library. Example: DB2.V9R1M0.SDSNLOAD
+SDSNLOAD=
+
+# Optional IDz Load Library. Example: FEL.V14R0M0.SFELLOAD
+SFELLOAD=
diff --git a/Build/zAppBuild/build.groovy b/Build/zAppBuild/build.groovy
new file mode 100644
index 00000000..e5f3c8a5
--- /dev/null
+++ b/Build/zAppBuild/build.groovy
@@ -0,0 +1,466 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import com.ibm.dbb.build.report.*
+import com.ibm.dbb.build.html.*
+import groovy.util.*
+import groovy.transform.*
+import groovy.time.*
+import groovy.xml.*
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def gitUtils= loadScript(new File("utilities/GitUtilities.groovy"))
+@Field def buildUtils= loadScript(new File("utilities/BuildUtilities.groovy"))
+@Field def impactUtils= loadScript(new File("utilities/ImpactUtilities.groovy"))
+@Field String hashPrefix = ':githash:'
+@Field RepositoryClient repositoryClient
+
+// start time message
+def startTime = new Date()
+props.startTime = startTime.format("yyyyMMdd.hhmmss.mmm")
+println("\n** Build start at $props.startTime")
+
+// initialize build
+initializeBuildProcess(args)
+
+// create build list
+List buildList = createBuildList()
+
+// build programs in the build list
+def processCounter = 0
+if (buildList.size() == 0)
+ println("*! No files in build list. Nothing to do.")
+else {
+ if (!props.scanOnly) {
+ println("** Invoking build scripts according to build order: ${props.buildOrder}")
+ String[] buildOrder = props.buildOrder.split(',')
+ buildOrder.each { script ->
+ // Use the ScriptMappings class to get the files mapped to the build script
+ def buildFiles = ScriptMappings.getMappedList(script, buildList)
+ runScript(new File("languages/${script}"), ['buildList':buildFiles])
+ processCounter = processCounter + buildFiles.size()
+ }
+ }
+}
+
+// finalize build process
+if (processCounter == 0)
+ processCounter = buildList.size()
+
+finalizeBuildProcess(start:startTime, count:processCounter)
+
+// if error occurred signal process error
+if (props.error)
+ System.exit(1)
+
+// end script
+
+
+//********************************************************************
+//* Method definitions
+//********************************************************************
+
+def initializeBuildProcess(String[] args) {
+ if (props.verbose) println "** Initializing build process . . ."
+
+ // build properties initial set
+ populateBuildProperties(args)
+
+ // verify required build properties
+ buildUtils.assertBuildProperties(props.requiredBuildProperties)
+
+ // create a repository client for this script
+ if (props."dbb.RepositoryClient.url" && !props.userBuild) {
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+ println "** Repository client created for ${props.getProperty('dbb.RepositoryClient.url')}"
+ }
+
+ // handle -r,--reset option
+ if (props.reset && props.reset.toBoolean()) {
+ println("** Reset option selected")
+ if (props."dbb.RepositoryClient.url") {
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+
+ println("* Deleting collection ${props.applicationCollectionName}")
+ repositoryClient.deleteCollection(props.applicationCollectionName)
+
+ println("* Deleting collection ${props.applicationOutputsCollectionName}")
+ repositoryClient.deleteCollection(props.applicationOutputsCollectionName)
+
+ println("* Deleting build result group ${props.applicationBuildGroup}")
+ repositoryClient.deleteBuildResults(props.applicationBuildGroup)
+ }
+ else {
+ println("*! No repository client URL provided. Unable to reset!")
+ }
+
+ System.exit(0)
+ }
+
+ // create the work directory (build output)
+ new File(props.buildOutDir).mkdirs()
+ println("** Build output located at ${props.buildOutDir}")
+
+ // verify/create build data sets required by each language script
+ if (props.languagePropertyQualifiers) {
+ props.languagePropertyQualifiers.trim().split(',').each { lang ->
+ if (props."${lang}_srcDatasets")
+ createDatasets(props."${lang}_srcDatasets".split(','), props."${lang}_srcOptions")
+
+ if (props."${lang}_loadDatasets")
+ createDatasets(props."${lang}_loadDatasets".split(','), props."${lang}_loadOptions")
+ }
+ }
+
+
+ // initialize build report
+ BuildReportFactory.createDefaultReport()
+
+ // initialize build result (requires repository connection)
+ if (repositoryClient) {
+ def buildResult = repositoryClient.createBuildResult(props.applicationBuildGroup, props.applicationBuildLabel)
+ buildResult.setState(buildResult.PROCESSING)
+ if (props.scanOnly) buildResult.setProperty('scanOnly', 'true')
+ if (props.fullBuild) buildResult.setProperty('fullBuild', 'true')
+ if (props.impactBuild) buildResult.setProperty('impactBuild', 'true')
+ if (props.topicBranchBuild) buildResult.setProperty('topicBranchBuild', 'true')
+ if (props.buildFile) buildResult.setProperty('buildFile', XmlUtil.escapeXml(props.buildFile))
+ buildResult.save()
+ props.buildResultUrl = buildResult.getUrl()
+ println("** Build result created for BuildGroup:${props.applicationBuildGroup} BuildLabel:${props.applicationBuildLabel} at ${props.buildResultUrl}")
+ }
+
+ // verify/create/clone the collections for this build
+ impactUtils.verifyCollections(repositoryClient)
+}
+
+/*
+ * parseArgs - parses build.groovy input options and arguments
+ */
+def parseArgs(String[] args) {
+ String usage = 'build.groovy [options] buildfile'
+ String header = '''buildFile (optional): Path of the file to build. \
+If buildFile is a text file (*.txt) then it is assumed to be a build list file.
+options:
+ '''
+
+ def cli = new CliBuilder(usage:usage,header:header)
+ // required sandbox options
+ cli.w(longOpt:'workspace', args:1, 'Absolute path to workspace (root) directory containing all required source directories')
+ cli.a(longOpt:'application', args:1, required:true, 'Application directory name (relative to workspace)')
+ cli.o(longOpt:'outDir', args:1, 'Absolute path to the build output root directory')
+ cli.h(longOpt:'hlq', args:1, required:true, 'High level qualifier for partition data sets')
+
+ // build options
+ cli.p(longOpt:'propFiles', args:1, 'Commas spearated list of additional property files to load. Absolute paths or relative to workspace.')
+ cli.l(longOpt:'logEncoding', args:1, 'Encoding of output logs. Default is EBCDIC')
+ cli.f(longOpt:'fullBuild', 'Flag indicating to build all programs for application')
+ cli.i(longOpt:'impactBuild', 'Flag indicating to build only programs impacted by changed files since last successful build.')
+ cli.s(longOpt:'scanOnly', 'Flag indicating to only scan files for application')
+ cli.r(longOpt:'reset', 'Deletes the dependency collections and build result group from the DBB repository')
+ cli.v(longOpt:'verbose', 'Flag to turn on script trace')
+
+ // web application credentials (overrides properties in build.properties)
+ cli.url(longOpt:'url', args:1, 'DBB repository URL')
+ cli.id(longOpt:'id', args:1, 'DBB repository id')
+ cli.pw(longOpt:'pw', args:1, 'DBB repository password')
+ cli.pf(longOpt:'pwFile', args:1, 'Absolute or relative (from workspace) path to file containing DBB password')
+
+ // IDz/ZOD User build options
+ cli.u(longOpt:'userBuild', 'Flag indicating running a user build')
+ cli.e(longOpt:'errPrefix', args:1, 'Unique id used for IDz error message datasets')
+ cli.srcDir(longOpt:'sourceDir', args:1, 'Absolute path to workspace (root) directory containing all required source directories for user build')
+ cli.wrkDir(longOpt:'workDir', args:1, 'Absolute path to the build output root directory for user build')
+
+ // utility options
+ cli.help(longOpt:'help', 'Prints this message')
+
+ def opts = cli.parse(args)
+
+ if(opts.v && args.size() > 1)
+ println "** Input args = ${args[1..-1].join(' ')}"
+
+ // if help option used, print usage and exit
+ if (opts.help) {
+ cli.usage()
+ System.exit(0)
+ }
+
+ return opts
+}
+
+/*
+ * populateBuildProperties - loads all build property files, creates properties for command line
+ * arguments and sets calculated propertied for he build process
+ */
+def populateBuildProperties(String[] args) {
+
+ // parse incoming options and arguments
+ def opts = parseArgs(args)
+ def zAppBuildDir = getScriptDir()
+
+ // set required command line arguments
+ if (opts.w) props.workspace = opts.w
+ if (opts.o) props.outDir = opts.o
+ if (opts.a) props.application = opts.a
+ if (opts.h) props.hlq = opts.h
+
+ // need to support IDz user build parameters
+ if (opts.srcDir) props.workspace = opts.srcDir
+ if (opts.wrkDir) props.outDir = opts.wrkDir
+ buildUtils.assertBuildProperties('workspace,outDir')
+
+
+ // load build.properties
+ def buildConf = "${zAppBuildDir}/build-conf"
+ props.load(new File("${buildConf}/build.properties"))
+
+ // load additional build property files
+ if (props.buildPropFiles) {
+ String[] buildPropFiles = props.buildPropFiles.split(',')
+ buildPropFiles.each { propFile ->
+ if (!propFile.startsWith('/'))
+ propFile = "${buildConf}/${propFile}"
+
+ if (opts.v) println "** Loading property file ${propFile}"
+ props.load(new File(propFile))
+ }
+ }
+
+
+ // load application.properties
+ String appConfRootDir = props.applicationConfRootDir ?: props.workspace
+ if (!appConfRootDir.endsWith('/'))
+ appConfRootDir = "${appConfRootDir}/"
+
+ String appConf = "${appConfRootDir}${props.application}/application-conf"
+ if (opts.v) println "** appConf = ${appConf}"
+ props.load(new File("${appConf}/application.properties"))
+
+ // load additional application property files
+ if (props.applicationPropFiles) {
+ String[] applicationPropFiles = props.applicationPropFiles.split(',')
+ applicationPropFiles.each { propFile ->
+ if (!propFile.startsWith('/'))
+ propFile = "${appConf}/${propFile}"
+
+ if (opts.v) println "** Loading property file ${propFile}"
+ props.load(new File(propFile))
+ }
+ }
+
+ // load property files from argument list
+ if (opts.p) props.propFiles = opts.p
+ if (props.propFiles) {
+ String[] propFiles = props.propFiles.split(',')
+ propFiles.each { propFile ->
+ if (!propFile.startsWith('/'))
+ propFile = "${props.workspace}/${propFile}"
+
+ if (opts.v) println "** Loading property file ${propFile}"
+ props.load(new File(propFile))
+ }
+ }
+
+ // set optional command line arguments
+ if (opts.l) props.logEncoding = opts.l
+ if (opts.f) props.fullBuild = 'true'
+ if (opts.i) props.impactBuild = 'true'
+ if (opts.s) props.scanOnly = 'true'
+ if (opts.r) props.reset = 'true'
+ if (opts.v) props.verbose = 'true'
+ if (opts.url) props.url = opts.url
+ if (opts.id) props.id = opts.id
+ if (opts.pw) props.pw = opts.pw
+ if (opts.pf) props.pf = opts.pf
+
+ // set DBB configuration properties
+ if (opts.url) props.'dbb.RepositoryClient.url' = opts.url
+ if (opts.id) props.'dbb.RepositoryClient.userId' = opts.id
+ if (opts.pw) props.'dbb.RepositoryClient.password' = opts.pw
+ if (opts.pf) props.'dbb.RepositoryClient.passwordFile' = opts.pf
+
+ // set IDz/ZOD user build options
+ if (opts.err) props.errPrefix = opts.err
+ if (opts.u) props.userBuild = 'true'
+
+ // set build file from first non-option argument
+ if (opts.arguments()) props.buildFile = opts.arguments()[0].trim()
+
+ // set calculated properties
+ props.zAppBuildDir = zAppBuildDir
+ if (!props.userBuild)
+ props.applicationCurrentBranch = gitUtils.getCurrentGitBranch(buildUtils.getAbsolutePath(props.application))
+ props.topicBranchBuild = (props.applicationCurrentBranch.equals(props.mainBuildBranch)) ? null : 'true'
+ props.applicationBuildGroup = ((props.applicationCurrentBranch) ? "${props.application}" : "${props.application}-${props.applicationCurrentBranch}") as String
+ props.applicationBuildLabel = "build.${props.startTime}" as String
+ props.applicationCollectionName = ((props.applicationCurrentBranch) ? "${props.application}" : "${props.application}-${props.applicationCurrentBranch}") as String
+ props.applicationOutputsCollectionName = "${props.applicationCollectionName}-outputs" as String
+ props.buildOutDir = "${props.outDir}/${props.applicationBuildLabel}" as String
+
+ if (props.verbose)
+ println "** Build properties at start up:\n${props.list()}"
+
+}
+
+
+def createDatasets(String[] datasets, String options) {
+ if (datasets && options) {
+ datasets.each { dataset ->
+ new CreatePDS().dataset(dataset.trim()).options(options.trim()).create()
+ if (props.verbose)
+ println "** Creating / verifying build dataset ${dataset}"
+ }
+ }
+}
+
+/*
+* createBuildList - creates the list of programs to build. Build list calculated four ways:
+* - full build : Contains all programs in application and external directories. Use script option --fullBuild
+* - impact build : Contains impacted programs from calculated changed files. Use script option --impactBuild
+* - build file : Contains one program. Provide a build file argument.
+* - build text file: Contains a list of programs from a text file. Provide a *.txt build file argument.
+*/
+def createBuildList() {
+
+ // using a set to create build list to eliminate duplicate files
+ Set buildSet = new HashSet()
+ String action = (props.scanOnly) ? 'Scanning' : 'Building'
+
+ // check if full build
+ if (props.fullBuild) {
+ println "** --fullBuild option selected. $action all programs for application ${props.application}"
+ buildSet = buildUtils.createFullBuildList()
+ }
+ // check if impact build
+ else if (props.impactBuild) {
+ println "** --impactBuild option selected. $action impacted programs for application ${props.application} "
+ if (repositoryClient) {
+ buildSet = impactUtils.createImpactBuildList(repositoryClient)
+ }
+ else {
+ println "*! Impact build requires a repository client connection to a DBB web application"
+ }
+ }
+
+ // if build file present add additional files to build list (mandatory build list)
+ if (props.buildFile) {
+
+ // handle list file
+ if (props.buildFile.endsWith(props.buildListFileExt)) {
+ if (!props.buildFile.trim().startsWith('/'))
+ props.buildFile = "${props.workspace}/${props.buildFile}" as String
+ println "** Adding files listed in ${props.buildFile} to $action build list"
+
+ File jBuildFile = new File(props.buildFile)
+ List files = jBuildFile.readLines()
+ files.each { file ->
+ String relFile = buildUtils.relativizePath(file)
+ if (relFile)
+ buildSet.add(relFile)
+ }
+ }
+ // else it's a single file to build
+ else {
+ println "** Adding ${props.buildFile} to $action build list"
+ String relFile = buildUtils.relativizePath(props.buildFile)
+ if (relFile)
+ buildSet.add(relFile)
+ }
+ }
+
+ // now that we are done adding to the build list convert the set to a list
+ List buildList = new ArrayList()
+ buildList.addAll(buildSet)
+ buildSet = null
+
+ // scan and update source collection with build list files for non-impact builds
+ // since impact build list creation already scanned the incoming changed files
+ // we do not need to scan them again
+ if (!props.impactBuild && !props.userBuild) {
+ impactUtils.updateCollection(buildList, null, repositoryClient)
+ }
+
+ // write out build list to file (for documentation, not actually used by build scripts)
+ String buildListFileLoc = "${props.buildOutDir}/buildList.${props.buildListFileExt}"
+ println "** Writing build list file to $buildListFileLoc"
+ File buildListFile = new File(buildListFileLoc)
+ String enc = props.logEncoding ?: 'IBM-1047'
+ buildListFile.withWriter(enc) { writer ->
+ buildList.each { file ->
+ if (props.verbose) println file
+ writer.write("$file\n")
+ }
+ }
+
+ return buildList
+}
+
+
+def finalizeBuildProcess(Map args) {
+
+ // create build report data file
+ def jsonOutputFile = new File("${props.buildOutDir}/BuildReport.json")
+ println "** Writing build report data to ${jsonOutputFile}"
+ def buildReportEncoding = "UTF-8"
+ def buildReport = BuildReportFactory.getBuildReport()
+ buildReport.save(jsonOutputFile, buildReportEncoding)
+
+ // create build report html file
+ def htmlOutputFile = new File("${props.buildOutDir}/BuildReport.html")
+ println "** Writing build report to ${htmlOutputFile}"
+ def htmlTemplate = null // Use default HTML template.
+ def css = null // Use default theme.
+ def renderScript = null // Use default rendering.
+ def transformer = HtmlTransformer.getInstance()
+ transformer.transform(jsonOutputFile, htmlTemplate, css, renderScript, htmlOutputFile, buildReportEncoding)
+
+ // update repository artifacts
+ if (repositoryClient) {
+ if (props.verbose)
+ println "** Updating build result BuildGroup:${props.applicationBuildGroup} BuildLabel:${props.applicationBuildLabel}"
+ def buildResult = repositoryClient.getBuildResult(props.applicationBuildGroup, props.applicationBuildLabel)
+ buildResult.setBuildReport(new FileInputStream(htmlOutputFile))
+ buildResult.setBuildReportData(new FileInputStream(jsonOutputFile))
+ buildResult.setProperty("filesProcessed", String.valueOf(args.count))
+ buildResult.setState(buildResult.COMPLETE)
+
+ // add git hashes for each build directory
+ List srcDirs = []
+ if (props.applicationSrcDirs)
+ srcDirs.addAll(props.applicationSrcDirs.trim().split(','))
+
+ srcDirs.each { dir ->
+ dir = buildUtils.getAbsolutePath(dir)
+ if (props.verbose) println "*** Obtaining hash for directory $dir"
+ if (gitUtils.isGitDir(dir)) {
+ String hash = gitUtils.getCurrentGitHash(dir)
+ String key = "$hashPrefix${buildUtils.relativizePath(dir)}"
+ buildResult.setProperty(key, hash)
+ if (props.verbose) println "** Setting property $key : $hash"
+ }
+ else {
+ if (props.verbose) println "**! Directory $dir is not a Git repository"
+ }
+ }
+
+ // save build result
+ buildResult.save()
+
+ }
+
+ // print end build message
+ def endTime = new Date()
+ def duration = TimeCategory.minus(endTime, args.start)
+ def state = (props.error) ? "ERROR" : "CLEAN"
+ println("** Build ended at $endTime")
+ println("** Build State : $state")
+ println("** Total files processed : ${args.count}")
+ println("** Total build time : $duration\n")
+}
+
+
+
diff --git a/Build/zAppBuild/languages/Assembler.groovy b/Build/zAppBuild/languages/Assembler.groovy
new file mode 100644
index 00000000..2170b682
--- /dev/null
+++ b/Build/zAppBuild/languages/Assembler.groovy
@@ -0,0 +1,164 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def buildUtils= loadScript(new File("${props.zAppBuildDir}/utilities/BuildUtilities.groovy"))
+
+@Field RepositoryClient repositoryClient
+
+println("** Building files mapped to ${this.class.getName()}.groovy script")
+
+// verify required build properties
+buildUtils.assertBuildProperties(props.assembler_requiredBuildProperties)
+
+// sort the build list based on build file rank if provided
+List sortedList = buildUtils.sortBuildList(argMap.buildList, 'assembler_fileBuildRank')
+
+// iterate through build list
+sortedList.each { buildFile ->
+ println "*** Building file $buildFile"
+
+ // copy build file to input data set
+ // copy build file and dependency files to data sets
+ String rules = props.getFileProperty('assembler_resolutionRules', buildFile)
+ DependencyResolver dependencyResolver = buildUtils.createDependencyResolver(buildFile, rules)
+ buildUtils.copySourceFiles(buildFile, props.assembler_srcPDS, props.assembler_macroPDS, dependencyResolver)
+
+ // create mvs commands
+ LogicalFile logicalFile = dependencyResolver.getLogicalFile()
+ String member = CopyToPDS.createMemberName(buildFile)
+ File logFile = new File("${props.buildOutDir}/${member}.log")
+ MVSExec assembler = createAssemblerCommand(buildFile, member, logFile)
+ MVSExec linkEdit = createLinkEditCommand(buildFile, member, logFile)
+
+ // execute mvs commands in a mvs job
+ MVSJob job = new MVSJob()
+ job.start()
+
+ // assemble the program
+ int rc = assembler.execute()
+ int maxRC = props.getFileProperty('assembler_maxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The assembler return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // if this program needs to be link edited . . .
+ String needsLinking = props.getFileProperty('assembler_linkEdit', buildFile)
+ if (needsLinking && needsLinking.toBoolean()) {
+ rc = linkEdit.execute()
+ maxRC = props.getFileProperty('assembler_linkEditMaxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The link edit return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // only scan the load module if load module scanning turned on for file
+ String scanLoadModule = props.getFileProperty('assembler_scanLoadModule', buildFile)
+ if (scanLoadModule && scanLoadModule.toBoolean() && getRepositoryClient())
+ impactUtils.saveStaticLinkDependencies(buildFile, props.linkedit_loadPDS, logicalFile, repositoryClient)
+ }
+ }
+
+ }
+
+
+ // clean up passed DD statements
+ job.stop()
+
+}
+
+// end script
+
+//********************************************************************
+ //* Method definitions
+ //********************************************************************
+
+/*
+ * createCompileCommand - creates a MVSExec command for compiling the BMS Map (buildFile)
+ */
+def createAssemblerCommand(String buildFile, String member, File logFile) {
+ String parameters = props.getFileProperty('assembler_pgmParms', buildFile)
+
+ // define the MVSExec command to compile the BMS map
+ MVSExec assembler = new MVSExec().file(buildFile).pgm(props.assembler_pgm).parm(parameters)
+
+ // add DD statements to the compile command
+ assembler.dd(new DDStatement().name("SYSIN").dsn("${props.assembler_srcPDS}($member)").options('shr'))
+ assembler.dd(new DDStatement().name("SYSPRINT").options(props.assembler_tempOptions))
+ assembler.dd(new DDStatement().name("SYSUT1").options(props.assembler_tempOptions))
+
+
+ // Write SYSLIN to temporary dataset if performing link edit
+ String doLinkEdit = props.getFileProperty('assembler_linkEdit', buildFile)
+ if (doLinkEdit && doLinkEdit.toBoolean())
+ assembler.dd(new DDStatement().name("SYSLIN").dsn("&&TEMPOBJ").options(props.assembler_tempOptions).pass(true))
+ else
+ assembler.dd(new DDStatement().name("SYSLIN").dsn("${props.assembler_objPDS}($member)").options('shr').output(true))
+
+ // create a SYSLIB concatenation with optional MACLIB and MODGEN
+ assembler.dd(new DDStatement().name("SYSLIB").dsn(props.assembler_macroPDS).options("shr"))
+ if (props.SCEEMAC)
+ assembler.dd(new DDStatement().dsn(props.SCEEMAC).options("shr"))
+ if (props.MACLIB)
+ assembler.dd(new DDStatement().dsn(props.MACLIB).options("shr"))
+ if (props.MODGEN)
+ assembler.dd(new DDStatement().dsn(props.MODGEN).options("shr"))
+
+ // add IDz User Build Error Feedback DDs
+ if (props.errPrefix) {
+ assembler.dd(new DDStatement().name("SYSADATA").options("DUMMY"))
+ assembler.dd(new DDStatement().name("SYSXMLSD").dsn("${props.hlq}.${props.errPrefix}.SYSXMLSD.XML").options('mod keep'))
+ }
+
+ // add a copy command to the compile command to copy the SYSPRINT from the temporary dataset to an HFS log file
+ assembler.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding).append(true))
+
+ return assembler
+}
+
+
+/*
+ * createLinkEditCommand - creates a MVSExec xommand for link editing the assembler object module produced by the compile
+ */
+def createLinkEditCommand(String buildFile, String member, File logFile) {
+ String parameters = props.getFileProperty('assembler_linkEditParms', buildFile)
+
+ // define the MVSExec command to link edit the program
+ MVSExec linkedit = new MVSExec().file(buildFile).pgm(props.assembler_linkEditor).parm(parameters)
+
+ // add DD statements to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLMOD").dsn("${props.assembler_loadPDS}($member)").options('shr').output(true).deployType('LOAD'))
+ linkedit.dd(new DDStatement().name("SYSPRINT").options(props.assembler_tempOptions))
+ linkedit.dd(new DDStatement().name("SYSUT1").options(props.assembler_tempOptions))
+
+ // add a syslib to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLIB").dsn(props.assembler_objPDS).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SCEELKED).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+
+ // add a copy command to the linkedit command to append the SYSPRINT from the temporary dataset to the HFS log file
+ linkedit.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding).append(true))
+
+ return linkedit
+}
+
+def getRepositoryClient() {
+ if (!repositoryClient && props."dbb.RepositoryClient.url")
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+
+ return repositoryClient
+}
+
+
diff --git a/Build/zAppBuild/languages/BMS.groovy b/Build/zAppBuild/languages/BMS.groovy
new file mode 100644
index 00000000..d3920856
--- /dev/null
+++ b/Build/zAppBuild/languages/BMS.groovy
@@ -0,0 +1,145 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def buildUtils= loadScript(new File("${props.zAppBuildDir}/utilities/BuildUtilities.groovy"))
+
+@Field RepositoryClient repositoryClient
+
+println("** Building files mapped to ${this.class.getName()}.groovy script")
+
+// verify required build properties
+buildUtils.assertBuildProperties(props.bms_requiredBuildProperties)
+
+// sort the build list based on build file rank if provided
+List sortedList = buildUtils.sortBuildList(argMap.buildList, 'bms_fileBuildRank')
+
+// iterate through build list
+sortedList.each { buildFile ->
+ println "*** Building file $buildFile"
+
+ // copy build file to input data set
+ buildUtils.copySourceFiles(buildFile, props.bms_srcPDS, null, null)
+
+ // create mvs commands
+ String member = CopyToPDS.createMemberName(buildFile)
+ File logFile = new File("${props.buildOutDir}/${member}.log")
+ MVSExec copyGen = createCopyGenCommand(buildFile, member, logFile)
+ MVSExec compile = createCompileCommand(buildFile, member, logFile)
+ MVSExec linkEdit = createLinkEditCommand(buildFile, member, logFile)
+
+ // execute mvs commands in a mvs job
+ def maxRC = props.getFileProperty('bms_maxRC', buildFile).toInteger()
+ def rc = new MVSJob().executable(copyGen)
+ .executable(compile)
+ .executable(linkEdit)
+ .maxRC(0)
+ .execute()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The build return code ($rc) for $buildFile exceeded the maximum return code allowed ($axRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+
+}
+
+// end script
+
+
+//********************************************************************
+//* Method definitions
+//********************************************************************
+
+/*
+ * createCompileCommand - creates a MVSExec command for compiling the BMS Map (buildFile)
+ */
+def createCopyGenCommand(String buildFile, String member, File logFile) {
+ String parameters = props.getFileProperty('bms_copyGenParms', buildFile)
+
+ // define the MVSExec command to compile the BMS map
+ MVSExec compile = new MVSExec().file(buildFile).pgm(props.bms_assembler).parm(parameters)
+
+ // add DD statements to the compile command
+ compile.dd(new DDStatement().name("SYSIN").dsn("${props.bms_srcPDS}($member)").options('shr').report(true))
+ compile.dd(new DDStatement().name("SYSPRINT").options(props.bms_tempOptions))
+ compile.dd(new DDStatement().name("SYSPUNCH").dsn("${props.bms_cpyPDS}($member)").options('shr').output(true))
+ [1,2,3].each { num ->
+ compile.dd(new DDStatement().name("SYSUT$num").options(props.bms_tempOptions))
+ }
+ compile.dd(new DDStatement().name("SYSLIB").dsn(props.SDFHMAC).options("shr"))
+ compile.dd(new DDStatement().dsn(props.MACLIB).options("shr"))
+ compile.dd(new DDStatement().name("TASKLIB").dsn(props.SASMMOD1).options("shr"))
+
+ // add a copy command to the compile command to copy the SYSPRINT from the temporary dataset to an HFS log file
+ compile.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding))
+
+ return compile
+}
+
+/*
+ * createCompileCommand - creates a MVSExec command for compiling the BMS Map (buildFile)
+ */
+def createCompileCommand(String buildFile, String member, File logFile) {
+ String parameters = props.getFileProperty('bms_compileParms', buildFile)
+
+ // define the MVSExec command to compile the BMS map
+ MVSExec compile = new MVSExec().file(buildFile).pgm(props.bms_assembler).parm(parameters)
+
+ // add DD statements to the compile command
+ compile.dd(new DDStatement().name("SYSIN").dsn("${props.bms_srcPDS}($member)").options('shr'))
+ compile.dd(new DDStatement().name("SYSPRINT").options(props.bms_tempOptions))
+ compile.dd(new DDStatement().name("SYSPUNCH").dsn("&&TEMPOBJ").options(props.bms_tempOptions).pass(true))
+ [1,2,3].each { num ->
+ compile.dd(new DDStatement().name("SYSUT$num").options(props.bms_tempOptions))
+ }
+ compile.dd(new DDStatement().name("SYSLIB").dsn(props.SDFHMAC).options("shr"))
+ compile.dd(new DDStatement().dsn(props.MACLIB).options("shr"))
+ compile.dd(new DDStatement().name("TASKLIB").dsn(props.SASMMOD1).options("shr"))
+
+ compile.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding).append(true))
+
+ return compile
+}
+
+
+/*
+ * createLinkEditCommand - creates a MVSExec xommand for link editing the bms object module produced by the compile
+ */
+def createLinkEditCommand(String buildFile, String member, File logFile) {
+ String parameters = props.getFileProperty('bms_linkEditParms', buildFile)
+
+ // define the MVSExec command to link edit the program
+ MVSExec linkedit = new MVSExec().file(buildFile).pgm(props.bms_linkEditor).parm(parameters)
+
+ // add DD statements to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLIN").dsn("&&TEMPOBJ").options("shr"))
+ linkedit.dd(new DDStatement().name("SYSLMOD").dsn("${props.bms_loadPDS}($member)").options('shr').output(true).deployType('MAPLOAD'))
+ linkedit.dd(new DDStatement().name("SYSPRINT").options(props.bms_tempOptions))
+ linkedit.dd(new DDStatement().name("SYSUT1").options(props.bms_tempOptions))
+
+ // add a syslib to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLIB").dsn(props.SCEELKED).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+
+ // add a copy command to the linkedit command to append the SYSPRINT from the temporary dataset to the HFS log file
+ linkedit.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding))
+
+ return linkedit
+}
+
+def getRepositoryClient() {
+ if (!repositoryClient && props."dbb.RepositoryClient.url")
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+
+ return repositoryClient
+}
+
+
+
diff --git a/Build/zAppBuild/languages/Cobol.groovy b/Build/zAppBuild/languages/Cobol.groovy
new file mode 100644
index 00000000..f9c16d14
--- /dev/null
+++ b/Build/zAppBuild/languages/Cobol.groovy
@@ -0,0 +1,217 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def buildUtils= loadScript(new File("${props.zAppBuildDir}/utilities/BuildUtilities.groovy"))
+@Field def impactUtils= loadScript(new File("${props.zAppBuildDir}/utilities/ImpactUtilities.groovy"))
+@Field RepositoryClient repositoryClient
+
+println("** Building files mapped to ${this.class.getName()}.groovy script")
+
+// verify required build properties
+buildUtils.assertBuildProperties(props.cobol_requiredBuildProperties)
+
+// sort the build list based on build file rank if provided
+List sortedList = buildUtils.sortBuildList(argMap.buildList, 'cobol_fileBuildRank')
+
+// iterate through build list
+sortedList.each { buildFile ->
+ println "*** Building file $buildFile"
+
+ // copy build file and dependency files to data sets
+ String rules = props.getFileProperty('cobol_resolutionRules', buildFile)
+ DependencyResolver dependencyResolver = buildUtils.createDependencyResolver(buildFile, rules)
+ buildUtils.copySourceFiles(buildFile, props.cobol_srcPDS, props.cobol_cpyPDS, dependencyResolver)
+
+ // create mvs commands
+ LogicalFile logicalFile = dependencyResolver.getLogicalFile()
+ String member = CopyToPDS.createMemberName(buildFile)
+ File logFile = new File("${props.buildOutDir}/${member}.log")
+ MVSExec compile = createCompileCommand(buildFile, logicalFile, member, logFile)
+ MVSExec linkEdit = createLinkEditCommand(buildFile, logicalFile, member, logFile)
+
+ // execute mvs commands in a mvs job
+ MVSJob job = new MVSJob()
+ job.start()
+
+ // compile the cobol program
+ int rc = compile.execute()
+ int maxRC = props.getFileProperty('cobol_compileMaxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The compile return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // if this program needs to be link edited . . .
+ String needsLinking = props.getFileProperty('cobol_linkEdit', buildFile)
+ if (needsLinking.toBoolean()) {
+ rc = linkEdit.execute()
+ maxRC = props.getFileProperty('cobol_linkEditMaxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The link edit return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // only scan the load module if load module scanning turned on for file
+ String scanLoadModule = props.getFileProperty('cobol_scanLoadModule', buildFile)
+ if (scanLoadModule && scanLoadModule.toBoolean() && getRepositoryClient())
+ impactUtils.saveStaticLinkDependencies(buildFile, props.linkedit_loadPDS, logicalFile, repositoryClient)
+ }
+ }
+
+ }
+
+
+ // clean up passed DD statements
+ job.stop()
+}
+
+// end script
+
+
+//********************************************************************
+//* Method definitions
+//********************************************************************
+
+/*
+ * createCobolParms - Builds up the COBOL compiler parameter list from build and file properties
+ */
+def createCobolParms(String buildFile, LogicalFile logicalFile) {
+ def parms = props.getFileProperty('cobol_compileParms', buildFile) ?: ""
+ def cics = props.getFileProperty('cobol_compileCICSParms', buildFile) ?: ""
+ def sql = props.getFileProperty('cobol_compileSQLParms', buildFile) ?: ""
+ def errPrefix = props.getFileProperty('cobol_compileErrorPrefixParms', buildFile) ?: ""
+
+
+ if (buildUtils.isCICS(logicalFile))
+ parms = "$parms,$cics"
+
+ if (buildUtils.isSQL(logicalFile))
+ parms = "$parms,$sql"
+
+ String isMQ = props.getFileProperty('cobol_isMQ', buildFile)
+ if (isMQ && isMQ.toBoolean())
+ compile.dd(new DDStatement().dsn(props.SCSQCOBC).options("shr"))
+
+ if (errPrefix)
+ parameters = "$parms,errPrefix"
+
+ if (parms.startsWith(','))
+ parms = parms.drop(1)
+
+ if (props.verbose) println "Cobol compiler parms for $buildFile = $parms"
+ return parms
+}
+
+/*
+ * createCompileCommand - creates a MVSExec command for compiling the COBOL program (buildFile)
+ */
+def createCompileCommand(String buildFile, LogicalFile logicalFile, String member, File logFile) {
+ String parms = createCobolParms(buildFile, logicalFile)
+ String compiler = props.getFileProperty('cobol_compiler', buildFile)
+
+ // define the MVSExec command to compile the program
+ MVSExec compile = new MVSExec().file(buildFile).pgm(compiler).parm(parms)
+
+ // add DD statements to the compile command
+ compile.dd(new DDStatement().name("SYSIN").dsn("${props.cobol_srcPDS}($member)").options('shr').report(true))
+ compile.dd(new DDStatement().name("SYSPRINT").options(props.cobol_tempOptions))
+ compile.dd(new DDStatement().name("SYSMDECK").options(props.cobol_tempOptions))
+ (1..17).toList().each { num ->
+ compile.dd(new DDStatement().name("SYSUT$num").options(props.cobol_tempOptions))
+ }
+
+ // Write SYSLIN to temporary dataset if performing link edit
+ String doLinkEdit = props.getFileProperty('cobol_linkEdit', buildFile)
+ if (doLinkEdit && doLinkEdit.toBoolean())
+ compile.dd(new DDStatement().name("SYSLIN").dsn("&&TEMPOBJ").options(props.cobol_tempOptions).pass(true))
+ else
+ compile.dd(new DDStatement().name("SYSLIN").dsn("${props.cobol_objPDS}($member)").options('shr').output(true))
+
+ // add a syslib to the compile command with optional bms output copybook and CICS concatenation
+ compile.dd(new DDStatement().name("SYSLIB").dsn(props.cobol_cpyPDS).options("shr"))
+ if (props.bms_cpyPDS)
+ compile.dd(new DDStatement().dsn(props.bms_cpyPDS).options("shr"))
+ if (buildUtils.isCICS(logicalFile))
+ compile.dd(new DDStatement().dsn(props.SDFHCOB).options("shr"))
+
+ // add a tasklib to the compile command with optional CICS, DB2, and IDz concatenations
+ String compilerVer = props.getFileProperty('cobol_compilerVersion', buildFile)
+ compile.dd(new DDStatement().name("TASKLIB").dsn(props."SIGYCOMP_$compilerVer").options("shr"))
+ if (buildUtils.isCICS(logicalFile))
+ compile.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+ if (buildUtils.isSQL(logicalFile))
+ compile.dd(new DDStatement().dsn(props.SDSNLOAD).options("shr"))
+ if (props.SFELLOAD)
+ compile.dd(new DDStatement().dsn(props.SFELLOAD).options("shr"))
+
+ // add optional DBRMLIB if build file contains DB2 code
+ if (buildUtils.isSQL(logicalFile))
+ compile.dd(new DDStatement().name("DBRMLIB").dsn("$props.cobol_dbrmPDS($member)").options('shr').output(true).deployType('DBRM'))
+
+ // add IDz User Build Error Feedback DDs
+ if (props.errPrefix) {
+ compile.dd(new DDStatement().name("SYSADATA").options("DUMMY"))
+ compile.dd(new DDStatement().name("SYSXMLSD").dsn("${props.hlq}.${props.errPrefix}.SYSXMLSD.XML").options('mod keep'))
+ }
+
+ // add a copy command to the compile command to copy the SYSPRINT from the temporary dataset to an HFS log file
+ compile.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding))
+
+ return compile
+}
+
+
+/*
+ * createLinkEditCommand - creates a MVSExec xommand for link editing the COBOL object module produced by the compile
+ */
+def createLinkEditCommand(String buildFile, LogicalFile logicalFile, String member, File logFile) {
+ String parms = props.getFileProperty('cobol_linkEditParms', buildFile)
+ String linker = props.getFileProperty('cobol_linkEditor', buildFile)
+
+ // define the MVSExec command to link edit the program
+ MVSExec linkedit = new MVSExec().file(buildFile).pgm(linker).parm(parms)
+
+ // add DD statements to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLMOD").dsn("${props.cobol_loadPDS}($member)").options('shr').output(true).deployType('LOAD'))
+ linkedit.dd(new DDStatement().name("SYSPRINT").options(props.cobol_tempOptions))
+ linkedit.dd(new DDStatement().name("SYSUT1").options(props.cobol_tempOptions))
+
+ // add a syslib to the compile command with optional CICS concatenation
+ linkedit.dd(new DDStatement().name("SYSLIB").dsn(props.cobol_objPDS).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SCEELKED).options("shr"))
+ if (buildUtils.isCICS(logicalFile))
+ linkedit.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+
+ String isMQ = props.getFileProperty('cobol_isMQ', buildFile)
+ if (isMQ && isMQ.toBoolean())
+ linkedit.dd(new DDStatement().dsn(props.SCSQLOAD).options("shr"))
+
+ // add a copy command to the linkedit command to append the SYSPRINT from the temporary dataset to the HFS log file
+ linkedit.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding).append(true))
+
+ return linkedit
+}
+
+
+def getRepositoryClient() {
+ if (!repositoryClient && props."dbb.RepositoryClient.url")
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+
+ return repositoryClient
+}
+
+
+
+
diff --git a/Build/zAppBuild/languages/LinkEdit.groovy b/Build/zAppBuild/languages/LinkEdit.groovy
new file mode 100644
index 00000000..4f6a94ce
--- /dev/null
+++ b/Build/zAppBuild/languages/LinkEdit.groovy
@@ -0,0 +1,104 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def buildUtils= loadScript(new File("${props.zAppBuildDir}/utilities/BuildUtilities.groovy"))
+@Field def impactUtils= loadScript(new File("${props.zAppBuildDir}/utilities/ImpactUtilities.groovy"))
+@Field RepositoryClient repositoryClient
+
+println("** Building files mapped to ${this.class.getName()}.groovy script")
+
+// verify required build properties
+buildUtils.assertBuildProperties(props.linkedit_requiredBuildProperties)
+
+// sort the build list based on build file rank if provided
+List sortedList = buildUtils.sortBuildList(argMap.buildList, 'linkedit_fileBuildRank')
+
+// iterate through build list
+sortedList.each { buildFile ->
+ println "*** Building file $buildFile"
+
+ // copy build file to input data set
+ buildUtils.copySourceFiles(buildFile, props.linkedit_srcPDS, null, null)
+
+ // create mvs commands
+ String rules = props.getFileProperty('linkedit_resolutionRules', buildFile)
+ DependencyResolver dependencyResolver = buildUtils.createDependencyResolver(buildFile, rules)
+ LogicalFile logicalFile = dependencyResolver.getLogicalFile()
+ String member = CopyToPDS.createMemberName(buildFile)
+ File logFile = new File("${props.buildOutDir}/${member}.log")
+ MVSExec linkEdit = createLinkEditCommand(buildFile, logicalFile, member, logFile)
+
+ // execute mvs commands in a mvs job
+ MVSJob job = new MVSJob()
+ job.start()
+
+ rc = linkEdit.execute()
+ maxRC = props.getFileProperty('linkedit_maxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The link edit return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // only scan the load module if load module scanning turned on for file
+ String scanLoadModule = props.getFileProperty('linkedit_scanLoadModule', buildFile)
+ if (scanLoadModule && scanLoadModule.toBoolean() && getRepositoryClient())
+ impactUtils.saveStaticLinkDependencies(buildFile, props.linkedit_loadPDS, logicalFile, repositoryClient)
+ }
+
+ job.stop()
+}
+
+// end script
+
+
+//********************************************************************
+//* Method definitions
+//********************************************************************
+
+/*
+ * createLinkEditCommand - creates a MVSExec xommand for link editing the object module produced by link file
+ */
+def createLinkEditCommand(String buildFile, LogicalFile logicalFile, String member, File logFile) {
+ String parms = props.getFileProperty('linkEdit_parms', buildFile)
+ String linker = props.getFileProperty('linkedit_linkEditor', buildFile)
+
+ // define the MVSExec command to link edit the program
+ MVSExec linkedit = new MVSExec().file(buildFile).pgm(linker).parm(parms)
+
+ // add DD statements to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLIN").dsn("${props.linkedit_srcPDS}($member)").options("shr").report(true))
+ linkedit.dd(new DDStatement().name("SYSLMOD").dsn("${props.linkedit_loadPDS}($member)").options('shr').output(true).deployType('LOAD'))
+ linkedit.dd(new DDStatement().name("SYSPRINT").options(props.linkedit_tempOptions))
+ linkedit.dd(new DDStatement().name("SYSUT1").options(props.linkedit_tempOptions))
+
+ // add a syslib to the compile command with optional CICS concatenation
+ linkedit.dd(new DDStatement().name("SYSLIB").dsn(props.linkedit_objPDS).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SCEELKED).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+
+ // add a copy command to the linkedit command to append the SYSPRINT from the temporary dataset to the HFS log file
+ linkedit.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding))
+
+ return linkedit
+}
+
+
+def getRepositoryClient() {
+ if (!repositoryClient && props."dbb.RepositoryClient.url")
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+
+ return repositoryClient
+}
+
+
+
+
diff --git a/Build/zAppBuild/languages/PLI.groovy b/Build/zAppBuild/languages/PLI.groovy
new file mode 100644
index 00000000..72b97cab
--- /dev/null
+++ b/Build/zAppBuild/languages/PLI.groovy
@@ -0,0 +1,203 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def buildUtils= loadScript(new File("${props.zAppBuildDir}/utilities/BuildUtilities.groovy"))
+@Field def impactUtils= loadScript(new File("${props.zAppBuildDir}/utilities/ImpactUtilities.groovy"))
+@Field RepositoryClient repositoryClient
+
+println("** Building files mapped to ${this.class.getName()}.groovy script")
+
+// verify required build properties
+buildUtils.assertBuildProperties(props.pli_requiredBuildProperties)
+
+// sort the build list based on build file rank if provided
+List sortedList = buildUtils.sortBuildList(argMap.buildList, 'pli_fileBuildRank')
+
+// iterate through build list
+sortedList.each { buildFile ->
+ println "*** Building file $buildFile"
+
+ // copy build file to input data set
+ // copy build file and dependency files to data sets
+ String rules = props.getFileProperty('pli_resolutionRules', buildFile)
+ DependencyResolver dependencyResolver = buildUtils.createDependencyResolver(buildFile, rules)
+ buildUtils.copySourceFiles(buildFile, props.pli_srcPDS, props.pli_incPDS, dependencyResolver)
+
+ // create mvs commands
+ LogicalFile logicalFile = dependencyResolver.getLogicalFile()
+ String member = CopyToPDS.createMemberName(buildFile)
+ File logFile = new File("${props.buildOutDir}/${member}.log")
+ MVSExec compile = createCompileCommand(buildFile, logicalFile, member, logFile)
+ MVSExec linkEdit = createLinkEditCommand(buildFile, logicalFile, member, logFile)
+
+ // execute mvs commands in a mvs job
+ MVSJob job = new MVSJob()
+ job.start()
+
+ // compile the program
+ int rc = compile.execute()
+ int maxRC = props.getFileProperty('pli_compileMaxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The compile return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // if this program needs to be link edited . . .
+ String needsLinking = props.getFileProperty('pli_linkEdit', buildFile)
+ if (needsLinking.toBoolean()) {
+ rc = linkEdit.execute()
+ maxRC = props.getFileProperty('pli_linkEditMaxRC', buildFile).toInteger()
+
+ if (rc > maxRC) {
+ String errorMsg = "*! The link edit return code ($rc) for $buildFile exceeded the maximum return code allowed ($maxRC)"
+ println(errorMsg)
+ props.error = "true"
+ buildUtils.updateBuildResult(errorMsg:errorMsg,logs:["${member}.log":logFile],client:getRepositoryClient())
+ }
+ else {
+ // only scan the load module if load module scanning turned on for file
+ String scanLoadModule = props.getFileProperty('pli_scanLoadModule', buildFile)
+ if (scanLoadModule && scanLoadModule.toBoolean() && getRepositoryClient())
+ impactUtils.saveStaticLinkDependencies(buildFile, props.linkedit_loadPDS, logicalFile, repositoryClient)
+ }
+ }
+ }
+ // clean up passed DD statements
+ job.stop()
+}
+
+// end script
+
+
+//********************************************************************
+ //* Method definitions
+ //********************************************************************
+
+ /*
+ * createPLIParms - Builds up the PLI compiler parameter list from build and file properties
+ */
+ def createPLIParms(String buildFile, LogicalFile logicalFile) {
+ def parms = props.getFileProperty('pli_compileParms', buildFile) ?: ""
+ def cics = props.getFileProperty('pli_compileCICSParms', buildFile) ?: ""
+ def sql = props.getFileProperty('pli_compileSQLParms', buildFile) ?: ""
+ def errPrefix = props.getFileProperty('pli_compileErrorPrefixParms', buildFile) ?: ""
+
+
+ if (buildUtils.isCICS(logicalFile))
+ parms = "$parms,$cics"
+
+ if (buildUtils.isSQL(logicalFile))
+ parms = "$parms,$sql"
+
+ if (errPrefix)
+ parameters = "$parms,errPrefix"
+
+ if (parms.startsWith(','))
+ parms = parms.drop(1)
+
+ if (props.verbose) println "PLI compiler parms for $buildFile = $parms"
+ return parms
+ }
+
+ /*
+ * createCompileCommand - creates a MVSExec command for compiling the PLI program (buildFile)
+ */
+ def createCompileCommand(String buildFile, LogicalFile logicalFile, String member, File logFile) {
+ String parms = createPLIParms(buildFile, logicalFile)
+ String compiler = props.getFileProperty('pli_compiler', buildFile)
+
+ // define the MVSExec command to compile the program
+ MVSExec compile = new MVSExec().file(buildFile).pgm(compiler).parm(parms)
+
+ // add DD statements to the compile command
+ compile.dd(new DDStatement().name("SYSIN").dsn("${props.pli_srcPDS}($member)").options('shr').report(true))
+ compile.dd(new DDStatement().name("SYSPRINT").options(props.pli_listOptions))
+ compile.dd(new DDStatement().name("SYSMDECK").options(props.pli_tempOptions))
+ (1..17).toList().each { num ->
+ compile.dd(new DDStatement().name("SYSUT$num").options(props.pli_tempOptions))
+ }
+
+ // Write SYSLIN to temporary dataset if performing link edit
+ String doLinkEdit = props.getFileProperty('pli_linkEdit', buildFile)
+ if (doLinkEdit && doLinkEdit.toBoolean())
+ compile.dd(new DDStatement().name("SYSLIN").dsn("&&TEMPOBJ").options(props.pli_tempOptions).pass(true))
+ else
+ compile.dd(new DDStatement().name("SYSLIN").dsn("${props.pli_objPDS}($member)").options('shr').output(true))
+
+ // add a syslib to the compile command with optional bms output copybook and CICS concatenation
+ compile.dd(new DDStatement().name("SYSLIB").dsn(props.pli_incPDS).options("shr"))
+ if (props.bms_cpyPDS)
+ compile.dd(new DDStatement().dsn(props.bms_cpyPDS).options("shr"))
+ if (buildUtils.isCICS(logicalFile))
+ compile.dd(new DDStatement().dsn(props.SDFHCOB).options("shr"))
+
+ // add a tasklib to the compile command with optional CICS, DB2, and IDz concatenations
+ String compilerVer = props.getFileProperty('pli_compilerVersion', buildFile)
+ compile.dd(new DDStatement().name("TASKLIB").dsn(props."IBMZPLI_$compilerVer").options("shr"))
+ if (buildUtils.isCICS(logicalFile))
+ compile.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+ if (buildUtils.isSQL(logicalFile))
+ compile.dd(new DDStatement().dsn(props.SDSNLOAD).options("shr"))
+ if (props.SFELLOAD)
+ compile.dd(new DDStatement().dsn(props.SFELLOAD).options("shr"))
+
+ // add optional DBRMLIB if build file contains DB2 code
+ if (buildUtils.isSQL(logicalFile))
+ compile.dd(new DDStatement().name("DBRMLIB").dsn("$props.pli_dbrmPDS($member)").options('shr').output(true).deployType('DBRM'))
+
+ // add IDz User Build Error Feedback DDs
+ if (props.errPrefix) {
+ compile.dd(new DDStatement().name("SYSADATA").options("DUMMY"))
+ compile.dd(new DDStatement().name("SYSXMLSD").dsn("${props.hlq}.${props.errPrefix}.SYSXMLSD.XML").options('mod keep'))
+ }
+
+ // add a copy command to the compile command to copy the SYSPRINT from the temporary dataset to an HFS log file
+ compile.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding))
+
+ return compile
+ }
+
+
+ /*
+ * createLinkEditCommand - creates a MVSExec xommand for link editing the PLI object module produced by the compile
+ */
+ def createLinkEditCommand(String buildFile, LogicalFile logicalFile, String member, File logFile) {
+ String parms = props.getFileProperty('pli_linkEditParms', buildFile)
+ String linker = props.getFileProperty('pli_linkEditor', buildFile)
+
+ // define the MVSExec command to link edit the program
+ MVSExec linkedit = new MVSExec().file(buildFile).pgm(linker).parm(parms)
+
+ // add DD statements to the linkedit command
+ linkedit.dd(new DDStatement().name("SYSLMOD").dsn("${props.pli_loadPDS}($member)").options('shr').output(true).deployType('LOAD'))
+ linkedit.dd(new DDStatement().name("SYSPRINT").options(props.pli_tempOptions))
+ linkedit.dd(new DDStatement().name("SYSUT1").options(props.pli_tempOptions))
+
+ // add a syslib to the compile command with optional CICS concatenation
+ linkedit.dd(new DDStatement().name("SYSLIB").dsn(props.pli_objPDS).options("shr"))
+ linkedit.dd(new DDStatement().dsn(props.SCEELKED).options("shr"))
+ if (buildUtils.isCICS(logicalFile))
+ linkedit.dd(new DDStatement().dsn(props.SDFHLOAD).options("shr"))
+
+ // add a copy command to the linkedit command to append the SYSPRINT from the temporary dataset to the HFS log file
+ linkedit.copy(new CopyToHFS().ddName("SYSPRINT").file(logFile).hfsEncoding(props.logEncoding).append(true))
+
+ return linkedit
+ }
+
+
+ def getRepositoryClient() {
+ if (!repositoryClient && props."dbb.RepositoryClient.url")
+ repositoryClient = new RepositoryClient().forceSSLTrusted(true)
+
+ return repositoryClient
+ }
\ No newline at end of file
diff --git a/Build/zAppBuild/languages/README.md b/Build/zAppBuild/languages/README.md
new file mode 100644
index 00000000..5a481b73
--- /dev/null
+++ b/Build/zAppBuild/languages/README.md
@@ -0,0 +1,14 @@
+# Language Build Scripts
+zAppBuild comes with a number of language specific build scripts. These script are designed to be invoked by `build.groovy` and should not be invoked directly as they require the initialized environment provided by `build.groovy`.
+
+## Included Language Scripts
+* Assembler.groovy
+* BMS.groovy
+* Cobol.groovy
+* LinkEdit.groovy (for building link cards)
+* PLI.groovy
+
+All language scripts both compile and optionally link-edit programs. The language build scripts are intended to be useful out of the box but depending on the complexity of your applications' build requirements, may require modifications to meet your development team's needs. By following the examples used in the existing language build scripts of keeping all application specific references out of the build scripts and instead using configuration properties with strong default values, the zAppBuild sample can continue to be a generic build solution for all of your specific applications.
+
+## Script Mappings
+Source files are mapped to language scripts via ***script mapping file properties***. Though script mappings can be defined at any level, zAppBuild relegates script mapping declarations to the application configuration folder (see [application/application-conf/file.properties](../application/application-conf/file.properties) allowing the application owner to determine what is best for the application.
diff --git a/Build/zAppBuild/utilities/ADMIN.pw b/Build/zAppBuild/utilities/ADMIN.pw
new file mode 100644
index 00000000..b3059fc0
--- /dev/null
+++ b/Build/zAppBuild/utilities/ADMIN.pw
@@ -0,0 +1,7 @@
+
+
+
+1.0
+1
+903xCaMFPZs=
+
\ No newline at end of file
diff --git a/Build/zAppBuild/utilities/BuildUtilities.groovy b/Build/zAppBuild/utilities/BuildUtilities.groovy
new file mode 100644
index 00000000..838c82d6
--- /dev/null
+++ b/Build/zAppBuild/utilities/BuildUtilities.groovy
@@ -0,0 +1,293 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+import groovy.json.JsonSlurper
+
+
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field HashSet copiedFileCache = new HashSet()
+@Field def gitUtils = loadScript(new File("GitUtilities.groovy"))
+
+
+/*
+ * assertBuildProperties - verify that required build properties for a script exist
+ */
+def assertBuildProperties(String requiredProps) {
+ if (props.verbose) println "required props = $requiredProps"
+ if (requiredProps) {
+ String[] buildProps = requiredProps.split(',')
+
+ buildProps.each { buildProp ->
+ buildProp = buildProp.trim()
+ assert props."$buildProp" : "*! Missing required build property '$buildProp'"
+ }
+ }
+}
+
+def createFullBuildList() {
+ Set buildSet = new HashSet()
+ // create the list of build directories
+ List srcDirs = []
+ if (props.applicationSrcDirs)
+ srcDirs.addAll(props.applicationSrcDirs.split(','))
+
+ srcDirs.each{ dir ->
+ dir = getAbsolutePath(dir)
+ buildSet.addAll(getFileSet(dir, true, '**/*.*', props.excludeFileList))
+ }
+
+ return buildSet
+}
+
+/*
+ * getFileSet - create a list of files for a directory
+ */
+def getFileSet(String dir, boolean relativePaths, String includeFileList, String excludeFileList) {
+ Set fileSet = new HashSet()
+
+ def files = new FileNameFinder().getFileNames(dir, includeFileList, excludeFileList)
+ files.each { file ->
+ if (relativePaths)
+ fileSet.add(relativizePath(file))
+ else
+ fileSet.add(file)
+ }
+
+ return fileSet
+}
+
+/*
+ * copySourceFiles - copies both the program being built and the program
+ * dependencies from USS directories to data sets
+ */
+def copySourceFiles(String buildFile, String srcPDS, String dependencyPDS, DependencyResolver dependencyResolver) {
+ // only copy the build file once
+ if (!copiedFileCache.contains(buildFile)) {
+ copiedFileCache.add(buildFile)
+ new CopyToPDS().file(new File(getAbsolutePath(buildFile)))
+ .dataset(srcPDS)
+ .member(CopyToPDS.createMemberName(buildFile))
+ .execute()
+ }
+
+ // resolve the logical dependencies to physical files to copy to data sets
+ if (dependencyPDS && dependencyResolver) {
+ List physicalDependencies = dependencyResolver.resolve()
+ if (props.verbose) {
+ println "*** Resolution rules for $buildFile:"
+ dependencyResolver.getResolutionRules().each{ rule ->
+ println rule
+ }
+ }
+ if (props.verbose) println "*** Physical dependencies for $buildFile:"
+
+ physicalDependencies.each { physicalDependency ->
+ if (props.verbose) println physicalDependency
+ if (physicalDependency.isResolved()) {
+ String physicalDependencyLoc = "${physicalDependency.getSourceDir()}/${physicalDependency.getFile()}"
+
+ // only copy the dependency file once per script invocation
+ if (!copiedFileCache.contains(physicalDependencyLoc)) {
+ copiedFileCache.add(physicalDependencyLoc)
+ new CopyToPDS().file(new File(physicalDependencyLoc))
+ .dataset(dependencyPDS)
+ .member(CopyToPDS.createMemberName(physicalDependency.getFile()))
+ .execute()
+ }
+ }
+ }
+ }
+}
+
+/*
+ * sortBuildList - sorts a build list by rank property values
+ */
+def sortBuildList(List buildList, String rankPropertyName) {
+ List sortedList = []
+ TreeMap> rankings = new TreeMap>()
+ List unranked = new ArrayList()
+
+ // sort buildFiles by rank
+ buildList.each { buildFile ->
+ String rank = props.getFileProperty(rankPropertyName, buildFile)
+ if (rank) {
+ Integer rankNum = rank.toInteger()
+ List ranking = rankings.get(rankNum)
+ if (!ranking) {
+ ranking = new ArrayList()
+ rankings.put(rankNum,ranking)
+ }
+ ranking << buildFile
+ }
+ else {
+ unranked << buildFile
+ }
+ }
+
+ // loop through rank keys adding sub lists (TreeMap automatically sorts keySet)
+ rankings.keySet().each { key ->
+ List ranking = rankings.get(key)
+ if (ranking)
+ sortedList.addAll(ranking)
+ }
+
+ // finally add unranked buildFiles
+ sortedList.addAll(unranked)
+
+ return sortedList
+}
+
+/*
+ * updateBuildResult - used by language scripts to update the build result after a build step
+ */
+def updateBuildResult(Map args) {
+ // args : errorMsg, logs[logName:logFile], client:repoClient
+
+ if (args.client) {
+ def buildResult = args.client.getBuildResult(props.applicationBuildGroup, props.applicationBuildLabel)
+ if (!buildResult) {
+ println "*! No build result found for BuildGroup '${props.applicationBuildGroup}' and BuildLabel '${props.applicationBuildLabel}'"
+ return
+ }
+
+ // add error message
+ if (args.errorMsg) {
+ buildResult.setStatus(buildResult.ERROR)
+ buildResult.addProperty("error", args.errorMsg)
+
+ }
+
+ // add logs
+ if (args.logs) {
+ args.logs.each { logName, logFile ->
+ if (logFile)
+ buildResult.addAttachment(logName, new FileInputStream(logFile))
+ }
+ }
+
+ // save result
+ buildResult.save()
+ }
+}
+
+/*
+ * createDependencyResolver - Creates a dependency resolver using resolution rules declared
+ * in a build or file property (json format).
+ */
+def createDependencyResolver(String buildFile, String rules) {
+ if (props.verbose) println "*** Creating dependency resolver for $buildFile with $rules rules"
+
+ // create a dependency resolver for the build file
+ DependencyResolver resolver = new DependencyResolver().file(buildFile)
+ .sourceDir(props.workspace)
+ .scanner(new DependencyScanner())
+ // add resolution rules
+ if (rules)
+ resolver.setResolutionRules(parseResolutionRules(rules))
+
+ return resolver
+}
+
+def parseResolutionRules(String json) {
+ List rules = new ArrayList()
+ JsonSlurper slurper = new groovy.json.JsonSlurper()
+ List jsonRules = slurper.parseText(json)
+ if (jsonRules) {
+ jsonRules.each { jsonRule ->
+ ResolutionRule resolutionRule = new ResolutionRule()
+ resolutionRule.library(jsonRule.library)
+ resolutionRule.lname(jsonRule.lname)
+ resolutionRule.category(jsonRule.category)
+ if (jsonRule.searchPath) {
+ jsonRule.searchPath.each { jsonPath ->
+ DependencyPath dependencyPath = new DependencyPath()
+ dependencyPath.collection(jsonPath.collection)
+ dependencyPath.sourceDir(jsonPath.sourceDir)
+ dependencyPath.directory(jsonPath.directory)
+ resolutionRule.path(dependencyPath)
+ }
+ }
+ rules << resolutionRule
+ }
+ }
+ return rules
+}
+
+
+
+/*
+ * isCICS - tests to see if the program is a CICS program. If the logical file is false, then
+ * check to see if there is a file property.
+ */
+def isCICS(LogicalFile logicalFile) {
+ boolean isCICS = logicalFile.isCICS()
+ if (!isCICS) {
+ String cicsFlag = props.getFileProperty('isCICS', logicalFile.getFile())
+ if (cicsFlag)
+ isCICS = cicsFlag.toBoolean()
+ }
+
+ return isCICS
+}
+
+/*
+ * isSQL - tests to see if the program is an SQL program. If the logical file is false, then
+ * check to see if there is a file property.
+ */
+def isSQL(LogicalFile logicalFile) {
+ boolean isSQL = logicalFile.isSQL()
+ if (!isSQL) {
+ String sqlFlag = props.getFileProperty('isSQL', logicalFile.getFile())
+ if (sqlFlag)
+ isSQL = sqlFlag.toBoolean()
+ }
+
+ return isSQL
+}
+
+/*
+ * isDLI - tests to see if the program is a DL/I program. If the logical file is false, then
+ * check to see if there is a file property.
+ */
+def isDLI(LogicalFile logicalFile) {
+ boolean isDLI = logicalFile.isDLI()
+ if (!isDLI) {
+ String dliFlag = props.getFileProperty('isDLI', logicalFile.getFile())
+ if (dliFlag)
+ isDLI = dliFlag.toBoolean()
+ }
+
+ return isDLI
+}
+
+/*
+ * getAbsolutePath - returns the absolute path of a relative (to workspace) file or directory
+ */
+def getAbsolutePath(String path) {
+ path = path.trim()
+ if (path.startsWith('/'))
+ return path
+
+ String workspace = props.workspace.trim()
+ if (!workspace.endsWith('/'))
+ workspace = "${workspace}/"
+
+ return "${workspace}${path}"
+}
+
+/*
+ * relativizePath - converts an absolute path to a relative path from the workspace directory
+ */
+def relativizePath(String path) {
+ if (!path)
+ return path
+ String relPath = new File(props.workspace).toURI().relativize(new File(path.trim()).toURI()).getPath()
+ // Directories have '/' added to the end. Lets remove it.
+ if (relPath.endsWith('/'))
+ relPath = relPath.take(relPath.length()-1)
+ return relPath
+}
diff --git a/Build/zAppBuild/utilities/GitUtilities.groovy b/Build/zAppBuild/utilities/GitUtilities.groovy
new file mode 100644
index 00000000..08749a4c
--- /dev/null
+++ b/Build/zAppBuild/utilities/GitUtilities.groovy
@@ -0,0 +1,136 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import groovy.transform.*
+
+@Field int timeout = 60000 // 1 minute
+
+/*
+ * Tests if directory is in a local git repository
+ *
+ * @param String dir Directory to test
+ * @return boolean
+ */
+def isGitDir(String dir) {
+ String cmd = "git -C $dir rev-parse --is-inside-work-tree"
+ StringBuffer gitResponse = new StringBuffer()
+ StringBuffer gitError = new StringBuffer()
+ boolean isGit = false
+
+ Process process = cmd.execute()
+ process.consumeProcessOutput(gitResponse, gitError)
+ process.waitForOrKill(timeout)
+ if (gitError) {
+ println("*? Warning executing isGitDir($dir). Git command: $cmd error: $gitError")
+ }
+ else if (gitResponse) {
+ isGit = gitResponse.toString().trim().toBoolean()
+ }
+
+ return isGit
+}
+
+/*
+ * Returns the current Git branch
+ *
+ * @param String gitDir Local Git repository directory
+ * @return String gitBranch The current Git branch
+ */
+def getCurrentGitBranch(String gitDir) {
+ String cmd = "git -C $gitDir rev-parse --abbrev-ref HEAD"
+ StringBuffer gitBranch = new StringBuffer()
+ StringBuffer gitError = new StringBuffer()
+
+ Process process = cmd.execute()
+ process.consumeProcessOutput(gitBranch, gitError)
+ process.waitForOrKill(timeout)
+ if (gitError) {
+ println("*! Error executing Git command: $cmd error: $gitError")
+ }
+ return gitBranch.toString().trim()
+}
+
+/*
+ * Returns the current Git hash
+ *
+ * @param String gitDir Local Git repository directory
+ * @return String gitHash The current Git hash
+ */
+def getCurrentGitHash(String gitDir) {
+ String cmd = "git -C $gitDir rev-parse HEAD"
+ StringBuffer gitHash = new StringBuffer()
+ StringBuffer gitError = new StringBuffer()
+
+ Process process = cmd.execute()
+ process.consumeProcessOutput(gitHash, gitError)
+ process.waitForOrKill(timeout)
+ if (gitError) {
+ print("*! Error executing Git command: $cmd error: $gitError")
+ }
+ return gitHash.toString().trim()
+}
+
+/*
+ * Returns the lst previous Git commit hash
+ *
+ * @param String gitDir Local Git repository directory
+ * @return String gitHash The previous Git commit hash
+ */
+def getPreviousGitHash(String gitDir) {
+ String cmd = "git -C $gitDir --no-pager log -n 1 --skip=1"
+ StringBuffer gitStdout = new StringBuffer()
+ StringBuffer gitError = new StringBuffer()
+
+ Process process = cmd.execute()
+ process.consumeProcessOutput(gitStdout, gitError)
+ process.waitForOrKill(timeout)
+ if (gitError) {
+ print("*! Error executing Git command: $cmd error: $gitError")
+ }
+ else {
+ return gitStdout.toString().minus('commit').trim().split()[0]
+ }
+}
+
+def getChangedFiles(String gitDir, String baseHash, String currentHash) {
+ String cmd = "git -C $gitDir --no-pager diff --name-status $baseHash $currentHash"
+ def git_diff = new StringBuffer()
+ def git_error = new StringBuffer()
+ def changedFiles = []
+ def deletedFiles = []
+
+ def process = cmd.execute()
+ process.consumeProcessOutput(git_diff, git_error)
+ process.waitForOrKill(timeout)
+
+ // handle command error
+ if (git_error.size() > 0) {
+ println("*! Error executing Git command: $cmd error: $git_error")
+ println ("*! Attempting to parse unstable git command for changed files...")
+ }
+
+ for (line in git_diff.toString().split("\n")) {
+ // process files from git diff
+ try {
+ action = line.split()[0]
+ file = line.split()[1]
+ // handle deleted files
+ if (action == "D") {
+ deletedFiles.add(file)
+ }
+ // handle changed files
+ else {
+ changedFiles.add(file)
+ }
+ }
+ catch (Exception e) {
+ // no changes or unhandled format
+ }
+ }
+
+ return [changedFiles, deletedFiles]
+}
+
+
+
diff --git a/Build/zAppBuild/utilities/ImpactUtilities.groovy b/Build/zAppBuild/utilities/ImpactUtilities.groovy
new file mode 100644
index 00000000..0ef409d7
--- /dev/null
+++ b/Build/zAppBuild/utilities/ImpactUtilities.groovy
@@ -0,0 +1,325 @@
+@groovy.transform.BaseScript com.ibm.dbb.groovy.ScriptLoader baseScript
+import com.ibm.dbb.repository.*
+import com.ibm.dbb.dependency.*
+import com.ibm.dbb.build.*
+import java.nio.file.FileSystems
+import java.nio.file.Path
+import java.nio.file.PathMatcher
+import groovy.json.JsonSlurper
+import groovy.transform.*
+
+// define script properties
+@Field BuildProperties props = BuildProperties.getInstance()
+@Field def gitUtils= loadScript(new File("GitUtilities.groovy"))
+@Field def buildUtils= loadScript(new File("BuildUtilities.groovy"))
+@Field String hashPrefix = ':githash:'
+
+
+def createImpactBuildList(RepositoryClient repositoryClient) {
+ // local variables
+ Set changedFiles = new HashSet()
+ Set deletedFiles = new HashSet()
+
+ // get the last build result to get the baseline hashes
+ def lastBuildResult = repositoryClient.getLastBuildResult(props.applicationBuildGroup, BuildResult.COMPLETE, BuildResult.CLEAN)
+
+ // calculate changed files
+ if (lastBuildResult) {
+ (changedFiles, deletedFiles) = calculateChangedFiles(lastBuildResult)
+ }
+ else if (props.topicBranchBuild) {
+ // if this is the first topic branch build get the main branch build result
+ if (props.verbose) println "** No previous topic branch successful build result. Retrieving last successful main branch build result."
+ String mainBranchBuildGroup = "${props.application}-${props.mainBuildBranch}"
+ lastBuildResult = repositoryClient.getLastBuildResult(mainBranchBuildGroup, BuildResult.COMPLETE, BuildResult.CLEAN)
+ if (lastBuildResult) {
+ (changedFiles, deletedFiles) = calculateChangedFiles(lastBuildResult)
+ }
+ else {
+ println "*! No previous topic branch build result or main branch build result exists. Cannot calculate file changes."
+ }
+ }
+ else {
+ // else create a fullBuild list
+ println "*! No prior build result located. Building all programs"
+ changedFiles = buildUtils.createFullBuildList()
+ }
+
+
+ // scan files and update source collection for impact analysis
+ updateCollection(changedFiles, deletedFiles, repositoryClient)
+
+
+ // create build list using impact analysis
+ Set buildSet = new HashSet()
+ changedFiles.each { changedFile ->
+ // if the changed file has a build script then add to build list
+ if (ScriptMappings.getScriptName(changedFile)) {
+ buildSet.add(changedFile)
+ if (props.verbose) println "** Found build script mapping for $changedFile. Adding to build list"
+ }
+
+ // perform impact analysis on changed file
+ if (props.verbose) println "** Performing impact analysis on changed file $changedFile"
+ ImpactResolver impactResolver = createImpactResolver(changedFile, props.impactResolutionRules, repositoryClient)
+
+ def impacts = impactResolver.resolve()
+ impacts.each { impact ->
+ def impactFile = impact.getFile()
+ if (props.verbose) println "** Found impacted file $impactFile"
+ // only add impacted files that have a build script mapped to it
+ if (ScriptMappings.getScriptName(impactFile)) {
+ buildSet.add(impactFile)
+ if (props.verbose) println "** $impactFile is impacted by changed file $changedFile. Adding to build list."
+ }
+ }
+ }
+
+ return buildSet
+}
+
+
+def calculateChangedFiles(BuildResult lastBuildResult) {
+ // local variables
+ Map currentHashes = new HashMap()
+ Map baselineHashes = new HashMap()
+ Set changedFiles = new HashSet()
+ Set deletedFiles = new HashSet()
+
+ // create a list of source directories to search
+ List directories = []
+ if (props.applicationSrcDirs)
+ directories.addAll(props.applicationSrcDirs.split(','))
+
+ // get the current Git hash for all build directories
+ directories.each { dir ->
+ dir = buildUtils.getAbsolutePath(dir)
+ if (props.verbose) println "** Getting current hash for directory $dir"
+ String hash = null
+ if (gitUtils.isGitDir(dir)) {
+ hash = gitUtils.getCurrentGitHash(dir)
+ }
+ String relDir = buildUtils.relativizePath(dir)
+ if (props.verbose) println "** Storing $relDir : $hash"
+ currentHashes.put(relDir,hash)
+ }
+
+ // get the baseline hash for all build directories
+ directories.each { dir ->
+ dir = buildUtils.getAbsolutePath(dir)
+ if (props.verbose) println "** Getting baseline hash for directory $dir"
+ String key = "$hashPrefix${buildUtils.relativizePath(dir)}"
+ String hash = lastBuildResult.getProperty(key)
+ String relDir = buildUtils.relativizePath(dir)
+ if (props.verbose) println "** Storing $relDir : $hash"
+ baselineHashes.put(relDir,hash)
+ }
+
+ // calculate the changed and deleted files by diff'ing the current and baseline hashes
+ directories.each { dir ->
+ dir = buildUtils.getAbsolutePath(dir)
+ if (props.verbose) println "** Calculating changed files for directory $dir"
+ def changed = []
+ def deleted = []
+ String baseline = baselineHashes.get(buildUtils.relativizePath(dir))
+ String current = currentHashes.get(buildUtils.relativizePath(dir))
+ if (!baseline || !current) {
+ if (props.verbose) println "*! Skipping directory $dir because baseline or current hash does not exist. baseline : $baseline current : $current"
+ }
+ else if (gitUtils.isGitDir(dir)) {
+ if (props.verbose) "** Diffing baseline $baseline -> current $current"
+ (changed, deleted) = gitUtils.getChangedFiles(dir, baseline, current )
+ }
+ else {
+ if (props.verbose) println "*! Directory $dir not a local Git repository. Skipping."
+ }
+
+ if (props.verbose) println "*** Changed files for directory $dir:"
+ changed.each { file ->
+ file = fixFilePath(file, dir)
+ changedFiles << file
+ if (props.verbose) println "*** $file"
+ }
+
+ if (props.verbose) println "*** Deleted files for directory $dir:"
+ deleted.each { file ->
+ file = fixFilePath(file, dir)
+ deletedFiles << file
+ if (props.verbose) println "*** $file"
+ }
+ }
+
+ return [changedFiles,deletedFiles]
+}
+
+def createImpactResolver(String changedFile, String rules, RepositoryClient repositoryClient) {
+ if (props.verbose) println "*** Creating impact resolver for $changedFile with $rules rules"
+
+ // create an impact resolver for the changed file
+ ImpactResolver resolver = new ImpactResolver().file(changedFile)
+ .collection(props.applicationCollectionName)
+ .collection(props.applicationOutputsCollectionName)
+ .repositoryClient(repositoryClient)
+ // add resolution rules
+ if (rules)
+ resolver.setResolutionRules(buildUtils.parseResolutionRules(rules))
+
+ return resolver
+}
+
+def updateCollection(changedFiles, deletedFiles, RepositoryClient repositoryClient) {
+
+ if (props.verbose) println "** Updating collection ${props.applicationCollectionName}"
+ def scanner = new DependencyScanner()
+ List logicalFiles = new ArrayList()
+ List excludeMatchers = createExcludePatterns()
+
+ verifyCollections(repositoryClient)
+
+ // remove deleted files from collection
+ deletedFiles.each { file ->
+ // files in a collection are stored as relative paths from a source directory
+ if (props.verbose) println "*** Deleting logical file for $file"
+ repositoryClient.deleteLogicalFile(props.applicationCollectionName, buildUtils.relativizePath(file))
+ }
+
+ // scan changed files
+ changedFiles.each { file ->
+
+ // make sure file is not an excluded file
+ if (!matches(file, excludeMatchers)) {
+ // files in a collection are stored as relative paths from a source directory
+ if (props.verbose) println "*** Scanning file $file (${props.workspace}/${file})"
+ def logicalFile = scanner.scan(file, props.workspace)
+
+ if (props.verbose) println "*** Logical file for $file =\n$logicalFile"
+ logicalFiles.add(logicalFile)
+
+ // save logical files in batches of 500 to avoid running out of heap space
+ if (logicalFiles.size() == 500) {
+ if (props.verbose)
+ println "** Storing ${logicalFiles.size()} logical files in repository collection '$props.applicationCollectionName'"
+ repositoryClient.saveLogicalFiles(props.applicationCollectionName, logicalFiles);
+ if (props.verbose) println(repositoryClient.getLastStatus())
+ logicalFiles.clear()
+ }
+ }
+ }
+
+ // save logical files
+ if (props.verbose)
+ println "** Storing ${logicalFiles.size()} logical files in repository collection '$props.applicationCollectionName'"
+ repositoryClient.saveLogicalFiles(props.applicationCollectionName, logicalFiles);
+ if (props.verbose) println(repositoryClient.getLastStatus())
+}
+
+/*
+ * saveStaticLinkDependencies - Scan the load module to determine LINK dependencies. Impact resolver can use
+ * these to determine that this file gets rebuilt if a LINK dependency changes.
+ */
+def saveStaticLinkDependencies(String buildFile, String loadPDS, LogicalFile logicalFile, RepositoryClient repositoryClient) {
+ if (repositoryClient) {
+ LinkEditScanner scanner = new LinkEditScanner()
+ if (props.verbose) println "*** Scanning load module for $buildFile"
+ LogicalFile scannerLogicalFile = scanner.scan(buildUtils.relativizePath(buildFile), loadPDS)
+ if (props.verbose) println "*** Logical file = \n$scannerLogicalFile"
+
+ // overwrite original logicalDependencies with load module dependencies
+ logicalFile.setLogicalDependencies(scannerLogicalFile.getLogicalDependencies())
+
+ // Store logical file and indirect dependencies to the outputs collection
+ repositoryClient.saveLogicalFile("${props.applicationOutputsCollectionName}", logicalFile );
+ }
+}
+
+/*
+ * verifyCollections - verifies that the application collections exists. If not it will
+ * create or clone the collections.
+ * Uses build properties
+ */
+def verifyCollections(RepositoryClient repositoryClient) {
+ if (!repositoryClient) {
+ if (props.verbose) println "** Unable to verify collections. No repository client."
+ return
+ }
+
+ String mainCollectionName = "${props.application}-${props.mainBuildBranch}"
+ String mainOutputsCollectionName = "${props.application}-${props.mainBuildBranch}-outputs"
+
+ // check source collection
+ if (!repositoryClient.collectionExists(props.applicationCollectionName)) {
+ if (props.topicBranchBuild) {
+ if (repositoryClient.collectionExists(mainCollectionName)) {
+ repositoryClient.copyCollection(mainCollectionName, props.applicationCollectionName)
+ if (props.verbose) println "** Cloned collection ${props.applicationCollectionName} from $mainCollectionName"
+ }
+ else {
+ repositoryClient.createCollection(props.applicationCollectionName)
+ if (props.verbose) println "** Created collection ${props.applicationCollectionName}"
+ }
+ }
+ else {
+ repositoryClient.createCollection(props.applicationCollectionName)
+ if (props.verbose) println "** Created collection ${props.applicationCollectionName}"
+ }
+ }
+
+ // check outputs collection
+ if (!repositoryClient.collectionExists(props.applicationOutputsCollectionName)) {
+ if (props.topicBranchBuild) {
+ if (repositoryClient.collectionExists(mainOutputsCollectionName)) {
+ repositoryClient.copyCollection("${mainOutputsCollectionName}", props.applicationOutputsCollectionName)
+ if (props.verbose) println "** Cloned collection ${props.applicationOutputsCollectionName} from $mainOutputsCollectionName"
+ }
+ else {
+ repositoryClient.createCollection(props.applicationOutputsCollectionName)
+ if (props.verbose) println "** Created collection ${props.applicationOutputsCollectionName}"
+ }
+ }
+ else {
+ repositoryClient.createCollection(props.applicationOutputsCollectionName)
+ if (props.verbose) println "** Created collection ${props.applicationOutputsCollectionName}"
+ }
+ }
+
+}
+
+def fixFilePath(String file, String dir) {
+ String dirName = new File(dir).getName()
+ if (file.startsWith(dirName))
+ return file
+ else
+ return "$dirName/$file" as String
+}
+
+def createExcludePatterns() {
+ List pathMatchers = new ArrayList()
+ if (props.excludeFileList) {
+ props.excludeFileList.split(',').each{ filePattern ->
+ if (!filePattern.startsWith('glob:') || !filePattern.startsWith('regex:'))
+ filePattern = "glob:$filePattern"
+ PathMatcher matcher = FileSystems.getDefault().getPathMatcher(filePattern)
+ pathMatchers.add(matcher)
+ }
+ }
+
+
+ return pathMatchers
+}
+
+
+def matches(String file, List pathMatchers) {
+ pathMatchers.each { matcher ->
+ Path path = FileSystems.getDefault().getPath(file);
+ if ( matcher.matches(path) )
+ {
+ return true
+ }
+ }
+ return false
+}
+
+
+
+
+
diff --git a/Build/zAppBuild/utilities/README.md b/Build/zAppBuild/utilities/README.md
new file mode 100644
index 00000000..6ad375e2
--- /dev/null
+++ b/Build/zAppBuild/utilities/README.md
@@ -0,0 +1,9 @@
+# Utility Files
+This folder contains common utilty files used by the zAppBuild `build.groovy` script and language scripts.
+
+File | Description
+--- | ---
+ADMIN.pw | Encrypted password file for password "ADMIN" which is the default ID and password for the DBB Web Application Liberty server. Convenient for initial set-up and testing of DBB functionality. For more information on creating password files see the documentation for the [Repository Client](https://www.ibm.com/support/knowledgecenter/SS6T76_1.0.4/buildresult.html#repository-client) in the DBB Knowledge Center.
+BuidUtilities.groovy | Common build utilty methods.
+GitUtilities.groovy | Git command methods.
+ImpactUtilities.groovy | Methods used for ImpactBuilds.
diff --git a/README.md b/README.md
index 9bb7bf5d..dbf66aa6 100644
--- a/README.md
+++ b/README.md
@@ -7,23 +7,25 @@ Welcome to the IBM Dependency Based Build (DBB) community repository. The helpfu
* [IBM DBB Knowledge Center](https://www.ibm.com/support/knowledgecenter/SS6T76_1.0.2/welcome.html)
## Contributing
-For instructions on how to contribute new samples and bug fixes, please read the [Contributions Guidelines](https://github.com/IBM/dbb/tree/master/CONTRIBUTIONS.md).
+For instructions on how to contribute new samples and bug fixes, please read the [Contributions Guidelines](CONTRIBUTIONS.md).
## Content
Sample | Description
--- | ---
-[Automation/idManagement](https://github.com/IBM/dbb/tree/master/Automation/idManagement) | Create and delete ids on a z/OS system.
-[Build/BuildReport](https://github.com/IBM/dbb/tree/master/Build/BuildReport) | Sample showing how to extend the BuildReport to provide additional functionality
-[Build/HelloWorld](https://github.com/IBM/dbb/tree/master/Build/HelloWorld) | The HelloWorld sample provides simple source file types and the Groovy build scripts to compile them
-[Build/IDE](https://github.com/IBM/dbb/tree/master/Build/IDE) | A collection of 3 samples from PLI, COBOL, and ASM created by the IDz/ZOD team with instructions to run them on IDz/ZOD.
-[Build/MortgageApplication](https://github.com/IBM/dbb/tree/master/Build/MortgageApplication) | Sample application demonstrating many of the build functions provided by DBB.
-[Build/MultiThreadMVSJob](https://github.com/IBM/dbb/tree/master/Build/MultiThreadMVSJob) | Sample showing how to modilfy a compilation script to run in a multi-thread environment.
-[Build/PublishLoadModules](https://github.com/IBM/dbb/tree/master/Build/PublishLoadModules) | Sample demonstrating how to publish load modules to Artifactory after a successful build.
-[Migration/mappingExtension](https://github.com/IBM/dbb/tree/master/Migration/mappingExtension) | Sample showing how to extend the DBB Migration tool script to detect possible round-trip encoding problems when importing and loading to HFS.
-[Migration/sclm](https://github.com/IBM/dbb/tree/master/Migration/sclm) | This sample provides scripts to migrate source members to local Git repository and convert the build information in SCLM into build Groovy scripts.
-[Snippets/InteractiveGateway](https://github.com/IBM/dbb/tree/master/Snippets/InteractiveGateway) | Example showing how to use the new ISPFExec/TSOExec Interactive Gateway support added in DBB v1.0.2
-[Snippets/zUnitTestCase](https://github.com/IBM/dbb/tree/master/Snippets/zUnitTestCase) | Example showing how to use the JCLExec command added in DBB v1.0.1
-[Utilities/BuildManager](https://github.com/IBM/dbb/tree/master/Utilities/BuildManager) | Background process for queueing and managing build scripts without additional JVM start-up overhead.
-[Utilities/BuildReportPruner](https://github.com/IBM/dbb/tree/master/Utilities/BuildReportPruner) | Utility scripts demonstating rule based BuildReport pruning and preserving.
-[Utilities/Jenkins](https://github.com/IBM/dbb/tree/master/Utilities/Jenkins) | Utility shell scripts supplied to address issues when running Jenkins remote agents on z/OS UNIX System Services (USS).
-[Utilities/ReadSMFRecords](https://github.com/IBM/dbb/tree/master/Utilities/ReadSMFRecords) | Groovy scripts to read System Management Facilities (SMF) records using IBM's Dependency Based Build capabilities.
+[Automation/idManagement](Automation/idManagement) | Create and delete ids on a z/OS system.
+[Build/BuildReport](Build/BuildReport) | Sample showing how to extend the BuildReport to provide additional functionality
+[Build/HelloWorld](Build/HelloWorld) | The HelloWorld sample provides simple source file types and the Groovy build scripts to compile them
+[Build/IDE](Build/IDE) | A collection of 3 samples from PLI, COBOL, and ASM created by the IDz/ZOD team with instructions to run them on IDz/ZOD.
+[Build/MortgageApplication](Build/MortgageApplication) | Sample application demonstrating many of the build functions provided by DBB.
+[Build/MortgageApplicationV2](Build/MortgageApplicationV2) | Contains two updated versions of the MortgageApplication sample (single repository and shared across multiple repositories) designed to be built by [zAppBuild](Build/zAppBuild)
+[Build/MultiThreadMVSJob](Build/MultiThreadMVSJob) | Sample showing how to modilfy a compilation script to run in a multi-thread environment.
+[Build/PublishLoadModules](Build/PublishLoadModules) | Sample demonstrating how to publish load modules to Artifactory after a successful build.
+[Build/zAppBuild](Build/zAppBuild) | zAppBuild is a generic build solution for building z/OS applications using Apache Groovy build scripts and IBM Dependency Based Build (DBB) APIs.
+[Migration/mappingExtension](Migration/mappingExtension) | Sample showing how to extend the DBB Migration tool script to detect possible round-trip encoding problems when importing and loading to HFS.
+[Migration/sclm](Migration/sclm) | This sample provides scripts to migrate source members to local Git repository and convert the build information in SCLM into build Groovy scripts.
+[Snippets/InteractiveGateway](nippets/InteractiveGateway) | Example showing how to use the new ISPFExec/TSOExec Interactive Gateway support added in DBB v1.0.2
+[Snippets/zUnitTestCase](Snippets/zUnitTestCase) | Example showing how to use the JCLExec command added in DBB v1.0.1
+[Utilities/BuildManager](Utilities/BuildManager) | Background process for queueing and managing build scripts without additional JVM start-up overhead.
+[Utilities/BuildReportPruner](Utilities/BuildReportPruner) | Utility scripts demonstating rule based BuildReport pruning and preserving.
+[Utilities/Jenkins](Utilities/Jenkins) | Utility shell scripts supplied to address issues when running Jenkins remote agents on z/OS UNIX System Services (USS).
+[Utilities/ReadSMFRecords](Utilities/ReadSMFRecords) | Groovy scripts to read System Management Facilities (SMF) records using IBM's Dependency Based Build capabilities.