|

Why Develop TSO Source Code
Download this source code in text format (SENDTOME)
*********************************************************************** * * * Title - SENDTOME * * * * Fundtion / Operation - SENDTOME is a sample TSO command written * * to illustrate an article for TSO Journal * * * * Command Syntax - * * SENDTOME 'Text to echo to TSO terminal' * * * * Status / Change Level - * * V1L0 - August 2003 * * * * Attributes - SENDTOME is not reentrant, not refreshable and not * * reusable. It operates in problem key and problem state in TCB * * mode as a TSO command processor. * * * * Character Set - EBCDIC * * * *********************************************************************** EJECT IKJCPPL , SPACE 5 IKJPPL , MYPPLSZ EQU *-PPL SPACE 5 IKJIOPL MYIOPLSZ EQU *-IOPL PUSH PRINT PRINT NOGEN CVT DSECT=YES POP PRINT EJECT * INITIAL ENTRY - PREPARE THE PPL AND IOPL TSO CONTROL BLOCK SPACE 1 SENDTOME CSECT DEFINE PROGRAM CSECT SPACE 1 USING CPPL,R1 DEFINE CPPL ADDRESSABILITY USING PDL,R10 DEFINE PDL ADDRESSABILITY USING *,R12 DEFINE PROGRAM ADDRESSABILITY USING PPL,MYPPL DEFINE PPL ADDRESSABILITY USING IOPL,MYIOPL DEFINE IOPL ADDRESSABILITY SPACE 1 SAVE (14,12),,* SAVE CALLER'S REGISTERS LR R12,R15 COPY ENTRY POINT ADDRESS TO REG 12 LA R15,S LOAD ADDRESS OF A NEW SAVE AREA ST R15,8(,R13) ADD NEW SAVE AREA TO THE ST R13,4(,R15) SAVE AREA CHAIN LR R13,R15 ESTABLISH NEW SAVE AREA POINTER SPACE 1 L R0,CPPLCBUF LOAD ADDR OF THE COMMAND BUFFER ST R0,PPLCBUF STORE IN THE PPL SPACE 1 L R0,CPPLECT LOAD ADDR OF THE TSO ECB ST R0,PPLECT STORE IN THE PPL ST R0,IOPLECT AND THE IOPL SPACE 1 L R0,CPPLUPT LOAD ADDR OF THE TSO UPT ST R0,PPLUPT STORE IN THE PPL ST R0,IOPLUPT AND THE IOPL SPACE 1 LA R0,ECB LOAD ADDR OF AN ECB ST R0,PPLECB STORE IN THE PPL ST R0,IOPLECB AND IOPL SPACE 1 L R0,=A(PCL) LOAD ADDR OF AN IKJPARS PCL ST R0,PPLPCL STORE IN THE PPL SPACE 1 LA R0,ANSPTR LOAD ADDR OF THE PDL POINTER WORD ST R0,PPLANS STORE IN THE PPL SPACE 1 * PPLUWA IS NOT FILLED IN BECAUSE WE ARE NOT USING VALIDITY CHECK * EXITS. SPACE 1 CALLTSSR EP=IKJPARS, CALL IKJPARS TO DECODE -> MF=(E,MYPPL) THE COMMAND LINE SPACE 1 LTR R15,R15 TEST THE RETURN CODE FROM IKJPARS BNZ EXIT BR IF PARSE BROKE SPACE 1 * THIS IS THE "DO YOUR OWN THING" PART OF THE COMMAND. USE THE * TEXT STRING IN THE PDL TO CREATE A NESSAGE FOR PUTLINE SPACE 1 L R10,ANSPTR LOAD ADDR OF THE PDL BUILT BY PARS L R0,PDLSTR LOAD ADDR OF STRING FROM THE PDE LH R1,PDLSTR+4 LOAD LENGTH OF THE STRING FROM -> PDE LA R14,MSG LOAD ADDR OF MESSAGE FILL IN AREA -> IN THE OUTPUT LINE LR R15,R1 COPY MESSAGE LENGTH TO REG15 MVCL R14,R0 COPY MESSAGE TEXT FROM THE -> COMMAND LINE TO OUTPUT LINE SPACE 1 LA R1,TEXT LOAD START OF OUTPUT LINE SR R14,R1 COMPUTE LENGTH OF THE OUTPUT LINE STH R14,0(,R1) STORE LENGTH IN THE RDW OF THE -> OUTPUT LINE SPACE 1 IKJRLSA ANSPTR RELEASE THE PDL SPACE 1 PUTLINE MF=(E,MYIOPL), WRITE THE GENERATED OUTPUT LINE -> PARM=PUTLPB SPACE 1 EXIT L R13,4(,R13) LOAD ADDR OF THE CALLER'S SAVE AREA RETURN (14,12),T,RC=0 RESTORE REGS & RETURN TO CALLER EJECT S DC 9D'0' SAVE AREA SPACE 1 * THE IOPL IS DOUBLE WORD ALIGNED BECAUSE THE SAVE AREA IS DOUBLE * WORD ALIGNED. THE 0D'0' AT THE END OF THE DC FORCES THE NEXT * DATA AREA TO BE DOUBLE WORD ALIGNED. SPACE 1 MYIOPL DC XL(MYIOPLSZ)'0',0D'0' IOPL MYPPL DC XL(MYPPLSZ)'0',0D'0' PPL SPACE 1 PUTLPB PUTLINE OUTPUT=(TEXT,TERM,SINGLE,DATA), PUTLINE PARAMETER -> MF=L BLOCK SPACE 1 ECB DC F'0' AN ECB ANSPTR DC A(*-*) PDL POINTER AFTER IKJPARS TEXT DC 2AL2(0) OUTPUT LINE RDW MSG DC CL256' ' MESSAGE FILL AREA SPACE 1 * THE FOLLOWING PARSE MACROS WILL GENERATE THE FOLLOWING PDL * * PDL DSECT * DS XL8 * PDLSTR DS A,H,2X SPACE 1 PUSH PRINT THE EXPANSION OF THE PARSE MACROS PRINT NOGEN IS SO CONFUSING AS TO BE USELESS SPACE 1 * THE FOLLOWING PARSE MACROS DEFINE A COMMAND LINE CONTAINING A * SINGLE TEXT STRING ENCLOSED WITHIN QUOTES, FOR EXAMPLE, * SENDTOME 'Hi there' SPACE 1 PCL IKJPARM DSECT=PDL DEFINE PCL AND PDL PDLSTR IKJPOSIT QSTRING,ASIS, DEFINE A QUOTED TEXT STRING -> PROMPT='STRING TO ECHO TO TERMINAL OPERATOR' IKJENDP , END OF PCL AND PDL POP PRINT SPACE 1 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 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 SPACE 1 END SENDTOME
|