When the control program returns control to a caller after it invokes a system service, the contents of registers 2-13 are unchanged. When control is returned to your control section from the called control section, registers 2-14 contain the same information they contained when control was passed, as long as system conventions are followed. The called control section has no obligation to restore registers 0 and 1; so the contents of these registers may or may not have been changed.
When control is returned, register 15 can contain a return code indicating the results of the processing done by the called control section. If used, the return code should be a multiple of four, so a branching table can be used easily, and a return code of zero should be used to indicate a normal return. The control program frequently uses this method to indicate the results of the requests you make using system macros; an example of the type of return codes the control program provides is shown in the description of the IDENTIFY macro.
The meaning of each of the codes to be returned must be agreed upon in advance. In some cases, either a “good” or “bad” indication (zero or nonzero) will be sufficient for you to decide your next action. If this is true, the coding in Figure 1 could be used to analyze the results. Many times, however, the results and the alternatives are more complicated, and a branching table, such as shown in Figure 2 could be used to pass control to the proper routine.
RETURNPT LTR 15,15 Test return code for zero
BNZ ERRORTN Branch if not zero to error routine
.
.
RETURNPT B RETTAB(15) Branch to table using return code
RETTAB B NORMAL Branch to normal routine
B COND1 Branch to routine for condition 1
B COND2 Branch to routine for condition 2
B GIVEUP Branch to routine to handle impossible situations.
.
.