I would be interested to hear your comments on this structure.
TITLE 'SOFTWARE TOOLS'
SOFTOOL START
STM R14,R12,12(R13)
BALR R15,0
USING *,R15
L R1,MAIN-16
ST R13,4(R1)
ST R1,8(R13)
LR R13,R1
LM R10,R12,MAIN-12
DROP R15
USING MAIN,R10,R11,R12
B MAIN
DC A(SAVE,MAIN,MAIN+4096,MAIN+8192)
*
* MAIN LINE CODE
*
MAIN EQU *
L R15,=A(GETCHAR)
BAL R14,SENTER
MAIN99 SR R15,R15
B SEXIT
TITLE 'COMMON SUBROUTINE ENTRY/EXIT'
*
* COMMON SUBROUTINE ENTRY
*
SENTER STM R14,R12,12(R13)
C R13,=A(SAVEND)
BL SENTER1
DC H'0'
DC C'SAVE AREA OVERFLOW'
SENTER1 LR R9,R15
LA R15,72(R13)
ST R15,8(R13)
ST R13,4(R15)
LR R13,R15
BR R9
*
* COMMON SUBROUTINE EXIT
*
SEXIT L R13,4(R13)
L R14,12(R13)
LM R0,R12,20(R13)
BR R14
TITLE 'REGISTER EQUATES AND USAGE'
*
* REGISTER EQUATES
*
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9 SENTER BRANCH TO SUBROUTINE, SUBROUTINE USES AS BASE
R10 EQU 10 BASE REGISTER FOR MAIN
R11 EQU 11 BASE REGISTER FOR MAIN
R12 EQU 12 BASE REGISTER FOR MAIN
R13 EQU 13 SAVE AREA ADDRESS
R14 EQU 14 SEXIT RETURN ADDRESS
R15 EQU 15 BRANCH TO ADDRESS, SENTER COPIES TO R9
* RETURN CODE FROM SUBROUTINE
TITLE 'TASK CONTROL BLOCK'
IKJTCB LIST=YES
TITLE 'DATA EXTENT BLOCK'
IECTDEBX
TITLE 'DATA CONTROL BLOCK'
DCBDS DSECT
DCBD DSORG=PS
TITLE 'UNIT CONTROL BLOCK'
UCBDS DSECT
IEFUCBOB
TITLE 'TASK I/O TABLE'
TIOTDS DSECT
IEFTIOT1
TITLE 'JOB FILE CONTROL BLOCK'
JFCBDS DSECT
IEFJFCBN LIST=YES
TITLE 'DATA EVENT CONTROL BLOCK'
IECTDECB
TITLE 'COMMUNICATION VECTOR TABLE'
IEFJSCVT
TITLE 'VSAM ACB'
IFGACB DSECT=YES
TITLE 'REMOTE AREAS'
SOFTOOL1 CSECT
*
* REMOTE AREAS
*
SAVE DS 90D
SAVEND EQU *
TITLE 'GETCHAR: GET CHARACTER FROM FILE'
*
* GET CHARACTER FROM FILE
*
GETCHAR B 14(0,R9)
USING GETCHAR,R9
DC AL1(8),CL9'GETCHAR'
B SEXIT
LTORG