./ ADD NAME=JOB01 //AUSERID1 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID //A EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE AUSERID.QUERYDD.CSI CLUSTER DELETE (AUSERID.QUERYDD.LINKLIB + AUSERID.QUERYDD.HELP + AUSERID.QUERYDD.AHELP + AUSERID.QUERYDD.ASRC + AUSERID.QUERYDD.SMPPTS + AUSERID.QUERYDD.SMPMTS + AUSERID.QUERYDD.SMPSCDS + AUSERID.QUERYDD.SMPSTS ) ./ ADD NAME=JOB02 //AUSERID2 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID //A EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //MACLIB DD DISP=SHR,DSN=SYS1.MACLIB(GIMZPOOL) //SYSIN DD * DEFINE CLUSTER(NAME(AUSERID.QUERYDD.CSI) + VOLUMES(VVVVVV) + FREESPACE(0 7) + KEYS(24 0) + RECORDSIZE(24 143) + SHAREOPTIONS(2 3) ) + DATA( + CYLINDERS(1 1) + CONTROLINTERVALSIZE(8192) )+ INDEX( + TRACKS(1 1) + CONTROLINTERVALSIZE(2560) ) REPRO INFILE(MACLIB) + OUTDATASET(AUSERID.QUERYDD.CSI) //B EXEC PGM=IEFBR14 //LINKLIB DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DSN=AUSERID.QUERYDD.LINKLIB //HELP DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200), // DSN=AUSERID.QUERYDD.HELP //AHELP DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200), // DSN=AUSERID.QUERYDD.AHELP //ASRC DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80), // DSN=AUSERID.QUERYDD.ASRC //SMPPTS DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80), // DSN=AUSERID.QUERYDD.SMPPTS //SMPMTS DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80), // DSN=AUSERID.QUERYDD.SMPMTS //SMPSTS DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80), // DSN=AUSERID.QUERYDD.SMPSTS //SMPSCDS DD DISP=(,CATLG), // UNIT=SYSDA, // SPACE=(CYL,(1,1,2)), // DCB=(RECFM=FB,LRECL=80), // DSN=AUSERID.QUERYDD.SMPSCDS ./ ADD NAME=JOB03 //AUSERID3 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID // JCLLIB ORDER=(AUSERID.QUERYDD.SMP.CNTL) //A EXEC SMP //SYSIN DD * SET BDY(GLOBAL) . UCLIN . ADD GLOBALZONE SREL(Z038) ZONEINDEX((QDDTGT,AUSERID.QUERYDD.CSI,TARGET) (QDDDLIB,AUSERID.QUERYDD.CSI,DLIB)) . ENDUCL . UCLIN . ADD OPTIONS(MAIN) MSGWIDTH(80) MSGFILTER(NO) . ENDUCL . UCLIN . ADD GLOBALZONE OPTIONS(MAIN) . ENDUCL . SET BDY(QDDDLIB) . UCLIN . ADD DLIBZONE(QDDDLIB) OPTIONS(MAIN) SREL(Z038) RELATED(QDDTGT) . ENDUCL . SET BDY(QDDTGT) . UCLIN . ADD TARGETZONE(QDDTGT) OPTIONS(MAIN) SREL(Z038) RELATED(QDDDLIB) . ENDUCL . ./ ADD NAME=JOB04 //AUSERID4 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID // JCLLIB ORDER=(AUSERID.QUERYDD.SMP.CNTL) //A EXEC SMP //SMPPTFIN DD DISP=SHR,DSN=AUSERID.QUERYDD.SMP.CNTL(QDD0100) //SYSIN DD * SET BDY(GLOBAL) . RECEIVE LIST . ./ ADD NAME=JOB05 //AUSERID5 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID // JCLLIB ORDER=(AUSERID.QUERYDD.SMP.CNTL) //A EXEC SMP //SYSIN DD * SET BDY(QDDTGT) . APPLY CHECK S(QDD0100) . ./ ADD NAME=JOB06 //AUSERID6 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID // JCLLIB ORDER=(AUSERID.QUERYDD.SMP.CNTL) //A EXEC SMP //SYSIN DD * SET BDY(QDDTGT) . APPLY S(QDD0100) . ./ ADD NAME=JOB07 //AUSERID7 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID // JCLLIB ORDER=(AUSERID.QUERYDD.SMP.CNTL) //A EXEC SMP //SYSIN DD * SET BDY(QDDDLIB) . ACCEPT CHECK S(QDD0100) . ./ ADD NAME=JOB08 //AUSERID8 JOB 'ACCT DATA',REGION=1500M,TIME=10, // NOTIFY=AUSERID // JCLLIB ORDER=(AUSERID.QUERYDD.SMP.CNTL) //A EXEC SMP //SYSIN DD * SET BDY(QDDDLIB) . ACCEPT S(QDD0100) . ./ ADD NAME=QDD0100 ++FUNCTION(QDD0100) . ++VER(Z038) . ++JCLIN . //B EXEC PGM=IEWL,PARM='MAP,XREF,LIST' //SYSPRINT DD SYSOUT=* //AOBJ DD DISP=SHR,DSN=SYS1.AOBJ //SYSLMOD DD DISP=SHR,DSN=SYS1.LINKLIB //SYSLIN DD * INCLUDE AOBJ(QUERYDD) ENTRY QUERYDD ALIAS QDD NAME QUERYDD(R) ++MAC(QDDHELP) DISTLIB(AHELP) MALIAS(QUERYDD,QDD) SYSLIB(HELP) . )F Function - 00000100 The QUERYDD command displays information about the data sets 00000400 allocated to one or more files 00000500 )X Syntax - 00000600 QUERYDD 'dd-list' 00000700 )O Operands - 00000800 )P 'dd-list' - dd names for which information is requested 00000900 )M Messages - 00000910 ))QDD001I DDNAME xx NOT ALLOCATED TO YOUR TSO SESSION OR JOB STEP 00001000 Reason - The dd name specified in the message is not allocated 00001100 to your TSO session 00001200 Action - QUERYDD prompts the terminal operator for a valid dd name 00001300 Response - Enter a valid dd name 00001400 ))QDD002I ERROR FINDING DATA SET INFORMATION FOR xx 00001510 Reason - QUERYDD was unable to obtain data set information for 00001600 the dd name specified in the message. 00001700 Action - QUERYDD ignores the dd name and continue execution 00001800 Response - This may represent a system error. QUERYDD verifes 00001900 the dd name has been allocated to your session 00002000 before it requests dataset information. 00002100 ++SRC(QUERYDD) DISTLIB(ASRC) . V1L0 TITLE ' Sample TSO Command for>00200000 TSO Times' 00400000 SPACE 10 00600000 *********************************************************************** 00800000 * * 01000000 * Title - QUERYDD * 01200000 * * 01400000 * Function / Operation - QUERYDD is a sample TSO command written * 01600000 * to illustrate an article for TSO Times * 01800000 * * 02000000 * Command Syntax - * 02200000 * QUERYDD (ddname ... ddname) * 02400000 * * 02600000 * Status / Change Level - * 02800000 * V1L0 - October 2003 * 03000000 * * 03200000 * Attributes - QUERYDD is not reentrant, not refreshable and not * 03400000 * reusable. It operates in problem key and problem state in TCB * 03600000 * mode as a TSO command processor. * 03800000 * * 04000000 * Character Set - EBCDIC * 04200000 * * 04400000 *********************************************************************** 04600000 EJECT 04800000 MACRO 05000000 &NAME SETCC &LOC,&CC 05200000 AIF ('&CC'(1,1) EQ '(').RFORM 05400000 &NAME CLI &LOC,&CC 05600000 BNL *+8 05800000 MVI &LOC,&CC 06000000 MEXIT 06200000 .RFORM ANOP 06400000 &NAME CLM &CC(1),B'0001',&LOC 06600000 BNH *+8 06800000 STC &CC(1),&LOC 07000000 MEND 07200000 EJECT 07400000 IKJCPPL , 07600000 SPACE 5 07800000 IKJPPL , 08000000 MYPPLSZ EQU *-PPL 08200000 SPACE 5 08400000 IKJIOPL 08600000 MYIOPLSZ EQU *-IOPL 08800000 PUSH PRINT 09000000 PRINT NOGEN 09200000 CVT DSECT=YES 09400000 IHAARA , 09600000 ARA DSECT 09800000 ORG ARAJFCB 10000000 IEFJFCBN , 10200000 DCBD DSORG=QS,DEVD=DA 10400000 POP PRINT 10600000 EJECT 10800000 * INITIAL ENTRY - PREPARE THE PPL AND IOPL TSO CONTROL BLOCK 11000000 SPACE 1 11200000 QUERYDD CSECT DEFINE PROGRAM CSECT 11400000 SPACE 1 11600000 USING CPPL,R1 DEFINE CPPL ADDRESSABILITY 11800000 USING PDL,R10 DEFINE PDL ADDRESSABILITY 12000000 USING *,R12 DEFINE PROGRAM ADDRESSABILITY 12200000 USING PPL,MYPPL DEFINE PPL ADDRESSABILITY 12400000 USING IOPL,MYIOPL DEFINE IOPL ADDRESSABILITY 12600000 USING IHADCB,ADCB DEFINE DCB ADDRESSABILITY 12800000 SPACE 1 13000000 SAVE (14,12),,* SAVE CALLER'S REGISTERS 13200000 SPACE 1 13400000 LR R12,R15 COPY ENTRY POINT ADDRESS TO REG 12 13600000 SPACE 1 13800000 LA R15,S LOAD ADDRESS OF A NEW SAVE AREA 14000000 ST R15,8(,R13) ADD NEW SAVE AREA TO THE 14200000 ST R13,4(,R15) SAVE AREA CHAIN 14400000 LR R13,R15 ESTABLISH NEW SAVE AREA POINTER 14600000 SPACE 1 14800000 L R0,CPPLCBUF LOAD ADDR OF THE COMMAND BUFFER 15000000 ST R0,PPLCBUF STORE IN THE PPL 15200000 SPACE 1 15400000 L R0,CPPLECT LOAD ADDR OF THE TSO ECT 15600000 ST R0,PPLECT STORE IN THE PPL 15800000 ST R0,IOPLECT AND THE IOPL 16000000 SPACE 1 16200000 L R0,CPPLUPT LOAD ADDR OF THE TSO UPT 16400000 ST R0,PPLUPT STORE IN THE PPL 16600000 ST R0,IOPLUPT AND THE IOPL 16800000 SPACE 1 17000000 LA R0,ECB LOAD ADDR OF AN ECB 17200000 ST R0,PPLECB STORE IN THE PPL 17400000 ST R0,IOPLECB AND IOPL 17600000 SPACE 1 17800000 L R0,=A(PCL) LOAD ADDR OF AN IKJPARS PCL 18000000 ST R0,PPLPCL STORE IN THE PPL 18200000 SPACE 1 18400000 LA R0,ANSPTR LOAD ADDR OF THE PDL POINTER WORD 18600000 ST R0,PPLANS STORE IN THE PPL 18800000 SPACE 1 19000000 * PARTIALLY PREPARE THE MTPARMS FOR IKJEFF02 19200000 SPACE 1 19400000 ST R1,MTCPPLP SAVE CPPL ADDRESS FOR IKJEFF02 19600000 SPACE 1 19800000 LA R0,MTCSECTP LOAD ADDRESS OF THE 2ND PART OF ->20000000 IKJEFF02 PARM LIST 20200000 ST R0,MTPLPTR STORE IN THE BASE PARM LIST 20400000 L R0,=A(MSGS) LOAD ADDRESS OF THE MSG FORMATS 20600000 ST R0,MTCSECTP SAVE IT FOR IKJEFF02 20800000 MVI MTSW1,MTPUTLSW INDICATE MESSAGES ARE SENT VIA ->21000000 PUTLINE 21200000 SPACE 1 21400000 * PPLUWA IS NOT FILLED IN. WE ARE NOT REENTERABLE, SO WE DON'T 21600000 * NEED TO PASS ANYTHING TO THE VALIDITY CHECK EXIT. 21800000 SPACE 1 22000000 CALLTSSR EP=IKJPARS, CALL IKJPARS TO DECODE ->22200000 MF=(E,MYPPL) THE COMMAND LINE 22400000 SPACE 1 22600000 LTR R15,R15 TEST THE RETURN CODE FROM IKJPARS 22800000 BZ SCANDDS BR IF PARSE IS OK 23000000 SETCC RC,8 INDICATE ERROR 23200000 B EXIT 23400000 SPACE 1 23600000 * THIS IS THE "DO YOUR OWN THING" PART OF THE COMMAND. SCAN THROUGH 23800000 * THE LIST OF DDNAMES. FOR EACH DDNAME IN THE COMMAND, READ THE 24000000 * JFCBS AND LIST THE DATA SET NAMES ALLOCATED TO THE DD STATEMENT 24200000 SPACE 1 24400000 SCANDDS L R10,ANSPTR LOAD ADDR OF THE PDL BUILT BY PARS 24600000 LA R10,PDLDD LOAD ADDR OF THE FIRST DDNAME PDE 24800000 SPACE 1 25000000 NEXTDD LH R9,4(,R10) LOAD LENGTH OF DDNAME 25200000 L R8,0(,R10) LOAD ADDR OF THE THE TEXT 25400000 * THE FOLLOWING SEQUENCE TO COPY THE DDNAME TEXT TO DCBDDNAM IS 25600000 * ALSO QUITE COMMON 25800000 * MVC DCBDDNAM,=CL8' ' CLEAR THE DDNAME 26000000 * BCTR R9,0 REDUCE LENGTH BY 1 26200000 * EX R9,COPYDD COPY THE DDNAME 26400000 * . 26600000 * COPYDD MVC DCBDDNAM,0(R8) 26800000 * IT'S SAFE BECAUSE IKJPARS WON'T SEND ANYTHING LONGER THAN 8 BYTES 27000000 O R9,=AL1(C' ',0,0,0) ADD FILL CHARACTER TO INPUT LENGTH 27200000 * MANY PEOPLE USE 27400000 * ICM R9,B'1000',=C' ' ADD FILL CHARACTER TO INPUT LENGTH 27600000 LA R14,DCBDDNAM LOAD ADDR OF MSG 27800000 LA R15,L'DCBDDNAM LOAD LENGTH OF DDNAME 28000000 MVCL R14,R8 COPY DDNAME TO MSG 28200000 RDJFCB MF=(E,OPARM) READ THE JFCB FOR THE DDNAME 28400000 LTR R15,R15 TEST RC 28600000 BZ LISTDD BR IF OK 28800000 SPACE 1 29000000 * THE RDJFCB FAILED, WRITE AN ERROR MESSAGE 29200000 SPACE 1 29400000 LH R9,4(,R7) LOAD LENGTH OF DDNAME 29600000 L R8,0(,R7) LOAD ADDR OF DDNAME 29800000 ST R8,MTINSRTS STORE THE DDNAME ADDR IN THE ->30000000 IKJEFF02 PARM LIST 30200000 STC R9,MTINSRTS STORE THE LENGTH IN THE IKJEFF02 ->30400000 PARM LIST 30600000 MVC MTMSGID,=C'QDD2' COPY THE MSGID TO THE IKJEFF02 ->30800000 PARM LIST 31000000 CALLTSSR EP=IKJEFF02, USE IKJEFF02 TO GENERATE AND ->31200000 MF=(E,MTPARML) WRITE THE MESSAGE 31400000 SPACE 1 31600000 SETCC RC,4 SET THE RETURN CODE 31800000 SPACE 1 32000000 B DDCHAIN GO FIND THE NEXT DDNAME 32200000 SPACE 1 32400000 LISTDD LH R9,4(,R10) LOAD LENGTH OF DDNAME 32600000 L R8,0(,R10) LOAD ADDR OF THE TEXT 32800000 LA R14,MSG LOAD ADDR OF MESSAGE 33000000 LR R15,R9 COPY LENGTH TO REG 9 33200000 MVCL R14,R8 COPY DDNAME TO LINE 33400000 LA R1,TEXT LOAD ADDR OF RDW FOR MSG 33600000 SR R14,R1 COMPUTE TEXT LENGTH 33800000 STH R14,0(,R1) STORE 34000000 SPACE 1 34200000 PUTLINE MF=(E,MYIOPL), WRITE THE GENERATED OUTPUT LINE ->34400000 PARM=PUTLPB 34600000 SPACE 1 34800000 L R2,ARLAREA LOAD ADDR OF THE 1ST ARA 35000000 LH R3,ARLCONC LOAD NUMBER OF DATA ARAS 35200000 USING ARA,R2 ESTABLISH ARA ADDRESSABILITY 35400000 SHOWDSN MVC MSG(2),=CL8' ' INSERT 2 BLANKS 35600000 LA R14,MSG+2 LOAD START OF VARIABLE AREA 35800000 MVC MSG+2(L'JFCBDSNM),JFCBDSNM COPY DSN 36000000 LA R14,MSG+2+L'JFCBDSNM LOAD END OF VARIABLE 36200000 BCTR R14,0 BACKUP 1 BYTE 36400000 TM 0(R14),255-C' ' TEST IF NULL OR BLANK 36600000 BZ *-6 BR IF NULL OR BLANK 36800000 LA R14,1(,R14) SET R14 = ADDR OF END OF TEXT 37000000 LA R1,TEXT LOAD ADDR OF RDW 37200000 SR R14,R1 COMPUTE LENGTH OF TEXT 37400000 STH R14,0(,R1) STORE LENGTH IN THE RDW 37600000 SPACE 1 37800000 PUTLINE MF=(E,MYIOPL), WRITE THE GENERATED OUTPUT LINE ->38000000 PARM=PUTLPB 38200000 SPACE 1 38400000 AH R2,ARALEN COMPUTE ADDRESS OF THE NEXT ARA 38600000 BCT R3,SHOWDSN BR TO NEXT 38800000 SPACE 1 39000000 L R0,ARLPOOL LOAD SUBPOOL AND LENGTH OF THE ARA 39200000 L R1,ARLAREA LOAD ADDR OF THE ARA 39400000 FREEMAIN R,LV=(0),A=(1) FREE THE ARA 39600000 SPACE 1 39800000 MVC ARL(ARLSIZE),ARLMAST RESET THE ARL, JUST TO BE SURE 40000000 SPACE 1 40200000 * THE NEXT PDE FOR THE LIST IS IDENTIFIED BY A FULL WORD. THE 40400000 * HIGH ORDER BYTE IS A FLAG BYTE, 0 FOR NEXT ENTRY PRESENT, X'FF' 40600000 * FOR END OF LIST. WE USE THE X'FF' FLAG, BUT 40800000 * 41000000 * DDCHAIN L R10,8(,R10) LOAD ADDR OF NEXT DD PDE 41200000 * N R10,=A(X'FFFFFF') ISOLATE ADDRESS 41400000 * BNZ NEXTDD BR IF ADDRESS IS NOT 0 41600000 * 41800000 * IS JUST AS SAFE AND WORKS JUST AS WELL. IF RUNNING AMODE 31, 42000000 * THE COMMENT CODE WILL WORK PROPERLY, AND MY ACTUAL CODE WILL NOT. 42200000 SPACE 1 42400000 DDCHAIN CLI 8(R10),X'FF' TEST IF END OF DD LIST 42600000 L R10,8(,R10) LOAD ADDR OF NEXT DD ENTRY 42800000 BNE NEXTDD GO DO THE NEXT DD 43000000 SPACE 1 43200000 IKJRLSA ANSPTR RELEASE THE PDL 43400000 SPACE 1 43600000 EXIT L R13,4(,R13) LOAD ADDR OF THE CALLER'S SAVE AREA 43800000 SR R15,R15 SET R15 = 0 44000000 IC R15,RC LOAD THE RETURN CODE 44200000 RETURN (14,12),T,RC=(15) RESTORE REGS & RETURN TO CALLER 44400000 SPACE 1 44600000 DROP , KILL ALL ADDRESSABILITY 44800000 EJECT 45000000 CNOP 0,8 45200000 * IKJPARS VALIDITY CHECK ROUTINE TO SEE IF DDNAME IS PRESENT 45400000 USING *,R12 DEFINE ADDRESSABILITY 45600000 TESTDD SAVE (14,12),,* SAVE REGS 45800000 LR R12,R15 COPY EP ADDRESS TO REG 12 46000000 LA R15,TESTSAVE LOAD ADDR OF A NEW SAVE AREA 46200000 ST R15,8(,R13) ADD NEW SAVE AREA 46400000 ST R13,4(,R15) TO THE CHAIN 46600000 LR R13,R15 ESTABLISH NEW SAVE AREA POINTER 46800000 SPACE 1 47000000 * COPY DDNAME FROM COMMAND LINE AND EXPAND TO 8 BYTES 47200000 SPACE 1 47400000 L R7,0(,R1) LOAD ADDR OF PDE FROM PARM LIST 47600000 LH R9,4(,R7) LOAD LENGTH OF PROPOSED DDNAME 47800000 L R8,0(,R7) LOAD ADDR OF PROPOSED DDNAME 48000000 O R9,=AL1(C' ',0,0,0) ADD FILL CHARACTER TO INPUT LENGTH 48200000 LA R14,16(,R13) LOAD ADDR OF WORK AREA 48400000 LA R15,8 LOAD LENGTH 48600000 MVCL R14,R8 COPY DDNAME TO WORK AREA 48800000 SPACE 1 49000000 * DO A DEVTYPE. A NON-ZERO RETURN CODE INDICATES, 99.99% OF THE 49200000 * TIME, THAT A DD IS NOT THERE. WE DON'T CARE ABOUT THE DEVICE 49400000 * INFORMATION, WE'RE JUST DOING THIS AS A CONVENIENT AND RELIABLE 49600000 * WAY TO FIND OUT IF THE DD STATEMENT IS THERE 49800000 SPACE 1 50000000 DEVTYPE 16(,R13),24(,R13) GET DEVICE CHARACTERISTICS 50200000 LTR R15,R15 TEST RC FROM DEVTYPE 50400000 BZ TDDEXIT BR IF DDNAME DEFINED 50600000 SPACE 1 50800000 * WRITE A MESSAGE 51000000 SPACE 1 51200000 LH R9,4(,R7) LOAD LENGTH OF DDNAME 51400000 L R8,0(,R7) LOAD ADDR OF DDNAME 51600000 ST R8,MTINSRTS STORE DDNAME ADDRESS 51800000 STC R9,MTINSRTS STORE DDNAME LENGTH 52000000 MVC MTMSGID,=C'QDD1' COPY MESSAGE ID TO IKJEFF02 ->52200000 PARM LIST 52400000 CALLTSSR EP=IKJEFF02, GENERATE AND WRITE THE MESSAGE ->52600000 MF=(E,MTPARML) 52800000 SPACE 1 53000000 LA R15,8 SET RC (ERROR, WE WROTE MSG) 53200000 SPACE 1 53400000 TDDEXIT L R13,4(,R13) LOAD ADDR OF THE CALLER'S SAVE AREA 53600000 RETURN (14,12),T,RC=(15) RESTORE REGS & RETURN TO CALLER 53800000 SPACE 1 54000000 DROP , KILL ALL ADDRESSABILITY 54200000 EJECT 54400000 S DC 9D'0' SAVE AREA 54600000 TESTSAVE DC 9D'0' TESTDD SAVE AREA 54800000 SPACE 1 55000000 * THE IOPL IS DOUBLE WORD ALIGNED BECAUSE THE SAVE AREA IS DOUBLE 55200000 * WORD ALIGNED. THE 0D'0' AT THE END OF THE DC FORCES THE NEXT 55400000 * DATA AREA TO BE DOUBLE WORD ALIGNED. 55600000 SPACE 1 55800000 MYIOPL DC XL(MYIOPLSZ)'0',0D'0' IOPL 56000000 MYPPL DC XL(MYPPLSZ)'0',0D'0' PPL 56200000 SPACE 1 56400000 PUTLPB PUTLINE OUTPUT=(TEXT,TERM,SINGLE,DATA), PUTLINE PARAMETER ->56600000 MF=L BLOCK 56800000 SPACE 1 57000000 IKJEFFMT MTDSECT=NO 57200000 SPACE 1 57400000 OLDA DC A(1,TEXT) PUTLINE OUTPUT LINE DESCRIPTOR (OLD) 57600000 SPACE 1 57800000 ECB DC F'0' AN ECB 58000000 ANSPTR DC A(*-*) PDL POINTER AFTER IKJPARS 58200000 TEXT DC 2AL2(0) OUTPUT LINE RDW 58400000 MSG DC CL256' ' MESSAGE FILL AREA 58600000 SPACE 1 58800000 PUSH PRINT 59000000 PRINT NOGEN 59200000 OPARM OPEN ADCB,MF=L OPEN PARM LIST 59400000 ADCB DCB DDNAME=FILLMEIN,EXLST=XLIST,MACRF=E MINIMUM DCB 59600000 SPACE 1 59800000 XLIST DC 0A(0),AL1(X'80'+X'13'),AL3(ARL) 60000000 SPACE 1 60200000 ARL IHAARL DSECT=NO WORKING ARL 60400000 ARLSIZE EQU *-ARL 60600000 ARLMAST IHAARL DSECT=NO,PREFIX=MST MASTER ARL TO OVERLAY WORKING ARL 60800000 POP PRINT 61000000 DC 0D'0' FORCE BOUNDARY ALIGNMENT 61200000 LTORG , DEFINE THE LITERAL POOL 61400000 RC DC AL1(0) COMMAND RETURN CODE 61600000 SPACE 1 61800000 * THE FOLLOWING PARSE MACROS WILL GENERATE THE FOLLOWING PDL 62000000 * 62200000 * PDL DSECT 62400000 * DS XL8 62600000 * PDLDD DS A,H,2X,A 62800000 SPACE 1 63000000 PUSH PRINT THE EXPANSION OF THE PARSE MACROS 63200000 PRINT NOGEN IS SO CONFUSING AS TO BE USELESS 63400000 SPACE 1 63600000 * THE FOLLOWING PARSE MACROS DEFINE A COMMAND LINE CONTAINING 63800000 * ONE OR MORE TEXT STRINGS THAT ARE DDNAMES. FOR EXAMPLE, 64000000 * QUERYDD SYSEXEC 64200000 * QUERYDD (SYSEXEC SYSPROC SYSHELP) 64400000 SPACE 1 64600000 PCL IKJPARM DSECT=PDL DEFINE PCL AND PDL 64800000 PDLDD IKJIDENT 'DDNAME',LIST,FIRST=ALPHA,OTHER=ALPHANUM,MAXLNTH=8, ->65000000 VALIDCK=TESTDD,PROMPT='DDNAME TO TEST' 65200000 IKJENDP , END OF PCL AND PDL 65400000 POP PRINT 65600000 SPACE 1 65800000 MSGS CSECT 66000000 IKJTSMSG ('QDD001I DDNAME ',,' NOT ALLOCATED TO YOUR TSO SESSI>66200000 ON OR JOB STEP'),QDD1 66400000 IKJTSMSG ('QDD002I ERROR FINDING DATA SET INFORMATION FOR ',),>66600000 QDD2 66800000 IKJTSMSG , 67000000 SPACE 1 67200000 R0 EQU 0 67400000 R1 EQU 1 67600000 R2 EQU 2 67800000 R3 EQU 3 68000000 R4 EQU 4 68200000 R5 EQU 5 68400000 R6 EQU 6 68600000 R7 EQU 7 68800000 R8 EQU 8 69000000 R9 EQU 9 69200000 R10 EQU 10 69400000 R11 EQU 11 69600000 R12 EQU 12 69800000 R13 EQU 13 70000000 R14 EQU 14 70200000 R15 EQU 15 70400000 SPACE 1 70600000 END QUERYDD 70800000 ./ ADD NAME=SMP //SMP EXEC PGM=GIMSMP,PARM='DATE=U' //SMPCSI DD DISP=SHR,DSN=AUSERID.QUERYDD.CSI //LINKLIB DD DISP=SHR,DSN=AUSERID.QUERYDD.LINKLIB //HELP DD DISP=SHR,DSN=AUSERID.QUERYDD.HELP //AHELP DD DISP=SHR,DSN=AUSERID.QUERYDD.AHELP //ASRC DD DISP=SHR,DSN=AUSERID.QUERYDD.ASRC //OBJ DD DISP=SHR,DSN=AUSERID.QUERYDD.SMP.CNTL //SMPMTS DD DISP=SHR,DSN=AUSERID.QUERYDD.SMPMTS //SMPPTS DD DISP=SHR,DSN=AUSERID.QUERYDD.SMPPTS //SMPSTS DD DISP=SHR,DSN=AUSERID.QUERYDD.SMPSTS //SMPSCDS DD DISP=SHR,DSN=AUSERID.QUERYDD.SMPSCDS //SMPWRK1 DD UNIT=SYSDA,SPACE=(CYL,(1,1,10)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //SMPWRK2 DD UNIT=SYSDA,SPACE=(CYL,(1,1,10)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //SMPWRK3 DD UNIT=SYSDA,SPACE=(CYL,(1,1,10)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //SMPWRK4 DD UNIT=SYSDA,SPACE=(CYL,(1,1,10)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //SMPWRK6 DD UNIT=SYSDA,SPACE=(CYL,(1,1,10)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //SMPCNTL DD DDNAME=SYSIN //SMPHOLD DD DUMMY,DCB=(RECFM=F,LRECL=80,BLKSIZE=80) //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPSNAP DD SYSOUT=* //SMPLOG DD DUMMY //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSLIB DD DISP=SHR,DSN=SYS1.MODGEN // DD DISP=SHR,DSN=SYS1.MACLIB