An Example Using PUTGET
Figure 1 is an example of the code required to execute the PUTGET macro instruction. The code uses a multilevel PROMPT message as the PUTGET output line. It assumes that a line of input will be returned from the terminal and tests only for a zero return code (PUTGET completed normally).
The execute form of the PUTGET macro instruction builds the I/O parameter list, using the addresses of the user profile table and the environment control table supplied in the Command Processor parameter list. In addition, the I/O parameter list contains the address of an ECB built by the code, and the address of the list form of the PUTGET macro instruction as the PUTGET parameter block address.
Note that the TERMPUT, TERMGET, and ENTRY operands are not coded; the default values are used. Note also that this code is effective only if the top element of the input stack indicates a terminal as the current source of input.
* ON ENTRY FROM THE TMP, REGISTER 1 CONTAINS A POINTER TO THE COMMAND
* PROCESSOR PARAMETER LIST (CPPL).
*
* SET UP ADDRESSABILITY
* SAVE AREA CHAINING
*
LR 2,1 SAVE THE ADDRESS OF THE CPPL.
USING CPPL,2 ADDRESSABILITY FOR THE CPPL
L 3,CPPLUPT PLACE THE ADDRESS IF THE UPT
* INTO A REGISTER
L 4,CPPLECT PLACE THE ADDRESS OF THE ECT
* INTO A REGISTER
* ISSUE AN EXECUTE FORM OF THE PUTGET MACRO INSTRUCTION. THIS
* EXECUTION WRITES A PROMPTING MESSAGE TO THE TERMINAL AND CHAINS
* A SECOND-LEVEL MESSAGE. IT ALSO FILLS IN THE IOPL.
*
PUTGET PARM=APGPB,UPT=(3),ECT=(4),ECB=ECBADS, X
OUTPUT=(FIRSTOLD,MULTLVL,PROMPT),MF=(E,IOPLADS)
*
* TEST THE CODE RETURNED BY THE PUTGET SERVICE ROUTINE. A RETURN CODE
* OF ZERO INDICATES NORMAL COMPLETION.
*
LTR 15,15 IS THE RETURN CODE ZERO?
BNZ EXIT NO - BRANCH TO AN EXIT.
* YES - FALL THROUGH AND OBTAIN
* THE LINE RETURNED FROM THE
* TERMINAL.
LA 5,APGPB SET ADDRESSABILITY FOR THE
USING PGPB,5 PUTGET PARAMETER BLOCK.
L 1,PGPBIBUF GET THE ADDRESS OF THE LINE
* RETURNED FROM THE TERMINAL.
* PROCESS THE INPUT LINE, AND WHEN FINISHED, FREE THE INPUT BUFFER
*
LH 0,0(1) PUT THE LENGTH OF THE INPUT
* LINE (INCLUDING THE HEADER)
* INTO REGISTER 0.
O 0,=X'01000000'
*
FREEMAIN R,LV=(0),A=(1) FREE THE INPUT BUFFER.
* PROCESSING
* .
* .
* .
*
EXIT EXIT ROUTINES
* .
* .
* .
APGPB PUTGET MF=L LIST FORM OF THE PUTGET MACRO
* INSTRUCTION. IT EXPANDS TO
* BUILD A PUTGET PARAMETER BLOCK.
ECBADS DC F'0' A FULLWORD OF STORAGE FOR THE
* COMMAND PROCESSOR ECB.
IOPLADS DC 4F'0' FOUR FULLWORDS FOR THE INPUT/
* OUTPUT PARAMETER LIST
*
Figure 'Example of PUTGET Issuing a Multilevel PROMPT Message' (Continued)
* BUILD THE CHAIN OF OUTPUT LINE DESCRIPTORS AND OUTPUT MESSAGE
* SEGMENTS.
*
FIRSTOLD DC A(NEXTOLD) POINTER TO THE NEXT OLD.
DC F'1' INDICATE ONLY ONE SEGMENT.
DC A(OUTMSG) THE ADDRESS OF THE OUTPUT
* MESSAGE.
NEXTOLD DC A(0) INDICATES THAT THIS IS THE
* LAST OLD ON THE CHAIN.
DC F'1' INDICATES ONLY ONE SEGMENT.
DC A(CHNMSG) ADDRESS OF THE SECOND LEVEL
* MESSAGE TO BE CHAINED.
*
* THE PROMPTING MESSAGE AND THE SECOND-LEVEL MESSAGE ARE FORMATTED
* IDENTICALLY. THE FORMAT IS: A TWO BYTE LENGTH INDICATOR, A TWO
* BYTE OFFSET FIELD, AND THE VARIABLE-LENGTH TEXT FIELD.
*
OUTMSG DC H'31' LENGTH OF THE OUTPUT MESSAGE
* INCLUDING THE FOUR BYTE HEADER.
DC H'0' THE OFFSET FIELD IS SET TO ZERO
* IN THE FIRST SEGMENT OF A
* MESSAGE.
DC CL27'PLEASE ENTER DATA SET NAME'
* THIS IS THE MESSAGE TO BE
* WRITTEN TO THE TERMINAL.
CHNMSG DC H'37' LENGTH OF THE SECOND LEVEL
* MESSAGE TO BE PLACED ON AN
* INTERNAL CHAIN. THIS LENGTH
* INCLUDES THE FOUR BYTE HEADER.
DC H'0' THE OFFSET FIELD IS SET TO ZERO
* IN THE FIRST SEGMENT OF A
* MESSAGE.
DC CL33'MASTER PARTS CATALOG IS REQUIRED'
* THIS IS THE MESSAGE TO BE
* INTERNALLY CHAINED.
IKJPGPB DSECT FOR THE PUTGET PARAMETER
* BLOCK. IT EXPANDS WITH THE
* SYMBOLIC NAME PGPB.
IKJCPPL DSECT FOR THE COMMAND PROCESSOR
* PARAMETER LIST.
END