TITLE 'IOEDKRDR-3540 DISKETTE READER *00001000 ' 00002000 IOEDKRDR CSECT , 0001 00003000 @MAINENT DS 0H 0001 00004000 USING *,@15 0001 00005000 B @PROLOG 0001 00006000 DC AL1(16) 0001 00007000 DC C'IOEDKRDR 75.308' 0001 00008000 DROP @15 00009000 @PROLOG STM @14,@12,12(@13) 0001 00010000 BALR @12,0 0001 00011000 @PSTART LA @11,4095(,@12) 0001 00012000 LA @10,4095(,@11) 0001 00013000 LA @09,4095(,@10) 0001 00014000 USING @PSTART,@12 0001 00015000 USING @PSTART+4095,@11 0001 00016000 USING @PSTART+8190,@10 0001 00017000 USING @PSTART+12285,@09 0001 00018000 ST @13,@SA00001+4 0001 00019000 LA @14,@SA00001 0001 00020000 ST @14,8(,@13) 0001 00021000 LR @13,@14 0001 00022000 * 0110 00023000 * /*****************************************************************/ 00024000 * /* */ 00025000 * /* START SEGMENT-SETUP & INITIALIZE @Y30OE78*/ 00026000 * /* */ 00027000 * /*****************************************************************/ 00028000 * 0110 00029000 * IF PARMLEN>ZERO THEN /* IF JCL PARM IS @Y30OE78*/ 00030000 L @08,PARMADDR(,PARMPTR) 0110 00031000 ICM @03,3,PARMLEN(@08) 0110 00032000 BNP @RF00110 0110 00033000 * DO; /* SPECIFIED, PROCESS IT @Y30OE78*/ 00034000 * DO I=1 TO PARMLEN; /* SCAN PARM TEXT FOR @Y30OE78*/ 00035000 LA I,1 0112 00036000 B @DE00112 0112 00037000 @DL00112 DS 0H 0113 00038000 * IF PARMTXT(I)<'0'| /* NON-NUMERIC(INVALID) @Y30OE78*/ 00039000 * PARMTXT(I)>'9' THEN /* CHARACTERS @Y30OE78*/ 00040000 L @08,PARMADDR(,PARMPTR) 0113 00041000 LR @05,@08 0113 00042000 ALR @05,I 0113 00043000 CLI PARMTXT-1(@05),C'0' 0113 00044000 BL @RT00113 0113 00045000 ALR @08,I 0113 00046000 CLI PARMTXT-1(@08),C'9' 0113 00047000 BNH @RF00113 0113 00048000 @RT00113 DS 0H 0114 00049000 * BADPARM=ON; /* SET BAD CHAR SWITCH @Y30OE78*/ 00050000 OI BADPARM,B'01000000' 0114 00051000 * END; /* @Y30OE78*/ 00052000 @RF00113 AH I,@CH00061 0115 00053000 @DE00112 L @08,PARMADDR(,PARMPTR) 0115 00054000 CH I,PARMLEN(,@08) 0115 00055000 BNH @DL00112 0115 00056000 * IF BADPARM=ON| /* IF BAD CHAR FOUND, @Y30OE78*/ 00057000 * PARMLEN>MAXPLEN THEN /* OR PARM TOO BIG, @Y30OE78*/ 00058000 TM BADPARM,B'01000000' 0116 00059000 BO @RT00116 0116 00060000 L @08,PARMADDR(,PARMPTR) 0116 00061000 LH @08,PARMLEN(,@08) 0116 00062000 CH @08,@CH00066 0116 00063000 BNH @RF00116 0116 00064000 @RT00116 DS 0H 0117 00065000 * DO; /* PREPARE TO EXIT @Y30OE78*/ 00066000 * RTNCODE=TERMERR; /* SET RETURN CODE @Y30OE78*/ 00067000 MVI RTNCODE,X'08' 0118 00068000 * MSGIDEX=M552; /* SET MSG INDEX @Y30OE78*/ 00069000 MVI MSGIDEX,X'02' 0119 00070000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00071000 MVI MSGTYPE,X'01' 0120 00072000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARM LIST @Y30OE78*/ 00073000 LA PARMPTR,MSGINT 0121 00074000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00075000 L @15,@CV00048 0122 00076000 BALR @14,@15 0122 00077000 * END; /* @Y30OE78*/ 00078000 * ELSE /* @Y30OE78*/ 00079000 * DO; /* @Y30OE78*/ 00080000 B @RC00116 0124 00081000 @RF00116 DS 0H 0125 00082000 * I=MAXPLEN-PARMLEN+1; /* SET INDEX TO FIRST @Y30OE78 00083000 * CHAR IN WORKAREA TO @Y30OE78 00084000 * BE REPLACED BY PARM @Y30OE78*/ 00085000 LA @08,6 0125 00086000 L @03,PARMADDR(,PARMPTR) 0125 00087000 LR I,@08 0125 00088000 SH I,PARMLEN(,@03) 0125 00089000 AH I,@CH00061 0125 00090000 * WORKB(I:6)=PARMTXT(1:PARMLEN);/* MOVE PARM VAL @Y30OE78 00091000 * INTO WORKAREA RIGHT @Y30OE78 00092000 * JUSTIFIED @Y30OE78*/ 00093000 LA @05,WORKB-1(I) 0126 00094000 SLR @08,I 0126 00095000 EX @08,@SM01648 0126 00096000 * PACK(WORKA,WORKB); /* PACK PARM VALUE @Y30OE78*/ 00097000 PACK WORKA(8),WORKB(6) 0127 00098000 * CVB(ADS#,WORKA); /* CONVERT PARM VALUE @Y30OE78 00099000 * TO BINARY & PLACE @Y30OE78 00100000 * IN ADS# @Y30OE78*/ 00101000 CVB @08,WORKA 0128 00102000 ST @08,ADS# 0128 00103000 * END; /* @Y30OE78*/ 00104000 * END; /* @Y30OE78*/ 00105000 @RC00116 DS 0H 0131 00106000 * IF RTNCODE=NOERR THEN /* IF ERROR, ALL DONE @Y30OE78*/ 00107000 @RF00110 CLI RTNCODE,0 0131 00108000 BNE @RF00131 0131 00109000 * DO; /* @Y30OE78*/ 00110000 * GEN REFS(EXTANS) /* GET TIOT & COMM ADDR @Y30OE78*/ 00111000 * (EXTRACT EXTANS,FIELDS=(TIOT,COMM));/* @Y30OE78*/ 00112000 EXTRACT EXTANS,FIELDS=(TIOT,COMM) 00113000 * IF CIBPTR^=ZERO& /* IF CMD PARAMETER WAS @ZA04463*/ 00114000 * CIBDATLN>ZERO THEN /* SPECIFIED @ZA04463*/ 00115000 SLR @08,@08 0134 00116000 L @03,COMMADDR 0134 00117000 L @03,CIBPTR(,@03) 0134 00118000 CR @03,@08 0134 00119000 BE @RF00134 0134 00120000 LH @15,CIBDATLN(,@03) 0134 00121000 CR @15,@08 0134 00122000 BNH @RF00134 0134 00123000 * DO; /* SPECIFIED, PROCESS IT @Y30OE78*/ 00124000 * STARTJOB=ON; /* SET SWITCH TO CAUSE @Y30OE78 00125000 * STARTJOB SCAN @Y30OE78*/ 00126000 OI STARTJOB,B'10000000' 0136 00127000 * I=MIN(CIBDATLN,LENGTH(SJOBNAME));/* GET LENGTH @Y30OE78 00128000 * TO BE USED @Y30OE78*/ 00129000 LA I,8 0137 00130000 CR @15,I 0137 00131000 BNH *+6 00132000 LR @15,I 0137 00133000 LR I,@15 0137 00134000 * SJOBNAME=CIBDATA(1:I); /* MOVE SCAN @Y30OE78 00135000 * NAME TO LOCAL AREA @Y30OE78*/ 00136000 MVI SJOBNAME+1,C' ' 0138 00137000 MVC SJOBNAME+2(6),SJOBNAME+1 0138 00138000 LR @08,I 0138 00139000 BCTR @08,0 0138 00140000 EX @08,@SM01651 0138 00141000 * END; /* @Y30OE78*/ 00142000 * TIOTPTR=TIOTADDR; /* GET FIRST TIOT ENTRY @Y30OE78*/ 00143000 @RF00134 L TIOTPTR,TIOTADDR 0140 00144000 * DO WHILE(TIOELNGH^=ZERO); /* SCAN TO END OF TIOT @Y30OE78*/ 00145000 B @DE00141 0141 00146000 @DL00141 DS 0H 0142 00147000 * DO I=RDER TO UT3; /* CHECK FOR VALID DDNM @Y30OE78*/ 00148000 LA I,1 0142 00149000 @DL00142 DS 0H 0143 00150000 * IF TIOEDDNM=DDNAME(I)& /* IF VALID NAME FOUND,& @Y30OE78*/ 00151000 * DFOUND(I)=OFF THEN /* NOT FOUND PREVIOUSLY, @Y30OE78*/ 00152000 LR @08,I 0143 00153000 MH @08,@CH00032 0143 00154000 LA @05,DDNAME-12(@08) 0143 00155000 CLC TIOEDDNM(8,TIOTPTR),0(@05) 0143 00156000 BNE @RF00143 0143 00157000 LA @05,DFOUND-12(@08) 0143 00158000 TM 0(@05),B'10000000' 0143 00159000 BNZ @RF00143 0143 00160000 * DO; /* PROCESS IT @Y30OE78*/ 00161000 * DFOUND(I)=ON; /* MARK ENTRY FOUND @Y30OE78*/ 00162000 LA @05,DFOUND-12(@08) 0145 00163000 OI 0(@05),B'10000000' 0145 00164000 * IF TIOESSDS=ON THEN /* IF SUBSYS DATA SET, @Y30OE78*/ 00165000 TM TIOESSDS(TIOTPTR),B'00000010' 0146 00166000 BNO @RF00146 0146 00167000 * DSSDS(I)=ON; /* MARK AS SUCH @Y30OE78*/ 00168000 LA @05,DSSDS-12(@08) 0147 00169000 OI 0(@05),B'01000000' 0147 00170000 * ELSE /* OTHERWISE, @Y30OE78*/ 00171000 * DEVPTR(I)=TIOEFSRT;/* SAVE UCB ADDRESS @Y30OE78*/ 00172000 B @RC00146 0148 00173000 @RF00146 LR @08,I 0148 00174000 MH @08,@CH00032 0148 00175000 LA @05,DEVPTR-12(@08) 0148 00176000 MVC 0(3,@05),TIOEFSRT(TIOTPTR) 0148 00177000 * END; /* @Y30OE78*/ 00178000 @RC00146 DS 0H 0150 00179000 * END; /* @Y30OE78*/ 00180000 @RF00143 AH I,@CH00061 0150 00181000 CH I,@CH00056 0150 00182000 BNH @DL00142 0150 00183000 * TIOTPTR=TIOTPTR+TIOELNGH; /* GET NEXT ENTRY @Y30OE78*/ 00184000 SLR @08,@08 0151 00185000 IC @08,TIOELNGH(,TIOTPTR) 0151 00186000 ALR TIOTPTR,@08 0151 00187000 * END; /* @Y30OE78*/ 00188000 @DE00141 CLI TIOELNGH(TIOTPTR),0 0152 00189000 BNE @DL00141 0152 00190000 * IF DFOUND(RDER)=OFF THEN /* IF NOT FOUND, @Y30OE78*/ 00191000 TM DFOUND,B'10000000' 0153 00192000 BNZ @RF00153 0153 00193000 * DO; /* PROCESS AS ERROR @Y30OE78*/ 00194000 * RTNCODE=TERMERR; /* SET ERROR CODE @Y30OE78*/ 00195000 MVI RTNCODE,X'08' 0155 00196000 * MSGIDEX=M543; /* SET MSG INDEX @Y30OE78*/ 00197000 MVI MSGIDEX,X'01' 0156 00198000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00199000 MVI MSGTYPE,X'01' 0157 00200000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00201000 MVI DDNK,X'07' 0158 00202000 * DDN=DDNAME(RDER); /* SET DD NAME VALUE @Y30OE78*/ 00203000 MVC DDN(8),DDNAME 0159 00204000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARM LIST @Y30OE78*/ 00205000 LA PARMPTR,MSGINT 0160 00206000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00207000 L @15,@CV00048 0161 00208000 BALR @14,@15 0161 00209000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00210000 MVI DDNK,X'00' 0162 00211000 * END; /* @Y30OE78*/ 00212000 * ELSE /* @Y30OE78*/ 00213000 * IF DEVPTR(RDER)^=ZERO& /* IF RDER DEVICE IS @Y30OE78*/ 00214000 * DEVPTR(RDER)->UCBTYP(3:4)=TYPE3540 THEN/* A @Y30OE78 00215000 * 3540, @Y30OE78*/ 00216000 B @RC00153 0164 00217000 @RF00153 SLR @08,@08 0164 00218000 ICM @08,7,DEVPTR 0164 00219000 LTR @08,@08 0164 00220000 BZ @RF00164 0164 00221000 CLC UCBTYP+2(2,@08),@CB00165 0164 00222000 BNE @RF00164 0164 00223000 * DO; /* @Z30OE78*/ 00224000 * RDER3540=ON; /* SET INDICATOR @Z30OE78*/ 00225000 OI RDER3540,B'00100000' 0166 00226000 * RDEV=DEVPTR(RDER); /* PUT ADDR OF 3540 UCB @Z30OE78 00227000 * IN ESTAE PARAMETERS @Z30OE78*/ 00228000 ST @08,RDEV 0167 00229000 * END; /* @Z30OE78*/ 00230000 * IF DSSDS(UT2)=OFF THEN /* IF UT2 IS NOT A SUB- @Y30OE78*/ 00231000 @RF00164 DS 0H 0169 00232000 @RC00153 TM DSSDS+24,B'01000000' 0169 00233000 BNZ @RF00169 0169 00234000 * DO; /* SYSTEM DATA SET, @Y30OE78*/ 00235000 * RTNCODE=TERMERR; /* SET RETURN CODE @Y30OE78*/ 00236000 MVI RTNCODE,X'08' 0171 00237000 * MSGIDEX=M543; /* SET MSG INDEX @Y30OE78*/ 00238000 MVI MSGIDEX,X'01' 0172 00239000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00240000 MVI MSGTYPE,X'01' 0173 00241000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00242000 MVI DDNK,X'07' 0174 00243000 * DDN=DDNAME(UT2); /* SET DD NAME VALUE @Y30OE78*/ 00244000 MVC DDN(8),DDNAME+24 0175 00245000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARM LIST @Y30OE78*/ 00246000 LA PARMPTR,MSGINT 0176 00247000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00248000 L @15,@CV00048 0177 00249000 BALR @14,@15 0177 00250000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00251000 MVI DDNK,X'00' 0178 00252000 * END; /* @Y30OE78*/ 00253000 * IF ADS#^=ZERO THEN /* DIRECT MODE-> DONE @Y30OE78*/ 00254000 @RF00169 ICM @08,15,ADS# 0180 00255000 BZ @RF00180 0180 00256000 * DO; /* @Y30OE78*/ 00257000 * IF DEVPTR(UT3)=ZERO| /* MUST HAVE UT3 DD @Y30OE78*/ 00258000 * DEVPTR(UT3)->UCB3DACC=OFF THEN/* DESCRIBING @Y30OE78 00259000 * A DASD FILE @Y30OE78*/ 00260000 SLR @08,@08 0182 00261000 ICM @08,7,DEVPTR+36 0182 00262000 LTR @08,@08 0182 00263000 BZ @RT00182 0182 00264000 TM UCB3DACC(@08),B'00100000' 0182 00265000 BNZ @RF00182 0182 00266000 @RT00182 DS 0H 0183 00267000 * DO; /* OR DO ERROR PROCESS @Y30OE78*/ 00268000 * RTNCODE=TERMERR; /* SET RETURN CODE @Y30OE78*/ 00269000 MVI RTNCODE,X'08' 0184 00270000 * MSGIDEX=M543; /* SET MSG INDEX @Y30OE78*/ 00271000 MVI MSGIDEX,X'01' 0185 00272000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00273000 MVI MSGTYPE,X'01' 0186 00274000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00275000 MVI DDNK,X'07' 0187 00276000 * DDN=DDNAME(UT3); /* SET DD NAME VALUE @Y30OE78*/ 00277000 MVC DDN(8),DDNAME+36 0188 00278000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARM LIST @Y30OE78*/ 00279000 LA PARMPTR,MSGINT 0189 00280000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00281000 L @15,@CV00048 0190 00282000 BALR @14,@15 0190 00283000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00284000 MVI DDNK,X'00' 0191 00285000 * END; /* @Y30OE78*/ 00286000 * IF DEVPTR(DATA)^=ZERO& /* IF DATA DD IS @Z30OE78*/ 00287000 * DEVPTR(DATA)->UCBTYP(3:4)=TYPE3540 THEN/* @Z30OE78 00288000 * DESCRIBING A 3540 @Y30OE78*/ 00289000 @RF00182 SLR @08,@08 0193 00290000 ICM @08,7,DEVPTR+12 0193 00291000 LTR @08,@08 0193 00292000 BZ @RF00193 0193 00293000 CLC UCBTYP+2(2,@08),@CB00165 0193 00294000 BNE @RF00193 0193 00295000 * DDEV=DEVPTR(DATA); /* PUT ADDR OF 3540 UCB @Z30OE78 00296000 * IN ESTAE PARAMETERS @Z30OE78*/ 00297000 ST @08,DDEV 0194 00298000 * ELSE /* IF NOT 3540, @Z30OE78*/ 00299000 * DO; /* DO ERROR PROCESS @Z30OE78*/ 00300000 B @RC00193 0195 00301000 @RF00193 DS 0H 0196 00302000 * RTNCODE=TERMERR; /* SET RETURN CODE @Y30OE78*/ 00303000 MVI RTNCODE,X'08' 0196 00304000 * MSGIDEX=M543; /* SET MSG INDEX @Y30OE78*/ 00305000 MVI MSGIDEX,X'01' 0197 00306000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00307000 MVI MSGTYPE,X'01' 0198 00308000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00309000 MVI DDNK,X'07' 0199 00310000 * DDN=DDNAME(DATA); /* SET DDNAME VALUE @Y30OE78*/ 00311000 MVC DDN(8),DDNAME+12 0200 00312000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARM LIST @Y30OE78*/ 00313000 LA PARMPTR,MSGINT 0201 00314000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00315000 L @15,@CV00048 0202 00316000 BALR @14,@15 0202 00317000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00318000 MVI DDNK,X'00' 0203 00319000 * END; /* @Y30OE78*/ 00320000 * IF RTNCODE=NOERR THEN /* IF STILL ERROR FREE, @Y30OE78*/ 00321000 @RC00193 CLI RTNCODE,0 0205 00322000 BNE @RF00205 0205 00323000 * DO; /* GET DSN TABLE @Y30OE78*/ 00324000 * GETMNLV=ADS#*LENGTH(DSNENTRY)+/* CALCULATE @Y30OE78*/ 00325000 * LENGTH(DSNENTRY)+/* SPACE REQUIRED FOR @Y30OE78*/ 00326000 * LENGTH(DSNHDR); /* DSN TABLE @Y30OE78*/ 00327000 L @08,ADS# 0207 00328000 MH @08,@CH01204 0207 00329000 AH @08,@CH00680 0207 00330000 STCM @08,7,GETMNLV 0207 00331000 * GEN REFS(GETMNLA,GETMNA)/* @Y30OE78*/ 00332000 * (GETMAIN LC,LA=GETMNLA,A=GETMNA);/* @Y30OE78*/ 00333000 GETMAIN LC,LA=GETMNLA,A=GETMNA 00334000 * RFY 0209 00335000 * RTNCDREG RSTD; /* @Y30OE78*/ 00336000 * IF RTNCDREG=ZERO THEN/* IF GETMAIN SUCCESS, @Y30OE78*/ 00337000 SLR @14,@14 0210 00338000 CR RTNCDREG,@14 0210 00339000 BNE @RF00210 0210 00340000 * DO; /* @Y30OE78*/ 00341000 * RFY 0212 00342000 * RTNCDREG UNRSTD;/* @Y30OE78*/ 00343000 * DSNELN=LENGTH(DSNENTRY);/* SET LENGTH OF @Y30OE78 00344000 * ENTRY IN HEADER @Y30OE78*/ 00345000 LA @08,40 0213 00346000 L @03,GETMNA 0213 00347000 STH @08,DSNELN(,@03) 0213 00348000 * DSNPTRJ=ADDR(DSNENT1);/* GET JCL ENTRY OF 0214 00349000 * @Y30OE78 00350000 * DSNTABLE @Y30OE78*/ 00351000 LA @03,DSNENT1(,@03) 0214 00352000 ST @03,DSNPTRJ 0214 00353000 * MEMNAME='JCLMEMBR';/* SET JCL MEMBER @Y30OE78 00354000 * NAME IN 1ST DSNTAB @Y30OE78 00355000 * ENTRY @Y30OE78*/ 00356000 MVC MEMNAME(8,@03),@CC01449 0215 00357000 * TTR0=ZERO; /* CLEAR RELATIVE TRACK @Y30OE78 00358000 * ADDRESS FOR THIS MEM @Y30OE78*/ 00359000 ST @14,TTR0(,@03) 0216 00360000 * JOBERR=OFF; /* INIT ERROR SWITCH @Y30OE78*/ 00361000 NI JOBERR(@03),B'11101111' 0217 00362000 * DSNPTRJ=DSNPTRJ+LENGTH(DSNENTRY);/* SET @Y30OE78 00363000 * POINTER TO @Y30OE78 00364000 * FIRST ENTRY AVAILABLE @Y30OE78 00365000 * FOR ADS @Y30OE78*/ 00366000 ALR @03,@08 0218 00367000 ST @03,DSNPTRJ 0218 00368000 * FRSTADSN=DSNPTRJ;/* SAVE ADDR OF 1ST ADS @Y30OE78 00369000 * ENTRY IN DSNTAB @Y30OE78*/ 00370000 ST @03,FRSTADSN 0219 00371000 * END; /* @Y30OE78*/ 00372000 * ELSE /* IF GETMAIN FAILED, @Y30OE78*/ 00373000 * DO; /* ERROR EXIT @Y30OE78*/ 00374000 B @RC00210 0221 00375000 @RF00210 DS 0H 0222 00376000 * RTNCODE=TERMERR;/* SET RETURN CODE @Y30OE78*/ 00377000 MVI RTNCODE,X'08' 0222 00378000 * MSGIDEX=M553; /* SET MSG INDEX @Y30OE78*/ 00379000 MVI MSGIDEX,X'03' 0223 00380000 * MSGTYPE=MTYPWTO;/* SET MSG TYPE @Y30OE78*/ 00381000 MVI MSGTYPE,X'01' 0224 00382000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS @Y30OE78*/ 00383000 LA PARMPTR,MSGINT 0225 00384000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00385000 L @15,@CV00048 0226 00386000 BALR @14,@15 0226 00387000 * END; /* @Y30OE78*/ 00388000 * END; /* @Y30OE78*/ 00389000 @RC00210 DS 0H 0229 00390000 * END; /* @Y30OE78*/ 00391000 @RF00205 DS 0H 0230 00392000 * END; /* @Y30OE78*/ 00393000 * 0230 00394000 @RF00180 DS 0H 0231 00395000 * /*****************************************************************/ 00396000 * /* */ 00397000 * /* END SEGMENT-SETUP & INITIALIZE @Y30OE78*/ 00398000 * /* */ 00399000 * /*****************************************************************/ 00400000 * 0231 00401000 * IF RTNCODE=NOERR THEN /* IF ERROR, ALL DONE @Y30OE78*/ 00402000 @RF00131 CLI RTNCODE,0 0231 00403000 BNE @RF00231 0231 00404000 * DO; /* @Y30OE78*/ 00405000 * 0232 00406000 * /*************************************************************/ 00407000 * /* */ 00408000 * /* START SEGMENT-INPUT JCL @Y30OE78*/ 00409000 * /* */ 00410000 * /*************************************************************/ 00411000 * 0233 00412000 * BLKPTR=ADDR(IOEESTAE); /* GET ADDR OF ESTAE @Z30OE78 00413000 * EXIT ROUTINE @Z30OE78*/ 00414000 L BLKPTR,@CV00046 0233 00415000 * GEN REFS(BLKPTR,STAEPARM); 0234 00416000 * /* HOOK UP ESTAE EXIT @Z30OE78*/ 00417000 ESTAE (BLKPTR),PARAM=STAEPARM,PURGE=HALT,ASYNCH=NO, @Z30OE78CC00418000 TERM=YES @Z30OE78 00419000 * OPENPTR=ADDR(OPENLST); /* INITIALIZE POINTER TO @Y30OE78 00420000 * FIRST OPEN LIST @Y30OE78*/ 00421000 LA @08,OPENLST 0235 00422000 ST @08,OPENPTR 0235 00423000 * IF ADS#=ZERO THEN /* IF DIRECT MODE, BUMP @Y30OE78*/ 00424000 ICM @03,15,ADS# 0236 00425000 BNZ @RF00236 0236 00426000 * OPENPTR=OPENPTR+ /* PAST FIRST TWO LISTS @Y30OE78*/ 00427000 * 2*LENGTH(OPNLST); /* @Y30OE78*/ 00428000 AH @08,@CH00164 0237 00429000 ST @08,OPENPTR 0237 00430000 * IF RDER3540=OFF THEN /* IF RDER IS 3540, BUMP @Y30OE78*/ 00431000 @RF00236 TM RDER3540,B'00100000' 0238 00432000 BNZ @RF00238 0238 00433000 * OPENPTR=OPENPTR+ /* PAST ONE MORE LIST @Y30OE78*/ 00434000 * LENGTH(OPNLST); /* @Y30OE78*/ 00435000 LA @08,8 0239 00436000 AL @08,OPENPTR 0239 00437000 ST @08,OPENPTR 0239 00438000 * PARMPTR=OPENPTR; /* PASS OPENPTR @Y30OE78*/ 00439000 @RF00238 L PARMPTR,OPENPTR 0240 00440000 * GEN REFS(PARMPTR) /* OPEN REQUIRED DCBS @Y30OE78*/ 00441000 * (OPEN MF=(E,(PARMPTR)));/* @Y30OE78*/ 00442000 OPEN MF=(E,(PARMPTR)) 00443000 * DCBPTR=INDCBAD; /* GET INPUT DCB @Y30OE78*/ 00444000 L @08,OPENPTR 0242 00445000 SLR @03,@03 0242 00446000 ICM @03,7,INDCBAD(@08) 0242 00447000 ST @03,DCBPTR 0242 00448000 * IF DCBOFOPN^=ON THEN /* IF INPUT OPEN FAILED @Y30OE78*/ 00449000 TM DCBOFOPN+40(@03),B'00010000' 0243 00450000 BO @RF00243 0243 00451000 * DO; /* PREPARE ERROR EXIT @Y30OE78*/ 00452000 * RTNCODE=TERMERR; /* SET BAD RETURN CODE @Y30OE78*/ 00453000 MVI RTNCODE,X'08' 0245 00454000 * MSGIDEX=M549; /* SET MSG INDEX @Y30OE78*/ 00455000 MVI MSGIDEX,X'04' 0246 00456000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00457000 MVI MSGTYPE,X'01' 0247 00458000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00459000 MVI DDNK,X'07' 0248 00460000 * DDN=DDNAME(RDER); /* SET DD NAME VALUE @Y30OE78*/ 00461000 MVC DDN(8),DDNAME 0249 00462000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARM LIST @Y30OE78*/ 00463000 LA PARMPTR,MSGINT 0250 00464000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00465000 L @15,@CV00048 0251 00466000 BALR @14,@15 0251 00467000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00468000 MVI DDNK,X'00' 0252 00469000 * END; /* @Y30OE78*/ 00470000 * DCBPTR=OUTDCBAD; /* GET OUTPUT DCB @Y30OE78*/ 00471000 @RF00243 L @08,OPENPTR 0254 00472000 SLR @03,@03 0254 00473000 ICM @03,7,OUTDCBAD(@08) 0254 00474000 ST @03,DCBPTR 0254 00475000 * IF DCBOFOPN^=ON THEN /* IF OUTPUT OPEN FAILED @Y30OE78*/ 00476000 TM DCBOFOPN+40(@03),B'00010000' 0255 00477000 BO @RF00255 0255 00478000 * DO; /* PREPARE ERROR EXIT @Y30OE78*/ 00479000 * RTNCODE=TERMERR; /* SET RETURN CODE @Y30OE78*/ 00480000 MVI RTNCODE,X'08' 0257 00481000 * MSGIDEX=M549; /* SET MSG INDEX @Y30OE78*/ 00482000 MVI MSGIDEX,X'04' 0258 00483000 * MSGTYPE=MTYPWTO; /* SET MSG TYPE @Y30OE78*/ 00484000 MVI MSGTYPE,X'01' 0259 00485000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00486000 MVI DDNK,X'07' 0260 00487000 * IF ADS#^=ZERO THEN /* IF MERGE MODE, @Y30OE78*/ 00488000 ICM @08,15,ADS# 0261 00489000 BZ @RF00261 0261 00490000 * DDN=DDNAME(UT3); /* SET DDN TO SYSUT3 @Y30OE78*/ 00491000 MVC DDN(8),DDNAME+36 0262 00492000 * ELSE /* IF DIRECT MODE, @Y30OE78*/ 00493000 * DDN=DDNAME(UT2); /* SET DDN TO SYSUT2 @Y30OE78*/ 00494000 B @RC00261 0263 00495000 @RF00261 MVC DDN(8),DDNAME+24 0263 00496000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARM LIST @Y30OE78*/ 00497000 @RC00261 LA PARMPTR,MSGINT 0264 00498000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00499000 L @15,@CV00048 0265 00500000 BALR @14,@15 0265 00501000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00502000 MVI DDNK,X'00' 0266 00503000 * END; /* @Y30OE78*/ 00504000 * IF RTNCODE=NOERR THEN /* IF ERROR FREE,CONTINU @Y30OE78*/ 00505000 @RF00255 CLI RTNCODE,0 0268 00506000 BNE @RF00268 0268 00507000 * DO; /* @Y30OE78*/ 00508000 * IF RDER3540=ON THEN /* IF RDER WAS 3540 @Y30OE78*/ 00509000 TM RDER3540,B'00100000' 0270 00510000 BNO @RF00270 0270 00511000 * DO; /* MUST OPEN DEVICE @Y30OE78*/ 00512000 * DCBPTR=ADDR(RDEREX);/* PASS DCB PTR @Y30OE78*/ 00513000 LA @08,RDEREX 0272 00514000 ST @08,DCBPTR 0272 00515000 * DCBAMIN=ON; /* OPEN FOR INPUT @Y30OE78*/ 00516000 OI DCBAMIN+16(@08),B'00000010' 0273 00517000 * PARMPTR=DCBPTR; /* POINT TO DCB @Y30OE78*/ 00518000 LR PARMPTR,@08 0274 00519000 * CALL IOEDKOPN; /* CALL 3540 DEVICE OPEN @Y30OE78*/ 00520000 L @15,@CV00051 0275 00521000 BALR @14,@15 0275 00522000 * RFY 0276 00523000 * RTNCDREG RSTD; /* @Y30OE78*/ 00524000 * IF RTNCDREG=ZERO THEN/* IF SUCCESSFUL, @Y30OE78*/ 00525000 LTR RTNCDREG,RTNCDREG 0277 00526000 BNZ @RF00277 0277 00527000 * DO; /* PREPARE AMWORKAR @Y30OE78*/ 00528000 * RFY 0279 00529000 * RTNCDREG UNRSTD;/* @Y30OE78*/ 00530000 * EXLSYNP=ADDR(RDERSYN);/* SET SYNAD ADDRESS 0280 00531000 * @Y30OE78*/ 00532000 L @08,DCBPTR 0280 00533000 SLR @03,@03 0280 00534000 ICM @03,7,DCBAMWKA+16(@08) 0280 00535000 LA @08,RDERSYN 0280 00536000 ST @08,EXLSYNP(,@03) 0280 00537000 * EXLEODP=ADDR(RDEREOD);/* SET EODAD ADDRESS 0281 00538000 * @Y30OE78*/ 00539000 LA @08,RDEREOD 0281 00540000 ST @08,EXLEODP(,@03) 0281 00541000 * RPLAREA=ADDR(RECJCL);/* SET ADDRESS OF @Y30OE78 00542000 * RECORD WORK AREA @Y30OE78*/ 00543000 LA @08,RECJCL 0282 00544000 ST @08,RPLAREA(,@03) 0282 00545000 * ACBLRECL=LENGTH(RECJCL);/* SET REC LENGTH 0283 00546000 * @Y30OE78*/ 00547000 MVC ACBLRECL(2,@03),@CH00248 0283 00548000 * END; /* @Y30OE78*/ 00549000 * ELSE /* IF ERROR, @Y30OE78*/ 00550000 * DO; /* PREPARE ERROR EXIT @Y30OE78*/ 00551000 B @RC00277 0285 00552000 @RF00277 DS 0H 0286 00553000 * RTNCODE=TERMERR;/* SET RETURN CODE @Y30OE78*/ 00554000 MVI RTNCODE,X'08' 0286 00555000 * MSGIDEX=M549; /* SET MSG INDEX @Y30OE78*/ 00556000 MVI MSGIDEX,X'04' 0287 00557000 * MSGTYPE=MTYPWTO;/* SET MSG TYPE @Y30OE78*/ 00558000 MVI MSGTYPE,X'01' 0288 00559000 * DDNK=DDNV; /* SET DDN KEY @Y30OE78*/ 00560000 MVI DDNK,X'07' 0289 00561000 * DDN=DDNAME(RDER);/* SET DDN TO IEFRDER @Y30OE78*/ 00562000 MVC DDN(8),DDNAME 0290 00563000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARM LIST 0291 00564000 * @Y30OE78*/ 00565000 LA PARMPTR,MSGINT 0291 00566000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 00567000 L @15,@CV00048 0292 00568000 BALR @14,@15 0292 00569000 * DDNK=SKIPV; /* RESET DDN KEY TO SKIP @Y30OE78*/ 00570000 MVI DDNK,X'00' 0293 00571000 * END; /* @Y30OE78*/ 00572000 * END; /* @Y30OE78*/ 00573000 * ELSE /* RDER WILL USE QSAM @Z30OE78*/ 00574000 * RABEX=ADDR(RDERABEX); /* CAUSE ANY EOV ABEND @Z30OE78 00575000 * TO BE REGARDED AS AN @Z30OE78 00576000 * I/O ERROR @Z30OE78*/ 00577000 B @RC00270 0296 00578000 @RF00270 LA @08,RDERABEX 0296 00579000 STCM @08,7,RABEX 0296 00580000 * IF RTNCODE=NOERR THEN /* IF ERROR FREE, @Y30OE78*/ 00581000 @RC00270 CLI RTNCODE,0 0297 00582000 BNE @RF00297 0297 00583000 * DO; /* CONTINUE PROCESSING @Y30OE78*/ 00584000 * IF ADS#^=ZERO THEN /* IF MERGE MODE, @Y30OE78*/ 00585000 ICM @08,15,ADS# 0299 00586000 BZ @RF00299 0299 00587000 * DO; /* MUST PREPARE BUFFERS @Y30OE78*/ 00588000 * UABEX=ADDR(UT3OABEX);/* CAUSE ANY EOV @Z30OE78 00589000 * ABEND TO BE REGARDED @Z30OE78 00590000 * AS AN I/O ERROR @Z30OE78*/ 00591000 LA @08,UT3OABEX 0301 00592000 STCM @08,7,UABEX 0301 00593000 * BUFCBPTR=ADDR(BUFCB1);/* GET BUF CNTRL AREA 0302 00594000 * @Y30OE78*/ 00595000 LA @08,BUFCB1 0302 00596000 ST @08,BUFCBPTR 0302 00597000 * DO I=1 TO 2; /* PROCESS BOTH BUFFERS @Y30OE78*/ 00598000 LA I,1 0303 00599000 @DL00303 DS 0H 0304 00600000 * GEN REFS(UT3BPOUT,PARMPTR)/* GET BUFFER 0304 00601000 * @Y30OE78*/ 00602000 * (GETBUF UT3BPOUT,PARMPTR);/* POINTER 0304 00603000 * @Y30OE78*/ 00604000 GETBUF UT3BPOUT,PARMPTR 00605000 * BUFPTR=PARMPTR;/* SAVE BUFFER PTR IN @Y30OE78 00606000 * CONTROL ELEMENT @Y30OE78*/ 00607000 L @08,BUFCBPTR 0305 00608000 L @05,BUFELPTR(,@08) 0305 00609000 ST PARMPTR,BUFPTR(,@05) 0305 00610000 * BLKLEN=LENGTH(BDW);/* INITIALIZE BLK LEN 0306 00611000 * @Y30OE78*/ 00612000 L @03,BUFCBPTR 0306 00613000 L @03,BUFELPTR(,@03) 0306 00614000 L @03,BUFPTR(,@03) 0306 00615000 MVC BLKLEN(2,@03),@CH00056 0306 00616000 * WRIND=NOTWRIT;/* INDICATE BUFFER NOT @Y30OE78 00617000 * WRITTEN YET @Y30OE78*/ 00618000 MVC WRIND(2,@03),@CH00193 0307 00619000 * BUFELPTR=BUFELNXT;/* GET NEXT BUFFR ELMNT 0308 00620000 * @Y30OE78*/ 00621000 L @05,BUFELNXT(,@05) 0308 00622000 ST @05,BUFELPTR(,@08) 0308 00623000 * END; /* @Y30OE78*/ 00624000 AH I,@CH00061 0309 00625000 CH I,@CH00135 0309 00626000 BNH @DL00303 0309 00627000 * RECPTR=ADDR(RECAREA);/* SET RECPTR TO FIRST 0310 00628000 * @Y30OE78 00629000 * RECORD SLOT IN FIRST @Y30OE78 00630000 * BUFFER @Y30OE78*/ 00631000 L @08,BUFCBPTR 0310 00632000 L @03,BUFELPTR(,@08) 0310 00633000 L @03,BUFPTR(,@03) 0310 00634000 LA @03,RECAREA(,@03) 0310 00635000 ST @03,RECPTR(,@08) 0310 00636000 * END; /* @Y30OE78*/ 00637000 * DO WHILE(IJSCERR=OFF&/* IF NO ERRORS AND @Y30OE78*/ 00638000 * INERR=OFF& /* @Y30OE78*/ 00639000 * INEOF=OFF& /* EOD NOT HIT,PROCESS @Y30OE78*/ 00640000 * UT2SYNI=OFF& /* THE @Y30OE78*/ 00641000 * UT3SYN=OFF); /* NEXT JCL RECORD @Y30OE78*/ 00642000 * 0312 00643000 @RF00299 B @DE00312 0312 00644000 @DL00312 DS 0H 0313 00645000 * /***************************************************/ 00646000 * /* */ 00647000 * /* START SEGMENT-GET/WRITE JCL @Y30OE78*/ 00648000 * /* */ 00649000 * /***************************************************/ 00650000 * 0313 00651000 * IF RDER3540=ON THEN/* IF RDER IS 3540, @Y30OE78*/ 00652000 TM RDER3540,B'00100000' 0313 00653000 BNO @RF00313 0313 00654000 * DO; /* MUST USE DISKETTE GET @Y30OE78*/ 00655000 * PARMPTR=ADDR(RDEREX);/* POINT TO DCB @Y30OE78*/ 00656000 LA PARMPTR,RDEREX 0315 00657000 * CALL IOEDKGET;/* DO DISKETTE GET @Y30OE78*/ 00658000 L @15,@CV00049 0316 00659000 BALR @14,@15 0316 00660000 * END; /* @Y30OE78*/ 00661000 * ELSE /* IF RDER IS NOT 3540, @Y30OE78*/ 00662000 * GEN REFS(RDERQS,RECA)/* USE QSAM GET @Y30OE78*/ 00663000 * (GET RDERQS,RECA);/* @Y30OE78*/ 00664000 B @RC00313 0318 00665000 @RF00313 DS 0H 0318 00666000 GET RDERQS,RECA 00667000 * GO TO IJGETCHK; /* BRANCH PAST EOD ENTRY @Y30OE78*/ 00668000 B IJGETCHK 0319 00669000 *RDEREOD: /* READER EODAD EXIT @Y30OE78*/ 00670000 * IF RDER3540=ON THEN/* IF INPUT DEV IS 3540 @Y30OE78*/ 00671000 RDEREOD TM RDER3540,B'00100000' 0320 00672000 BNO @RF00320 0320 00673000 * DO; /* @Y30OE78*/ 00674000 * DCBPTR=ADDR(RDEREX);/* GET AMWORKAR @Y30OE78 00675000 * ADDRESSIBILITY @Y30OE78*/ 00676000 LA @08,RDEREX 0322 00677000 ST @08,DCBPTR 0322 00678000 * IF RPLFDBK=GOODEOD THEN/* IF VALID EOD @Y30OE78*/ 00679000 SLR @03,@03 0323 00680000 ICM @03,7,DCBAMWKA+16(@08) 0323 00681000 CLC RPLFDBK(3,@03),@CF00363+1 0323 00682000 BNE @RF00323 0323 00683000 * INEOF=ON; /* SET EOD INDICATOR @Y30OE78*/ 00684000 OI INEOF,B'00010000' 0324 00685000 * ELSE /* IF EOD WITH ERROR @Y30OE78*/ 00686000 * INERR=ON; /* SET ERROR INDICATOR @Y30OE78*/ 00687000 B @RC00323 0325 00688000 @RF00323 OI INERR,B'00001000' 0325 00689000 * END; /* @Y30OE78*/ 00690000 * ELSE /* OTHERWISE, @Y30OE78*/ 00691000 * INEOF=ON; /* SET EOD INDICATOR @Y30OE78*/ 00692000 B @RC00320 0327 00693000 @RF00320 OI INEOF,B'00010000' 0327 00694000 *IJGETCHK: /* NORMAL PROCESSING @Y30OE78 00695000 * AFTER GET RESUMES @Y30OE78*/ 00696000 * IF INEOF=OFF& /* IF NO INPUT @Y30OE78*/ 00697000 * INERR=OFF THEN/* ERROR ENCOUNTERED, @Y30OE78*/ 00698000 @RC00320 DS 0H 0328 00699000 IJGETCHK TM INEOF,B'00011000' 0328 00700000 BNZ @RF00328 0328 00701000 * DO; /* SCAN JCL RECORD @Y30OE78*/ 00702000 * 0329 00703000 * /***********************************************/ 00704000 * /* */ 00705000 * /* START SEGMENT - PROCESS JCL RECORD @Y30OE78*/ 00706000 * /* */ 00707000 * /***********************************************/ 00708000 * 0330 00709000 * RECSCAN=OFF; /* INITIALIZE SCAN @Y30OE78 00710000 * SWITCH TO OFF @Y30OE78*/ 00711000 NI RECSCAN,B'11101111' 0330 00712000 * RDWLNA=LENGTH(RECJCL)+/* INITIALIZE RDW LENGTH 00713000 * @Y30OE78*/ 00714000 * LENGTH(RDWA);/* FOR JCL RECORD WITH 0331 00715000 * @Y30OE78 00716000 * NO CONTROL INFO @Y30OE78*/ 00717000 MVC RDWLNA(2),@CH01598 0331 00718000 * IF ISDMODE=OFF THEN/* IF NOT IN INSTREAM 0332 00719000 * @Y30OE78 00720000 * DATA MODE, @Y30OE78*/ 00721000 TM ISDMODE,B'10000000' 0332 00722000 BNZ @RF00332 0332 00723000 * RECSCAN=ON; /* MUST SCAN RECORD @Y30OE78*/ 00724000 OI RECSCAN,B'00010000' 0333 00725000 * ELSE /* OTHERWISE, @Y30OE78*/ 00726000 * DO; /* CHECK DELIMITERS @Y30OE78*/ 00727000 B @RC00332 0334 00728000 @RF00332 DS 0H 0335 00729000 * IF RECJCL(1:2)=CURDLM THEN/* IF COL 1 & 2 00730000 * IS DLM, @Y30OE78*/ 00731000 CLC RECJCL(2),CURDLM 0335 00732000 BNE @RF00335 0335 00733000 * ISDMODE=OFF;/* GET OUT OF INSTREAM 0336 00734000 * @Y30OE78 00735000 * DATA MODE @Y30OE78*/ 00736000 NI ISDMODE,B'01111111' 0336 00737000 * ELSE /* OTHERWISE CHECK FOR @Y30OE78 00738000 * DELIMIT BY JCL @Y30OE78*/ 00739000 * IF JCLINDAT=OFF&/* IF JCL NOT ALLOWED IN 00740000 * @Y30OE78 00741000 * DATA & @Y30OE78*/ 00742000 * RECJCL(1:2)=SLASHES THEN/* THIS 0337 00743000 * RECORD IS JCL @Y30OE78*/ 00744000 B @RC00335 0337 00745000 @RF00335 TM JCLINDAT,B'01000000' 0337 00746000 BNZ @RF00337 0337 00747000 CLC RECJCL(2),@CC00281 0337 00748000 BNE @RF00337 0337 00749000 * DO; /* TREAT AS DELIMITER @Y30OE78*/ 00750000 * ISDMODE=OFF;/* GET OUT OF ISD MODE 0339 00751000 * @Y30OE78*/ 00752000 * RECSCAN=ON;/* ALSO SCAN JCL STMT 0340 00753000 * @Y30OE78*/ 00754000 OI RECSCAN,B'00010000' 0340 00755000 NI ISDMODE,B'01111111' 0340 00756000 * END; /* @Y30OE78*/ 00757000 * END; /* @Y30OE78*/ 00758000 @RF00337 DS 0H 0342 00759000 @RC00335 DS 0H 0343 00760000 * IF RECSCAN=ON THEN/* IF RECORD MUST BE @Y30OE78*/ 00761000 @RC00332 TM RECSCAN,B'00010000' 0343 00762000 BNO @RF00343 0343 00763000 * DO; /* SCANNED, DO IT @Y30OE78*/ 00764000 * 0344 00765000 * /*******************************************/ 00766000 * /* */ 00767000 * /* START SEGMENT - SCAN JCL RECORD @Y30OE78*/ 00768000 * /* */ 00769000 * /*******************************************/ 00770000 * 0345 00771000 * NAMELEN=ZERO;/* INITIALIZE NULL NAME 0345 00772000 * @Y30OE78*/ 00773000 SLR @04,@04 0345 00774000 LR NAMELEN,@04 0345 00775000 * OPNDPTR=ZERO;/* INIT NO OPERAND @Y30OE78*/ 00776000 LR OPNDPTR,@04 0346 00777000 * VERBPTR=ZERO;/* INIT NO VERB @Y30OE78*/ 00778000 LR VERBPTR,@04 0347 00779000 * CMCONT=OFF;/* RESET SWITCHES THAT @Y30OE78*/ 00780000 * OPCONT=OFF;/* HAVE MEANING ON A @Y30OE78*/ 00781000 * NULL=OFF; /* JCL RECORD BASIS @Y30OE78*/ 00782000 * JCL=OFF; /* @Y30OE78*/ 00783000 * ATOPND=OFF;/* @Y30OE78*/ 00784000 * COMMENT=OFF;/* @Y30OE78*/ 00785000 NI CMCONT,B'00000110' 0353 00786000 * BYPVERB=OFF;/* @Y30OE78*/ 00787000 * QUOTE=OFF;/* @Y30OE78*/ 00788000 NI BYPVERB,B'11110110' 0355 00789000 * IF RECJCL(1:2)=SLASHES THEN/* IF RECORD IS 00790000 * A JCL @Y30OE78*/ 00791000 CLC RECJCL(2),@CC00281 0356 00792000 BNE @RF00356 0356 00793000 * DO; /* RECORD, SCAN FOR @Y30OE78 00794000 * NAME FIELD @Y30OE78*/ 00795000 * JCL=ON;/* SET JCL INDICATOR @Y30OE78*/ 00796000 OI JCL,B'00100000' 0358 00797000 * IF RECJCL(3)=CSTAR THEN/* CHECK FOR 0359 00798000 * COMMENT @Y30OE78*/ 00799000 CLI RECJCL+2,C'*' 0359 00800000 BNE @RF00359 0359 00801000 * DO; /* JCL STATEMENT @Y30OE78*/ 00802000 * COMMENT=ON;/* SET COMMENT SWITCH 0361 00803000 * @Y30OE78*/ 00804000 OI COMMENT,B'00001000' 0361 00805000 * RECSCAN=OFF;/* INDICATE SCAN DONE 00806000 * @Y30OE78*/ 00807000 NI RECSCAN,B'11101111' 0362 00808000 * END;/* @Y30OE78*/ 00809000 * ELSE /* IF NOT COMMENT @Y30OE78*/ 00810000 * CALL NAMESCAN;/* SCAN FOR NAME 0364 00811000 * @Y30OE78*/ 00812000 B @RC00359 0364 00813000 @RF00359 BAL @14,NAMESCAN 0364 00814000 * END; /* @Y30OE78*/ 00815000 * ELSE /* IF NOT JCL STMT, @Y30OE78*/ 00816000 * DO; /* RESET JCL STATUS @Y30OE78*/ 00817000 B @RC00356 0366 00818000 @RF00356 DS 0H 0367 00819000 * CMCONTEX=OFF;/* SWITCHES @Y30OE78*/ 00820000 * OPCONTEX=OFF;/* @Y30OE78*/ 00821000 NI CMCONTEX,B'11111001' 0368 00822000 * RECSCAN=OFF;/* END SCAN OF STMT 0369 00823000 * @Y30OE78*/ 00824000 NI RECSCAN,B'11101111' 0369 00825000 * END; /* @Y30OE78*/ 00826000 * IF RECSCAN=ON&/* IF SCAN IS TO BE @Y30OE78*/ 00827000 * BYPVERB=OFF THEN/* CONTINUED AND VERB 00828000 * @Y30OE78 00829000 * IS TO SCANNED, @Y30OE78*/ 00830000 @RC00356 TM RECSCAN,B'00010000' 0371 00831000 BNO @RF00371 0371 00832000 TM BYPVERB,B'00001000' 0371 00833000 BNZ @RF00371 0371 00834000 * DO; /* VERBSCAN PROCESSING @Y30OE78*/ 00835000 * DO K=MIN(K,LASTCOL) TO LASTCOL WHILE/* 00836000 * SCAN TO NON- @Y30OE78*/ 00837000 * RECJCL(K)=BLANK;/* BLANK AFTER 0373 00838000 * NAME @Y30OE78*/ 00839000 L @04,K 0373 00840000 LA @03,71 0373 00841000 CR @04,@03 0373 00842000 BNH *+6 00843000 LR @04,@03 0373 00844000 B @DE00373 0373 00845000 @DL00373 LA @03,RECJCL-1(@04) 0373 00846000 CLI 0(@03),C' ' 0373 00847000 BNE @DC00373 0373 00848000 * END; /* @Y30OE78*/ 00849000 AH @04,@CH00061 0374 00850000 @DE00373 ST @04,K 0374 00851000 CH @04,@CH00200 0374 00852000 BNH @DL00373 0374 00853000 @DC00373 DS 0H 0375 00854000 * VERBPTR=K;/* SAVE VERB POINTER @Y30OE78*/ 00855000 L @04,K 0375 00856000 LR VERBPTR,@04 0375 00857000 * DO K=MIN(K,LASTCOL) TO LASTCOL WHILE/* 00858000 * SCAN PAST @Y30OE78*/ 00859000 * RECJCL(K)^=BLANK;/* VERB @Y30OE78*/ 00860000 LA @00,71 0376 00861000 CR @04,@00 0376 00862000 BNH *+6 00863000 LR @04,@00 0376 00864000 B @DE00376 0376 00865000 @DL00376 LA @15,RECJCL-1(@04) 0376 00866000 CLI 0(@15),C' ' 0376 00867000 BE @DC00376 0376 00868000 * END; /* @Y30OE78*/ 00869000 AH @04,@CH00061 0377 00870000 @DE00376 ST @04,K 0377 00871000 CH @04,@CH00200 0377 00872000 BNH @DL00376 0377 00873000 @DC00376 DS 0H 0378 00874000 * DO K=MIN(K,LASTCOL) TO LASTCOL WHILE/* 00875000 * SCAN TO @Y30OE78*/ 00876000 * RECJCL(K)=BLANK;/* OPERAND 0378 00877000 * @Y30OE78*/ 00878000 L @04,K 0378 00879000 LA @00,71 0378 00880000 CR @04,@00 0378 00881000 BNH *+6 00882000 LR @04,@00 0378 00883000 B @DE00378 0378 00884000 @DL00378 LA @15,RECJCL-1(@04) 0378 00885000 CLI 0(@15),C' ' 0378 00886000 BNE @DC00378 0378 00887000 * END; /* @Y30OE78*/ 00888000 AH @04,@CH00061 0379 00889000 @DE00378 ST @04,K 0379 00890000 CH @04,@CH00200 0379 00891000 BNH @DL00378 0379 00892000 @DC00378 DS 0H 0380 00893000 * IF K<=LASTCOL THEN/* IF OPERAND FOUND, 00894000 * @Y30OE78*/ 00895000 L @04,K 0380 00896000 CH @04,@CH00200 0380 00897000 BH @RF00380 0380 00898000 * ATOPND=ON;/* SET SWITCH TO @Y30OE78 00899000 * INDICATE OPND FOUND @Y30OE78*/ 00900000 OI ATOPND,B'00000001' 0381 00901000 * END; /* @Y30OE78*/ 00902000 @RF00380 DS 0H 0383 00903000 * IF RECSCAN=ON THEN/* IF SCAN IS TO BE CON- 00904000 * @Y30OE78 00905000 * TINUED, THEN @Y30OE78*/ 00906000 @RF00371 TM RECSCAN,B'00010000' 0383 00907000 BNO @RF00383 0383 00908000 * CALL OPNDSCAN;/* SCAN OPERAND @Y30OE78*/ 00909000 * 0384 00910000 BAL @14,OPNDSCAN 0384 00911000 * /*******************************************/ 00912000 * /* */ 00913000 * /* END SEGMENT - SCAN JCL RECORD @Y30OE78*/ 00914000 * /* */ 00915000 * /*******************************************/ 00916000 * 0385 00917000 * IF VERBPTR=ZERO|/* IF NO VERB FOUND, 0385 00918000 * @Y30OE78*/ 00919000 * VERBPTR>LASTCOL THEN/* @Y30OE78*/ 00920000 @RF00383 LTR VERBPTR,VERBPTR 0385 00921000 BZ @RT00385 0385 00922000 CH VERBPTR,@CH00200 0385 00923000 BNH @RF00385 0385 00924000 @RT00385 DS 0H 0386 00925000 * DO; /* CHECK FOR CONTIN @Y30OE78*/ 00926000 * IF JOBCONT=ON THEN/* IF JOB 0387 00927000 * CONTINUATION, @Y30OE78*/ 00928000 TM JOBCONT,B'00000100' 0387 00929000 BNO @RF00387 0387 00930000 * CALL JOBPROC;/* PROCESS IT @Y30OE78*/ 00931000 BAL @14,JOBPROC 0388 00932000 * ELSE /* OTHERWISE CHECK @Y30OE78*/ 00933000 * IF DDCONT=ON THEN/* FOR DD 0389 00934000 * CONTINUATION @Y30OE78*/ 00935000 B @RC00387 0389 00936000 @RF00387 TM DDCONT,B'00000010' 0389 00937000 BNO @RF00389 0389 00938000 * CALL DDPROC;/* PROCESS IT @Y30OE78*/ 00939000 BAL @14,DDPROC 0390 00940000 * END; /* @Y30OE78*/ 00941000 * ELSE /* OTHERWISE, CHECK VERB @Y30OE78*/ 00942000 * IF RECJCL(VERBPTR:VERBPTR+LENGTH(JOBVERB)-1 00943000 * )= /* @Y30OE78*/ 00944000 * JOBVERB THEN/* IF VERB IS JOB 0392 00945000 * @Y30OE78*/ 00946000 B @RC00385 0392 00947000 @RF00385 LA @04,RECJCL-1(VERBPTR) 0392 00948000 CLC 0(4,@04),@CC00323 0392 00949000 BNE @RF00392 0392 00950000 * CALL JOBPROC;/* PROCESS JOB VERB 0393 00951000 * @Y30OE78*/ 00952000 BAL @14,JOBPROC 0393 00953000 * ELSE /* CHECK OTHER VERBS @Y30OE78*/ 00954000 * IF RECJCL(VERBPTR:VERBPTR+LENGTH(DDVERB)- 00955000 * 1)=/* @Y30OE78*/ 00956000 * DDVERB THEN/* IF VERB IS DD 0394 00957000 * @Y30OE78*/ 00958000 B @RC00392 0394 00959000 @RF00392 LA @08,RECJCL-1(VERBPTR) 0394 00960000 CLC 0(3,@08),@CC00321 0394 00961000 BNE @RF00394 0394 00962000 * CALL DDPROC;/* PROCESS DD VERB 0395 00963000 * @Y30OE78*/ 00964000 BAL @14,DDPROC 0395 00965000 * END; /* @Y30OE78*/ 00966000 * 0396 00967000 @RF00394 DS 0H 0396 00968000 @RC00392 DS 0H 0396 00969000 @RC00385 DS 0H 0397 00970000 * /***********************************************/ 00971000 * /* */ 00972000 * /* END SEGMENT - PROCESS JCL RECORD @Y30OE78*/ 00973000 * /* */ 00974000 * /***********************************************/ 00975000 * 0397 00976000 * IF STARTJOB=OFF THEN/* IF NOT SCANNING TO 0397 00977000 * @Z30OE78 00978000 * JOBNAME @Z30OE78*/ 00979000 @RF00343 TM STARTJOB,B'10000000' 0397 00980000 BNZ @RF00397 0397 00981000 * DO; /* WRITE JCL RECORD @Y30OE78*/ 00982000 * IF ADS#=ZERO THEN/* IF DIRECT MODE, 0399 00983000 * @Y30OE78*/ 00984000 ICM @08,15,ADS# 0399 00985000 BNZ @RF00399 0399 00986000 * DO; /* @Y30OE78*/ 00987000 * BDWLNA=RDWLNA+LENGTH(BDWA);/* SET BDW 00988000 * LENGTH @Y30OE78*/ 00989000 LA @08,4 0401 00990000 AH @08,RDWLNA 0401 00991000 STH @08,BDWLNA 0401 00992000 * GEN REFS(DECB7); 0402 00993000 * /* USE BSAM WRITE @Y30OE78*/ 00994000 WRITE DECB7,SF,MF=E WRITE RECORD @Y30OE78 00995000 CHECK DECB7 WAIT FOR COMPLETION @Y30OE78 00996000 * END; /* @Y30OE78*/ 00997000 * ELSE /* OTHERWISE USE BPAMPUT @Y30OE78*/ 00998000 * CALL BPAMPUT;/* ROUTINE TO BLOCK AND 0404 00999000 * @Y30OE78 01000000 * WRITE IF NECESSARY @Y30OE78*/ 01001000 B @RC00399 0404 01002000 @RF00399 BAL @14,BPAMPUT 0404 01003000 * END; /* @Y30OE78*/ 01004000 @RC00399 DS 0H 0406 01005000 * END; /* @Y30OE78*/ 01006000 * 0406 01007000 @RF00397 DS 0H 0407 01008000 * /***************************************************/ 01009000 * /* */ 01010000 * /* END SEGMENT-GET/WRITE JCL @Y30OE78*/ 01011000 * /* */ 01012000 * /***************************************************/ 01013000 * 0407 01014000 * END; /* @Y30OE78*/ 01015000 @RF00328 DS 0H 0407 01016000 @DE00312 TM IJSCERR,B'00011111' 0407 01017000 BZ @DL00312 0407 01018000 * IF INERR=ON THEN /* IF ERRORS HAPPENED, @Y30OE78*/ 01019000 TM INERR,B'00001000' 0408 01020000 BNO @RF00408 0408 01021000 * DO; /* @Y30OE78*/ 01022000 * JOBDEL=ON; /* INDICATE TO DELETE @Z30OE78 01023000 * LAST JOB IN STREAM @Z30OE78*/ 01024000 OI JOBDEL,B'00100000' 0410 01025000 * RTNCODE=PARTERR;/* SET RETURN CODE @Y30OE78*/ 01026000 MVI RTNCODE,X'04' 0411 01027000 * MSGIDEX=M548; /* SET MSG INDEX @Y30OE78*/ 01028000 MVI MSGIDEX,X'0A' 0412 01029000 * MSGTYPE=MTYPWTO;/* INDICATE WTO @Y30OE78*/ 01030000 MVI MSGTYPE,X'01' 0413 01031000 * DDDK=DDDV; /* SET DEV ADDR KEY @Y30OE78*/ 01032000 MVI DDDK,X'08' 0414 01033000 * IF DSSDS(RDER)=ON THEN/* IF SUBSYSTEM DS, 0415 01034000 * @Y30OE78*/ 01035000 TM DSSDS,B'01000000' 0415 01036000 BNO @RF00415 0415 01037000 * DDD='JES'; /* INDICATE JES DEVICE @Y30OE78*/ 01038000 MVC DDD(3),@CC01462 0416 01039000 * ELSE /* OTHERWISE, @Y30OE78*/ 01040000 * DDD=DEVPTR(RDER)->UCBNAME;/* GET DEV ADDR 0417 01041000 * @Y30OE78*/ 01042000 B @RC00415 0417 01043000 @RF00415 SLR @08,@08 0417 01044000 ICM @08,7,DEVPTR 0417 01045000 MVC DDD(3),UCBNAME(@08) 0417 01046000 * JJJK=JJJV; /* SET JOBNAME KEY @Y30OE78*/ 01047000 @RC00415 MVI JJJK,X'0B' 0418 01048000 * JJJ=CURJOBNM; /* GET JOBNAME @Y30OE78*/ 01049000 MVC JJJ(8),CURJOBNM 0419 01050000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARAMETERS 0420 01051000 * @Y30OE78*/ 01052000 LA PARMPTR,MSGINT 0420 01053000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 01054000 L @15,@CV00048 0421 01055000 BALR @14,@15 0421 01056000 * DDDK=SKIPV; /* RESET DEV ADDR KEY @Y30OE78*/ 01057000 MVI DDDK,X'00' 0422 01058000 * JJJK=SKIPV; /* RESET JOBNAME KEY @Y30OE78*/ 01059000 MVI JJJK,X'00' 0423 01060000 * END; /* @Y30OE78*/ 01061000 * ELSE /* NOT AN INPUT ERROR @Z30OE78*/ 01062000 * IF IJSCERR=ON THEN/* IF SCAN ERROR, @Z30OE78*/ 01063000 B @RC00408 0425 01064000 @RF00408 TM IJSCERR,B'00000100' 0425 01065000 BNO @RF00425 0425 01066000 * JOBDEL=ON; /* INDICATE TO DELETE @Z30OE78 01067000 * LAST JOB @Z30OE78*/ 01068000 OI JOBDEL,B'00100000' 0426 01069000 * IF ADS#^=ZERO THEN /* IF MERGE MODE @Y30OE78*/ 01070000 @RF00425 DS 0H 0427 01071000 @RC00408 SLR @08,@08 0427 01072000 C @08,ADS# 0427 01073000 BE @RF00427 0427 01074000 * DO; /* MUST FLUSH BUFFERS @Y30OE78*/ 01075000 * IF UT3SYN=OFF THEN/* IF UT3 IS ERROR FREE, 0429 01076000 * @Y30OE78*/ 01077000 TM UT3SYN,B'00000001' 0429 01078000 BNZ @RF00429 0429 01079000 * DO; /* FLUSH BUFFERS @Y30OE78*/ 01080000 * IF BLKLEN>LENGTH(BDW) THEN/* IF RECORD HAS 0431 01081000 * @Y30OE78 01082000 * BEEN PLACED IN BUFFER @Y30OE78*/ 01083000 L @03,BUFCBPTR 0431 01084000 L @03,BUFELPTR(,@03) 0431 01085000 L @15,BUFPTR(,@03) 0431 01086000 LH @00,BLKLEN(,@15) 0431 01087000 CH @00,@CH00056 0431 01088000 BNH @RF00431 0431 01089000 * DO; /* WRITE THE BLOCK @Y30OE78*/ 01090000 * WRIND=ZERO;/* INDICATE WRITE WAS @Z30OE78 01091000 * ISSUED TO BUFFER @Z30OE78*/ 01092000 STH @08,WRIND(,@15) 0433 01093000 * PARMPTR=DECBPTR;/* GET DECBPTR @Y30OE78*/ 01094000 L PARMPTR,DECBPTR(,@03) 0434 01095000 * BLKPTR=BUFPTR;/* GET PTR TO BUFFER 0435 01096000 * @Y30OE78*/ 01097000 LR BLKPTR,@15 0435 01098000 * GEN REFS(PARMPTR,BLKPTR)/* WRITE BUFFER 01099000 * @Y30OE78*/ 01100000 * (WRITE (PARMPTR),SF,,(BLKPTR),MF=E); 01101000 WRITE (PARMPTR),SF,,(BLKPTR),MF=E 01102000 * /* @Y30OE78*/ 01103000 * END; /* @Y30OE78*/ 01104000 * LASTADSN=DSNPTRJ-LENGTH(DSNENTRY);/* SAVE 0438 01105000 * @Y30OE78 01106000 * ADDR OF LAST ENTRY @Y30OE78*/ 01107000 @RF00431 L @08,DSNPTRJ 0438 01108000 LA @15,40 0438 01109000 LR @00,@08 0438 01110000 SLR @00,@15 0438 01111000 ST @00,LASTADSN 0438 01112000 * J=DSNPTRJ-ADDR(DSNENT1);/* CALCULATE @Y30OE78*/ 01113000 L @14,GETMNA 0439 01114000 LA J,DSNENT1(,@14) 0439 01115000 SLR @08,J 0439 01116000 LR J,@08 0439 01117000 * DSNE#=J/LENGTH(DSNENTRY);/* NUMBER OF 0440 01118000 * @Y30OE78 01119000 * COMPLETED DSNTAB @Y30OE78 01120000 * ENTRIES @Y30OE78*/ 01121000 LR @04,J 0440 01122000 SRDA @04,32 0440 01123000 DR @04,@15 0440 01124000 STH @05,DSNE#(,@14) 0440 01125000 * IF JBJCLERR=ON THEN/* IF LAST JOB HAD 0441 01126000 * @Y30OE78 01127000 * JCL ERROR, @Y30OE78*/ 01128000 TM JBJCLERR,B'01000000' 0441 01129000 BNO @RF00441 0441 01130000 * DO DSNPTRJ=LASTADSN TO FRSTADSN/* @Y30OE78*/ 01131000 * BY-LENGTH(DSNENTRY) WHILE/* @Y30OE78*/ 01132000 * JOBNO=CURJNUM;/* MARK DSNTAB @Y30OE78*/ 01133000 ST @00,DSNPTRJ 0442 01134000 B @DE00442 0442 01135000 @DL00442 LR @08,@00 0442 01136000 CLC JOBNO(4,@08),CURJNUM 0442 01137000 BNE @DC00442 0442 01138000 * JOBERR=ON;/* ENTRIES AS ERROR @Y30OE78*/ 01139000 LR @08,@00 0443 01140000 OI JOBERR(@08),B'00010000' 0443 01141000 * END; /* @Y30OE78*/ 01142000 AH @00,@CH01601 0444 01143000 ST @00,DSNPTRJ 0444 01144000 @DE00442 C @00,FRSTADSN 0444 01145000 BNL @DL00442 0444 01146000 @DC00442 DS 0H 0445 01147000 * DO I=1 TO 2 WHILE UT3SYN=OFF;/* @ZA00784 01148000 * WAIT ON BOTH BUFFERS @ZA00784*/ 01149000 @RF00441 LA I,1 0445 01150000 @DL00445 TM UT3SYN,B'00000001' 0445 01151000 BNZ @DC00445 0445 01152000 * BUFELPTR=BUFELNXT;/* GET OTHER BUFFER 0446 01153000 * @Y30OE78*/ 01154000 L @08,BUFCBPTR 0446 01155000 L @05,BUFELPTR(,@08) 0446 01156000 L @05,BUFELNXT(,@05) 0446 01157000 ST @05,BUFELPTR(,@08) 0446 01158000 * IF WRIND=ZERO THEN/* IF BUF WAS WRITTEN 0447 01159000 * @Y30OE78*/ 01160000 L @08,BUFPTR(,@05) 0447 01161000 ICM @03,3,WRIND(@08) 0447 01162000 BNZ @RF00447 0447 01163000 * DO; /* WAIT FOR COMPLETION @Y30OE78*/ 01164000 * PARMPTR=DECBPTR;/* GET DECB PTR 0449 01165000 * @Y30OE78*/ 01166000 L PARMPTR,DECBPTR(,@05) 0449 01167000 * GEN REFS(PARMPTR)/* WAIT @Y30OE78*/ 01168000 * (CHECK (PARMPTR));/* @Y30OE78*/ 01169000 CHECK (PARMPTR) 01170000 * END; /* @Y30OE78*/ 01171000 * END; /* @Y30OE78*/ 01172000 @RF00447 AH I,@CH00061 0452 01173000 CH I,@CH00135 0452 01174000 BNH @DL00445 0452 01175000 @DC00445 DS 0H 0453 01176000 * END; /* @Y30OE78*/ 01177000 * IF UT3SYN=OFF THEN/* IF NO ERRORS @Y30OE78*/ 01178000 @RF00429 TM UT3SYN,B'00000001' 0454 01179000 BNZ @RF00454 0454 01180000 * DO; /* @Y30OE78*/ 01181000 * BLKPTR=ADDR(DSNENT1);/* GET @Y30OE78 01182000 * ENTRY WHICH IS USED @Y30OE78 01183000 * FOR JCL MEMBER @Y30OE78*/ 01184000 L BLKPTR,GETMNA 0456 01185000 LA BLKPTR,DSNENT1(,BLKPTR) 0456 01186000 * RFY 0457 01187000 * RTNCDREG RSTD;/* @Y30OE78*/ 01188000 * GEN REFS(UT3BPOUT,BLKPTR)/* STOW JCL @Y30OE78*/ 01189000 * (STOW UT3BPOUT,(BLKPTR));/* MEMBER 0458 01190000 * @Y30OE78*/ 01191000 STOW UT3BPOUT,(BLKPTR) 01192000 * IF RTNCDREG^=ZERO THEN/* IF STOW ERROR, 0459 01193000 * @Y30OE78*/ 01194000 LTR RTNCDREG,RTNCDREG 0459 01195000 BZ @RF00459 0459 01196000 * DO; /* @Y30OE78*/ 01197000 * RTNCODE=TERMERR;/* SET RETURN CODE 0461 01198000 * @Y30OE78*/ 01199000 MVI RTNCODE,X'08' 0461 01200000 * MSGIDEX=M555;/* SET MSG INDEX @Y30OE78*/ 01201000 MVI MSGIDEX,X'12' 0462 01202000 * MSGTYPE=MTYPWTO;/* INDICATE WTO @Y30OE78*/ 01203000 MVI MSGTYPE,X'01' 0463 01204000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARM 0464 01205000 * @Y30OE78*/ 01206000 LA PARMPTR,MSGINT 0464 01207000 * CALL IOEDKMSG;/* HAVE MSG WRITTEN 0465 01208000 * @Y30OE78*/ 01209000 L @15,@CV00048 0465 01210000 BALR @14,@15 0465 01211000 * END; /* @Y30OE78*/ 01212000 * RFY 0467 01213000 * RTNCDREG UNRSTD;/* @Y30OE78*/ 01214000 @RF00459 DS 0H 0468 01215000 * END; /* @Y30OE78*/ 01216000 * ELSE /* IF UT3 ERROR @Y30OE78*/ 01217000 * DO; /* ISSUE MSG @Y30OE78*/ 01218000 B @RC00454 0469 01219000 @RF00454 DS 0H 0470 01220000 * RTNCODE=TERMERR;/* SET RETURN CODE @Y30OE78*/ 01221000 MVI RTNCODE,X'08' 0470 01222000 * MSGIDEX=M554;/* SET MSG INDEX @Y30OE78*/ 01223000 MVI MSGIDEX,X'0C' 0471 01224000 * MSGTYPE=MTYPWTO;/* MSG TYPE IS WTO @Y30OE78*/ 01225000 MVI MSGTYPE,X'01' 0472 01226000 * DDNK=DDNV; /* SET DDNAME KEY @Y30OE78*/ 01227000 MVI DDNK,X'07' 0473 01228000 * DDN=DDNAME(UT3);/* SET NAME TO SYSUT3 0474 01229000 * @Y30OE78*/ 01230000 MVC DDN(8),DDNAME+36 0474 01231000 * JJJK=JOBLOP;/* DELETE JOB NAME @Y30OE78*/ 01232000 MVI JJJK,X'8B' 0475 01233000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS 0476 01234000 * @Y30OE78*/ 01235000 LA PARMPTR,MSGINT 0476 01236000 * CALL IOEDKMSG;/* HAVE MSG WRITTEN @Y30OE78*/ 01237000 L @15,@CV00048 0477 01238000 BALR @14,@15 0477 01239000 * DDNK=SKIPV; /* RESET DDN KEY @Y30OE78*/ 01240000 MVI DDNK,X'00' 0478 01241000 * JJJK=SKIPV; /* RESET JOBNAME KEY @Y30OE78*/ 01242000 MVI JJJK,X'00' 0479 01243000 * END; /* @Y30OE78*/ 01244000 * END; /* @Y30OE78*/ 01245000 * ELSE /* IF DIRECT MODE @Y30OE78*/ 01246000 * IF UT2SYNI=ON THEN/* IF UT2 ERROR, @Y30OE78*/ 01247000 B @RC00427 0482 01248000 @RF00427 TM UT2SYNI,B'00000010' 0482 01249000 BNO @RF00482 0482 01250000 * DO; /* PROCESS IT @Y30OE78*/ 01251000 * RTNCODE=PARTERR;/* SET RETURN CODE @Y30OE78*/ 01252000 MVI RTNCODE,X'04' 0484 01253000 * MSGIDEX=M554; /* SET MSG INDEX @Y30OE78*/ 01254000 MVI MSGIDEX,X'0C' 0485 01255000 * MSGTYPE=MTYPWTO;/* INDICATE WTO @Y30OE78*/ 01256000 MVI MSGTYPE,X'01' 0486 01257000 * DDNK=DDNV; /* SET DDNAME KEY @Y30OE78*/ 01258000 MVI DDNK,X'07' 0487 01259000 * DDN=DDNAME(UT2);/* SET DDNAME TO SYSUT2 0488 01260000 * @Y30OE78*/ 01261000 MVC DDN(8),DDNAME+24 0488 01262000 * JJJK=JJJV; /* SET JOBNAME KEY @Y30OE78*/ 01263000 MVI JJJK,X'0B' 0489 01264000 * JJJ=CURJOBNM; /* SET JOB NAME @Y30OE78*/ 01265000 MVC JJJ(8),CURJOBNM 0490 01266000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS @Y30OE78*/ 01267000 LA PARMPTR,MSGINT 0491 01268000 * CALL IOEDKMSG;/* HAVE MSG WRITTEN @Y30OE78*/ 01269000 L @15,@CV00048 0492 01270000 BALR @14,@15 0492 01271000 * DDNK=SKIPV; /* RESET KEYS FOR DDNAME @Y30OE78*/ 01272000 MVI DDNK,X'00' 0493 01273000 * JJJK=SKIPV; /* AND JOB NAME @Y30OE78*/ 01274000 MVI JJJK,X'00' 0494 01275000 * END; /* @Y30OE78*/ 01276000 * ELSE /* @Z30OE78*/ 01277000 * IF JOBDEL=ON THEN/* IF LAST JOB IS TO BE @Z30OE78*/ 01278000 B @RC00482 0496 01279000 @RF00482 TM JOBDEL,B'00100000' 0496 01280000 BNO @RF00496 0496 01281000 * DO; /* DELETED @Z30OE78*/ 01282000 * RECJCL=DELCARD;/* PUT DEL CNTRL CARD @Z30OE78 01283000 * IN BUFFER @Z30OE78*/ 01284000 MVI RECJCL+5,C' ' 0498 01285000 MVC RECJCL+6(74),RECJCL+5 0498 01286000 MVC RECJCL(5),DELCARD 0498 01287000 * RDWLNA=LENGTH(RECJCL)+LENGTH(RDWA);/* 0499 01288000 * @Z30OE78*/ 01289000 LA @08,84 0499 01290000 STH @08,RDWLNA 0499 01291000 * BDWLNA=RDWLNA+LENGTH(BDWA);/* @Z30OE78*/ 01292000 AH @08,@CH00056 0500 01293000 STH @08,BDWLNA 0500 01294000 * GEN REFS(DECB7); 0501 01295000 * /*@Z30OE78*/ 01296000 WRITE DECB7,SF,MF=E @Z30OE78 01297000 CHECK DECB7 @Z30OE78 01298000 * END; /* @Z30OE78*/ 01299000 * IF RDER3540=ON THEN /* IF 3540 READER DEVICE #Y30OE78*/ 01300000 @RF00496 DS 0H 0503 01301000 @RC00482 DS 0H 0503 01302000 @RC00427 TM RDER3540,B'00100000' 0503 01303000 BNO @RF00503 0503 01304000 * DO; /* @Y30OE78*/ 01305000 * PARMPTR=ADDR(RDEREX);/* POINT TO DCB @Y30OE78*/ 01306000 LA PARMPTR,RDEREX 0505 01307000 * CALL IOEDKCLS; /* CLOSE 3540 DEVICE @Y30OE78*/ 01308000 L @15,@CV00050 0506 01309000 BALR @14,@15 0506 01310000 * END; /* @Y30OE78*/ 01311000 * END; /* @Y30OE78*/ 01312000 @RF00503 DS 0H 0509 01313000 * IF ADS#^=ZERO THEN /* IF MERGE MODE, CLOSE @Y30OE78 01314000 * RDER FILE ONLY @Y30OE78*/ 01315000 @RF00297 ICM @08,15,ADS# 0509 01316000 BZ @RF00509 0509 01317000 * LSTEND=ON; /* SET LIST DELIMITER AT @Y30OE78 01318000 * RDER ENTRY @Y30OE78*/ 01319000 L @08,OPENPTR 0510 01320000 OI LSTEND(@08),B'10000000' 0510 01321000 * PARMPTR=OPENPTR; /* PASS OPEN LIST PTR @Y30OE78*/ 01322000 @RF00509 L PARMPTR,OPENPTR 0511 01323000 * GEN REFS(PARMPTR) /* CLOSE FILE(S) @Y30OE78*/ 01324000 * (CLOSE MF=(E,(PARMPTR)));/* @Y30OE78*/ 01325000 CLOSE MF=(E,(PARMPTR)) 01326000 * END; /* @Y30OE78*/ 01327000 * 0513 01328000 * /*************************************************************/ 01329000 * /* */ 01330000 * /* END SEGMENT-INPUT JCL @Y30OE78*/ 01331000 * /* */ 01332000 * /*************************************************************/ 01333000 * 0514 01334000 * IF RTNCODE^=TERMERR& /* NO TERMINATE ERR & @Y30OE78*/ 01335000 * ADS#^=ZERO THEN /* IN MERGE MODE, @Y30OE78*/ 01336000 @RF00268 CLI RTNCODE,8 0514 01337000 BE @RF00514 0514 01338000 ICM @08,15,ADS# 0514 01339000 BZ @RF00514 0514 01340000 * DO; /* CONTINUE PROCESSING @Y30OE78*/ 01341000 * 0515 01342000 * /*********************************************************/ 01343000 * /* */ 01344000 * /* START SEGMENT - INPUT ADS @Y30OE78*/ 01345000 * /* */ 01346000 * /*********************************************************/ 01347000 * 0516 01348000 * OPENPTR=ADDR(IALIST); /* POINT TO IA OPEN LIST @Y30OE78*/ 01349000 LA @08,IALIST 0516 01350000 ST @08,OPENPTR 0516 01351000 * DO DSNPTRJ=FRSTADSN TO LASTADSN/* COUNT DATA SET NAME 0517 01352000 * @Y30OE78*/ 01353000 * BY LENGTH(DSNENTRY);/* TABLE ENTRIES @Y30OE78*/ 01354000 L @08,FRSTADSN 0517 01355000 ST @08,DSNPTRJ 0517 01356000 B @DE00517 0517 01357000 @DL00517 DS 0H 0518 01358000 * IF JOBERR=OFF THEN /* THAT MUST BE PROCESSD @Y30OE78*/ 01359000 TM JOBERR(@08),B'00010000' 0518 01360000 BNZ @RF00518 0518 01361000 * DSCNT=DSCNT+1; /* BY IA ROUTINES #Y30OE78*/ 01362000 LA @08,1 0519 01363000 AL @08,DSCNT 0519 01364000 ST @08,DSCNT 0519 01365000 * END; /* #Y30OE78*/ 01366000 @RF00518 LA @08,40 0520 01367000 AL @08,DSNPTRJ 0520 01368000 ST @08,DSNPTRJ 0520 01369000 @DE00517 C @08,LASTADSN 0520 01370000 BNH @DL00517 0520 01371000 * IF DSCNT=ZERO THEN /* IF NO ADS TO READ #Y30OE78*/ 01372000 ICM @08,15,DSCNT 0521 01373000 BNZ @RF00521 0521 01374000 * LSTEND=ON; /* INDICATE ONLY UT3 TO #Y30OE78 01375000 * BE CLOSED #Y30OE78*/ 01376000 L @08,OPENPTR 0522 01377000 OI LSTEND(@08),B'10000000' 0522 01378000 * ELSE /* IF ADS TO READ #Y30OE78*/ 01379000 * DO; /* PROCESS THEM #Y30OE78*/ 01380000 B @RC00521 0523 01381000 @RF00521 DS 0H 0524 01382000 * GEN REFS(DATAEX) /* OPEN DATA DCB #Y30OE78*/ 01383000 * (OPEN (DATAEX));/* #Y30OE78*/ 01384000 OPEN (DATAEX) 01385000 * DCBPTR=ADDR(DATAEX);/* POINT TO DATA DCB #Y30OE78 01386000 * TO PROVIDE ADDRESSI- #Y30OE78 01387000 * BILITY TO DCB AND #Y30OE78 01388000 * AMWORKAREA FOR PRO- #Y30OE78 01389000 * CESSING ALL ADS #Y30OE78*/ 01390000 LA @08,DATAEX 0525 01391000 ST @08,DCBPTR 0525 01392000 * IF DCBOFOPN^=ON THEN/* IF OPEN FAILED, #Y30OE78*/ 01393000 TM DCBOFOPN+40(@08),B'00010000' 0526 01394000 BO @RF00526 0526 01395000 * DO; /* #Y30OE78*/ 01396000 * RTNCODE=TERMERR;/* SET RETURN CODE #Y30OE78*/ 01397000 MVI RTNCODE,X'08' 0528 01398000 * LSTEND=ON; /* INDICATE ONLY UT3 TO #Y30OE78 01399000 * BE CLOSED #Y30OE78*/ 01400000 L @08,OPENPTR 0529 01401000 OI LSTEND(@08),B'10000000' 0529 01402000 * MSGIDEX=M549; /* SET INDEX OF MSG #Y30OE78*/ 01403000 MVI MSGIDEX,X'04' 0530 01404000 * MSGTYPE=MTYPWTO;/* INDICATE WTO #Y30OE78*/ 01405000 MVI MSGTYPE,X'01' 0531 01406000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 01407000 MVI DDNK,X'07' 0532 01408000 * DDN=DDNAME(DATA);/* SET DDNAME TO SYSDATA 0533 01409000 * #Y30OE78*/ 01410000 MVC DDN(8),DDNAME+12 0533 01411000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARAMETERS 0534 01412000 * #Y30OE78*/ 01413000 LA PARMPTR,MSGINT 0534 01414000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 01415000 L @15,@CV00048 0535 01416000 BALR @14,@15 0535 01417000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 01418000 MVI DDNK,X'00' 0536 01419000 * END; /* #Y30OE78*/ 01420000 * ELSE /* OPEN WAS SUCCESSFUL #Y30OE78*/ 01421000 * DO; /* #Y30OE78*/ 01422000 B @RC00526 0538 01423000 @RF00526 DS 0H 0539 01424000 * DCBAMIN=ON; /* SET INPUT INDICATOR #Y30OE78*/ 01425000 L @08,DCBPTR 0539 01426000 OI DCBAMIN+16(@08),B'00000010' 0539 01427000 * PARMPTR=DCBPTR; /* POINT TO DCB #Y30OE78*/ 01428000 LR PARMPTR,@08 0540 01429000 * CALL IOEDKOPN; /* CALL 3540 DEVICE OPEN @Y30OE78*/ 01430000 L @15,@CV00051 0541 01431000 BALR @14,@15 0541 01432000 * EXLSYNP=ADDR(RDERSYN);/* SET SYNAD ADDR @Y30OE78*/ 01433000 L @08,DCBPTR 0542 01434000 SLR @03,@03 0542 01435000 ICM @03,7,DCBAMWKA+16(@08) 0542 01436000 LA @08,RDERSYN 0542 01437000 ST @08,EXLSYNP(,@03) 0542 01438000 * EXLEODP=ADDR(DATAEOD);/* SET EODAD ADDR @Y30OE78*/ 01439000 LA @08,DATAEOD 0543 01440000 ST @08,EXLEODP(,@03) 0543 01441000 * RPLAREA=ADDR(RECA);/* POINT TO RECORD WORKA 0544 01442000 * @Y30OE78*/ 01443000 LA @08,RECA 0544 01444000 ST @08,RPLAREA(,@03) 0544 01445000 * CALL ADSANAL; /* PROCESS PASSBACK FROM @Y30OE78 01446000 * SETDIXKT IN DEV OPEN @Y30OE78*/ 01447000 BAL @14,ADSANAL 0545 01448000 * DO WHILE IADONE=OFF;/* PROCESS ADS INPUT @Y30OE78*/ 01449000 B @DE00546 0546 01450000 @DL00546 DS 0H 0547 01451000 * CALL READDSKT;/* PROCESS INPUT FROM A @Y30OE78 01452000 * SINGLE DISKETTE @Y30OE78*/ 01453000 BAL @14,READDSKT 0547 01454000 * CALL ADSANAL; /* SEE IF FINISHED @Y30OE78*/ 01455000 BAL @14,ADSANAL 0548 01456000 * END; /* @Y30OE78*/ 01457000 @DE00546 TM IADONE,B'10000000' 0549 01458000 BZ @DL00546 0549 01459000 * PARMPTR=ADDR(DATAEX);/* @Y30OE78*/ 01460000 LA PARMPTR,DATAEX 0550 01461000 * CALL IOEDKCLS; /* DEVICE CLOSE DATAEX @Y30OE78*/ 01462000 L @15,@CV00050 0551 01463000 BALR @14,@15 0551 01464000 * END; /* @Y30OE78*/ 01465000 * END; /* @Y30OE78*/ 01466000 @RC00526 DS 0H 0554 01467000 * PARMPTR=ADDR(UT3BPOUT); /* GET OUTPUT DCB @Y30OE78*/ 01468000 @RC00521 LA PARMPTR,UT3BPOUT 0554 01469000 * DO I=1 TO 2; /* PROCESS TWO BUFFERS @Y30OE78*/ 01470000 LA I,1 0555 01471000 @DL00555 DS 0H 0556 01472000 * BLKPTR=BUFPTR; /* GET ADDR OF BUFFER @Y30OE78*/ 01473000 L @08,BUFCBPTR 0556 01474000 L @08,BUFELPTR(,@08) 0556 01475000 L BLKPTR,BUFPTR(,@08) 0556 01476000 * GEN REFS(PARMPTR,BLKPTR)/* FREE ONE BUFFER @Y30OE78*/ 01477000 * (FREEBUF (PARMPTR),(BLKPTR));/* @Y30OE78*/ 01478000 FREEBUF (PARMPTR),(BLKPTR) 01479000 * BUFELPTR=BUFELNXT; /* GET TO OTHER BUFFER @Y30OE78*/ 01480000 L @08,BUFCBPTR 0558 01481000 L @05,BUFELPTR(,@08) 0558 01482000 L @05,BUFELNXT(,@05) 0558 01483000 ST @05,BUFELPTR(,@08) 0558 01484000 * END; /* @Y30OE78*/ 01485000 AH I,@CH00061 0559 01486000 CH I,@CH00135 0559 01487000 BNH @DL00555 0559 01488000 * PARMPTR=ADDR(IALIST); /* POINT TO LIST TO @Y30OE78 01489000 * CLOSE IA FILES @Y30OE78*/ 01490000 LA PARMPTR,IALIST 0560 01491000 * GEN REFS(PARMPTR) /* CLOSE DATA AND UT3 @Y30OE78*/ 01492000 * (CLOSE MF=(E,(PARMPTR)));/* FILES @Y30OE78*/ 01493000 * 0561 01494000 CLOSE MF=(E,(PARMPTR)) 01495000 * /*********************************************************/ 01496000 * /* */ 01497000 * /* END SEGMENT - INPUT ADS @Y30OE78*/ 01498000 * /* */ 01499000 * /*********************************************************/ 01500000 * 0562 01501000 * IF RTNCODE^=TERMERR THEN/* IF NO BAD ERROR @Y30OE78*/ 01502000 CLI RTNCODE,8 0562 01503000 BE @RF00562 0562 01504000 * DO; /* @Y30OE78*/ 01505000 * 0563 01506000 * /*****************************************************/ 01507000 * /* */ 01508000 * /* START SEGMENT - MERGE AND SPOOL #Y30OE78*/ 01509000 * /* */ 01510000 * /*****************************************************/ 01511000 * 0564 01512000 * UABEX=ADDR(OPENABEX);/* RESET EXIT LIST TO @Z30OE78 01513000 * IGNORE OPEN ABENDS @Z30OE78*/ 01514000 LA @08,OPENABEX 0564 01515000 STCM @08,7,UABEX 0564 01516000 * PARMPTR=ADDR(MSLIST);/* GET OPEN LIST FOR M&S 0565 01517000 * #Y30OE78*/ 01518000 LA PARMPTR,MSLIST 0565 01519000 * GEN REFS(PARMPTR) /* FILES #Y30OE78*/ 01520000 * (OPEN MF=(E,(PARMPTR)));/* OPEN FILES #Y30OE78*/ 01521000 OPEN MF=(E,(PARMPTR)) 01522000 * DCBPTR=ADDR(UT3BPINJ);/* GET DCB FOR JCL INPUT 0567 01523000 * #Y30OE78*/ 01524000 LA @08,UT3BPINJ 0567 01525000 ST @08,DCBPTR 0567 01526000 * IF DCBOFOPN^=ON THEN/* IF OPEN FAILED, #Y30OE78*/ 01527000 TM DCBOFOPN+40(@08),B'00010000' 0568 01528000 BO @RF00568 0568 01529000 * DO; /* PROCESS ERROR #Y30OE78*/ 01530000 * RTNCODE=TERMERR;/* SET RETURN CODE #Y30OE78*/ 01531000 MVI RTNCODE,X'08' 0570 01532000 * MSGIDEX=M549; /* SET INDEX OF MSG #Y30OE78*/ 01533000 MVI MSGIDEX,X'04' 0571 01534000 * MSGTYPE=MTYPWTO;/* INDICATE WTO #Y30OE78*/ 01535000 MVI MSGTYPE,X'01' 0572 01536000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 01537000 MVI DDNK,X'07' 0573 01538000 * DDN=DDNAME(UT3);/* SET DDNAME TO SYSUT3 #Y30OE78*/ 01539000 MVC DDN(8),DDNAME+36 0574 01540000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARAMETERS 0575 01541000 * #Y30OE78*/ 01542000 LA PARMPTR,MSGINT 0575 01543000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 01544000 L @15,@CV00048 0576 01545000 BALR @14,@15 0576 01546000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 01547000 MVI DDNK,X'00' 0577 01548000 * END; /* #Y30OE78*/ 01549000 * DCBPTR=ADDR(UT3BPINA);/* GET DCB FOR ADS INPUT 0579 01550000 * #Y30OE78*/ 01551000 @RF00568 LA @08,UT3BPINA 0579 01552000 ST @08,DCBPTR 0579 01553000 * IF DCBOFOPN^=ON THEN/* IF OPEN FAILED, #Y30OE78*/ 01554000 TM DCBOFOPN+40(@08),B'00010000' 0580 01555000 BO @RF00580 0580 01556000 * DO; /* PROCESS ERROR #Y30OE78*/ 01557000 * RTNCODE=TERMERR;/* SET RETURN CODE #Y30OE78*/ 01558000 MVI RTNCODE,X'08' 0582 01559000 * MSGIDEX=M549; /* SET INDEX OF MSG #Y30OE78*/ 01560000 MVI MSGIDEX,X'04' 0583 01561000 * MSGTYPE=MTYPWTO;/* INDICATE WTO #Y30OE78*/ 01562000 MVI MSGTYPE,X'01' 0584 01563000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 01564000 MVI DDNK,X'07' 0585 01565000 * DDN=DDNAME(UT3);/* SET DDNAME TO SYSUT3 #Y30OE78*/ 01566000 MVC DDN(8),DDNAME+36 0586 01567000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARAMETERS 0587 01568000 * #Y30OE78*/ 01569000 LA PARMPTR,MSGINT 0587 01570000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 01571000 L @15,@CV00048 0588 01572000 BALR @14,@15 0588 01573000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 01574000 MVI DDNK,X'00' 0589 01575000 * END; /* #Y30OE78*/ 01576000 * DCBPTR=ADDR(UT2BS); /* GET DCB FOR OUTPUT #Y30OE78*/ 01577000 @RF00580 LA @08,UT2BS 0591 01578000 ST @08,DCBPTR 0591 01579000 * IF DCBOFOPN^=ON THEN/* IF OPEN FAILED, #Y30OE78*/ 01580000 TM DCBOFOPN+40(@08),B'00010000' 0592 01581000 BO @RF00592 0592 01582000 * DO; /* PROCESS ERROR #Y30OE78*/ 01583000 * RTNCODE=TERMERR;/* SET RETURN CODE #Y30OE78*/ 01584000 MVI RTNCODE,X'08' 0594 01585000 * MSGIDEX=M549; /* SET INDEX OF MSG #Y30OE78*/ 01586000 MVI MSGIDEX,X'04' 0595 01587000 * MSGTYPE=MTYPWTO;/* INDICATE WTO #Y30OE78*/ 01588000 MVI MSGTYPE,X'01' 0596 01589000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 01590000 MVI DDNK,X'07' 0597 01591000 * DDN=DDNAME(UT2);/* SET DDNAME TO SYSUT2 #Y30OE78*/ 01592000 MVC DDN(8),DDNAME+24 0598 01593000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARAMETERS 0599 01594000 * #Y30OE78*/ 01595000 LA PARMPTR,MSGINT 0599 01596000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 01597000 L @15,@CV00048 0600 01598000 BALR @14,@15 0600 01599000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 01600000 MVI DDNK,X'00' 0601 01601000 * END; /* #Y30OE78*/ 01602000 * IF RTNCODE^=TERMERR THEN/* IF NO CATASTROPHIC 0603 01603000 * #Y30OE78*/ 01604000 @RF00592 CLI RTNCODE,8 0603 01605000 BE @RF00603 0603 01606000 * DO; /* ERRORS, CONTINUE #Y30OE78*/ 01607000 * UABEX=ADDR(UT3IABEX);/* CAUSE EOV/CLOSE @Z30OE78 01608000 * ABENDS TO BE REGARDED @Z30OE78 01609000 * AS AN I/O ERROR @Z30OE78*/ 01610000 LA @08,UT3IABEX 0605 01611000 STCM @08,7,UABEX 0605 01612000 * DSNPTRJ=FRSTADSN;/* GET 1ST ADS ENTRY #Y30OE78*/ 01613000 MVC DSNPTRJ(4),FRSTADSN 0606 01614000 * DO WHILE DSNPTRJ<=LASTADSN;/* CLEAN UP DSN TABLE 01615000 * #Y30OE78*/ 01616000 B @DE00607 0607 01617000 @DL00607 DS 0H 0608 01618000 * SETJBERR=OFF; /* RESET FLAG INDICATOR #Y30OE78*/ 01619000 NI SETJBERR,B'11111011' 0608 01620000 * RFY 0609 01621000 * DSNENTRY BASED(DSNPTRI);/* USE TEMP DSNPTR 0609 01622000 * #Y30OE78*/ 01623000 * DO DSNPTRI=DSNPTRJ TO LASTADSN/* CHECK ENTRIES 01624000 * #Y30OE78*/ 01625000 * BY LENGTH(DSNENTRY) WHILE/* FOR ONE JOB 01626000 * #Y30OE78*/ 01627000 * JOBNO=DSNPTRJ->JOBNO;/* AT A TIME 0610 01628000 * #Y30OE78*/ 01629000 L DSNPTRI,DSNPTRJ 0610 01630000 B @DE00610 0610 01631000 @DL00610 L @08,DSNPTRJ 0610 01632000 CLC JOBNO(4,DSNPTRI),JOBNO(@08) 0610 01633000 BNE @DC00610 0610 01634000 * IF JOBERR=OFF&/* IF NO PREVIOUS ERROR 0611 01635000 * #Y30OE78*/ 01636000 * ADSSAT=OFF THEN/* BUT ADS NOT READ, 0611 01637000 * #Y30OE78*/ 01638000 TM JOBERR(DSNPTRI),B'00010100' 0611 01639000 BNZ @RF00611 0611 01640000 * DO; /* #Y30OE78*/ 01641000 * JCLMSG=ON;/* SET JCL COMMENT MSG #Y30OE78 01642000 * TO BE INSERTED #Y30OE78*/ 01643000 OI JCLMSG(DSNPTRI),B'00001000' 0613 01644000 * ERRCODE=CDMISS;/* SET MSG CODE #Y30OE78*/ 01645000 MVC ERRCODE(3,DSNPTRI),@CC00337 0614 01646000 * SETJBERR=ON;/* INDICATE JOB ERROR 0615 01647000 * #Y30OE78*/ 01648000 OI SETJBERR,B'00000100' 0615 01649000 * END; /* #Y30OE78*/ 01650000 * END; /* #Y30OE78*/ 01651000 @RF00611 AH DSNPTRI,@CH01204 0617 01652000 @DE00610 C DSNPTRI,LASTADSN 0617 01653000 BNH @DL00610 0617 01654000 @DC00610 DS 0H 0618 01655000 * RFY 0618 01656000 * DSNENTRY BASED(DSNPTRJ);/* RESET TO NORM PTR 01657000 * #Y30OE78*/ 01658000 * IF SETJBERR=ON THEN/* IF ERROR DETECTED, 0619 01659000 * #Y30OE78*/ 01660000 TM SETJBERR,B'00000100' 0619 01661000 BNO @RF00619 0619 01662000 * DO WHILE DSNPTRJNAMECOL THEN /* IF NAME WAS PRESENT @Y30OE78*/ 01967000 L @04,K 0686 01968000 LA @15,3 0686 01969000 CR @04,@15 0686 01970000 BNH @RF00686 0686 01971000 * NAMELEN=K-NAMECOL; /* SET LENGTH OF NAME @Y30OE78*/ 01972000 SLR @04,@15 0687 01973000 LR NAMELEN,@04 0687 01974000 * ELSE /* IF NO NAME PRESENT, @Y30OE78*/ 01975000 * IF RECJCL(K+1:LASTCOL)= /* CHECK FOR NULL STMT @Y30OE78*/ 01976000 * RECJCL(K:LASTCOL-1) THEN /* IF A NULL STMT, @Y30OE78*/ 01977000 B @RC00686 0688 01978000 @RF00686 L @04,K 0688 01979000 LA @15,70 0688 01980000 SLR @15,@04 0688 01981000 LA @14,RECJCL(@04) 0688 01982000 LA @07,RECJCL-1(@04) 0688 01983000 EX @15,@SC01662 0688 01984000 BNE @RF00688 0688 01985000 * DO; /* @Y30OE78*/ 01986000 * NULL=ON; /* SET NULL INDICATOR @Y30OE78*/ 01987000 OI NULL,B'00010000' 0690 01988000 * IF CMCONTEX=ON THEN /* IF COMMENT CONTIN @Y30OE78 01989000 * EXPECTED, @Y30OE78*/ 01990000 TM CMCONTEX,B'00000100' 0691 01991000 BNO @RF00691 0691 01992000 * CMCONT=ON; /* SET COMMENT CONTIN @Y30OE78*/ 01993000 OI CMCONT,B'10000000' 0692 01994000 * IF OPCONTEX=ON THEN /* IF OPERAND CONTIN @Y30OE78*/ 01995000 @RF00691 TM OPCONTEX,B'00000010' 0693 01996000 BNO @RF00693 0693 01997000 * OPCONT=ON; /* EXPECTED, SET SWITCH @Y30OE78*/ 01998000 OI OPCONT,B'01000000' 0694 01999000 * CMCONTEX=OFF; /* RESET CONTINUATION @Y30OE78*/ 02000000 @RF00693 DS 0H 0696 02001000 * OPCONTEX=OFF; /* EXPECTED SWITCHES @Y30OE78*/ 02002000 NI CMCONTEX,B'11111001' 0696 02003000 * RECSCAN=OFF; /* SUPPRESS FURTHER SCAN @Y30OE78*/ 02004000 NI RECSCAN,B'11101111' 0697 02005000 * END; /* @Y30OE78*/ 02006000 * ELSE /* NOT NULL RECORD, @Y30OE78*/ 02007000 * IF CMCONTEX=ON| /* IF NO CONTIN EXPECTED @Y30OE78*/ 02008000 * OPCONTEX=ON THEN /* DONE WITH NAMESCAN @Y30OE78*/ 02009000 B @RC00688 0699 02010000 @RF00688 TM CMCONTEX,B'00000110' 0699 02011000 BZ @RF00699 0699 02012000 * DO; /* @Y30OE78*/ 02013000 * CMCONT=ON; /* AT LEAST A COMMENT @Y30OE78 02014000 * CONTINUATION @Y30OE78*/ 02015000 OI CMCONT,B'10000000' 0701 02016000 * IF OPCONTEX=ON THEN /* IF EXPECT OPND CONTIN @Y30OE78*/ 02017000 TM OPCONTEX,B'00000010' 0702 02018000 BNO @RF00702 0702 02019000 * DO; /* SEE IF CONTINUED @Y30OE78*/ 02020000 * DO K=K TO LASTCOL WHILE/* SCAN TO NON-BLANK @Y30OE78*/ 02021000 * RECJCL(K)=BLANK;/* @Y30OE78*/ 02022000 L @04,K 0704 02023000 B @DE00704 0704 02024000 @DL00704 LA @15,RECJCL-1(@04) 0704 02025000 CLI 0(@15),C' ' 0704 02026000 BNE @DC00704 0704 02027000 * END; /* @Y30OE78*/ 02028000 AH @04,@CH00061 0705 02029000 ST @04,K 0705 02030000 @DE00704 CH @04,@CH00200 0705 02031000 BNH @DL00704 0705 02032000 @DC00704 DS 0H 0706 02033000 * IF K>16 THEN /* IF ALL BLANK THRU COL @Y30OE78*/ 02034000 L @04,K 0706 02035000 CH @04,@CH00164 0706 02036000 BNH @RF00706 0706 02037000 * DO; /* 16, PROCESS AS COMENT @Y30OE78 02038000 * CONTINUATION ONLY @Y30OE78*/ 02039000 * CMCONTEX=OFF; /* RESET CONTIN SWITCHES @Y30OE78*/ 02040000 * OPCONTEX=OFF; /* @Y30OE78*/ 02041000 NI CMCONTEX,B'11111001' 0709 02042000 * IF RECJCL(CONTCOL)^=BLANK THEN/* CHECK @Y30OE78*/ 02043000 CLI RECJCL+71,C' ' 0710 02044000 BE @RF00710 0710 02045000 * CMCONTEX=ON; /* IF CONTINUED @Y30OE78*/ 02046000 OI CMCONTEX,B'00000100' 0711 02047000 * RECSCAN=OFF; /* SUPPRESS FURTHER SCAN @Y30OE78*/ 02048000 @RF00710 NI RECSCAN,B'11101111' 0712 02049000 * END; /* @Y30OE78*/ 02050000 * ELSE /* NON-BLANK HIT BEFORE @Y30OE78*/ 02051000 * DO; /* COLUMN 17 @Y30OE78*/ 02052000 B @RC00706 0714 02053000 @RF00706 DS 0H 0715 02054000 * OPCONT=ON; /* INDICATE OPND CONTIN @Y30OE78*/ 02055000 OI OPCONT,B'01000000' 0715 02056000 * BYPVERB=ON; /* INDICATE BYPASS VERB @Y30OE78*/ 02057000 OI BYPVERB,B'00001000' 0716 02058000 * ATOPND=ON; /* INDICATE THAT OPERAND @Y30OE78 02059000 * FOUND @Y30OE78*/ 02060000 OI ATOPND,B'00000001' 0717 02061000 * END; /* @Y30OE78*/ 02062000 * END; /* @Y30OE78*/ 02063000 * ELSE /* IF COMMENT CONTIN @Y30OE78*/ 02064000 * DO; /* EXPECTED, HANDLE IT @Y30OE78*/ 02065000 B @RC00702 0720 02066000 @RF00702 DS 0H 0721 02067000 * CMCONTEX=OFF; /* RESET CONTIN SWITCHES @Y30OE78*/ 02068000 * OPCONTEX=OFF; /* @Y30OE78*/ 02069000 NI CMCONTEX,B'11111001' 0722 02070000 * IF RECJCL(CONTCOL)^=BLANK THEN/* CHECK IF @Y30OE78*/ 02071000 CLI RECJCL+71,C' ' 0723 02072000 BE @RF00723 0723 02073000 * CMCONTEX=ON; /* CONTINUED @Y30OE78*/ 02074000 OI CMCONTEX,B'00000100' 0724 02075000 * RECSCAN=OFF; /* SUPPRESS FURTHER SCAN @Y30OE78*/ 02076000 @RF00723 NI RECSCAN,B'11101111' 0725 02077000 * END; /* @Y30OE78*/ 02078000 * END; /* @Y30OE78*/ 02079000 * END NAMESCAN; /* @Y30OE78*/ 02080000 @EL00002 DS 0H 0728 02081000 @EF00002 DS 0H 0728 02082000 @ER00002 L @14,12(,@13) 0728 02083000 BR @14 0728 02084000 * 0729 02085000 */********************************************************** @Y30OE78*/ 02086000 */* @Y30OE78*/ 02087000 */* ROUTINE NAME- @Y30OE78*/ 02088000 */* OPNDSCAN @Y30OE78*/ 02089000 */* @Y30OE78*/ 02090000 */* FUNCTION- @Y30OE78*/ 02091000 */* CALLED BY SEGMENT(SCAN JCL RECORD) TO SCAN PAST ALL @Y30OE78*/ 02092000 */* OPERANDS IN A JCL RECORD AND DETERMINE IF STATE- @Y30OE78*/ 02093000 */* MENT IS CONTINUED @Y30OE78*/ 02094000 */* @Y30OE78*/ 02095000 */* INPUT- @Y30OE78*/ 02096000 */* RECORD WORK AREA(RECJCL) CONTAINS RECORD TO BE @Y30OE78*/ 02097000 */* CONSIDERED @Y30OE78*/ 02098000 */* JCL RECORD INDEX(K) POINTING TO FIRST CHARACTER @Y30OE78*/ 02099000 */* OF OPERANDS @Y30OE78*/ 02100000 */* @Y30OE78*/ 02101000 */* OUTPUT- @Y30OE78*/ 02102000 */* STATUS SWITCHES TO INDICATE IF OPERAND CONTINUATION @Y30OE78*/ 02103000 */* (OPCONTEX) OR COMMENT CONTINUATION(CMCONTEX) ARE TO @Y30OE78*/ 02104000 */* BE EXPECTED FOLLOWING THIS JCL RECORD @Y30OE78*/ 02105000 */* OPNDPTR POINTING TO FIRST OPERAND PARAMETER @Y30OE78*/ 02106000 */* @Y30OE78*/ 02107000 */* ROUTINES CALLED- @Y30OE78*/ 02108000 */* NONE @Y30OE78*/ 02109000 */* @Y30OE78*/ 02110000 */* MACROS- @Y30OE78*/ 02111000 */* NONE @Y30OE78*/ 02112000 */* @Y30OE78*/ 02113000 */********************************************************** @Y30OE78*/ 02114000 * 0729 02115000 *OPNDSCAN: /* @Y30OE78*/ 02116000 * PROC OPTIONS(SAVE(RTNREG),NOSAVEAREA);/* @Y30OE78*/ 02117000 OPNDSCAN ST @14,12(,@13) 0729 02118000 * OPNDPTR=K; /* SET OPERAND POINTER @Y30OE78*/ 02119000 L @15,K 0730 02120000 LR OPNDPTR,@15 0730 02121000 * CMCONTEX=OFF; /* RESET CONTIN SWITCHES @Y30OE78*/ 02122000 * OPCONTEX=OFF; /* @Y30OE78*/ 02123000 NI CMCONTEX,B'11111001' 0732 02124000 * QUOTE=OFF; /* INITIALIZE QUOTE SW @Y30OE78*/ 02125000 NI QUOTE,B'11111110' 0733 02126000 * DO K=MIN(K,LASTCOL) TO LASTCOL WHILE/* SCAN TO BLANK @Y30OE78*/ 02127000 * ^(RECJCL(K)=BLANK& /* OUTSIDE OF QUOTES @Y30OE78*/ 02128000 * QUOTE=OFF); /* @Y30OE78*/ 02129000 LA @04,71 0734 02130000 CR @15,@04 0734 02131000 BNH *+6 02132000 LR @15,@04 0734 02133000 B @DE00734 0734 02134000 @DL00734 LA @04,RECJCL-1(@15) 0734 02135000 CLI 0(@04),C' ' 0734 02136000 BNE @DB00734 0734 02137000 TM QUOTE,B'00000001' 0734 02138000 BZ @DC00734 0734 02139000 @DB00734 DS 0H 0735 02140000 * IF RECJCL(K)=CQUOTE THEN /* IF QUOTE IS HIT, @Y30OE78*/ 02141000 L @04,K 0735 02142000 LA @15,RECJCL-1(@04) 0735 02143000 CLI 0(@15),C'''' 0735 02144000 BNE @RF00735 0735 02145000 * IF QUOTE=OFF THEN /* FLIP QUOTE SWITCH @Y30OE78*/ 02146000 TM QUOTE,B'00000001' 0736 02147000 BNZ @RF00736 0736 02148000 * QUOTE=ON; /* TO OPPOSITE @Y30OE78*/ 02149000 OI QUOTE,B'00000001' 0737 02150000 * ELSE /* VALUE @Y30OE78*/ 02151000 * QUOTE=OFF; /* @Y30OE78*/ 02152000 B @RC00736 0738 02153000 @RF00736 NI QUOTE,B'11111110' 0738 02154000 * END; /* @Y30OE78*/ 02155000 @RC00736 DS 0H 0739 02156000 @RF00735 LA @15,1 0739 02157000 AL @15,K 0739 02158000 @DE00734 ST @15,K 0739 02159000 CH @15,@CH00200 0739 02160000 BNH @DL00734 0739 02161000 @DC00734 DS 0H 0740 02162000 * IF RECJCL(K-1)=CCOMMA THEN /* PREVIOUS CHAR WAS , @Y30OE78*/ 02163000 L @04,K 0740 02164000 LA @15,RECJCL-2(@04) 0740 02165000 CLI 0(@15),C',' 0740 02166000 BNE @RF00740 0740 02167000 * OPCONTEX=ON; /* OPND CONTIN EXPECTED @Y30OE78*/ 02168000 OI OPCONTEX,B'00000010' 0741 02169000 * ELSE /* NOT OPND CONTINUATION @Y30OE78*/ 02170000 * IF RECJCL(CONTCOL)^=BLANK THEN/* CHECK FOR CONTIN IND @Y30OE78*/ 02171000 B @RC00740 0742 02172000 @RF00740 CLI RECJCL+71,C' ' 0742 02173000 BE @RF00742 0742 02174000 * CMCONTEX=ON; /* SET COMMENT CONTIN SW @Y30OE78*/ 02175000 OI CMCONTEX,B'00000100' 0743 02176000 * END OPNDSCAN; /* @Y30OE78*/ 02177000 @EL00003 DS 0H 0744 02178000 @EF00003 DS 0H 0744 02179000 @ER00003 L @14,12(,@13) 0744 02180000 BR @14 0744 02181000 * 0745 02182000 */********************************************************** @Y30OE78*/ 02183000 */* @Y30OE78*/ 02184000 */* ROUTINE NAME- @Y30OE78*/ 02185000 */* JOBPROC @Y30OE78*/ 02186000 */* @Y30OE78*/ 02187000 */* FUNCTION- @Y30OE78*/ 02188000 */* PROCESS JOB STATEMENTS IN JCL STREAM AS FOLLOWS @Y30OE78*/ 02189000 */* FLAG DSN TABLE ENTRIES FOR PRECEDING JOB IF THAT @Y30OE78*/ 02190000 */* JOB HAD A JCL ERROR DETECTED BY DKRDR @Y30OE78*/ 02191000 */* VALIDITY CHECK JOBNAME @Y30OE78*/ 02192000 */* CHECK THAT NUMBER OF JOBS IS WITHIN UPPER LIMIT OF @Y30OE78*/ 02193000 */* 9999 AND IF NOT, SET UP ERROR MESSAGE @Y30OE78*/ 02194000 */* APPEND CONTROL INFORMATION TO END OF RECORD TO @Y30OE78*/ 02195000 */* MINIMIZE RECORD SCANNING IN LATER PROCESSING @Y30OE78*/ 02196000 */* @Y30OE78*/ 02197000 */* INPUT- @Y30OE78*/ 02198000 */* RECORD WORK AREA(RECJCL) CONTAINS RECORD BEING @Y30OE78*/ 02199000 */* PROCESSED @Y30OE78*/ 02200000 */* DATA SET NAME TABLE(DSNTAB) IF IN MERGE MODE @Y30OE78*/ 02201000 */* STATUS SWITCHES INDICATING @Y30OE78*/ 02202000 */* (JBJCLERR) JOB JCL ERROR @Y30OE78*/ 02203000 */* (STARTJOB) SCANNING TO JOB SPECIFIED IN START CMD @Y30OE78*/ 02204000 */* (CMCONTEX & OPCONTEX) CONTINUATIONS OF THIS STMT @Y30OE78*/ 02205000 */* ARE EXPECTED @Y30OE78*/ 02206000 */* @Y30OE78*/ 02207000 */* OUTPUT- @Y30OE78*/ 02208000 */* CONTROL INFORMATION(RECNTRLA) CONSTRUCTED IN RECORD @Y30OE78*/ 02209000 */* WORK AREA @Y30OE78*/ 02210000 */* DATA SET NAME TABLE UPDATED IF PRECEDING JOB HAD @Y30OE78*/ 02211000 */* ERRORS @Y30OE78*/ 02212000 */* STATUS SWITCHES(JBJCLERR) RESET FOR NEW JOB, SET @Y30OE78*/ 02213000 */* IF INVALID JOBNAME @Y30OE78*/ 02214000 */* CURRENT JOB NAME(CURJOBNM) IS SAVED @Y30OE78*/ 02215000 */* MESSAGE WRITER PARMLIST IF MESSAGE NEEDED @Y30OE78*/ 02216000 */* @Y30OE78*/ 02217000 */* ROUTINES CALLED- @Y30OE78*/ 02218000 */* IOEDKMSG(MESSAGE WRITER) IF MSG IEB550 IS NEEDED @Y30OE78*/ 02219000 */* @Y30OE78*/ 02220000 */* MACROS- @Y30OE78*/ 02221000 */* NONE @Y30OE78*/ 02222000 */* @Y30OE78*/ 02223000 */********************************************************** @Y30OE78*/ 02224000 * 0745 02225000 *JOBPROC: /* JOB PROCESSOR @Y30OE78*/ 02226000 * PROC OPTIONS(SAVE(RTNREG)); /* @Y30OE78*/ 02227000 JOBPROC ST @14,@SA00004 0745 02228000 * CNTRLSW=CNTRLSWI; /* CLEAR CNTRL SWITCHES @Y30OE78*/ 02229000 MVI CNTRLSW,X'C0' 0746 02230000 * IF JOBCONT=ON THEN /* IF JOB STMT CONTINUA- @Y30OE78 02231000 * TION WAS EXPECTED, @Y30OE78*/ 02232000 TM JOBCONT,B'00000100' 0747 02233000 BNO @RF00747 0747 02234000 * DO; /* @Y30OE78*/ 02235000 * JOBCONT=OFF; /* RESET CONTIN SWITCH @Y30OE78*/ 02236000 NI JOBCONT,B'11111011' 0749 02237000 * IF JCL=OFF THEN /* IF NON-JCL CONTIN, @Y30OE78*/ 02238000 TM JCL,B'00100000' 0750 02239000 BNZ @RF00750 0750 02240000 * JBJCLERR=ON; /* SET ERROR INDICATOR @Y30OE78*/ 02241000 OI JBJCLERR,B'01000000' 0751 02242000 * END; /* @Y30OE78*/ 02243000 * ELSE /* JOB VERB WAS HIT @Y30OE78*/ 02244000 * DO; /* @Y30OE78*/ 02245000 B @RC00747 0753 02246000 @RF00747 DS 0H 0754 02247000 * RFY 0754 02248000 * DSNENTRY BASED(DSNPTRI); /* USE TEMPORARY PTR @Y30OE78*/ 02249000 * IF JBJCLERR=ON& /* IF LAST JOB HAD JCL @Y30OE78 02250000 * ERRORS AND @Y30OE78*/ 02251000 * ADS#^=ZERO THEN /* IN MERGE MODE, @Y30OE78*/ 02252000 TM JBJCLERR,B'01000000' 0755 02253000 BNO @RF00755 0755 02254000 ICM @03,15,ADS# 0755 02255000 BZ @RF00755 0755 02256000 * DO DSNPTRI=DSNPTRJ-LENGTH(DSNENTRY)/* FLAG @Y30OE78*/ 02257000 * TO FRSTADSN /* ENTRIES @Y30OE78*/ 02258000 * BY-LENGTH(DSNENTRY) WHILE/* IN @Y30OE78*/ 02259000 * JOBNO=CURJNUM; /* DSN TABLE WHICH @Y30OE78*/ 02260000 L DSNPTRI,DSNPTRJ 0756 02261000 SH DSNPTRI,@CH01204 0756 02262000 B @DE00756 0756 02263000 @DL00756 CLC JOBNO(4,DSNPTRI),CURJNUM 0756 02264000 BNE @DC00756 0756 02265000 * JOBERR=ON; /* RELATE TO JOB WITH @Y30OE78 02266000 * JCL ERROR @Y30OE78*/ 02267000 OI JOBERR(DSNPTRI),B'00010000' 0757 02268000 * END; /* JOB @Y30OE78*/ 02269000 AH DSNPTRI,@CH01601 0758 02270000 @DE00756 C DSNPTRI,FRSTADSN 0758 02271000 BNL @DL00756 0758 02272000 @DC00756 DS 0H 0759 02273000 * RFY 0759 02274000 * DSNENTRY BASED(DSNPTRJ); /* @Y30OE78*/ 02275000 @RF00755 DS 0H 0760 02276000 * JBJCLERR=OFF; /* RESET JCL ERROR #Y30OE78 02277000 * SWITCH FOR NEW JOB #Y30OE78*/ 02278000 NI JBJCLERR,B'10111111' 0760 02279000 * HYPHTAB=BLANK; /* MAKE HYPHEN INVALID #Y30OE78*/ 02280000 MVI HYPHTAB,C' ' 0761 02281000 * LBRCTAB=BLANK; /* AND LEFT BRACE IN- #Y30OE78 02282000 * VALID IN TRT TABLE @Y30OE78*/ 02283000 MVI LBRCTAB,C' ' 0762 02284000 * CHARHIT=ZERO; /* INITIALIZE END VALUE #Y30OE78*/ 02285000 SLR CHARHIT,CHARHIT 0763 02286000 * TRT(RECJCL(NAMECOL:NAMECOL+LENGTH(CURJOBNM)),TRTTAB);/* 0764 02287000 * @Y30OE78*/ 02288000 TRT RECJCL+2(9),TRTTAB 0764 02289000 * IF CHARHIT=ZERO| /* IF NO END HIT OR #Y30OE78*/ 02290000 * CHARHIT^=SPACE| /* BAD CHARACTER HIT OR #Y30OE78*/ 02291000 * HITADDR=ADDR(RECJCL(NAMECOL))|/* NO GOOD CHAR #Y30OE78 02292000 * WAS FOUND OR #Y30OE78*/ 02293000 * RECJCL(NAMECOL)>=CZERO THEN/* 1ST CHAR NUMERIC, #Y30OE78*/ 02294000 CH CHARHIT,@CH00053 0765 02295000 BE @RT00765 0765 02296000 CH CHARHIT,@CH00375 0765 02297000 BNE @RT00765 0765 02298000 LA @03,RECJCL+2 0765 02299000 CR HITADDR,@03 0765 02300000 BE @RT00765 0765 02301000 CLI RECJCL+2,C'0' 0765 02302000 BL @RF00765 0765 02303000 @RT00765 DS 0H 0766 02304000 * JBJCLERR=ON; /* INDICATE ERROR #Y30OE78*/ 02305000 OI JBJCLERR,B'01000000' 0766 02306000 * I=MIN(NAMELEN,LENGTH(CURJOBNM));/* GET LENGTH OF #Y30OE78 02307000 * NAME TO USE #Y30OE78*/ 02308000 @RF00765 LA I,8 0767 02309000 CR I,NAMELEN 0767 02310000 BNH *+6 02311000 LR I,NAMELEN 0767 02312000 * CURJOBNM=RECJCL(NAMECOL:NAMECOL+I);/* SAVE NAME #Y30OE78*/ 02313000 MVI CURJOBNM+1,C' ' 0768 02314000 MVC CURJOBNM+2(6),CURJOBNM+1 0768 02315000 EX I,@SM01666 0768 02316000 * IF STARTJOB=ON& /* IF SCANNING TO START #Y30OE78 02317000 * AT SPECIFIC JOB AND #Y30OE78*/ 02318000 * CURJOBNM=SJOBNAME THEN /* THIS IS THE JOB, #Y30OE78*/ 02319000 TM STARTJOB,B'10000000' 0769 02320000 BNO @RF00769 0769 02321000 CLC CURJOBNM(8),SJOBNAME 0769 02322000 BNE @RF00769 0769 02323000 * STARTJOB=OFF; /* RESET INDICATOR #Y30OE78*/ 02324000 NI STARTJOB,B'01111111' 0770 02325000 * IF STARTJOB=OFF THEN /* IF NOT SCANNING TO #Y30OE78*/ 02326000 @RF00769 TM STARTJOB,B'10000000' 0771 02327000 BNZ @RF00771 0771 02328000 * DO; /* JOB, PROCESS NEW JOB #Y30OE78*/ 02329000 * ADSNUM=ZERO; /* RESET ADS NUMBER #Y30OE78*/ 02330000 SLR @08,@08 0773 02331000 STH @08,ADSNUM 0773 02332000 * JOBNUM=JOBNUM+1; /* BUMP JOB NUMBER #Y30OE78*/ 02333000 LA @08,1 0774 02334000 AH @08,JOBNUM 0774 02335000 STH @08,JOBNUM 0774 02336000 * IF JOBNUM>9999 THEN /* IF JOB NUM IS TOO BIG #Y30OE78*/ 02337000 CH @08,@CH01482 0775 02338000 BNH @RF00775 0775 02339000 * DO; /* #Y30OE78*/ 02340000 * IJSCERR=ON; /* SET SCAN ERR SWITCH #Y30OE78*/ 02341000 OI IJSCERR,B'00000100' 0777 02342000 * RTNCODE=PARTERR; /* SET RETURN CODE #Y30OE78*/ 02343000 MVI RTNCODE,X'04' 0778 02344000 * MSGIDEX=M550; /* SET MSG INDEX #Y30OE78*/ 02345000 MVI MSGIDEX,X'05' 0779 02346000 * MSGTYPE=MTYPWTO; /* MSG TYPE IS WTO #Y30OE78*/ 02347000 MVI MSGTYPE,X'01' 0780 02348000 * DDDK=DDDV; /* SET DEV ADDR KEY #Y30OE78*/ 02349000 MVI DDDK,X'08' 0781 02350000 * IF DSSDS(RDER)=ON THEN/* IF SUBSYSTEM DS, @Y30OE78*/ 02351000 TM DSSDS,B'01000000' 0782 02352000 BNO @RF00782 0782 02353000 * DDD='JES'; /* INDICATE JES DEVICE @Y30OE78*/ 02354000 MVC DDD(3),@CC01462 0783 02355000 * ELSE /* OTHERWISE, @Y30OE78*/ 02356000 * DDD=DEVPTR(RDER)->UCBNAME;/* GET DEV ADDR @Y30OE78*/ 02357000 B @RC00782 0784 02358000 @RF00782 SLR @08,@08 0784 02359000 ICM @08,7,DEVPTR 0784 02360000 MVC DDD(3),UCBNAME(@08) 0784 02361000 * JJJK=JJJV; /* SET JOBNAME KEY @Y30OE78*/ 02362000 @RC00782 MVI JJJK,X'0B' 0785 02363000 * JJJ=CURJOBNM; /* SET JOB NAME @Y30OE78*/ 02364000 MVC JJJ(8),CURJOBNM 0786 02365000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS @Y30OE78*/ 02366000 LA PARMPTR,MSGINT 0787 02367000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 02368000 L @15,@CV00048 0788 02369000 BALR @14,@15 0788 02370000 * DDDK=SKIPV; /* RESET DEV ADDR KEY @Y30OE78*/ 02371000 MVI DDDK,X'00' 0789 02372000 * JJJK=SKIPV; /* AND JOBNAME KEY @Y30OE78*/ 02373000 MVI JJJK,X'00' 0790 02374000 * END; /* @Y30OE78*/ 02375000 * END; /* @Y30OE78*/ 02376000 @RF00775 DS 0H 0793 02377000 * FIRST=ON; /* SET FIRST RECORD IN @Y30OE78 02378000 * JOB STMT INDICATOR @Y30OE78*/ 02379000 @RF00771 OI FIRST,B'00000100' 0793 02380000 * END; /* @Y30OE78*/ 02381000 * IF OPCONTEX=ON| /* IF CONTIN EXPECTED @Y30OE78*/ 02382000 * CMCONTEX=ON THEN /* ON JOB RECORD, @Y30OE78*/ 02383000 @RC00747 TM OPCONTEX,B'00000110' 0795 02384000 BZ @RF00795 0795 02385000 * DO; /* @Y30OE78*/ 02386000 * JOBCONT=ON; /* SET INDICATOR THAT @Y30OE78 02387000 * JOB CONTIN EXPECTED @Y30OE78*/ 02388000 OI JOBCONT,B'00000100' 0797 02389000 * CONTIN=ON; /* SET CONTIN INDICATOR @Y30OE78 02390000 * IN CNTRL INFO @Y30OE78*/ 02391000 OI CONTIN,B'00000010' 0798 02392000 * END; /* @Y30OE78*/ 02393000 * ELSE /* IF NO CONTIN EXPECTED @Y30OE78*/ 02394000 * LAST=ON; /* SET LAST INDICATOR @Y30OE78 02395000 * IN CNTRL INFO @Y30OE78*/ 02396000 B @RC00795 0800 02397000 @RF00795 OI LAST,B'00000001' 0800 02398000 * IF ADS#^=ZERO THEN /* IF IN MERGE MODE, @Y30OE78*/ 02399000 @RC00795 ICM @08,15,ADS# 0801 02400000 BZ @RF00801 0801 02401000 * DO; /* COMPLETE CNTRL INFO @Y30OE78*/ 02402000 * CVD(JOBNUM,WORKA); /* GET CURRENT JOB NUM @Y30OE78*/ 02403000 LH @08,JOBNUM 0803 02404000 CVD @08,WORKA 0803 02405000 * UNPK(CURJNUM,WORKA(6:8)); /* IN EBCDIC @Y30OE78*/ 02406000 UNPK CURJNUM(4),WORKA+5(3) 0804 02407000 * MVZ(CURJNUM(4),ZONE); /* @Y30OE78*/ 02408000 MVZ CURJNUM+3(1),@CB00080 0805 02409000 * CTRLJOB#=CURJNUM; /* PUT IT IN CNTRL INFO @Y30OE78*/ 02410000 MVC CTRLJOB#(4),CURJNUM 0806 02411000 * CJOB=ON; /* INDICATE JOB CARD @Y30OE78*/ 02412000 OI CJOB,B'00100000' 0807 02413000 * RDWLNA=LENGTH(RDWA)+ /* SET RDW LENGTH TO @Y30OE78*/ 02414000 * LENGTH(RECJCL)+ /* WRITE LONG RECORD @Y30OE78*/ 02415000 * LENGTH(RECNTRLA); /* WITH CNTRL INFO @Y30OE78*/ 02416000 MVC RDWLNA(2),@CH01603 0808 02417000 * END; /* @Y30OE78*/ 02418000 * END JOBPROC; /* @Y30OE78*/ 02419000 @EL00004 DS 0H 0810 02420000 @EF00004 DS 0H 0810 02421000 @ER00004 L @14,@SA00004 0810 02422000 BR @14 0810 02423000 * 0811 02424000 */********************************************************** @Y30OE78*/ 02425000 */* @Y30OE78*/ 02426000 */* ROUTINE NAME- @Y30OE78*/ 02427000 */* DDPROC @Y30OE78*/ 02428000 */* @Y30OE78*/ 02429000 */* FUNCTION- @Y30OE78*/ 02430000 */* PROCESS DD STATEMENTS IN THE JCL STREAM AS FOLLOWS @Y30OE78*/ 02431000 */* IF DD STMT IS DD * OR DATA DO SYSIN SCANNING @Y30OE78*/ 02432000 */* (SEGMENT - SYSIN SCAN) @Y30OE78*/ 02433000 */* SCAN RECORD FOR DSID, VOL=SER, AND DLM KEYWORDS @Y30OE78*/ 02434000 */* WHEN ONE OF THESE KEYWORDS IS FOUND, CALL @Y30OE78*/ 02435000 */* SUBROUTINES TO PROCESS IT @Y30OE78*/ 02436000 */* WHEN ALL OF SYSIN STMT HAS BEEN PROCESSED ENTER @Y30OE78*/ 02437000 */* INSTREAM DATA MODE OR BUILD DSNTAB ENTRY AND @Y30OE78*/ 02438000 */* APPEND CONTROL INFORMATION TO JCL RECORD IN @Y30OE78*/ 02439000 */* PREPARATION TO RETRIEVE ASSOCIATED DATA SET(ADS) @Y30OE78*/ 02440000 */* @Y30OE78*/ 02441000 */* INPUT- @Y30OE78*/ 02442000 */* RECORD WORK AREA(RECJCL) CONTAINS RECORD BEING @Y30OE78*/ 02443000 */* PROCESSED @Y30OE78*/ 02444000 */* STATUS SWITCHES INDICATE IF CONTINUATION IS BEING @Y30OE78*/ 02445000 */* PROCESSED AND IF MORE CONTINUATIONS ARE EXPECTED @Y30OE78*/ 02446000 */* @Y30OE78*/ 02447000 */* OUTPUT- @Y30OE78*/ 02448000 */* CONTROL INFORMATION(RECNTRLA) CONSTRUCTED IN RECORD @Y30OE78*/ 02449000 */* WORK AREA @Y30OE78*/ 02450000 */* DSNTAB UPDATED WITH NEW ENTRY IF ADS REQUEST WAS @Y30OE78*/ 02451000 */* FOUND @Y30OE78*/ 02452000 */* STATUS SWITCH AND DELIMITER VALUE SET @Y30OE78*/ 02453000 */* MESSAGE WRITER PARMLIST TO WRITE MSG IEB544 IF @Y30OE78*/ 02454000 */* DSNTAB COULD NOT CONTAIN ANOTHER ENTRY @Y30OE78*/ 02455000 */* @Y30OE78*/ 02456000 */* ROUTINES CALLED- @Y30OE78*/ 02457000 */* PARMSCAN- TO FIND BEGINNING OF NEXT OPERAND IN A @Y30OE78*/ 02458000 */* JCL RECORD @Y30OE78*/ 02459000 */* DSIDSCAN- TO PROCESS DSID PARAMETER VALUE @Y30OE78*/ 02460000 */* VOLSCAN- TO PROCESS VOL PARAMETER VALUE @Y30OE78*/ 02461000 */* DLMSCAN- TO PROCESS DLM PARAMTER VALUE @Y30OE78*/ 02462000 */* IOEDKMSG- WRITE MSG IEB544 OR IEB556 IF NEEDED @Z30OE78*/ 02463000 */* @Y30OE78*/ 02464000 */* MACROS- @Y30OE78*/ 02465000 */* NONE @Y30OE78*/ 02466000 */* @Y30OE78*/ 02467000 */********************************************************** @Y30OE78*/ 02468000 * 0811 02469000 *DDPROC: /* DD PROCESSOR @Y30OE78*/ 02470000 * PROC OPTIONS(SAVE(RTNREG)); /* @Y30OE78*/ 02471000 DDPROC ST @14,@SA00005 0811 02472000 * IF DDCONT=ON THEN /* IF A CONTINUATION, @Y30OE78*/ 02473000 TM DDCONT,B'00000010' 0812 02474000 BNO @RF00812 0812 02475000 * DO; /* @Y30OE78*/ 02476000 * DDCONT=OFF; /* RESET INDICATOR @Y30OE78*/ 02477000 NI DDCONT,B'11111101' 0814 02478000 * IF JCL=OFF THEN /* IF NON-JCL CONTIN, @Y30OE78*/ 02479000 TM JCL,B'00100000' 0815 02480000 BNZ @RF00815 0815 02481000 * JBJCLERR=ON; /* SET ERROR INDICATOR @Y30OE78*/ 02482000 OI JBJCLERR,B'01000000' 0816 02483000 * END; /* @Y30OE78*/ 02484000 * ELSE /* IF NOT CONTINUATION, @Y30OE78*/ 02485000 * IF ATOPND=OFF THEN /* IF NO OPERAND BEFORE @Y30OE78*/ 02486000 B @RC00812 0818 02487000 @RF00812 TM ATOPND,B'00000001' 0818 02488000 BNZ @RF00818 0818 02489000 * DO; /* LAST COLUMN, @Y30OE78*/ 02490000 * JBJCLERR=ON; /* SET ERROR FLAG @Y30OE78*/ 02491000 * DDREJCT=ON; /* SCAN NO FURTHER ON @Y30OE78*/ 02492000 OI JBJCLERR,B'01100000' 0821 02493000 * END; /* THIS DD STATEMENT @Y30OE78*/ 02494000 * ELSE /* OPND BEFORE COL 72 @Y30OE78*/ 02495000 * DO; /* PROCESS NEW DD STMT @Y30OE78*/ 02496000 B @RC00818 0823 02497000 @RF00818 DS 0H 0824 02498000 * DDREJCT=OFF; /* INIT REJECT SWITCH @Y30OE78*/ 02499000 NI DDREJCT,B'11011111' 0824 02500000 * QUOTE=OFF; /* INIT QUOTE SWITCH @Y30OE78*/ 02501000 NI QUOTE,B'11111110' 0825 02502000 * OSCSW=ZERO; /* INIT FLAGS AND VALID- @Y30OE78 02503000 * ITY SWITCHES FOR SYS- @Y30OE78 02504000 * IN SCAN WORKAREA @Y30OE78*/ 02505000 SLR @04,@04 0826 02506000 ST @04,OSCSW 0826 02507000 * OVOLSER=BLANK; /* CLEAR VOL SER FIELD @Y30OE78*/ 02508000 MVI OVOLSER+1,C' ' 0827 02509000 MVC OVOLSER+2(4),OVOLSER+1 0827 02510000 MVI OVOLSER,C' ' 0827 02511000 * CALL PARMSCAN; /* SCAN POSITIONAL PARM @Y30OE78*/ 02512000 BAL @14,PARMSCAN 0828 02513000 * IF RECJCL(OPNDPTR)=CSTAR THEN/* IF DD *, PROCESS @Y30OE78*/ 02514000 LA @04,RECJCL-1(OPNDPTR) 0829 02515000 CLI 0(@04),C'*' 0829 02516000 BNE @RF00829 0829 02517000 * DO; /* @Y30OE78*/ 02518000 * JCLINDAT=OFF; /* INDICATE JCL NOT @Y30OE78 02519000 * ALLOWED IN SYSIN @Y30OE78*/ 02520000 NI JCLINDAT,B'10111111' 0831 02521000 * OPNDPTR=NXTOPND; /* BUMP TO NEXT OPERAND @Y30OE78*/ 02522000 LR OPNDPTR,NXTOPND 0832 02523000 * END; /* @Y30OE78*/ 02524000 * ELSE /* OTHERWISE CHECK MORE @Y30OE78*/ 02525000 * IF RECJCL(OPNDPTR:OPNDPTR+3)=CDATA THEN/* IF @Y30OE78*/ 02526000 B @RC00829 0834 02527000 @RF00829 LA @04,RECJCL-1(OPNDPTR) 0834 02528000 CLC 0(4,@04),@CC00317 0834 02529000 BNE @RF00834 0834 02530000 * DO; /* DD DATA, PROCESS @Y30OE78*/ 02531000 * JCLINDAT=ON; /* INDICATE JCL ALLOWED @Y30OE78*/ 02532000 OI JCLINDAT,B'01000000' 0836 02533000 * OPNDPTR=NXTOPND; /* BUMP TO NEXT OPERAND @Y30OE78*/ 02534000 LR OPNDPTR,NXTOPND 0837 02535000 * END; /* @Y30OE78*/ 02536000 * ELSE /* OTHERWISE REJECT DD @Y30OE78*/ 02537000 * DDREJCT=ON; /* SET REJECT INDICATOR @Y30OE78*/ 02538000 B @RC00834 0839 02539000 @RF00834 OI DDREJCT,B'00100000' 0839 02540000 * END; /* @Y30OE78*/ 02541000 @RC00834 DS 0H 0840 02542000 @RC00829 DS 0H 0841 02543000 * IF DDREJCT=OFF THEN /* IF INTERESTING DD, @Y30OE78*/ 02544000 @RC00818 DS 0H 0841 02545000 @RC00812 TM DDREJCT,B'00100000' 0841 02546000 BNZ @RF00841 0841 02547000 * DO; /* PROCESS IT @Y30OE78*/ 02548000 * 0842 02549000 * /*************************************************************/ 02550000 * /* */ 02551000 * /* START SEGMENT- SYSIN SCAN @Y30OE78*/ 02552000 * /* */ 02553000 * /*************************************************************/ 02554000 * 0843 02555000 * DO WHILE ATOPND=ON; /* SCAN ALL OPERANDS OF @Y30OE78 02556000 * A SYSIN DD RECORD @Y30OE78*/ 02557000 B @DE00843 0843 02558000 @DL00843 DS 0H 0844 02559000 * CALL PARMSCAN; /* FIND ONE PARAMETER @Y30OE78*/ 02560000 BAL @14,PARMSCAN 0844 02561000 * IF DSIDCONT=ON THEN /* IF DSID PARAMETER @Y30OE78 02562000 * CONTIN IS EXPECTED, @Y30OE78*/ 02563000 TM DSIDCONT,B'00000010' 0845 02564000 BNO @RF00845 0845 02565000 * CALL DSIDSCAN; /* PROCESS IT @Y30OE78*/ 02566000 BAL @14,DSIDSCAN 0846 02567000 * ELSE /* CONTINUE @Y30OE78*/ 02568000 * IF VOLCONT=ON THEN /* IF VOLUME PARAMETER @Y30OE78 02569000 * CONTIN IS EXPECTED, @Y30OE78*/ 02570000 B @RC00845 0847 02571000 @RF00845 TM VOLCONT,B'00000100' 0847 02572000 BNO @RF00847 0847 02573000 * CALL VOLSCAN; /* PROCESS IT @Y30OE78*/ 02574000 BAL @14,VOLSCAN 0848 02575000 * ELSE /* CONTINUE @Y30OE78*/ 02576000 * IF RECJCL(OPNDPTR:OPNDPTR+LENGTH(KDSID)-1)=/* @Y30OE78*/ 02577000 * KDSID THEN /* IF DSID FOUND, @Y30OE78*/ 02578000 B @RC00847 0849 02579000 @RF00847 LA @04,RECJCL-1(OPNDPTR) 0849 02580000 CLC 0(5,@04),@CC00306 0849 02581000 BNE @RF00849 0849 02582000 * DO; /* PROCESS IT @Y30OE78*/ 02583000 * OPNDPTR=OPNDPTR+LENGTH(KDSID);/* BUMP PAST IT 0851 02584000 * @Y30OE78*/ 02585000 AH OPNDPTR,@CH00301 0851 02586000 * CALL DSIDSCAN; /* PROCESS IT @Y30OE78*/ 02587000 BAL @14,DSIDSCAN 0852 02588000 * END; /* @Y30OE78*/ 02589000 * ELSE /* CHECK FOR OTHERS @Y30OE78*/ 02590000 * IF RECJCL(OPNDPTR:OPNDPTR+LENGTH(KVOL)-1)=/* @Y30OE78*/ 02591000 * KVOL THEN /* IF KEYWORD IS VOL= @Y30OE78*/ 02592000 B @RC00849 0854 02593000 @RF00849 LA @04,RECJCL-1(OPNDPTR) 0854 02594000 CLC 0(4,@04),@CC00308 0854 02595000 BNE @RF00854 0854 02596000 * DO; /* @Y30OE78*/ 02597000 * OPNDPTR=OPNDPTR+LENGTH(KVOL);/* BUMP PAST 0856 02598000 * @Y30OE78*/ 02599000 AH OPNDPTR,@CH00056 0856 02600000 * CALL VOLSCAN; /* PROCESS VOL PARAMETER @Y30OE78*/ 02601000 BAL @14,VOLSCAN 0857 02602000 * END; /* @Y30OE78*/ 02603000 * ELSE /* CHECK FOR OTHERS @Y30OE78*/ 02604000 * IF RECJCL(OPNDPTR:OPNDPTR+LENGTH(KVOLU)-1)=/* 0859 02605000 * @Y30OE78*/ 02606000 * KVOLU THEN /* KEYWORD IS VOLUME=, @Y30OE78*/ 02607000 B @RC00854 0859 02608000 @RF00854 LA @04,RECJCL-1(OPNDPTR) 0859 02609000 CLC 0(7,@04),@CC00311 0859 02610000 BNE @RF00859 0859 02611000 * DO; /* @Y30OE78*/ 02612000 * OPNDPTR=OPNDPTR+LENGTH(KVOLU);/* BUMP BY 0861 02613000 * @Y30OE78*/ 02614000 AH OPNDPTR,@CH00310 0861 02615000 * CALL VOLSCAN; /* PROCESS VOL KEYWORD @Y30OE78*/ 02616000 BAL @14,VOLSCAN 0862 02617000 * END; /* @Y30OE78*/ 02618000 * ELSE /* CHECK OTHERS @Y30OE78*/ 02619000 * IF RECJCL(OPNDPTR:OPNDPTR+LENGTH(KDLM)-1)=/* 0864 02620000 * @Y30OE78*/ 02621000 * KDLM THEN /* IF KEYWORD IS DLM=, @Y30OE78*/ 02622000 B @RC00859 0864 02623000 @RF00859 LA @04,RECJCL-1(OPNDPTR) 0864 02624000 CLC 0(4,@04),@CC00313 0864 02625000 BNE @RF00864 0864 02626000 * DO; /* @Y30OE78*/ 02627000 * OPNDPTR=OPNDPTR+LENGTH(KDLM);/* BUMP BY 0866 02628000 * @Y30OE78*/ 02629000 AH OPNDPTR,@CH00056 0866 02630000 * CALL DLMSCAN;/* PROCESS IT @Y30OE78*/ 02631000 BAL @14,DLMSCAN 0867 02632000 * END; /* @Y30OE78*/ 02633000 * ELSE 0869 02634000 * ; /* @Y30OE78*/ 02635000 @RF00864 DS 0H 0870 02636000 * OPNDPTR=NXTOPND; /* GET NEXT OPERAND @Y30OE78*/ 02637000 @RC00859 DS 0H 0870 02638000 @RC00854 DS 0H 0870 02639000 @RC00849 DS 0H 0870 02640000 @RC00847 DS 0H 0870 02641000 @RC00845 LR OPNDPTR,NXTOPND 0870 02642000 * END; /* @Y30OE78*/ 02643000 * 0871 02644000 @DE00843 TM ATOPND,B'00000001' 0871 02645000 BO @DL00843 0871 02646000 * /*************************************************************/ 02647000 * /* */ 02648000 * /* END SEGMENT - SYSIN SCAN @Y30OE78*/ 02649000 * /* */ 02650000 * /*************************************************************/ 02651000 * 0872 02652000 * IF OPCONTEX=ON| /* IF CONTINUATIONS @Y30OE78*/ 02653000 * CMCONTEX=ON THEN /* ARE EXPECTED, @Y30OE78*/ 02654000 TM OPCONTEX,B'00000110' 0872 02655000 BZ @RF00872 0872 02656000 * DDCONT=ON; /* SET CONTIN SWITCH @Y30OE78*/ 02657000 OI DDCONT,B'00000010' 0873 02658000 * ELSE /* PROCESS THE STMT @Y30OE78*/ 02659000 * DO; /* @Y30OE78*/ 02660000 B @RC00872 0874 02661000 @RF00872 DS 0H 0875 02662000 * IF DLMF=ON THEN /* IF DLM WAS FOUND @Y30OE78*/ 02663000 TM DLMF,B'01000000' 0875 02664000 BNO @RF00875 0875 02665000 * IF DLME=ON THEN /* IF VALUE ERROR, @Y30OE78*/ 02666000 TM DLME,B'00001000' 0876 02667000 BNO @RF00876 0876 02668000 * DO; /* SET DEFAULT CONDITION @Y30OE78*/ 02669000 * CURDLM='/*'; /* DEFAULT DLM VALUE @Y30OE78*/ 02670000 MVC CURDLM(2),@CC01493 0878 02671000 * JCLINDAT=OFF; /* DEFAULT DD * @Y30OE78*/ 02672000 NI JCLINDAT,B'10111111' 0879 02673000 * END; /* @Y30OE78*/ 02674000 * ELSE /* IF GOOD VALUE FOUND @Y30OE78*/ 02675000 * CURDLM=ODLM; /* MAKE IT THE CURRENT @Y30OE78 02676000 * DELIMITER @Y30OE78*/ 02677000 B @RC00876 0881 02678000 @RF00876 MVC CURDLM(2),ODLM 0881 02679000 * ELSE /* OTHERWISE SET DEFAULT @Y30OE78*/ 02680000 * CURDLM='/*'; /* DELIMITER @Y30OE78*/ 02681000 B @RC00875 0882 02682000 @RF00875 MVC CURDLM(2),@CC01493 0882 02683000 * IF DSIDF=OFF| /* IF DSID NOT FOUND @Y30OE78*/ 02684000 * DSIDNULL=ON THEN /* OR WAS NULL, @Y30OE78*/ 02685000 @RC00875 TM DSIDF,B'10000000' 0883 02686000 BZ @RT00883 0883 02687000 TM DSIDNULL,B'00010000' 0883 02688000 BNO @RF00883 0883 02689000 @RT00883 DS 0H 0884 02690000 * ISDMODE=ON; /* START INSTREAM DATA @Y30OE78 02691000 * MODE @Y30OE78*/ 02692000 OI ISDMODE,B'10000000' 0884 02693000 * ELSE /* IF DSID FOUND, @Y30OE78 02694000 * IT IS ADS REQUEST @Y30OE78*/ 02695000 * IF STARTJOB=OFF THEN /* IF NOT SKIPPING TO @Z30OE78 02696000 * START JOB, @Z30OE78*/ 02697000 B @RC00883 0885 02698000 @RF00883 TM STARTJOB,B'10000000' 0885 02699000 BNZ @RF00885 0885 02700000 * IF ADS#=ZERO THEN /* IF DIRECT MODE, @Y30OE78*/ 02701000 ICM @08,15,ADS# 0886 02702000 BNZ @RF00886 0886 02703000 * DO; /* PROCESS AS ERROR @Y30OE78*/ 02704000 * IJSCERR=ON; /* SET SCAN ERROR SW @Y30OE78*/ 02705000 OI IJSCERR,B'00000100' 0888 02706000 * RTNCODE=PARTERR;/* SET RETURN CODE @Y30OE78*/ 02707000 MVI RTNCODE,X'04' 0889 02708000 * MSGIDEX=M556; /* SET MSG INDEX @Y30OE78*/ 02709000 MVI MSGIDEX,X'1F' 0890 02710000 * MSGTYPE=MTYPWTO;/* INDICATE WTO @Y30OE78*/ 02711000 MVI MSGTYPE,X'01' 0891 02712000 * JJJK=JJJV; /* SET JOBNAME KEY @Y30OE78*/ 02713000 MVI JJJK,X'0B' 0892 02714000 * JJJ=CURJOBNM; /* GET JOBNAME @Y30OE78*/ 02715000 MVC JJJ(8),CURJOBNM 0893 02716000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS @Y30OE78*/ 02717000 LA PARMPTR,MSGINT 0894 02718000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN @Y30OE78*/ 02719000 L @15,@CV00048 0895 02720000 BALR @14,@15 0895 02721000 * JJJK=SKIPV; /* RESET JOBNAME KEY @Y30OE78*/ 02722000 MVI JJJK,X'00' 0896 02723000 * END; /* @Y30OE78*/ 02724000 * ELSE /* PROCESS AS ADS REQ @Y30OE78*/ 02725000 * DO; /* @Y30OE78*/ 02726000 B @RC00886 0898 02727000 @RF00886 DS 0H 0899 02728000 * J=DSNPTRJ-FRSTADSN;/* CALCULATE TOTAL @Y30OE78*/ 02729000 L J,DSNPTRJ 0899 02730000 SL J,FRSTADSN 0899 02731000 * J=J/LENGTH(DSNENTRY);/* NO OF ADS @Y30OE78*/ 02732000 LR @04,J 0900 02733000 SRDA @04,32 0900 02734000 D @04,@CF01204 0900 02735000 LR J,@05 0900 02736000 * IF ADSNUM>999| /* IF NUMBER OF ADS PER @Y30OE78 02737000 * JOB IS TOO BIG OR @Y30OE78*/ 02738000 * J^UCBNAME;/* GET @Y30OE78 02773000 * DEVICE ADDRESS @Y30OE78*/ 02774000 B @RC00910 0912 02775000 @RF00910 SLR @08,@08 0912 02776000 ICM @08,7,DEVPTR 0912 02777000 MVC DDD(3),UCBNAME(@08) 0912 02778000 * JJJK=JJJV; /* SET JOBNAME KEY @Y30OE78*/ 02779000 @RC00910 MVI JJJK,X'0B' 0913 02780000 * JJJ=CURJOBNM;/* SET JOBNAME @Y30OE78*/ 02781000 MVC JJJ(8),CURJOBNM 0914 02782000 * PARMPTR=ADDR(MSGINT);/* POINT TO @Y30OE78 02783000 * PARAMETER LIST @Y30OE78*/ 02784000 LA PARMPTR,MSGINT 0915 02785000 * CALL IOEDKMSG;/* WRITE MSG @Y30OE78*/ 02786000 L @15,@CV00048 0916 02787000 BALR @14,@15 0916 02788000 * DDDK=SKIPV; /* RESET DEV ADDR KEY @Y30OE78*/ 02789000 MVI DDDK,X'00' 0917 02790000 * JJJK=SKIPV; /* AND JOBNAME KEY @Y30OE78*/ 02791000 MVI JJJK,X'00' 0918 02792000 * END; /* @Y30OE78*/ 02793000 * ELSE /* OTHERWISE BUILD CNTRL @Y30OE78*/ 02794000 * DO; /* INFO FOR ADS REQUEST @Y30OE78 02795000 * AND DSNTAB ENTRY @Y30OE78*/ 02796000 B @RC00901 0920 02797000 @RF00901 DS 0H 0921 02798000 * CNTRLSW=CNTRLSWI;/* INIT CNTRL SW @Y30OE78*/ 02799000 MVI CNTRLSW,X'C0' 0921 02800000 * CDD=ON; /* SET DD INDICATOR @Y30OE78*/ 02801000 * LAST=ON; /* SET LAST RECORD IN @Y30OE78 02802000 * STMT INDICATOR @Y30OE78*/ 02803000 OI CDD,B'00010001' 0923 02804000 * CTRLJOB#=CURJNUM;/* PUT CURRENT JOB @Y30OE78 02805000 * NUMBER IN CNTRL INFO @Y30OE78*/ 02806000 MVC CTRLJOB#(4),CURJNUM 0924 02807000 * CVD(ADSNUM,WORKA);/* GET ADS NUM @Y30OE78*/ 02808000 LH @08,ADSNUM 0925 02809000 CVD @08,WORKA 0925 02810000 * UNPK(CTRLADS#,WORKA(7:8));/* IN @Y30OE78*/ 02811000 UNPK CTRLADS#(3),WORKA+6(2) 0926 02812000 * MVZ(CTRLADS#(3),ZONE);/* EBCDIC @Y30OE78*/ 02813000 MVZ CTRLADS#+2(1),@CB00080 0927 02814000 * RDWLNA=LENGTH(RDWA)+/* INDICATE @Y30OE78*/ 02815000 * LENGTH(RECJCL)+/* CNTRL INFO IS @Y30OE78*/ 02816000 * LENGTH(RECNTRLA);/* IS TO BE @Y30OE78 02817000 * WRITTEN WITH RECORD @Y30OE78*/ 02818000 MVC RDWLNA(2),@CH01603 0928 02819000 * MEMNAME=RECNTRLA;/* PUT JOBNUM & @Y30OE78 02820000 * ADSNUM IN MEMBER NAME @Y30OE78 02821000 * OF DSNTAB ENTRY @Y30OE78*/ 02822000 L @08,DSNPTRJ 0929 02823000 MVC MEMNAME(8,@08),RECNTRLA 0929 02824000 * Z='Z'; /* MAKE 1ST CHAR OF @Y30OE78 02825000 * MEMNAME A Z @Y30OE78*/ 02826000 MVI Z(@08),C'Z' 0930 02827000 * TTR0=ZERO; /* INIT TTR0 @Y30OE78*/ 02828000 SLR @03,@03 0931 02829000 ST @03,TTR0(,@08) 0931 02830000 * JOBNM=CURJOBNM;/* PUT JOB NAME @Y30OE78 02831000 * IN DSNTAB ENTRY @Y30OE78*/ 02832000 MVC JOBNM(8,@08),CURJOBNM 0932 02833000 * JVALS=OVALUES;/* MOVE DSID, @Y30OE78 02834000 * VOLSER TO ENTRY @Y30OE78*/ 02835000 MVC JVALS(14,@08),OVALUES 0933 02836000 * DLM=CURDLM; /* SAVE DELIMETER @Y30OE78 02837000 * VALUE FOR DATA SET @Y30OE78*/ 02838000 MVC DLM(2,@08),CURDLM 0934 02839000 * DSNFLG=ZERO;/* INITIALIZE FLAG @Y30OE78*/ 02840000 MVI DSNFLG(@08),X'00' 0935 02841000 * IF DSVERIFY=ON THEN/* IF VERIFY WAS @Y30OE78*/ 02842000 TM DSVERIFY,B'01000000' 0936 02843000 BNO @RF00936 0936 02844000 * JCLVERF=ON;/* SPECIFIED, SET @Y30OE78*/ 02845000 OI JCLVERF(@08),B'01000000' 0937 02846000 * IF VOLSERF=ON&/* IF VOLSER WAS @Y30OE78*/ 02847000 * SERNULL=OFF THEN/* FOUND AND @Y30OE78*/ 02848000 @RF00936 TM VOLSERF,B'00100000' 0938 02849000 BNO @RF00938 0938 02850000 TM SERNULL,B'00001000' 0938 02851000 BNZ @RF00938 0938 02852000 * VSERPRES=ON;/* NOT NULL, INDICATE @Y30OE78*/ 02853000 L @08,DSNPTRJ 0939 02854000 OI VSERPRES(@08),B'00100000' 0939 02855000 * IF JCLINDAT=ON THEN/* IF A DD DATA @Y30OE78*/ 02856000 @RF00938 TM JCLINDAT,B'01000000' 0940 02857000 BNO @RF00940 0940 02858000 * JCLALLOW=ON;/* IND IN DSNTAB @Y30OE78*/ 02859000 L @08,DSNPTRJ 0941 02860000 OI JCLALLOW(@08),B'10000000' 0941 02861000 * IF VOLSERE=ON THEN/* IF BAD VOLSER, @Y30OE78*/ 02862000 @RF00940 TM VOLSERE,B'00010000' 0942 02863000 BNO @RF00942 0942 02864000 * DO; /* INDICATE ERROR @Y30OE78*/ 02865000 * JCLMSG=ON;/* @Y30OE78*/ 02866000 L @08,DSNPTRJ 0944 02867000 OI JCLMSG(@08),B'00001000' 0944 02868000 * ERRCODE=CDSERE;/* @Y30OE78*/ 02869000 MVC ERRCODE(3,@08),@CC00351 0945 02870000 * END; /* @Y30OE78*/ 02871000 * DSNPTRJ=DSNPTRJ+LENGTH(DSNENTRY);/* @Y30OE78 02872000 * POINT TO NEXT ENTRY @Y30OE78*/ 02873000 @RF00942 LA @08,40 0947 02874000 AL @08,DSNPTRJ 0947 02875000 ST @08,DSNPTRJ 0947 02876000 * ADSNUM=ADSNUM+1;/* BUMP ADS PER JOB @Y30OE78*/ 02877000 LA @08,1 0948 02878000 AH @08,ADSNUM 0948 02879000 STH @08,ADSNUM 0948 02880000 * END; /* @Y30OE78*/ 02881000 * END; /* @Y30OE78*/ 02882000 * END; /* @Y30OE78*/ 02883000 * END; /* @Y30OE78*/ 02884000 * END DDPROC; /* @Y30OE78*/ 02885000 @EL00005 DS 0H 0953 02886000 @EF00005 DS 0H 0953 02887000 @ER00005 L @14,@SA00005 0953 02888000 BR @14 0953 02889000 * 0954 02890000 */********************************************************** @Y30OE78*/ 02891000 */* @Y30OE78*/ 02892000 */* ROUTINE NAME- @Y30OE78*/ 02893000 */* PARMSCAN @Y30OE78*/ 02894000 */* @Y30OE78*/ 02895000 */* FUNCTION- @Y30OE78*/ 02896000 */* SCAN PAST THE CURRENT PARAMETER AND DETERMINE IF @Y30OE78*/ 02897000 */* IT IS CONTINUED @Y30OE78*/ 02898000 */* DETERMINE IF THERE ARE MORE PARAMETERS TO BE SCANNED @Y30OE78*/ 02899000 */* SAVE POINTER TO NEXT OPERAND @Y30OE78*/ 02900000 */* @Y30OE78*/ 02901000 */* INPUT- @Y30OE78*/ 02902000 */* OPNDPTR POINTS TO CURRENT PARAMETER IN THE JCL @Y30OE78*/ 02903000 */* RECORD IN THE RECORD WORK AREA @Y30OE78*/ 02904000 */* @Y30OE78*/ 02905000 */* OUTPUT- @Y30OE78*/ 02906000 */* NXTOPND POINTS TO NEXT PARAMETER OR BLANK AFTER @Y30OE78*/ 02907000 */* CURRENT PARAMETER @Y30OE78*/ 02908000 */* STATUS SWITCHES(ATOPND) INDICATES IF ANY PARAMTERS @Y30OE78*/ 02909000 */* FOLLOW THE CURRENT PARAMETER @Y30OE78*/ 02910000 */* @Y30OE78*/ 02911000 */* ROUTINES CALLED- @Y30OE78*/ 02912000 */* NONE @Y30OE78*/ 02913000 */* @Y30OE78*/ 02914000 */* MACROS- @Y30OE78*/ 02915000 */* NONE @Y30OE78*/ 02916000 */* @Y30OE78*/ 02917000 */********************************************************** @Y30OE78*/ 02918000 * 0954 02919000 *PARMSCAN: /* SCAN OPERANDS OF DD @Y30OE78*/ 02920000 * PROC OPTIONS(SAVE(RTNREG),NOSAVEAREA);/* @Y30OE78*/ 02921000 PARMSCAN ST @14,12(,@13) 0954 02922000 * PSCEND=OFF; /* SET LOOP CONTROL @Y30OE78*/ 02923000 * PCONT=OFF; /* INDICATE NO CONTINUED @Y30OE78 02924000 * PARAMETERS @Y30OE78*/ 02925000 NI PSCEND,B'11100111' 0956 02926000 * QUOTE=OFF; /* INIT QUOTE INDICATOR @Y30OE78*/ 02927000 NI QUOTE,B'11111110' 0957 02928000 * DO I=OPNDPTR TO CONTCOL WHILE /* PROCESS ONE PARAMETER @Y30OE78*/ 02929000 * PSCEND=OFF; /* ON A JCL RECORD @Y30OE78*/ 02930000 LR I,OPNDPTR 0958 02931000 B @DE00958 0958 02932000 @DL00958 TM PSCEND,B'00010000' 0958 02933000 BNZ @DC00958 0958 02934000 * IF RECJCL(I)=BLANK| /* IF HIT BLANK DELIMITR @Y30OE78*/ 02935000 * I>LASTCOL THEN /* OR DONE WITH RECORD, @Y30OE78*/ 02936000 LA @08,RECJCL-1(I) 0959 02937000 CLI 0(@08),C' ' 0959 02938000 BE @RT00959 0959 02939000 CH I,@CH00200 0959 02940000 BNH @RF00959 0959 02941000 @RT00959 DS 0H 0960 02942000 * DO; /* PROCESS AS DELIMITED @Y30OE78*/ 02943000 * IF QUOTE=ON THEN /* IF IN QUOTE STRING, @Y30OE78*/ 02944000 TM QUOTE,B'00000001' 0961 02945000 BNO @RF00961 0961 02946000 * IF I>LASTCOL THEN /* AND PAST END OF REC, @Y30OE78*/ 02947000 CH I,@CH00200 0962 02948000 BNH @RF00962 0962 02949000 * DO; /* @Y30OE78*/ 02950000 * JBJCLERR=ON; /* JOB JCL ERROR @Y30OE78*/ 02951000 OI JBJCLERR,B'01000000' 0964 02952000 * ATOPND=OFF; /* INDICATE END OF OPND @Y30OE78*/ 02953000 NI ATOPND,B'11111110' 0965 02954000 * END; /* @Y30OE78*/ 02955000 * ELSE 0967 02956000 * ; /* @Y30OE78*/ 02957000 @RF00962 DS 0H 0968 02958000 * ELSE /* NOT IN QUOTE STRING @Y30OE78*/ 02959000 * DO; /* @Y30OE78*/ 02960000 B @RC00961 0968 02961000 @RF00961 DS 0H 0969 02962000 * PSCEND=ON; /* DONE SCANNING @Y30OE78*/ 02963000 OI PSCEND,B'00010000' 0969 02964000 * ATOPND=OFF; /* NO MORE OPND @Y30OE78*/ 02965000 NI ATOPND,B'11111110' 0970 02966000 * IF PRENCNT^=ZERO THEN /* IF WITHIN A PARAMETER @Y30OE78*/ 02967000 ICM @08,3,PRENCNT 0971 02968000 BZ @RF00971 0971 02969000 * IF RECJCL(I-1)=CCOMMA THEN/* AND LAST CHAR @Y30OE78 02970000 * WAS COMMA, @Y30OE78*/ 02971000 LA @08,RECJCL-2(I) 0972 02972000 CLI 0(@08),C',' 0972 02973000 BNE @RF00972 0972 02974000 * PCONT=ON; /* INDICATE PARM CONTIN @Y30OE78*/ 02975000 OI PCONT,B'00001000' 0973 02976000 * ELSE /* NO COMMA, ERROR @Y30OE78*/ 02977000 * JBJCLERR=ON; /* SET ERROR SWITCH @Y30OE78*/ 02978000 B @RC00972 0974 02979000 @RF00972 OI JBJCLERR,B'01000000' 0974 02980000 * END; /* @Y30OE78*/ 02981000 * END; /* @Y30OE78*/ 02982000 * ELSE /* CHECK OTHER CHAR @Y30OE78*/ 02983000 * IF RECJCL(I)=CCOMMA THEN /* IF COMMA, PROCESS @Y30OE78*/ 02984000 B @RC00959 0977 02985000 @RF00959 LA @08,RECJCL-1(I) 0977 02986000 CLI 0(@08),C',' 0977 02987000 BNE @RF00977 0977 02988000 * IF QUOTE=OFF& /* IGNORE COMMA IN QUOTE @Y30OE78*/ 02989000 * PRENCNT=ZERO THEN /* STRING OR MIDDLE OF @Y30OE78 02990000 * PARAMETER @Y30OE78*/ 02991000 TM QUOTE,B'00000001' 0978 02992000 BNZ @RF00978 0978 02993000 ICM @08,3,PRENCNT 0978 02994000 BNZ @RF00978 0978 02995000 * PSCEND=ON; /* OTHERWISE IT DELIMIT @Y30OE78*/ 02996000 OI PSCEND,B'00010000' 0979 02997000 * ELSE 0980 02998000 * ; /* @Y30OE78*/ 02999000 @RF00978 DS 0H 0981 03000000 * ELSE /* NOT COMMA CHECK OTHER @Y30OE78*/ 03001000 * IF RECJCL(I)=CLPREN& /* IF LEFT PAREN OUTSIDE @Y30OE78*/ 03002000 * QUOTE=OFF THEN /* OF QUOTES, @Y30OE78*/ 03003000 B @RC00977 0981 03004000 @RF00977 LA @08,RECJCL-1(I) 0981 03005000 CLI 0(@08),C'(' 0981 03006000 BNE @RF00981 0981 03007000 TM QUOTE,B'00000001' 0981 03008000 BNZ @RF00981 0981 03009000 * PRENCNT=PRENCNT+1; /* COUNT IT @Y30OE78*/ 03010000 LA @08,1 0982 03011000 AH @08,PRENCNT 0982 03012000 STH @08,PRENCNT 0982 03013000 * ELSE /* CHECK OTHER CHARS @Y30OE78*/ 03014000 * IF RECJCL(I)=CRPREN& /* IF RIGHT PAREN OUTSID @Y30OE78*/ 03015000 * QUOTE=OFF THEN /* OF QUOTES, @Y30OE78*/ 03016000 B @RC00981 0983 03017000 @RF00981 LA @08,RECJCL-1(I) 0983 03018000 CLI 0(@08),C')' 0983 03019000 BNE @RF00983 0983 03020000 TM QUOTE,B'00000001' 0983 03021000 BNZ @RF00983 0983 03022000 * IF PRENCNT>ZERO THEN /* AND RIGHT PAREN IS @Y30OE78 03023000 * EXPECTED, @Y30OE78*/ 03024000 LH @08,PRENCNT 0984 03025000 LTR @08,@08 0984 03026000 BNP @RF00984 0984 03027000 * PRENCNT=PRENCNT-1; /* DECREMENT PAREN COUNT @Y30OE78*/ 03028000 BCTR @08,0 0985 03029000 STH @08,PRENCNT 0985 03030000 * ELSE /* IF NONE EXPECTED @Y30OE78*/ 03031000 * JBJCLERR=ON; /* INDICATE ERROR @Y30OE78*/ 03032000 B @RC00984 0986 03033000 @RF00984 OI JBJCLERR,B'01000000' 0986 03034000 * ELSE /* CHECK FOR OTHER CHAR @Y30OE78*/ 03035000 * IF RECJCL(I)=CQUOTE THEN/* IF HIT QUOTE, @Y30OE78*/ 03036000 B @RC00983 0987 03037000 @RF00983 LA @08,RECJCL-1(I) 0987 03038000 CLI 0(@08),C'''' 0987 03039000 BNE @RF00987 0987 03040000 * IF QUOTE=ON THEN /* FLIP QUOTE SWITCH @Y30OE78*/ 03041000 TM QUOTE,B'00000001' 0988 03042000 BNO @RF00988 0988 03043000 * QUOTE=OFF; /* @Y30OE78*/ 03044000 NI QUOTE,B'11111110' 0989 03045000 * ELSE /* @Y30OE78*/ 03046000 * QUOTE=ON; /* @Y30OE78*/ 03047000 B @RC00988 0990 03048000 @RF00988 OI QUOTE,B'00000001' 0990 03049000 * END; /* @Y30OE78*/ 03050000 @RC00988 DS 0H 0991 03051000 @RF00987 DS 0H 0991 03052000 @RC00983 DS 0H 0991 03053000 @RC00981 DS 0H 0991 03054000 @RC00977 DS 0H 0991 03055000 @RC00959 AH I,@CH00061 0991 03056000 @DE00958 CH I,@CH00202 0991 03057000 BNH @DL00958 0991 03058000 @DC00958 DS 0H 0992 03059000 * NXTOPND=I; /* SAVE POINTER TO NEXT @Y30OE78*/ 03060000 LR NXTOPND,I 0992 03061000 * END PARMSCAN; /* @Y30OE78*/ 03062000 @EL00006 DS 0H 0993 03063000 @EF00006 DS 0H 0993 03064000 @ER00006 L @14,12(,@13) 0993 03065000 BR @14 0993 03066000 * 0994 03067000 */********************************************************** @Y30OE78*/ 03068000 */* @Y30OE78*/ 03069000 */* ROUTINE NAME- @Y30OE78*/ 03070000 */* DSIDSCAN @Y30OE78*/ 03071000 */* @Y30OE78*/ 03072000 */* FUNCTION- @Y30OE78*/ 03073000 */* DETECT DUPLICATE DSID KEYWORD SPECIFICATIONS @Y30OE78*/ 03074000 */* VALIDITY CHECK THE VALUE SPECIFIED WITH THE @Y30OE78*/ 03075000 */* DSID KEYWORD FOUND IN SYSIN SCAN SEGMENT OR THE @Y30OE78*/ 03076000 */* CONTINUATION OF SUCH A VALUE @Y30OE78*/ 03077000 */* SAVE VALID DSID VALUE IN SYSIN SCAN WORK AREA @Y30OE78*/ 03078000 */* @Y30OE78*/ 03079000 */* INPUT- @Y30OE78*/ 03080000 */* OPNDPTR POINTS TO BEGINNING OF VALUE SPECIFIED ON @Y30OE78*/ 03081000 */* DSID KEYWORD @Y30OE78*/ 03082000 */* STATUS SWITCH(DSIDCONT) INDICATES IF A VALUE @Y30OE78*/ 03083000 */* CONTINUATION IS TO BE PROCESSED @Y30OE78*/ 03084000 */* @Y30OE78*/ 03085000 */* OUTPUT- @Y30OE78*/ 03086000 */* STATUS SWITCH(DSIDCONT) INDICATES IF VALUE IS @Y30OE78*/ 03087000 */* CONTINUED @Y30OE78*/ 03088000 */* SYSIN SCAN WORK AREA(SYSCWK) @Y30OE78*/ 03089000 */* DSVERIFY INDICATES IF VERIFY WAS REQUESTED @Y30OE78*/ 03090000 */* DSIDE INDICATES DSID VALUE ERROR @Y30OE78*/ 03091000 */* DSIDNULL INDICATES DSID VALUE WAS NULL @Y30OE78*/ 03092000 */* ODSID CONTAINS DSID VALUE IF VALID VALUE WAS FOUND @Y30OE78*/ 03093000 */* @Y30OE78*/ 03094000 */* ROUTINES CALLED- @Y30OE78*/ 03095000 */* NONE @Y30OE78*/ 03096000 */* @Y30OE78*/ 03097000 */* MACROS- @Y30OE78*/ 03098000 */* NONE @Y30OE78*/ 03099000 */* @Y30OE78*/ 03100000 */********************************************************** @Y30OE78*/ 03101000 * 0994 03102000 *DSIDSCAN: /* ROUTINE TO SCAN DSID @Y30OE78*/ 03103000 * PROC OPTIONS(SAVE(RTNREG),NOSAVEAREA);/* @Y30OE78*/ 03104000 DSIDSCAN ST @14,12(,@13) 0994 03105000 * IF DSIDCONT=ON THEN /* IF PROCESSING CONTIN, @Y30OE78*/ 03106000 TM DSIDCONT,B'00000010' 0995 03107000 BNO @RF00995 0995 03108000 * DO; /* @Y30OE78*/ 03109000 * DSIDCONT=OFF; /* RESET CONTIN INDICATR @Y30OE78*/ 03110000 NI DSIDCONT,B'11111101' 0997 03111000 * IF RECJCL(OPNDPTR:OPNDPTR+LENGTH(DSIDEND)-1)=/* IF @Y30OE78*/ 03112000 * DSIDEND THEN /* CONTIN IS VALID, @Y30OE78*/ 03113000 LA @04,RECJCL-1(OPNDPTR) 0998 03114000 CLC 0(2,@04),@CC00319 0998 03115000 BNE @RF00998 0998 03116000 * DSVERIFY=ON; /* INDICATE VERIFY REQD @Y30OE78*/ 03117000 OI DSVERIFY,B'01000000' 0999 03118000 * ELSE /* INVALID CONTINUATION, @Y30OE78*/ 03119000 * DSIDE=ON; /* INDICATE ERROR @Y30OE78*/ 03120000 B @RC00998 1000 03121000 @RF00998 OI DSIDE,B'00100000' 1000 03122000 * END; /* @Y30OE78*/ 03123000 * ELSE /* NOT A DSID CONTIN, @Y30OE78*/ 03124000 * IF DSIDF=ON THEN /* IF DSID ALREADY FOUND @Y30OE78*/ 03125000 B @RC00995 1002 03126000 @RF00995 TM DSIDF,B'10000000' 1002 03127000 BNO @RF01002 1002 03128000 * DSIDE=ON; /* INDICATE ERROR @Y30OE78*/ 03129000 OI DSIDE,B'00100000' 1003 03130000 * ELSE /* IF NOT FOUND BEFORE, @Y30OE78*/ 03131000 * DO; /* PROCESS IT @Y30OE78*/ 03132000 B @RC01002 1004 03133000 @RF01002 DS 0H 1005 03134000 * DSIDF=ON; /* INDICATE DSID FOUND @Y30OE78*/ 03135000 OI DSIDF,B'10000000' 1005 03136000 * L=OPNDPTR; /* GET FIRST CHARACTER @Y30OE78*/ 03137000 LR L,OPNDPTR 1006 03138000 * IF RECJCL(L)=BLANK| /* IF NULL DSID WAS @Y30OE78*/ 03139000 * RECJCL(L)=CCOMMA THEN /* SPECIFIED, @Y30OE78*/ 03140000 LA @15,RECJCL-1(L) 1007 03141000 CLI 0(@15),C' ' 1007 03142000 BE @RT01007 1007 03143000 LA @15,RECJCL-1(L) 1007 03144000 CLI 0(@15),C',' 1007 03145000 BNE @RF01007 1007 03146000 @RT01007 DS 0H 1008 03147000 * DSIDNULL=ON; /* SET INDICATOR @Y30OE78*/ 03148000 OI DSIDNULL,B'00010000' 1008 03149000 * ELSE /* A DSID WAS FOUND, @Y30OE78*/ 03150000 * DO; /* SCAN IT @Y30OE78*/ 03151000 B @RC01007 1009 03152000 @RF01007 DS 0H 1010 03153000 * IF RECJCL(L)=CLPREN THEN/* IF 1ST CHAR IS (, @Y30OE78*/ 03154000 LA @15,RECJCL-1(L) 1010 03155000 CLI 0(@15),C'(' 1010 03156000 BNE @RF01010 1010 03157000 * DO; /* @Y30OE78*/ 03158000 * PRENHIT=ON; /* SET INDICATOR & @Y30OE78*/ 03159000 OI PRENHIT,B'00000100' 1012 03160000 * L=L+1; /* BUMP PAST IT @Y30OE78*/ 03161000 AH L,@CH00061 1013 03162000 * END; /* @Y30OE78*/ 03163000 * ELSE /* IF NOT (, @Y30OE78*/ 03164000 * PRENHIT=OFF; /* SET INDICATOR @Y30OE78*/ 03165000 B @RC01010 1015 03166000 @RF01010 NI PRENHIT,B'11111011' 1015 03167000 * HYPHTAB=TZERO; /* MAKE HYPHEN VALID @Y30OE78*/ 03168000 @RC01010 MVI HYPHTAB,X'00' 1016 03169000 * LBRCTAB=TZERO; /* MAKE LEFT BRACE VALID @Y30OE78*/ 03170000 MVI LBRCTAB,X'00' 1017 03171000 * CHARHIT=ZERO; /* INITIALIZE TRT PASSBK @Y30OE78*/ 03172000 SLR CHARHIT,CHARHIT 1018 03173000 * TRT(RECJCL(L:L+LENGTH(ODSID)),TRTTAB);/* SCAN 9 1019 03174000 * @Y30OE78 03175000 * CHARS OF DSID VALUE @Y30OE78*/ 03176000 LA @15,RECJCL-1(L) 1019 03177000 TRT 0(9,@15),TRTTAB 1019 03178000 * IF CHARHIT=ZERO| /* IF NO DELIMITER HIT @Y30OE78*/ 03179000 * HITADDR=ADDR(RECJCL(L))|/* OR NO GOOD CHAR @Y30OE78 03180000 * FOUND OR @Y30OE78*/ 03181000 * RECJCL(L)=CHYPHEN|/* 1ST CHAR IS HYPHEN OR @Y30OE78*/ 03182000 * RECJCL(L)=CLBRACE|/* LEFT BRACE OR @Y30OE78*/ 03183000 * RECJCL(L)>=CZERO THEN/* NUMERIC, @Y30OE78*/ 03184000 CH CHARHIT,@CH00053 1020 03185000 BE @RT01020 1020 03186000 LA @00,RECJCL-1(L) 1020 03187000 CR HITADDR,@00 1020 03188000 BE @RT01020 1020 03189000 LA @15,RECJCL-1(L) 1020 03190000 CLI 0(@15),C'-' 1020 03191000 BE @RT01020 1020 03192000 LA @15,RECJCL-1(L) 1020 03193000 CLI 0(@15),X'C0' 1020 03194000 BE @RT01020 1020 03195000 LA @15,RECJCL-1(L) 1020 03196000 CLI 0(@15),C'0' 1020 03197000 BL @RF01020 1020 03198000 @RT01020 DS 0H 1021 03199000 * DSIDE=ON; /* INDICATE ERROR @Y30OE78*/ 03200000 OI DSIDE,B'00100000' 1021 03201000 * ELSE /* IF GOOD DSID VALUE, @Y30OE78*/ 03202000 * DO; /* @Y30OE78*/ 03203000 B @RC01020 1022 03204000 @RF01020 DS 0H 1023 03205000 * DO I=L TO L+LENGTH(ODSID) WHILE/* BUMP I TO 1023 03206000 * @Y30OE78*/ 03207000 * ADDR(RECJCL(I+1))=NXTOPND THEN /* IF SER KEYWORD NOT @Y30OE78*/ 03584000 CR L,NXTOPND 1107 03585000 BL @RF01107 1107 03586000 * IF PCONT=ON THEN /* FOUND AND PARM CONTIN @Y30OE78*/ 03587000 TM PCONT,B'00001000' 1108 03588000 BNO @RF01108 1108 03589000 * DO; /* SET INDICATORS TO @Y30OE78*/ 03590000 * PCONT=OFF; /* CONTINUE SCAN ON NEXT @Y30OE78*/ 03591000 NI PCONT,B'11110111' 1110 03592000 * VOLCONT=ON; /* RECORD @Y30OE78*/ 03593000 OI VOLCONT,B'00000100' 1111 03594000 * END; /* @Y30OE78*/ 03595000 * ELSE /* IF NOT FOUND, @Y30OE78*/ 03596000 * ; /* IGNORE VOL PARAMETER @Y30OE78*/ 03597000 @RF01108 DS 0H 1114 03598000 * ELSE /* IF SER KEYWORD FOUND, @Y30OE78*/ 03599000 * DO; /* @Y30OE78*/ 03600000 B @RC01107 1114 03601000 @RF01107 DS 0H 1115 03602000 * VOLSERF=ON; /* INDICATE FOUND @Y30OE78*/ 03603000 OI VOLSERF,B'00100000' 1115 03604000 * L=L+LENGTH(KSER); /* BUMP PAST KEYWORD @Y30OE78*/ 03605000 AH L,@CH00056 1116 03606000 * IF RECJCL(L)=BLANK| /* IF NULL VOLSER WAS @Y30OE78*/ 03607000 * RECJCL(L)=CCOMMA THEN/* SPECIFIED, @Y30OE78*/ 03608000 LA @15,RECJCL-1(L) 1117 03609000 CLI 0(@15),C' ' 1117 03610000 BE @RT01117 1117 03611000 LA @15,RECJCL-1(L) 1117 03612000 CLI 0(@15),C',' 1117 03613000 BNE @RF01117 1117 03614000 @RT01117 DS 0H 1118 03615000 * SERNULL=ON; /* SET INDICATOR @Y30OE78*/ 03616000 OI SERNULL,B'00001000' 1118 03617000 * ELSE /* A VOLSER WAS FOUND, @Y30OE78*/ 03618000 * DO; /* SCAN IT @Y30OE78*/ 03619000 B @RC01117 1119 03620000 @RF01117 DS 0H 1120 03621000 * IF RECJCL(L)=CLPREN THEN/* IF 1ST CHAR IS LEFT 1120 03622000 * @Y30OE78*/ 03623000 LA @15,RECJCL-1(L) 1120 03624000 CLI 0(@15),C'(' 1120 03625000 BNE @RF01120 1120 03626000 * L=L+1; /* PAREN, BUMP PAST IT @Y30OE78*/ 03627000 AH L,@CH00061 1121 03628000 * IF RECJCL(L)=CQUOTE THEN/* IF VOLSER IN QUOTES, 1122 03629000 * @Y30OE78*/ 03630000 @RF01120 LA @15,RECJCL-1(L) 1122 03631000 CLI 0(@15),C'''' 1122 03632000 BNE @RF01122 1122 03633000 * DO; /* @Y30OE78*/ 03634000 * QUOTE=ON; /* INDICATE IN QUOTES @Y30OE78*/ 03635000 OI QUOTE,B'00000001' 1124 03636000 * L=L+1; /* BUMP PAST QUOTE @Y30OE78*/ 03637000 AH L,@CH00061 1125 03638000 * END; /* @Y30OE78*/ 03639000 * ELSE /* IF NOT IN QUOTES @Y30OE78*/ 03640000 * QUOTE=OFF; /* IND NOT IN QUOTES @Y30OE78*/ 03641000 B @RC01122 1127 03642000 @RF01122 NI QUOTE,B'11111110' 1127 03643000 * HYPHTAB=BLANK; /* MAKE HYPHEN INVALID @Y30OE78*/ 03644000 @RC01122 MVI HYPHTAB,C' ' 1128 03645000 * LBRCTAB=BLANK; /* MAKE LEFT BRACE INVAL @Y30OE78*/ 03646000 MVI LBRCTAB,C' ' 1129 03647000 * NAT$=BLANK; /* MAKE NATIONAL CHARS @Y30OE78*/ 03648000 MVI NAT$,C' ' 1130 03649000 * NAT#=BLANK; /* INVALID @Y30OE78*/ 03650000 MVI NAT#,C' ' 1131 03651000 * NAT@=BLANK; /* @Y30OE78*/ 03652000 MVI NAT@,C' ' 1132 03653000 * CHARHIT=ZERO; /* INIT STOP CHAR @Y30OE78*/ 03654000 SLR CHARHIT,CHARHIT 1133 03655000 * TRT(RECJCL(L:L+LENGTH(OVOLSER)),TRTTAB);/* SCAN 1134 03656000 * @Y30OE78 03657000 * CHARS FOR VALID SER @Y30OE78*/ 03658000 LA @15,RECJCL-1(L) 1134 03659000 TRT 0(7,@15),TRTTAB 1134 03660000 * NAT$=TZERO; /* MAKE NATIONAL CHARS @Y30OE78*/ 03661000 MVI NAT$,X'00' 1135 03662000 * NAT#=TZERO; /* VALID FOR ALL OTHER @Y30OE78*/ 03663000 MVI NAT#,X'00' 1136 03664000 * NAT@=TZERO; /* PARAMETERS @Y30OE78*/ 03665000 MVI NAT@,X'00' 1137 03666000 * IF CHARHIT=ZERO| /* IF NO DELIMITER HIT @Y30OE78*/ 03667000 * HITADDR=ADDR(RECJCL(L))|/* OR NO GOOD CHAR 1138 03668000 * @Y30OE78*/ 03669000 * ^(CHARHIT=SPACE|/* FOUND OR AN INVALID @Y30OE78*/ 03670000 * CHARHIT=CRPREN| /* DELIMITER @Y30OE78*/ 03671000 * CHARHIT=CQUOTE| /* WAS @Y30OE78*/ 03672000 * CHARHIT=CCOMMA) THEN/* FOUND @Y30OE78*/ 03673000 CH CHARHIT,@CH00053 1138 03674000 BE @RT01138 1138 03675000 LA @00,RECJCL-1(L) 1138 03676000 CR HITADDR,@00 1138 03677000 BE @RT01138 1138 03678000 CH CHARHIT,@CH00375 1138 03679000 BE @RF01138 1138 03680000 CH CHARHIT,@CH00295 1138 03681000 BE @RF01138 1138 03682000 CH CHARHIT,@CH00289 1138 03683000 BE @RF01138 1138 03684000 CH CHARHIT,@CH00287 1138 03685000 BE @RF01138 1138 03686000 @RT01138 DS 0H 1139 03687000 * DO; /* @Y30OE78*/ 03688000 * VOLSERE=ON; /* INDICATE VOLSER ERROR @Y30OE78*/ 03689000 OI VOLSERE,B'00010000' 1140 03690000 * JBJCLERR=ON; /* INDICATE JCL ERROR @Y30OE78*/ 03691000 OI JBJCLERR,B'01000000' 1141 03692000 * END; /* @Y30OE78*/ 03693000 * ELSE /* IF GOOD SO FAR, @Y30OE78*/ 03694000 * IF QUOTE=ON& /* IF OPEN QUOTE IS NOT @Y30OE78*/ 03695000 * CHARHIT^=CQUOTE THEN/* FOLLOWED BY CLOSING 1143 03696000 * @Y30OE78*/ 03697000 B @RC01138 1143 03698000 @RF01138 TM QUOTE,B'00000001' 1143 03699000 BNO @RF01143 1143 03700000 CH CHARHIT,@CH00289 1143 03701000 BE @RF01143 1143 03702000 * DO; /* @Y30OE78*/ 03703000 * VOLSERE=ON; /* QUOTE, VOLSER ERROR @Y30OE78*/ 03704000 OI VOLSERE,B'00010000' 1145 03705000 * JBJCLERR=ON; /* INDICATE JCL ERROR @Y30OE78*/ 03706000 OI JBJCLERR,B'01000000' 1146 03707000 * END; /* @Y30OE78*/ 03708000 * ELSE /* OTHERWISE GOOD VOLSER @Y30OE78*/ 03709000 * DO; /* @Y30OE78*/ 03710000 B @RC01143 1148 03711000 @RF01143 DS 0H 1149 03712000 * DO I=L TO L+LENGTH(OVOLSER) WHILE/* BUMP I TO 03713000 * @Y30OE78*/ 03714000 * ADDR(RECJCL(I+1))DCBBLKSI THEN /* IF BUFFER CANNOT HOLD @Y30OE78 03786000 * NEXT RECORD, @Y30OE78*/ 03787000 L @08,BUFCBPTR 1159 03788000 L @08,BUFELPTR(,@08) 1159 03789000 L @04,BUFPTR(,@08) 1159 03790000 LH @03,BLKLEN(,@04) 1159 03791000 AH @03,RDWLNA 1159 03792000 LA @15,UT3BPOUT 1159 03793000 CH @03,DCBBLKSI+52(,@15) 1159 03794000 BNH @RF01159 1159 03795000 * DO; /* DO EOB PROCESSING @Y30OE78*/ 03796000 * WRIND=ZERO; /* INDICATE WRITE WAS @Y30OE78 03797000 * ISSUED FOR BUFFER @Y30OE78*/ 03798000 SLR @03,@03 1161 03799000 STH @03,WRIND(,@04) 1161 03800000 * PARMPTR=DECBPTR; /* GET DECB POINTER @Y30OE78*/ 03801000 L PARMPTR,DECBPTR(,@08) 1162 03802000 * BLKPTR=BUFPTR; /* GET BUFFER PTR @Y30OE78*/ 03803000 LR BLKPTR,@04 1163 03804000 * GEN REFS(PARMPTR,BLKPTR) /* WRITE BUFFER @Y30OE78*/ 03805000 * (WRITE (PARMPTR),SF,,(BLKPTR),MF=E);/* @Y30OE78*/ 03806000 WRITE (PARMPTR),SF,,(BLKPTR),MF=E 03807000 * BUFELPTR=BUFELNXT; /* GET OTHER BUFFER @Y30OE78*/ 03808000 L @08,BUFCBPTR 1165 03809000 L @04,BUFELPTR(,@08) 1165 03810000 L @04,BUFELNXT(,@04) 1165 03811000 ST @04,BUFELPTR(,@08) 1165 03812000 * RECPTR=ADDR(RECAREA); /* SET SLOT POINTER TO @Y30OE78 03813000 * FIRST SLOT IN NEW @Y30OE78 03814000 * BUFFER @Y30OE78*/ 03815000 L @03,BUFPTR(,@04) 1166 03816000 LA @00,RECAREA(,@03) 1166 03817000 ST @00,RECPTR(,@08) 1166 03818000 * IF WRIND=ZERO THEN /* IF WRITE HAS BEEN @Y30OE78*/ 03819000 ICM @08,3,WRIND(@03) 1167 03820000 BNZ @RF01167 1167 03821000 * DO; /* ISSUED, MUST WAIT @Y30OE78*/ 03822000 * PARMPTR=DECBPTR; /* GET DECB POINTER @Y30OE78*/ 03823000 L PARMPTR,DECBPTR(,@04) 1169 03824000 * GEN REFS(PARMPTR) /* WAIT FOR COMPLETION @Y30OE78*/ 03825000 * (CHECK (PARMPTR)); /* @Y30OE78*/ 03826000 CHECK (PARMPTR) 03827000 * BLKLEN=LENGTH(BDW); /* RESET LENGTH TO THAT @Y30OE78 03828000 * OF EMPTY BUFFER @Y30OE78*/ 03829000 L @08,BUFCBPTR 1171 03830000 L @08,BUFELPTR(,@08) 1171 03831000 L @08,BUFPTR(,@08) 1171 03832000 MVC BLKLEN(2,@08),@CH00056 1171 03833000 * END; /* @Y30OE78*/ 03834000 * END; /* @Y30OE78*/ 03835000 @RF01167 DS 0H 1174 03836000 * IF UT3SYN=OFF THEN /* IF NO ERROR ENCOUNTRD @Y30OE78*/ 03837000 @RF01159 TM UT3SYN,B'00000001' 1174 03838000 BNZ @RF01174 1174 03839000 * DO; /* MOVE RECORD @Y30OE78*/ 03840000 * SLOT(1:RDWLNA)=RWORK; /* MOVE DATA FROM RECORD @Y30OE78 03841000 * WORKAREA TO BUFFER @Y30OE78*/ 03842000 L @08,BUFCBPTR 1176 03843000 L @04,RECPTR(,@08) 1176 03844000 LH @03,RDWLNA 1176 03845000 LR @15,@03 1176 03846000 BCTR @15,0 1176 03847000 EX @15,@SM01675 1176 03848000 * BLKLEN=BLKLEN+RDWLNA; /* UPDATE BLOCK LENGTH @Y30OE78*/ 03849000 L @15,BUFELPTR(,@08) 1177 03850000 L @15,BUFPTR(,@15) 1177 03851000 LH @00,BLKLEN(,@15) 1177 03852000 ALR @00,@03 1177 03853000 STH @00,BLKLEN(,@15) 1177 03854000 * RECPTR=RECPTR+RDWLNA; /* UPDATE SLOT POINTER @Y30OE78*/ 03855000 ALR @04,@03 1178 03856000 ST @04,RECPTR(,@08) 1178 03857000 * END; /* @Y30OE78*/ 03858000 * RFY /* RESET @Y30OE78*/ 03859000 * IHADCB BASED(DCBPTR); /* DCB ADDRESSIBILITY @Y30OE78*/ 03860000 * END BPAMPUT; /* @Y30OE78*/ 03861000 @EL00010 DS 0H 1181 03862000 @EF00010 DS 0H 1181 03863000 @ER00010 L @14,@SA00010 1181 03864000 BR @14 1181 03865000 * 1182 03866000 */********************************************************** @Y30OE78*/ 03867000 */* @Y30OE78*/ 03868000 */* ROUTINE NAME- @Y30OE78*/ 03869000 */* ADSANAL @Y30OE78*/ 03870000 */* @Y30OE78*/ 03871000 */* FUNCTION- @Y30OE78*/ 03872000 */* CALLED BY SEGMENT INPUT ADS AFTER 3540 DEVICE OPEN @Y30OE78*/ 03873000 */* AND AFTER EACH DISKETTE HAS BEEN SCANNED TO DETERMINE @Y30OE78*/ 03874000 */* IF ALL REQUESTED ADS'S HAVE BEEN RETRIEVED OR MARKED @Y30OE78*/ 03875000 */* NOT AVAILABLE. IF SOME MUST STILL BE RETRIEVED, USE @Y30OE78*/ 03876000 */* NEWDISKT ROUTINE TO GET NEW DISKETTE. IF DELIMITER @Y30OE78*/ 03877000 */* DISKETTE IS ENCOUNTERED ISSUE READER RECOVERY @Y30OE78*/ 03878000 */* MESSAGES. @Y30OE78*/ 03879000 */* @Y30OE78*/ 03880000 */* INPUT- @Y30OE78*/ 03881000 */* DATA SET NAME TABLE(DSNTAB) @Y30OE78*/ 03882000 */* STATUS SWITCHES INDICATE IF INPUT ADS PROCESSING IS @Y30OE78*/ 03883000 */* TO BE ENDED OF IF A DELIMITER DISKETTE WAS @Y30OE78*/ 03884000 */* ENCOUNTERED WHILE READING A MULTIVOLUME DATA SET @Y30OE78*/ 03885000 */* @Y30OE78*/ 03886000 */* OUTPUT- @Y30OE78*/ 03887000 */* NEXT DISKETTE POSITIONED IN THE 3540 DRIVE @Y30OE78*/ 03888000 */* READER RECOVERY MESSAGES IEB545, IEB546, IEB547 IF @Y30OE78*/ 03889000 */* RECOVERY IS ATTEMPTED @Y30OE78*/ 03890000 */* @Y30OE78*/ 03891000 */* ROUTINES CALLED- @Y30OE78*/ 03892000 */* NEWDISKT @Y30OE78*/ 03893000 */* IOEDKMSG @Y30OE78*/ 03894000 */* @Y30OE78*/ 03895000 */* MACROS- @Y30OE78*/ 03896000 */* NONE @Y30OE78*/ 03897000 */* #Y30OE78*/ 03898000 */********************************************************* #Y30OE78*/ 03899000 * 1182 03900000 *ADSANAL: /* ANALYZE DSNTAB #Y30OE78*/ 03901000 * PROC OPTIONS(SAVE(RTNREG)); /* #Y30OE78*/ 03902000 ADSANAL ST @14,@SA00011 1182 03903000 * IF DSCNT=ZERO THEN /* IF ALL ADS PROCESSED #Y30OE78*/ 03904000 ICM @08,15,DSCNT 1183 03905000 BNZ @RF01183 1183 03906000 * IADONE=ON; /* MARK IA PROCESS DONE #Y30OE78*/ 03907000 OI IADONE,B'10000000' 1184 03908000 * IF IADONE=OFF THEN /* MORE ADS PROCESSING #Y30OE78*/ 03909000 @RF01183 TM IADONE,B'10000000' 1185 03910000 BNZ @RF01185 1185 03911000 * IF DKDLM=ON THEN /* IF DELIMITER DISKETTE #Y30OE78 03912000 * HIT WHILE READING, #Y30OE78*/ 03913000 TM DKDLM,B'00000010' 1186 03914000 BNO @RF01186 1186 03915000 * IARECOV=ON; /* SET RECOVERY SWITCH #Y30OE78*/ 03916000 OI IARECOV,B'01000000' 1187 03917000 * ELSE /* IF PERM I/O ERROR ON #Y30OE78 03918000 * DSKT OR VOL1 INVALID #Y30OE78 03919000 * OR NORMAL END OF SCAN #Y30OE78*/ 03920000 * CALL NEWDSKT; /* GET NEXT DISKETTE #Y30OE78*/ 03921000 B @RC01186 1188 03922000 @RF01186 BAL @14,NEWDSKT 1188 03923000 * DO WHILE IARECOV=ON& /* DO RECOVERY PROCESS #Y30OE78*/ 03924000 * IADONE=OFF; /* IF IT IS VIABLE #Y30OE78*/ 03925000 @RC01186 DS 0H 1189 03926000 @RF01185 B @DE01189 1189 03927000 @DL01189 DS 0H 1190 03928000 * DKDLM=OFF; /* RESET DLM HIT IND #Y30OE78*/ 03929000 * IARECOV=OFF; /* RESET RECOVERY SWITCH #Y30OE78*/ 03930000 NI DKDLM,B'10111101' 1191 03931000 * MSGIDEX=M545; /* SET MSG INDEX #Y30OE78*/ 03932000 MVI MSGIDEX,X'07' 1192 03933000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 03934000 MVI MSGTYPE,X'01' 1193 03935000 * DDDK=DDDV; /* SET DEVICE ADDR KEY #Y30OE78*/ 03936000 MVI DDDK,X'08' 1194 03937000 * DDD=DEVPTR(DATA)->UCBNAME; /* PUT DEV ADDR IN MSG #Y30OE78*/ 03938000 SLR @08,@08 1195 03939000 ICM @08,7,DEVPTR+12 1195 03940000 MVC DDD(3),UCBNAME(@08) 1195 03941000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARAMETERS #Y30OE78*/ 03942000 LA PARMPTR,MSGINT 1196 03943000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 03944000 L @15,@CV00048 1197 03945000 BALR @14,@15 1197 03946000 * DDDK=SKIPV; /* RESET DEV ADDR KEY #Y30OE78*/ 03947000 MVI DDDK,X'00' 1198 03948000 * MSGIDEX=M546; /* SET MSG INDEX #Y30OE78*/ 03949000 MVI MSGIDEX,X'08' 1199 03950000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 03951000 MVI MSGTYPE,X'01' 1200 03952000 * DSNK=DSNV; /* SET DSNAME KEY #Y30OE78*/ 03953000 MVI DSNK,X'06' 1201 03954000 * JJJK=JJJV; /* SET JOBNAME KEY #Y30OE78*/ 03955000 MVI JJJK,X'0B' 1202 03956000 * DO DSNPTRJ=FRSTADSN TO LASTADSN/* ISSUE MSG 546 #Y30OE78*/ 03957000 * BY LENGTH(DSNENTRY); /* FOR EACH #Y30OE78 03958000 * OUTSTANDING ADS #Y30OE78*/ 03959000 L @08,FRSTADSN 1203 03960000 ST @08,DSNPTRJ 1203 03961000 B @DE01203 1203 03962000 @DL01203 DS 0H 1204 03963000 * IF JOBERR=OFF& /* IF JCL ERROR OR #Y30OE78*/ 03964000 * JCLMSG=OFF& /* TYPRUN=SCAN OR #Y30OE78*/ 03965000 * ADSSAT=OFF THEN /* ADS WAS READ, NO MSG #Y30OE78*/ 03966000 TM JOBERR(@08),B'00011100' 1204 03967000 BNZ @RF01204 1204 03968000 * DO; /* OTHERWISE WRITE MSG #Y30OE78*/ 03969000 * DSN=DSID; /* PUT DSID IN MSG #Y30OE78*/ 03970000 MVC DSN(8),DSID(@08) 1206 03971000 * JJJ=JOBNM; /* PUT JOBNAME IN MSG #Y30OE78*/ 03972000 MVC JJJ(8),JOBNM(@08) 1207 03973000 * IF VSERPRES=ON THEN /* IF VOLSER SPECIFIED, #Y30OE78*/ 03974000 TM VSERPRES(@08),B'00100000' 1208 03975000 BNO @RF01208 1208 03976000 * DO; /* #Y30OE78*/ 03977000 * VSERK=VSER1V; /* SET VOLSER KEY #Y30OE78*/ 03978000 MVI VSERK,X'01' 1210 03979000 * VSER=VOLSER; /* PUT VOLSER IN MSG #Y30OE78*/ 03980000 MVC VSER(6),VOLSER(@08) 1211 03981000 * END; /* #Y30OE78*/ 03982000 * ELSE /* NO VOLSER SPECIFIED, #Y30OE78*/ 03983000 * VSERK=VOLLOP; /* LOP VOLSER FROM MSG #Y30OE78*/ 03984000 B @RC01208 1213 03985000 @RF01208 MVI VSERK,X'81' 1213 03986000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARAMETERS #Y30OE78*/ 03987000 @RC01208 LA PARMPTR,MSGINT 1214 03988000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 03989000 L @15,@CV00048 1215 03990000 BALR @14,@15 1215 03991000 * END; /* #Y30OE78*/ 03992000 * END; /* #Y30OE78*/ 03993000 @RF01204 LA @08,40 1217 03994000 AL @08,DSNPTRJ 1217 03995000 ST @08,DSNPTRJ 1217 03996000 @DE01203 C @08,LASTADSN 1217 03997000 BNH @DL01203 1217 03998000 * DSNK=SKIPV; /* RESET DSNAME KEY #Y30OE78*/ 03999000 MVI DSNK,X'00' 1218 04000000 * JJJK=SKIPV; /* RESET JOBNAME KEY #Y30OE78*/ 04001000 MVI JJJK,X'00' 1219 04002000 * VSERK=SKIPV; /* RESET VOLSER KEY #Y30OE78*/ 04003000 MVI VSERK,X'00' 1220 04004000 * MSGIDEX=M547; /* SET MSG INDEX #Y30OE78*/ 04005000 MVI MSGIDEX,X'09' 1221 04006000 * MSGTYPE=MTYPWTOR; /* INDICATE WTOR #Y30OE78*/ 04007000 MVI MSGTYPE,X'02' 1222 04008000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARAMETERS #Y30OE78*/ 04009000 LA PARMPTR,MSGINT 1223 04010000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN AND #Y30OE78 04011000 * REPLY PASSED BACK #Y30OE78*/ 04012000 L @15,@CV00048 1224 04013000 BALR @14,@15 1224 04014000 * DO WHILE^(REPLY(1:LENGTH(RETRY))=RETRY|/* IF REPLY #Y30OE78*/ 04015000 * REPLY(1:LENGTH(GO))=GO);/* WAS INVALID, #Y30OE78*/ 04016000 B @DE01225 1225 04017000 @DL01225 DS 0H 1226 04018000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARAMETERS #Y30OE78*/ 04019000 LA PARMPTR,MSGINT 1226 04020000 * CALL IOEDKMSG; /* REISSUE REQUEST FOR #Y30OE78*/ 04021000 L @15,@CV00048 1227 04022000 BALR @14,@15 1227 04023000 * END; /* REPLY #Y30OE78*/ 04024000 @DE01225 L @08,MSGREP 1228 04025000 CLC REPLY(5,@08),@CC00302 1228 04026000 BE @DC01225 1228 04027000 CLC REPLY(2,@08),@CC00304 1228 04028000 BNE @DL01225 1228 04029000 @DC01225 DS 0H 1229 04030000 * IF REPLY(1:LENGTH(GO))=GO THEN/* IF REPLY WAS GO #Y30OE78*/ 04031000 L @08,MSGREP 1229 04032000 CLC REPLY(2,@08),@CC00304 1229 04033000 BNE @RF01229 1229 04034000 * IADONE=ON; /* INDICATE IA PROCESS #Y30OE78 04035000 * TO BE DISCONTINUED #Y30OE78*/ 04036000 OI IADONE,B'10000000' 1230 04037000 * ELSE /* REPLY WAS RETRY #Y30OE78*/ 04038000 * CALL NEWDSKT; /* GET NEW DISKETTE #Y30OE78*/ 04039000 B @RC01229 1231 04040000 @RF01229 BAL @14,NEWDSKT 1231 04041000 * END; /* #Y30OE78*/ 04042000 @RC01229 DS 0H 1232 04043000 @DE01189 TM IARECOV,B'01000000' 1232 04044000 BNO @DC01189 1232 04045000 TM IADONE,B'10000000' 1232 04046000 BZ @DL01189 1232 04047000 @DC01189 DS 0H 1233 04048000 * END ADSANAL; /* #Y30OE78*/ 04049000 @EL00011 DS 0H 1233 04050000 @EF00011 DS 0H 1233 04051000 @ER00011 L @14,@SA00011 1233 04052000 BR @14 1233 04053000 * 1234 04054000 */********************************************************** #Y30OE78*/ 04055000 */* #Y30OE78*/ 04056000 */* ROUTINE NAME- @Y30OE78*/ 04057000 */* READDSKT @Y30OE78*/ 04058000 */* @Y30OE78*/ 04059000 */* FUNCTION- @Y30OE78*/ 04060000 */* SCAN DATA SET NAME TABLE(DSNTAB) TO FIND UNSATISFIED @Y30OE78*/ 04061000 */* ENTRIES AND RETRIEVE THE REQUESTED DATA SETS FROM @Y30OE78*/ 04062000 */* THE CURRENT DISKETTE IF POSSIBLE. @Y30OE78*/ 04063000 */* TWO SCANS OF THE DSNTAB ARE PERFORMED. THE FIRST @Y30OE78*/ 04064000 */* IS TO PROCESS ENTRIES THAT MUST BE SATISFIED ON A @Y30OE78*/ 04065000 */* SPECIFIC VOLUME, THE SECOND IS TO PROCESS ENTRIES @Y30OE78*/ 04066000 */* THAT DID NOT SPECIFY VOL=SER IN JCL. SCAN OF THE @Y30OE78*/ 04067000 */* DSNTAB MUST BE RESTARTED IF THE DISKETTE IN THE @Y30OE78*/ 04068000 */* 3540 DRIVE IS CHANGED DURING EOV PROCESSING OF A @Y30OE78*/ 04069000 */* MULTIVOLUME DATA SET. @Y30OE78*/ 04070000 */* @Y30OE78*/ 04071000 */* INPUT- @Y30OE78*/ 04072000 */* DATA SET NAME TABLE(DSNTAB) @Y30OE78*/ 04073000 */* @Y30OE78*/ 04074000 */* OUTPUT- @Y30OE78*/ 04075000 */* UPDATED DSNTAB @Y30OE78*/ 04076000 */* @Y30OE78*/ 04077000 */* ROUTINES CALLED- @Y30OE78*/ 04078000 */* GETADS @Y30OE78*/ 04079000 */* @Y30OE78*/ 04080000 */* MACROS- @Y30OE78*/ 04081000 */* NONE @Y30OE78*/ 04082000 */* #Y30OE78*/ 04083000 */********************************************************* #Y30OE78*/ 04084000 * 1234 04085000 *READDSKT: /* READ ADS ON A DISKETT #Y30OE78*/ 04086000 * PROC OPTIONS(SAVE(RTNREG)); /* #Y30OE78*/ 04087000 READDSKT ST @14,@SA00012 1234 04088000 * UCBPTR=DEVPTR(DATA); /* SET UCB PTR TO #Y30OE78 04089000 * SYSDATA DEVICE #Y30OE78*/ 04090000 SLR UCBPTR,UCBPTR 1235 04091000 ICM UCBPTR,7,DEVPTR+12 1235 04092000 * DKCHNGD=ON; /* INIT DSKT CHANGED SW #Y30OE78*/ 04093000 OI DKCHNGD,B'00000100' 1236 04094000 * DO WHILE DKCHNGD=ON& /* PROCESS TIL DUAL SCAN #Y30OE78*/ 04095000 * IADONE=OFF; /* SCAN COMPLETES ON A #Y30OE78 04096000 * DISKETTE #Y30OE78*/ 04097000 B @DE01237 1237 04098000 @DL01237 DS 0H 1238 04099000 * DKCHNGD=OFF; /* RESET DSKT CHANGED SW #Y30OE78*/ 04100000 * DKFEED=OFF; /* RESET FEED SW #Y30OE78*/ 04101000 NI DKCHNGD,B'11110011' 1239 04102000 * DO K=1 TO 2 WHILE /* TAKE 2 PASSES AT #Y30OE78*/ 04103000 * DKFEED=OFF& /* DSNTAB WHILE NO ERROR #Y30OE78*/ 04104000 * DKCHNGD=OFF& /* DELIMITS SCANS #Y30OE78*/ 04105000 * IADONE=OFF; /* #Y30OE78*/ 04106000 LA @08,1 1240 04107000 ST @08,K 1240 04108000 @DL01240 TM DKFEED,B'10001100' 1240 04109000 BNZ @DC01240 1240 04110000 * DO DSNPTRJ=FRSTADSN TO LASTADSN/* LOOK AT EACH #Y30OE78*/ 04111000 * BY LENGTH(DSNENTRY) WHILE/* DSN TABLE #Y30OE78*/ 04112000 * DKFEED=OFF& /* ENTRY WHILE NO ERROR #Y30OE78*/ 04113000 * DKCHNGD=OFF& /* DELIMITS SCAN #Y30OE78*/ 04114000 * IADONE=OFF; /* #Y30OE78*/ 04115000 L @08,FRSTADSN 1241 04116000 ST @08,DSNPTRJ 1241 04117000 B @DE01241 1241 04118000 @DL01241 TM DKFEED,B'10001100' 1241 04119000 BNZ @DC01241 1241 04120000 * IF JOBERR=OFF& /* PROCESS ENTRIES THAT #Y30OE78*/ 04121000 * JCLMSG=OFF& /* HAVE NOT ALREADY BEEN #Y30OE78*/ 04122000 * ADSSAT=OFF THEN /* PROCESSED #Y30OE78*/ 04123000 TM JOBERR(@08),B'00011100' 1242 04124000 BNZ @RF01242 1242 04125000 * IF K=1 THEN /* IF 1ST PASS, #Y30OE78*/ 04126000 CLC K(4),@CF00061 1243 04127000 BNE @RF01243 1243 04128000 * IF VSERPRES=ON& /* PROCESS ENTRIES WITH #Y30OE78*/ 04129000 * VOLSER=UCBVLSER THEN/* #Y30OE78*/ 04130000 TM VSERPRES(@08),B'00100000' 1244 04131000 BNO @RF01244 1244 04132000 L @04,UCBXTADR(,UCBPTR) 1244 04133000 CLC VOLSER(6,@08),UCBVLSER(@04) 1244 04134000 BNE @RF01244 1244 04135000 * CALL GETADS; /* VOLSER SPECIFIED #Y30OE78*/ 04136000 BAL @14,GETADS 1245 04137000 * ELSE 1246 04138000 * ; /* #Y30OE78*/ 04139000 @RF01244 DS 0H 1247 04140000 * ELSE /* IF 2ND PASS #Y30OE78*/ 04141000 * IF VSERPRES=OFF THEN /* PROCESS ENTRIES #Y30OE78*/ 04142000 B @RC01243 1247 04143000 @RF01243 L @08,DSNPTRJ 1247 04144000 TM VSERPRES(@08),B'00100000' 1247 04145000 BNZ @RF01247 1247 04146000 * CALL GETADS; /* WITHOUT VOLSER #Y30OE78*/ 04147000 BAL @14,GETADS 1248 04148000 * END; /* #Y30OE78*/ 04149000 @RF01247 DS 0H 1249 04150000 @RC01243 DS 0H 1249 04151000 @RF01242 LA @08,40 1249 04152000 AL @08,DSNPTRJ 1249 04153000 ST @08,DSNPTRJ 1249 04154000 @DE01241 C @08,LASTADSN 1249 04155000 BNH @DL01241 1249 04156000 @DC01241 DS 0H 1250 04157000 * END; /* #Y30OE78*/ 04158000 LA @08,1 1250 04159000 AL @08,K 1250 04160000 ST @08,K 1250 04161000 CH @08,@CH00135 1250 04162000 BNH @DL01240 1250 04163000 @DC01240 DS 0H 1251 04164000 * END; /* #Y30OE78*/ 04165000 @DE01237 TM DKCHNGD,B'00000100' 1251 04166000 BNO @DC01237 1251 04167000 TM IADONE,B'10000000' 1251 04168000 BZ @DL01237 1251 04169000 @DC01237 DS 0H 1252 04170000 * END READDSKT; /* #Y30OE78*/ 04171000 @EL00012 DS 0H 1252 04172000 @EF00012 DS 0H 1252 04173000 @ER00012 L @14,@SA00012 1252 04174000 BR @14 1252 04175000 * 1253 04176000 */********************************************************** #Y30OE78*/ 04177000 */* #Y30OE78*/ 04178000 */* ROUTINE NAME- @Y30OE78*/ 04179000 */* NEWDISKT @Y30OE78*/ 04180000 */* @Y30OE78*/ 04181000 */* FUNCTION- @Y30OE78*/ 04182000 */* FEED A NEW DISKETTE INTO THE 3540 DRIVE EXCEPT ON @Y30OE78*/ 04183000 */* FIRST ENTRY AFTER DEVICE OPEN @Y30OE78*/ 04184000 */* ANALYZE PASSBACK FROM FEED REQUEST. IN CASE OF FIRST @Y30OE78*/ 04185000 */* I/O ERROR RETRY FEED. @Y30OE78*/ 04186000 */* @Y30OE78*/ 04187000 */* INPUT- @Y30OE78*/ 04188000 */* STATUS SWITCH INDICATES IF FIRST ENTRY AFTER DEVICE @Y30OE78*/ 04189000 */* OPEN @Y30OE78*/ 04190000 */* @Y30OE78*/ 04191000 */* OUTPUT- @Y30OE78*/ 04192000 */* NEW DISKETTE IN 3540 DRIVE @Y30OE78*/ 04193000 */* STATUS SWITCHES INDICATE IF ERROR DETECTED @Y30OE78*/ 04194000 */* MESSAGE IEB548 IF SECOND CONSECUTIVE I/O ERROR WAS @Y30OE78*/ 04195000 */* ENCOUNTERED @Y30OE78*/ 04196000 */* @Y30OE78*/ 04197000 */* ROUTINES CALLED- @Y30OE78*/ 04198000 */* IOESDKTI @Y30OE78*/ 04199000 */* IOEDKMSG @Y30OE78*/ 04200000 */* @Y30OE78*/ 04201000 */* MACROS- @Y30OE78*/ 04202000 */* NONE @Y30OE78*/ 04203000 */* #Y30OE78*/ 04204000 */********************************************************* #Y30OE78*/ 04205000 * 1253 04206000 *NEWDSKT: /* ROUTINE TO GET NEXT #Y30OE78*/ 04207000 * PROC OPTIONS(SAVE(RTNREG)); /* DISKETTE FROM HOPPER #Y30OE78*/ 04208000 NEWDSKT ST @14,@SA00013 1253 04209000 * DKFEED=ON; /* SET FEED NEEDED #Y30OE78*/ 04210000 OI DKFEED,B'00001000' 1254 04211000 * DO WHILE DKFEED=ON; /* FEED TIL GOT VALID #Y30OE78 04212000 * DSKT OR ERRORS CAUSE #Y30OE78 04213000 * SHUTDOWN #Y30OE78*/ 04214000 B @DE01255 1255 04215000 @DL01255 DS 0H 1256 04216000 * IF DOPENCHK=ON THEN /* IF DUMMY OPEN CHECKED #Y30OE78*/ 04217000 TM DOPENCHK,B'00000001' 1256 04218000 BNO @RF01256 1256 04219000 * DO; /* GET NEXT DSKT #Y30OE78*/ 04220000 * SETDOPCD=OPFEED; /* PREPARE SETDISKT #Y30OE78*/ 04221000 L @08,DCBPTR 1258 04222000 SLR @03,@03 1258 04223000 ICM @03,7,DCBAMWKA+16(@08) 1258 04224000 MVI SETDOPCD(@03),X'04' 1258 04225000 * SETDDCB=ADDR(DATAEX); /* PARMLIST TO DO A #Y30OE78*/ 04226000 LA @08,DATAEX 1259 04227000 ST @08,SETDDCB(,@03) 1259 04228000 * PARMPTR=ADDR(SETDLIST); /* FEED #Y30OE78*/ 04229000 LA PARMPTR,SETDLIST(,@03) 1260 04230000 * CALL IOESDKTI; /* CALL SETDISKT SERVICE #Y30OE78*/ 04231000 L @15,@CV00047 1261 04232000 BALR @14,@15 1261 04233000 * END; /* #Y30OE78*/ 04234000 * ELSE /* IF CHECKING DUMMY #Y30OE78*/ 04235000 * DOPENCHK=ON; /* OPEN, SET INDICATOR #Y30OE78*/ 04236000 B @RC01256 1263 04237000 @RF01256 OI DOPENCHK,B'00000001' 1263 04238000 * DKFEED=OFF; /* RESET NEED TO FEED #Y30OE78*/ 04239000 @RC01256 NI DKFEED,B'11110111' 1264 04240000 * IF SETDRTN1=R1PIO THEN /* IF I/O ERROR, #Y30OE78*/ 04241000 L @08,DCBPTR 1265 04242000 SLR @03,@03 1265 04243000 ICM @03,7,DCBAMWKA+16(@08) 1265 04244000 CLI SETDRTN1(@03),X'10' 1265 04245000 BNE @RF01265 1265 04246000 * IF PIO1=ON THEN /* IF ALREADY HAVE I/O #Y30OE78*/ 04247000 TM PIO1,B'00100000' 1266 04248000 BNO @RF01266 1266 04249000 * DO; /* #Y30OE78*/ 04250000 * IADONE=ON; /* ERROR, THIS IS 2ND #Y30OE78 04251000 * ONE - QUIT #Y30OE78*/ 04252000 OI IADONE,B'10000000' 1268 04253000 * RTNCODE=TERMERR; /* SET RETURN CODE #Y30OE78*/ 04254000 MVI RTNCODE,X'08' 1269 04255000 * MSGIDEX=M548; /* SET MSG INDEX #Y30OE78*/ 04256000 MVI MSGIDEX,X'0A' 1270 04257000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 04258000 MVI MSGTYPE,X'01' 1271 04259000 * DDDK=DDDV; /* SET DEVICE ADDR KEY #Y30OE78*/ 04260000 MVI DDDK,X'08' 1272 04261000 * DDD=DEVPTR(DATA)->UCBNAME;/* PUT DEV ADDR IN #Y30OE78*/ 04262000 SLR @08,@08 1273 04263000 ICM @08,7,DEVPTR+12 1273 04264000 MVC DDD(3),UCBNAME(@08) 1273 04265000 * JJJK=JOBLOP; /* INDICATE JOBNAME LOP #Y30OE78*/ 04266000 MVI JJJK,X'8B' 1274 04267000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARMS #Y30OE78*/ 04268000 LA PARMPTR,MSGINT 1275 04269000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 04270000 L @15,@CV00048 1276 04271000 BALR @14,@15 1276 04272000 * DDDK=SKIPV; /* RESET DEV ADDR KEY #Y30OE78*/ 04273000 MVI DDDK,X'00' 1277 04274000 * JJJK=SKIPV; /* RESET JOBNAME KEY #Y30OE78*/ 04275000 MVI JJJK,X'00' 1278 04276000 * END; /* #Y30OE78*/ 04277000 * ELSE /* IF 1ST I/O ERROR, GET #Y30OE78*/ 04278000 * DO; /* NEXT DISKETTE AND TRY #Y30OE78*/ 04279000 B @RC01266 1280 04280000 @RF01266 DS 0H 1281 04281000 * PIO1=ON; /* ONCE MORE #Y30OE78*/ 04282000 * DKFEED=ON; /* #Y30OE78*/ 04283000 OI PIO1,B'00101000' 1282 04284000 * END; /* #Y30OE78*/ 04285000 * ELSE /* IF NOT I/O ERROR, #Y30OE78*/ 04286000 * DO; /* CHECK OTHER RTN CODES #Y30OE78*/ 04287000 B @RC01265 1284 04288000 @RF01265 DS 0H 1285 04289000 * PIO1=OFF; /* RESET I/O ERROR SW #Y30OE78*/ 04290000 NI PIO1,B'11011111' 1285 04291000 * IF SETDRTN1=R1GOOD| /* IF GOOD RETURN OR #Y30OE78*/ 04292000 * SETDRTN1=R1NOACC THEN /* DS NONACCESSIBLE, #Y30OE78*/ 04293000 L @08,DCBPTR 1286 04294000 SLR @03,@03 1286 04295000 ICM @03,7,DCBAMWKA+16(@08) 1286 04296000 CLI SETDRTN1(@03),X'00' 1286 04297000 BE @RT01286 1286 04298000 CLI SETDRTN1(@03),X'04' 1286 04299000 BNE @RF01286 1286 04300000 @RT01286 DS 0H 1287 04301000 * IARECOV=OFF; /* NO NEED FOR RECOVERY #Y30OE78*/ 04302000 NI IARECOV,B'10111111' 1287 04303000 * ELSE /* CHECK OTHER PASSBACK #Y30OE78*/ 04304000 * IF SETDRTN1=R1DLM THEN /* IF DLM DSKT IN DRIVE #Y30OE78*/ 04305000 B @RC01286 1288 04306000 @RF01286 L @08,DCBPTR 1288 04307000 SLR @03,@03 1288 04308000 ICM @03,7,DCBAMWKA+16(@08) 1288 04309000 CLI SETDRTN1(@03),X'14' 1288 04310000 BNE @RF01288 1288 04311000 * IARECOV=ON; /* INDICATE RECOVERY #Y30OE78*/ 04312000 OI IARECOV,B'01000000' 1289 04313000 * ELSE /* CHECK OTHER PASSBACK #Y30OE78*/ 04314000 * DKFEED=ON; /* INDICATE REFEED #Y30OE78*/ 04315000 B @RC01288 1290 04316000 @RF01288 OI DKFEED,B'00001000' 1290 04317000 * END; /* #Y30OE78*/ 04318000 @RC01288 DS 0H 1291 04319000 @RC01286 DS 0H 1292 04320000 * END; /* #Y30OE78*/ 04321000 @RC01265 DS 0H 1292 04322000 @DE01255 TM DKFEED,B'00001000' 1292 04323000 BO @DL01255 1292 04324000 * END NEWDSKT; /* #Y30OE78*/ 04325000 @EL00013 DS 0H 1293 04326000 @EF00013 DS 0H 1293 04327000 @ER00013 L @14,@SA00013 1293 04328000 BR @14 1293 04329000 * 1294 04330000 */********************************************************** #Y30OE78*/ 04331000 */* #Y30OE78*/ 04332000 */* ROUTINE NAME- @Y30OE78*/ 04333000 */* GETADS @Y30OE78*/ 04334000 */* @Y30OE78*/ 04335000 */* FUNCTION- @Y30OE78*/ 04336000 */* ISSUE DATA SET OPEN FOR AN ADS DESCRIBED IN DATA SET @Y30OE78*/ 04337000 */* NAME TABLE(DSNTAB) ENTRY AND ANALYZE PASSBACK @Y30OE78*/ 04338000 */* IF DATA SET NOT FOUND ON SPECIFIED VOLSER OR IF DATA @Y30OE78*/ 04339000 */* SET RELATED OPEN ERROR, MARK DSNTAB ENTRIES FOR @Y30OE78*/ 04340000 */* JOB AS NOT AVAILABLE @Y30OE78*/ 04341000 */* IF DISKETTE RELATED ERROR SET FEED INDICATOR AND EXIT @Y30OE78*/ 04342000 */* IF SUCCESSFUL OPEN, READ ADS FROM SYSDATA DEVICE AND @Y30OE78*/ 04343000 */* WRITE IT AS A NEW MEMBER IN THE PARTITIONED DATA @Y30OE78*/ 04344000 */* SET ON SYSUT3 @Y30OE78*/ 04345000 */* @Y30OE78*/ 04346000 */* INPUT- @Y30OE78*/ 04347000 */* DATA SET NAME TABLE(DSNTAB) @Y30OE78*/ 04348000 */* DSNPTRJ POINTING TO DSNTAB ENTRY TO BE OPENED @Y30OE78*/ 04349000 */* @Y30OE78*/ 04350000 */* OUTPUT- @Y30OE78*/ 04351000 */* UPDATED DSNTAB @Y30OE78*/ 04352000 */* CONDITIONALLY UPDATED SYSUT3 DATA SET @Y30OE78*/ 04353000 */* POSSIBLE ERROR MESSAGES TO CONSOLE(IEB548,IEB554, @Y30OE78*/ 04354000 */* IEB555) @Y30OE78*/ 04355000 */* @Y30OE78*/ 04356000 */* ROUTINES CALLED- @Y30OE78*/ 04357000 */* IOEDKMSG @Y30OE78*/ 04358000 */* IOESDKTI @Y30OE78*/ 04359000 */* IOEDKGET @Y30OE78*/ 04360000 */* BPAMPUT @Y30OE78*/ 04361000 */* @Y30OE78*/ 04362000 */* MACROS- @Y30OE78*/ 04363000 */* WRITE @Y30OE78*/ 04364000 */* CHECK @Y30OE78*/ 04365000 */* STOW @Y30OE78*/ 04366000 */* #Y30OE78*/ 04367000 */********************************************************* #Y30OE78*/ 04368000 * 1294 04369000 *GETADS: /* ATTEMPT TO SATISFY #Y30OE78*/ 04370000 * PROC OPTIONS(SAVE(RTNREG)); /* A DSNTAB ENTRY #Y30OE78*/ 04371000 GETADS ST @14,@SA00014 1294 04372000 * SETDOPCD=OPOPEN; /* PREPARE PARAMETERS #Y30OE78*/ 04373000 L @08,DCBPTR 1295 04374000 SLR @04,@04 1295 04375000 ICM @04,7,DCBAMWKA+16(@08) 1295 04376000 MVI SETDOPCD(@04),X'01' 1295 04377000 * IF JCLVERF=ON THEN /* TO ISSUE SETDISKT #Y30OE78*/ 04378000 L @08,DSNPTRJ 1296 04379000 TM JCLVERF(@08),B'01000000' 1296 04380000 BNO @RF01296 1296 04381000 * SETDVERF=ON; /* OPEN FOR ADS DESCRIBD #Y30OE78*/ 04382000 OI SETDVERF(@04),B'10000000' 1297 04383000 * ELSE /* IN THE DSNTAB ENTRY #Y30OE78*/ 04384000 * SETDVERF=OFF; /* #Y30OE78*/ 04385000 B @RC01296 1298 04386000 @RF01296 L @08,DCBPTR 1298 04387000 SLR @04,@04 1298 04388000 ICM @04,7,DCBAMWKA+16(@08) 1298 04389000 NI SETDVERF(@04),B'01111111' 1298 04390000 * SETDDCB=ADDR(DATAEX); /* #Y30OE78*/ 04391000 @RC01296 L @08,DCBPTR 1299 04392000 SLR @04,@04 1299 04393000 ICM @04,7,DCBAMWKA+16(@08) 1299 04394000 LA @08,DATAEX 1299 04395000 ST @08,SETDDCB(,@04) 1299 04396000 * SETDDSID=DSID; /* #Y30OE78*/ 04397000 L @08,DSNPTRJ 1300 04398000 MVC SETDDSID(8,@04),DSID(@08) 1300 04399000 * ACBJOBID=JOBNM; /* MAKE JOBNAME AVAIL- @Z30OE78 04400000 * ABLE TO IOESDKTI @Z30OE78*/ 04401000 MVC ACBJOBID(8,@04),JOBNM(@08) 1301 04402000 * PARMPTR=ADDR(SETDLIST); /* #Y30OE78*/ 04403000 LA PARMPTR,SETDLIST(,@04) 1302 04404000 * CALL IOESDKTI; /* ISSUE SETDISKT OPEN #Y30OE78*/ 04405000 L @15,@CV00047 1303 04406000 BALR @14,@15 1303 04407000 * IF SETDRTN1^=R1GOOD THEN /* IF BAD RETURN CODE #Y30OE78*/ 04408000 L @08,DCBPTR 1304 04409000 SLR @04,@04 1304 04410000 ICM @04,7,DCBAMWKA+16(@08) 1304 04411000 CLI SETDRTN1(@04),X'00' 1304 04412000 BE @RF01304 1304 04413000 * IF SETDRTNC=R12DKTIO THEN /* IF DSKT I/O ERROR, #Y30OE78*/ 04414000 CLC SETDRTNC(2,@04),@CH00509 1305 04415000 BNE @RF01305 1305 04416000 * IF PIO1=ON THEN /* AND AN I/O OCCURRED #Y30OE78*/ 04417000 TM PIO1,B'00100000' 1306 04418000 BNO @RF01306 1306 04419000 * DO; /* PREVIOUSLY, #Y30OE78*/ 04420000 * IADONE=ON; /* DONE WITH IA PROCESS #Y30OE78*/ 04421000 OI IADONE,B'10000000' 1308 04422000 * RTNCODE=TERMERR; /* SET RETURN CODE #Y30OE78*/ 04423000 MVI RTNCODE,X'08' 1309 04424000 * MSGIDEX=M548; /* SET MSG INDEX #Y30OE78*/ 04425000 MVI MSGIDEX,X'0A' 1310 04426000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 04427000 MVI MSGTYPE,X'01' 1311 04428000 * DDDK=DDDV; /* SET DEV ADDR KEY #Y30OE78*/ 04429000 MVI DDDK,X'08' 1312 04430000 * DDD=DEVPTR(DATA)->UCBNAME;/* GET DEV ADDR #Y30OE78*/ 04431000 SLR @08,@08 1313 04432000 ICM @08,7,DEVPTR+12 1313 04433000 MVC DDD(3),UCBNAME(@08) 1313 04434000 * JJJK=JOBLOP; /* INDICATE NO JOBNAME #Y30OE78*/ 04435000 MVI JJJK,X'8B' 1314 04436000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARMS #Y30OE78*/ 04437000 LA PARMPTR,MSGINT 1315 04438000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 04439000 L @15,@CV00048 1316 04440000 BALR @14,@15 1316 04441000 * DDDK=SKIPV; /* RESET DEV ADDR KEY #Y30OE78*/ 04442000 MVI DDDK,X'00' 1317 04443000 * JJJK=SKIPV; /* RESET JOBNAME KEY #Y30OE78*/ 04444000 MVI JJJK,X'00' 1318 04445000 * END; /* #Y30OE78*/ 04446000 * ELSE /* THIS IS 1ST I/O ERROR #Y30OE78*/ 04447000 * DO; /* #Y30OE78*/ 04448000 B @RC01306 1320 04449000 @RF01306 DS 0H 1321 04450000 * PIO1=ON; /* SET ERROR SW #Y30OE78*/ 04451000 * DKFEED=ON; /* #Y30OE78*/ 04452000 OI PIO1,B'00101000' 1322 04453000 * END; /* #Y30OE78*/ 04454000 * ELSE /* CHECK OTHER ERRORS #Y30OE78*/ 04455000 * DO; /* #Y30OE78*/ 04456000 B @RC01305 1324 04457000 @RF01305 DS 0H 1325 04458000 * PIO1=OFF; /* RESET I/O ERROR SW #Y30OE78*/ 04459000 NI PIO1,B'11011111' 1325 04460000 * IF SETDRTNC=R12DSNF| /* IF DATA SET NOT @Z30OE78*/ 04461000 * SETDRTNC=R12BLNKD THEN/* FOUND, @Z30OE78*/ 04462000 L @08,DCBPTR 1326 04463000 SLR @04,@04 1326 04464000 ICM @04,7,DCBAMWKA+16(@08) 1326 04465000 CLC SETDRTNC(2,@04),@CH00513 1326 04466000 BE @RT01326 1326 04467000 CLC SETDRTNC(2,@04),@CH00503 1326 04468000 BNE @RF01326 1326 04469000 @RT01326 DS 0H 1327 04470000 * DO; /* @Z30OE78*/ 04471000 * IF K=1 THEN /* IF IN VOLSER PASS @Z30OE78*/ 04472000 CLC K(4),@CF00061 1328 04473000 BNE @RF01328 1328 04474000 * DO; /* @Z30OE78*/ 04475000 * JCLMSG=ON; /* INDICATE JCL MSG @Z30OE78*/ 04476000 L @08,DSNPTRJ 1330 04477000 OI JCLMSG(@08),B'00001000' 1330 04478000 * ERRCODE=CDWSER; /* SET MSG CODE @Z30OE78*/ 04479000 MVC ERRCODE(3,@08),@CC00335 1331 04480000 * DSNPTRK=DSNPTRJ; /* POINT TO ERROR ENTRY @Z30OE78*/ 04481000 LR DSNPTRK,@08 1332 04482000 * CALL JOBCLEAN; /* MARK OTHER ENTRIES @Z30OE78 04483000 * IN SAME JOB @Z30OE78*/ 04484000 BAL @14,JOBCLEAN 1333 04485000 * END; /* @Z30OE78*/ 04486000 * IF SETDRTNC=R12BLNKD THEN/* IF DSKT HAS @Z30OE78 04487000 * NO DATA SETS, @Z30OE78*/ 04488000 @RF01328 L @08,DCBPTR 1335 04489000 SLR @04,@04 1335 04490000 ICM @04,7,DCBAMWKA+16(@08) 1335 04491000 CLC SETDRTNC(2,@04),@CH00503 1335 04492000 BNE @RF01335 1335 04493000 * DO; /* @Z30OE78*/ 04494000 * DKFEED=ON; /* GET NEW DISKETTE @Z30OE78*/ 04495000 OI DKFEED,B'00001000' 1337 04496000 * DO DSNPTRK=DSNPTRJ TO LASTADSN/* MARK @Z30OE78*/ 04497000 * BY LENGTH(DSNENTRY);/* OTHER REQUESTS 1338 04498000 * @Z30OE78 04499000 * FOR SAME VOLUME WITH @Z30OE78 04500000 * ERROR INDICATOR @Z30OE78*/ 04501000 L DSNPTRK,DSNPTRJ 1338 04502000 B @DE01338 1338 04503000 @DL01338 DS 0H 1339 04504000 * RFY 1339 04505000 * DSNENTRY BASED(DSNPTRK);/* @Z30OE78*/ 04506000 * IF JOBERR=OFF& /* IF ENTRY HAS NOT @Z30OE78*/ 04507000 * ADSSAT=OFF& /* BEEN PROCESSED YET, @Z30OE78*/ 04508000 * VSERPRES=ON&/* AND SPECIFICALLY @Z30OE78*/ 04509000 * VOLSER=UCBVLSER THEN/* REQUESTS THIS @Z30OE78 04510000 * VOLUME @Z30OE78*/ 04511000 TM VSERPRES(DSNPTRK),B'00100000' 1340 04512000 BNO @RF01340 1340 04513000 TM JOBERR(DSNPTRK),B'00010100' 1340 04514000 BNZ @RF01340 1340 04515000 L @08,UCBXTADR(,UCBPTR) 1340 04516000 CLC VOLSER(6,DSNPTRK),UCBVLSER(@08) 1340 04517000 BNE @RF01340 1340 04518000 * DO; /* @Z30OE78*/ 04519000 * ERRCODE=CDWSER;/* SET WRONG SER CODE @Z30OE78*/ 04520000 MVC ERRCODE(3,DSNPTRK),@CC00335 1342 04521000 * JCLMSG=ON; /* INDICATE JCL MESSAGE @Z30OE78*/ 04522000 OI JCLMSG(DSNPTRK),B'00001000' 1343 04523000 * CALL JOBCLEAN;/* MARK OTHER ENTRIES @Z30OE78 04524000 * FOR SAME JOB @Z30OE78*/ 04525000 BAL @14,JOBCLEAN 1344 04526000 * END; /* @Z30OE78*/ 04527000 * RFY 1346 04528000 * DSNENTRY BASED(DSNPTRJ);/* @Z30OE78*/ 04529000 @RF01340 DS 0H 1347 04530000 * END; /* @Z30OE78*/ 04531000 AH DSNPTRK,@CH01204 1347 04532000 @DE01338 C DSNPTRK,LASTADSN 1347 04533000 BNH @DL01338 1347 04534000 * END; /* @Z30OE78*/ 04535000 * END; /* @Z30OE78*/ 04536000 * ELSE /* DATA SET FOUND- ERROR @Z30OE78*/ 04537000 * DO; /* #Y30OE78*/ 04538000 B @RC01326 1350 04539000 @RF01326 DS 0H 1351 04540000 * JCLMSG=ON; /* INDICATE JCL COMMENT #Y30OE78*/ 04541000 L @08,DSNPTRJ 1351 04542000 OI JCLMSG(@08),B'00001000' 1351 04543000 * DSNPTRK=DSNPTRJ; /* POINT TO ENTRY WITH @Z30OE78 04544000 * ERROR @Z30OE78*/ 04545000 LR DSNPTRK,@08 1352 04546000 * CALL JOBCLEAN; /* MARK OTHER ENTRIES @Z30OE78 04547000 * FOR SAME JOB @Z30OE78*/ 04548000 BAL @14,JOBCLEAN 1353 04549000 * IF SETDRTNC=R12SECDS THEN/* IF SECURE DS, @Z30OE78*/ 04550000 L @08,DCBPTR 1354 04551000 SLR @04,@04 1354 04552000 ICM @04,7,DCBAMWKA+16(@08) 1354 04553000 CLC SETDRTNC(2,@04),@CH00505 1354 04554000 BNE @RF01354 1354 04555000 * ERRCODE=CDSECE; /* SET SECURE DS CD @Z30OE78*/ 04556000 L @08,DSNPTRJ 1355 04557000 MVC ERRCODE(3,@08),@CC00325 1355 04558000 * ELSE /* IF NOT SECURE DS, @Z30OE78*/ 04559000 * IF SETDRTNC=R12SECVL THEN/* IF SECURE VOL, @Z30OE78*/ 04560000 B @RC01354 1356 04561000 @RF01354 L @08,DCBPTR 1356 04562000 SLR @04,@04 1356 04563000 ICM @04,7,DCBAMWKA+16(@08) 1356 04564000 CLC SETDRTNC(2,@04),@CH00507 1356 04565000 BNE @RF01356 1356 04566000 * DO; /* @Z30OE78*/ 04567000 * ERRCODE=CDSECV; /* SET SECURE VOL CODE @Z30OE78*/ 04568000 L @08,DSNPTRJ 1358 04569000 MVC ERRCODE(3,@08),@CC00327 1358 04570000 * DKFEED=ON; /* INDICATE DSKT FEED @Z30OE78*/ 04571000 OI DKFEED,B'00001000' 1359 04572000 * DO DSNPTRK=DSNPTRJ TO LASTADSN/* MARK @Z30OE78*/ 04573000 * BY LENGTH(DSNENTRY);/* OTHER REQUESTS 1360 04574000 * @Z30OE78 04575000 * FOR SAME VOLUME WITH @Z30OE78 04576000 * ERROR INDICATOR @Z30OE78*/ 04577000 LR DSNPTRK,@08 1360 04578000 B @DE01360 1360 04579000 @DL01360 DS 0H 1361 04580000 * RFY 1361 04581000 * DSNENTRY BASED(DSNPTRK);/* @Z30OE78*/ 04582000 * IF JOBERR=OFF&/* IF ENTRY HAS NOT @Z30OE78*/ 04583000 * ADSSAT=OFF&/* BEEN PROCESSED YET, @Z30OE78*/ 04584000 * VSERPRES=ON&/* AND SPECIFICALLY @Z30OE78*/ 04585000 * VOLSER=UCBVLSER THEN/* REQUESTS THIS 1362 04586000 * @Z30OE78 04587000 * VOLUME @Z30OE78*/ 04588000 TM VSERPRES(DSNPTRK),B'00100000' 1362 04589000 BNO @RF01362 1362 04590000 TM JOBERR(DSNPTRK),B'00010100' 1362 04591000 BNZ @RF01362 1362 04592000 L @08,UCBXTADR(,UCBPTR) 1362 04593000 CLC VOLSER(6,DSNPTRK),UCBVLSER(@08) 1362 04594000 BNE @RF01362 1362 04595000 * DO; /* @Z30OE78*/ 04596000 * ERRCODE=CDSECV;/* SET SECURE VOL CODE 1364 04597000 * @Z30OE78*/ 04598000 MVC ERRCODE(3,DSNPTRK),@CC00327 1364 04599000 * JCLMSG=ON;/* INDICATE JCL MESSAGE @Z30OE78*/ 04600000 OI JCLMSG(DSNPTRK),B'00001000' 1365 04601000 * CALL JOBCLEAN;/* MARK OTHER ENTRIES 1366 04602000 * @Z30OE78 04603000 * FOR SAME JOB @Z30OE78*/ 04604000 BAL @14,JOBCLEAN 1366 04605000 * END; /* @Z30OE78*/ 04606000 * RFY 1368 04607000 * DSNENTRY BASED(DSNPTRJ);/* @Z30OE78*/ 04608000 @RF01362 DS 0H 1369 04609000 * END; /* @Z30OE78*/ 04610000 AH DSNPTRK,@CH01204 1369 04611000 @DE01360 C DSNPTRK,LASTADSN 1369 04612000 BNH @DL01360 1369 04613000 * END; /* @Z30OE78*/ 04614000 * ELSE /* IF NOT SECURE VOLUME @Z30OE78*/ 04615000 * IF SETDRTN1=R1IHDR1 THEN/* IF BAD HDR1, #Y30OE78*/ 04616000 B @RC01356 1371 04617000 @RF01356 L @08,DCBPTR 1371 04618000 SLR @04,@04 1371 04619000 ICM @04,7,DCBAMWKA+16(@08) 1371 04620000 CLI SETDRTN1(@04),X'0C' 1371 04621000 BNE @RF01371 1371 04622000 * ERRCODE=CDHDRE; /* SET CODE FOR HDR ERR #Y30OE78*/ 04623000 L @08,DSNPTRJ 1372 04624000 MVC ERRCODE(3,@08),@CC00329 1372 04625000 * ELSE /* I/O OR VOL SEQ ERROR #Y30OE78*/ 04626000 * IF SETDRTN1=R1SEQ THEN/* IF SEQ ERROR, #Y30OE78*/ 04627000 B @RC01371 1373 04628000 @RF01371 L @08,DCBPTR 1373 04629000 SLR @04,@04 1373 04630000 ICM @04,7,DCBAMWKA+16(@08) 1373 04631000 CLI SETDRTN1(@04),X'18' 1373 04632000 BNE @RF01373 1373 04633000 * ERRCODE=CDOSEQ;/* SET VOL SEQ CODE #Y30OE78*/ 04634000 L @08,DSNPTRJ 1374 04635000 MVC ERRCODE(3,@08),@CC00333 1374 04636000 * ELSE /* MUST BE AN I/O ERROR #Y30OE78*/ 04637000 * ERRCODE=CDPIO;/* SET I/O ERROR CODE #Y30OE78*/ 04638000 B @RC01373 1375 04639000 @RF01373 L @08,DSNPTRJ 1375 04640000 MVC ERRCODE(3,@08),@CC00331 1375 04641000 * END; /* #Y30OE78*/ 04642000 * END; /* @Z30OE78*/ 04643000 * ELSE /* SETDISKT RETURN GOOD #Y30OE78*/ 04644000 * DO; /* #Y30OE78*/ 04645000 B @RC01304 1378 04646000 @RF01304 DS 0H 1379 04647000 * PIO1=OFF; /* RESET I/O ERROR SW #Y30OE78*/ 04648000 NI PIO1,B'11011111' 1379 04649000 * IF SETDRTN2=R2LAST THEN /* IF THIS IS LAST DATA #Y30OE78 04650000 * SET ON DSKT, SET #Y30OE78*/ 04651000 L @08,DCBPTR 1380 04652000 SLR @04,@04 1380 04653000 ICM @04,7,DCBAMWKA+16(@08) 1380 04654000 CLI SETDRTN2(@04),X'04' 1380 04655000 BNE @RF01380 1380 04656000 * DO; /* @Z30OE78*/ 04657000 * DKFEED=ON; /* FEED INDICATOR @Z30OE78*/ 04658000 OI DKFEED,B'00001000' 1382 04659000 * DO DSNPTRK=DSNPTRJ TO LASTADSN/* MARK @Z30OE78*/ 04660000 * BY LENGTH(DSNENTRY);/* OTHER REQUESTS @Z30OE78 04661000 * FOR SAME VOLUME WITH @Z30OE78 04662000 * ERROR INDICATOR @Z30OE78*/ 04663000 L DSNPTRK,DSNPTRJ 1383 04664000 B @DE01383 1383 04665000 @DL01383 DS 0H 1384 04666000 * RFY 1384 04667000 * DSNENTRY BASED(DSNPTRK);/* @Z30OE78*/ 04668000 * IF JOBERR=OFF& /* IF ENTRY HAS NOT @Z30OE78*/ 04669000 * ADSSAT=OFF& /* BEEN PROCESSED YET, @Z30OE78*/ 04670000 * VSERPRES=ON& /* AND SPECIFICALLY @Z30OE78*/ 04671000 * VOLSER=UCBVLSER& /* REQUESTS THIS @Z30OE78 04672000 * VOLUME FOR A @Z30OE78*/ 04673000 * DSID^=DSNPTRJ->DSID THEN/* DIFFERENT @Z30OE78 04674000 * DATA SET @Z30OE78*/ 04675000 TM VSERPRES(DSNPTRK),B'00100000' 1385 04676000 BNO @RF01385 1385 04677000 TM JOBERR(DSNPTRK),B'00010100' 1385 04678000 BNZ @RF01385 1385 04679000 L @08,UCBXTADR(,UCBPTR) 1385 04680000 CLC VOLSER(6,DSNPTRK),UCBVLSER(@08) 1385 04681000 BNE @RF01385 1385 04682000 L @08,DSNPTRJ 1385 04683000 CLC DSID(8,DSNPTRK),DSID(@08) 1385 04684000 BE @RF01385 1385 04685000 * DO; /* @Z30OE78*/ 04686000 * ERRCODE=CDWSER; /* SET WRONG SER CODE @Z30OE78*/ 04687000 MVC ERRCODE(3,DSNPTRK),@CC00335 1387 04688000 * JCLMSG=ON; /* INDICATE JCL MESSAGE @Z30OE78*/ 04689000 OI JCLMSG(DSNPTRK),B'00001000' 1388 04690000 * CALL JOBCLEAN; /* MARK OTHER ENTRIES @Z30OE78 04691000 * FOR SAME JOB @Z30OE78*/ 04692000 BAL @14,JOBCLEAN 1389 04693000 * END; /* @Z30OE78*/ 04694000 * RFY 1391 04695000 * DSNENTRY BASED(DSNPTRJ);/* @Z30OE78*/ 04696000 @RF01385 DS 0H 1392 04697000 * END; /* @Z30OE78*/ 04698000 AH DSNPTRK,@CH01204 1392 04699000 @DE01383 C DSNPTRK,LASTADSN 1392 04700000 BNH @DL01383 1392 04701000 * END; /* @Z30OE78*/ 04702000 * 1393 04703000 * /*************************************************************/ 04704000 * /* */ 04705000 * /* START SEGMENT - READ ADS @Z30OE78*/ 04706000 * /* */ 04707000 * /*************************************************************/ 04708000 * 1394 04709000 * DO I=1 TO 2; /* PREPARE 2 BUFFERS #Y30OE78*/ 04710000 @RF01380 LA I,1 1394 04711000 @DL01394 DS 0H 1395 04712000 * BLKLEN=LENGTH(BDW); /* INIT BLOCK LENGTH #Y30OE78*/ 04713000 L @08,BUFCBPTR 1395 04714000 L @03,BUFELPTR(,@08) 1395 04715000 L @15,BUFPTR(,@03) 1395 04716000 MVC BLKLEN(2,@15),@CH00056 1395 04717000 * WRIND=NOTWRIT; /* INIT WRITTEN SWITCH #Y30OE78*/ 04718000 MVC WRIND(2,@15),@CH00193 1396 04719000 * BUFELPTR=BUFELNXT; /* GET OTHER BUFFER #Y30OE78*/ 04720000 L @03,BUFELNXT(,@03) 1397 04721000 ST @03,BUFELPTR(,@08) 1397 04722000 * END; /* #Y30OE78*/ 04723000 AH I,@CH00061 1398 04724000 CH I,@CH00135 1398 04725000 BNH @DL01394 1398 04726000 * RECPTR=ADDR(RECAREA); /* POINT TO 1ST SLOT IN #Y30OE78 04727000 * FIRST BUFFER #Y30OE78*/ 04728000 L @08,BUFCBPTR 1399 04729000 L @04,BUFELPTR(,@08) 1399 04730000 L @04,BUFPTR(,@04) 1399 04731000 LA @04,RECAREA(,@04) 1399 04732000 ST @04,RECPTR(,@08) 1399 04733000 * RDWLNA=ACBLRECL+LENGTH(RDWA);/* SET RECORD LENGTH DE- 1400 04734000 * #Y30OE78 04735000 * TERMINED BY SDKT OPEN #Y30OE78*/ 04736000 L @08,DCBPTR 1400 04737000 SLR @04,@04 1400 04738000 ICM @04,7,DCBAMWKA+16(@08) 1400 04739000 LA @03,4 1400 04740000 AH @03,ACBLRECL(,@04) 1400 04741000 STH @03,RDWLNA 1400 04742000 * DLMHIT=OFF; /* INIT DLM INDICATOR #Y30OE78*/ 04743000 NI DLMHIT,B'11101111' 1401 04744000 * INEOF=OFF; /* RESET EOF SWITCH #Y30OE78*/ 04745000 * INERR=OFF; /* RESET ERROR SWITCH #Y30OE78*/ 04746000 NI INEOF,B'11100111' 1403 04747000 * PARMPTR=DCBPTR; /* POINT TO DCB #Y30OE78*/ 04748000 LR PARMPTR,@08 1404 04749000 * CALL IOEDKGET; /* GET ADS RECORD #Y30OE78*/ 04750000 L @15,@CV00049 1405 04751000 BALR @14,@15 1405 04752000 * IF RPLFDBK=EOVGET THEN /* IF EOV OCCURRED, #Y30OE78*/ 04753000 L @08,DCBPTR 1406 04754000 SLR @04,@04 1406 04755000 ICM @04,7,DCBAMWKA+16(@08) 1406 04756000 CLC RPLFDBK(3,@04),@CF00357+1 1406 04757000 BNE @RF01406 1406 04758000 * DKCHNGD=ON; /* INDICATE DSKT CHANGE #Y30OE78*/ 04759000 OI DKCHNGD,B'00000100' 1407 04760000 * DO WHILE INEOF=OFF& /* PUT/GET RECORDS WHILE #Y30OE78*/ 04761000 * INERR=OFF& /* NOT AT EOD AND NO #Y30OE78*/ 04762000 * UT3SYN=OFF; /* ERRORS HAVE OCCURRED #Y30OE78*/ 04763000 @RF01406 B @DE01408 1408 04764000 @DL01408 DS 0H 1409 04765000 * IF RECA(1:LENGTH(DLM))=DLM THEN/* IF RECORD GOTTEN #Y30OE78*/ 04766000 L @08,DSNPTRJ 1409 04767000 CLC RECA(2),DLM(@08) 1409 04768000 BNE @RF01409 1409 04769000 * DO; /* IS DELIMITER, #Y30OE78*/ 04770000 * INEOF=ON; /* INDICATE EOD #Y30OE78*/ 04771000 OI INEOF,B'00010000' 1411 04772000 * DLMHIT=ON; /* INDICATE DLM HIT #Y30OE78*/ 04773000 OI DLMHIT,B'00010000' 1412 04774000 * END; /* #Y30OE78*/ 04775000 * ELSE /* IF DLM VALUE NOT HIT #Y30OE78*/ 04776000 * IF JCLALLOW=OFF& /* CHECK FOR JCL RECORD #Y30OE78*/ 04777000 * RECA(1:LENGTH(SLASHES))=SLASHES THEN/* AS #Y30OE78 04778000 * DELIMITER #Y30OE78*/ 04779000 B @RC01409 1414 04780000 @RF01409 L @08,DSNPTRJ 1414 04781000 TM JCLALLOW(@08),B'10000000' 1414 04782000 BNZ @RF01414 1414 04783000 CLC RECA(2),@CC00281 1414 04784000 BNE @RF01414 1414 04785000 * DO; /* #Y30OE78*/ 04786000 * INEOF=ON; /* INDICATE EOD #Y30OE78*/ 04787000 OI INEOF,B'00010000' 1416 04788000 * DLMHIT=ON; /* INDICATE DLM HIT #Y30OE78*/ 04789000 OI DLMHIT,B'00010000' 1417 04790000 * END; /* #Y30OE78*/ 04791000 * ELSE 1419 04792000 * ; /* #Y30OE78*/ 04793000 @RF01414 DS 0H 1420 04794000 * IF DLMHIT=OFF THEN /* IF NOT DLM RECORD, #Y30OE78*/ 04795000 @RC01409 TM DLMHIT,B'00010000' 1420 04796000 BNZ @RF01420 1420 04797000 * DO; /* #Y30OE78*/ 04798000 * CALL BPAMPUT; /* PUT RECORD TO UT3 #Y30OE78*/ 04799000 BAL @14,BPAMPUT 1422 04800000 * PARMPTR=DCBPTR; /* POINT TO DCB #Y30OE78*/ 04801000 L PARMPTR,DCBPTR 1423 04802000 * CALL IOEDKGET; /* GET NEXT RECORD #Y30OE78*/ 04803000 L @15,@CV00049 1424 04804000 BALR @14,@15 1424 04805000 * IF RPLFDBK=EOVGET THEN/* IF EOV OCCURRED, #Y30OE78*/ 04806000 L @08,DCBPTR 1425 04807000 SLR @04,@04 1425 04808000 ICM @04,7,DCBAMWKA+16(@08) 1425 04809000 CLC RPLFDBK(3,@04),@CF00357+1 1425 04810000 BNE @RF01425 1425 04811000 * DKCHNGD=ON; /* INDICATE DSKT CHANGE #Y30OE78*/ 04812000 OI DKCHNGD,B'00000100' 1426 04813000 * END; /* #Y30OE78*/ 04814000 @RF01425 DS 0H 1428 04815000 * END; /* #Y30OE78*/ 04816000 @RF01420 DS 0H 1428 04817000 @DE01408 TM INEOF,B'00011001' 1428 04818000 BZ @DL01408 1428 04819000 * IF UT3SYN=ON THEN /* IF UT3 ERROR, #Y30OE78*/ 04820000 TM UT3SYN,B'00000001' 1429 04821000 BNO @RF01429 1429 04822000 * DO; /* #Y30OE78*/ 04823000 * IADONE=ON; /* INDICATE SHUTDOWN #Y30OE78*/ 04824000 OI IADONE,B'10000000' 1431 04825000 * RTNCODE=TERMERR; /* SET RETURN CODE #Y30OE78*/ 04826000 MVI RTNCODE,X'08' 1432 04827000 * MSGIDEX=M554; /* SET MSG INDEX #Y30OE78*/ 04828000 MVI MSGIDEX,X'0C' 1433 04829000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 04830000 MVI MSGTYPE,X'01' 1434 04831000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 04832000 MVI DDNK,X'07' 1435 04833000 * DDN=DDNAME(UT3); /* GET DDNAME #Y30OE78*/ 04834000 MVC DDN(8),DDNAME+36 1436 04835000 * JJJK=JOBLOP; /* DELETE JOBNAME #Y30OE78*/ 04836000 MVI JJJK,X'8B' 1437 04837000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARMS #Y30OE78*/ 04838000 LA PARMPTR,MSGINT 1438 04839000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 04840000 L @15,@CV00048 1439 04841000 BALR @14,@15 1439 04842000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 04843000 MVI DDNK,X'00' 1440 04844000 * JJJK=SKIPV; /* RESET JOBNAME KEY #Y30OE78*/ 04845000 MVI JJJK,X'00' 1441 04846000 * END; /* #Y30OE78*/ 04847000 * ELSE /* IF NO OUTPUT ERROR, #Y30OE78*/ 04848000 * DO; /* FLUSH BUFFERS #Y30OE78*/ 04849000 B @RC01429 1443 04850000 @RF01429 DS 0H 1444 04851000 * IF BLKLEN>LENGTH(BDW) THEN/* IF DATA IN BUFFER, #Y30OE78*/ 04852000 L @08,BUFCBPTR 1444 04853000 L @08,BUFELPTR(,@08) 1444 04854000 L @04,BUFPTR(,@08) 1444 04855000 LH @03,BLKLEN(,@04) 1444 04856000 CH @03,@CH00056 1444 04857000 BNH @RF01444 1444 04858000 * DO; /* WRITE IT #Y30OE78*/ 04859000 * WRIND=ZERO; /* INDICATE WRITE WAS @Z30OE78 04860000 * ISSUED TO BUFFER @Z30OE78*/ 04861000 SLR @03,@03 1446 04862000 STH @03,WRIND(,@04) 1446 04863000 * PARMPTR=DECBPTR; /* POINT TO DECB #Y30OE78*/ 04864000 L PARMPTR,DECBPTR(,@08) 1447 04865000 * BLKPTR=BUFPTR; /* POINT TO BUFFER #Y30OE78*/ 04866000 LR BLKPTR,@04 1448 04867000 * GEN REFS(PARMPTR,BLKPTR)/* WRITE LAST BUFFER #Y30OE78*/ 04868000 * (WRITE (PARMPTR),SF,,(BLKPTR),MF=E);/* #Y30OE78*/ 04869000 WRITE (PARMPTR),SF,,(BLKPTR),MF=E 04870000 * END; /* #Y30OE78*/ 04871000 * DO I=1 TO 2; /* WAIT FOR COMPLETION #Y30OE78*/ 04872000 @RF01444 LA I,1 1451 04873000 @DL01451 DS 0H 1452 04874000 * BUFELPTR=BUFELNXT; /* GET OTHER BUFFER #Y30OE78*/ 04875000 L @08,BUFCBPTR 1452 04876000 L @03,BUFELPTR(,@08) 1452 04877000 L @03,BUFELNXT(,@03) 1452 04878000 ST @03,BUFELPTR(,@08) 1452 04879000 * IF WRIND=ZERO THEN /* IF BUFFER WAS WRITTEN #Y30OE78*/ 04880000 L @08,BUFPTR(,@03) 1453 04881000 ICM @00,3,WRIND(@08) 1453 04882000 BNZ @RF01453 1453 04883000 * DO; /* #Y30OE78*/ 04884000 * PARMPTR=DECBPTR; /* POINT TO DECB #Y30OE78*/ 04885000 L PARMPTR,DECBPTR(,@03) 1455 04886000 * GEN REFS(PARMPTR) /* WAIT #Y30OE78*/ 04887000 * (CHECK (PARMPTR));/* #Y30OE78*/ 04888000 CHECK (PARMPTR) 04889000 * END; /* #Y30OE78*/ 04890000 * END; /* #Y30OE78*/ 04891000 @RF01453 AH I,@CH00061 1458 04892000 CH I,@CH00135 1458 04893000 BNH @DL01451 1458 04894000 * IF UT3SYN=ON THEN /* IF UT3 ERROR DETECTED #Y30OE78*/ 04895000 TM UT3SYN,B'00000001' 1459 04896000 BNO @RF01459 1459 04897000 * DO; /* DURING BUFFER FLUSH, #Y30OE78*/ 04898000 * IADONE=ON; /* INDICATE SHUTDOWN #Y30OE78*/ 04899000 OI IADONE,B'10000000' 1461 04900000 * RTNCODE=TERMERR; /* SET RETURN CODE #Y30OE78*/ 04901000 MVI RTNCODE,X'08' 1462 04902000 * MSGIDEX=M554; /* SET MSG INDEX #Y30OE78*/ 04903000 MVI MSGIDEX,X'0C' 1463 04904000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 04905000 MVI MSGTYPE,X'01' 1464 04906000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 04907000 MVI DDNK,X'07' 1465 04908000 * DDN=DDNAME(UT3); /* GET DDNAME #Y30OE78*/ 04909000 MVC DDN(8),DDNAME+36 1466 04910000 * JJJK=JOBLOP; /* DELETE JOBNAME #Y30OE78*/ 04911000 MVI JJJK,X'8B' 1467 04912000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS #Y30OE78*/ 04913000 LA PARMPTR,MSGINT 1468 04914000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 04915000 L @15,@CV00048 1469 04916000 BALR @14,@15 1469 04917000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 04918000 MVI DDNK,X'00' 1470 04919000 * JJJK=SKIPV; /* RESET JOBNAME KEY #Y30OE78*/ 04920000 MVI JJJK,X'00' 1471 04921000 * END; /* #Y30OE78*/ 04922000 * ELSE /* IF GOOD FLUSH, #Y30OE78*/ 04923000 * DO; /* STOW ADS #Y30OE78*/ 04924000 B @RC01459 1473 04925000 @RF01459 DS 0H 1474 04926000 * BLKPTR=ADDR(DSNENTRY);/* POINT TO DIRECTORY #Y30OE78*/ 04927000 L BLKPTR,DSNPTRJ 1474 04928000 * RFY 1475 04929000 * RTNCDREG RSTD; /* DATA IN DSNTAB #Y30OE78*/ 04930000 * GEN REFS(UT3BPOUT,BLKPTR)/* STOW #Y30OE78*/ 04931000 * (STOW UT3BPOUT,(BLKPTR));/* #Y30OE78*/ 04932000 STOW UT3BPOUT,(BLKPTR) 04933000 * IF RTNCDREG^=ZERO THEN/* IF STOW ERROR #Y30OE78*/ 04934000 LTR RTNCDREG,RTNCDREG 1477 04935000 BZ @RF01477 1477 04936000 * DO; /* #Y30OE78*/ 04937000 * RFY 1479 04938000 * RTNCDREG UNRSTD;/* #Y30OE78*/ 04939000 * IADONE=ON; /* INDICATE SHUTDOWN #Y30OE78*/ 04940000 OI IADONE,B'10000000' 1480 04941000 * RTNCODE=TERMERR;/* SET RETURN CODE #Y30OE78*/ 04942000 MVI RTNCODE,X'08' 1481 04943000 * MSGIDEX=M555; /* SET MSG INDEX #Y30OE78*/ 04944000 MVI MSGIDEX,X'12' 1482 04945000 * MSGTYPE=MTYPWTO;/* INDICATE WTO #Y30OE78*/ 04946000 MVI MSGTYPE,X'01' 1483 04947000 * PARMPTR=ADDR(MSGINT);/* POINT TO PARMS #Y30OE78*/ 04948000 LA PARMPTR,MSGINT 1484 04949000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 04950000 L @15,@CV00048 1485 04951000 BALR @14,@15 1485 04952000 * END; /* #Y30OE78*/ 04953000 * ELSE /* IF GOOD STOW #Y30OE78*/ 04954000 * IF DLMHIT=ON| /* IF DLM HIT OR #Y30OE78*/ 04955000 * RPLFDBK=GOODEOD|/* GOOD EOD OCCURRED, #ZA04466*/ 04956000 * RPLFDBK=EOVEOD THEN/* EOV AND EOD OCCURRED 1487 04957000 * @ZA04466*/ 04958000 B @RC01477 1487 04959000 @RF01477 TM DLMHIT,B'00010000' 1487 04960000 BO @RT01487 1487 04961000 L @08,DCBPTR 1487 04962000 SLR @04,@04 1487 04963000 ICM @04,7,DCBAMWKA+16(@08) 1487 04964000 CLC RPLFDBK(3,@04),@CF00363+1 1487 04965000 BE @RT01487 1487 04966000 CLC RPLFDBK(3,@04),@CF00359+1 1487 04967000 BNE @RF01487 1487 04968000 @RT01487 DS 0H 1488 04969000 * DO; /* #Y30OE78*/ 04970000 * DSCNT=DSCNT-1;/* DECREMENT DS COUNT #Y30OE78*/ 04971000 L @08,DSCNT 1489 04972000 BCTR @08,0 1489 04973000 ST @08,DSCNT 1489 04974000 * ADSSAT=ON; /* SET ADS SATISFIED #Y30OE78*/ 04975000 L @08,DSNPTRJ 1490 04976000 OI ADSSAT(@08),B'00000100' 1490 04977000 * END; /* #Y30OE78*/ 04978000 * ELSE /* IF SYSDATA SYNAD ERR #Y30OE78*/ 04979000 * DO; /* OR EOD WITH DATA SET #Y30OE78 04980000 * CANCEL, MUST PUT ERR #Y30OE78 04981000 * CODE IN DSNTAB ENTRY #Y30OE78 04982000 * AND MARK OTHER EN- #Y30OE78 04983000 * TRIES FOR SAME JOB #Y30OE78 04984000 * WITH JOB ERROR IND #Y30OE78*/ 04985000 B @RC01487 1492 04986000 @RF01487 DS 0H 1493 04987000 * RFY 1493 04988000 * DSNENTRY BASED(DSNPTRI);/* #Y30OE78*/ 04989000 * DO DSNPTRI=DSNPTRJ TO FRSTADSN/* GET TO FIRST 04990000 * #Y30OE78*/ 04991000 * BY-LENGTH(DSNENTRY) WHILE/* DSNTAB ENTRY 04992000 * #Y30OE78*/ 04993000 * (DSNPTRI-LENGTH(DSNENTRY))->JOBNO=JOBNO; 04994000 L DSNPTRI,DSNPTRJ 1494 04995000 B @DE01494 1494 04996000 @DL01494 LR @08,DSNPTRI 1494 04997000 AL @08,@CF01677 1494 04998000 CLC JOBNO-1(4,@08),JOBNO(DSNPTRI) 1494 04999000 BNE @DC01494 1494 05000000 * /* #Y30OE78*/ 05001000 * END; /* FOR THIS JOB #Y30OE78*/ 05002000 AH DSNPTRI,@CH01601 1495 05003000 @DE01494 C DSNPTRI,FRSTADSN 1495 05004000 BNL @DL01494 1495 05005000 @DC01494 DS 0H 1496 05006000 * DO DSNPTRI=DSNPTRI TO LASTADSN/* MARK EACH 1496 05007000 * #Y30OE78*/ 05008000 * BY LENGTH(DSNENTRY) WHILE/* ENTRY FOR JOB 05009000 * #Y30OE78*/ 05010000 * JOBNO=DSNPTRJ->JOBNO;/* #Y30OE78*/ 05011000 B @DE01496 1496 05012000 @DL01496 L @08,DSNPTRJ 1496 05013000 CLC JOBNO(4,DSNPTRI),JOBNO(@08) 1496 05014000 BNE @DC01496 1496 05015000 * JOBERR=ON; /* WITH ERROR INDICATOR #Y30OE78*/ 05016000 OI JOBERR(DSNPTRI),B'00010000' 1497 05017000 * IF ADSSAT=OFF THEN/* IF DSCNT NOT DECREMNT 1498 05018000 * #Y30OE78*/ 05019000 TM ADSSAT(DSNPTRI),B'00000100' 1498 05020000 BNZ @RF01498 1498 05021000 * DSCNT=DSCNT-1;/* BEFORE, DO IT NOW #Y30OE78*/ 05022000 L @08,DSCNT 1499 05023000 BCTR @08,0 1499 05024000 ST @08,DSCNT 1499 05025000 * END; /* #Y30OE78*/ 05026000 @RF01498 AH DSNPTRI,@CH01204 1500 05027000 @DE01496 C DSNPTRI,LASTADSN 1500 05028000 BNH @DL01496 1500 05029000 @DC01496 DS 0H 1501 05030000 * RFY 1501 05031000 * DSNENTRY BASED(DSNPTRJ);/* #Y30OE78*/ 05032000 * JCLMSG=ON; /* SET JCL COMMENT MSG #Y30OE78 05033000 * INDICATOR #Y30OE78*/ 05034000 L @08,DSNPTRJ 1502 05035000 OI JCLMSG(@08),B'00001000' 1502 05036000 * IF INERR=ON THEN/* IF SYSDATA SYNAD ERR, 1503 05037000 * #Y30OE78*/ 05038000 TM INERR,B'00001000' 1503 05039000 BNO @RF01503 1503 05040000 * DO; /* #Y30OE78*/ 05041000 * ERRCODE=CDPIOR;/* SET ERRCODE FOR MSG 1505 05042000 * #Y30OE78*/ 05043000 MVC ERRCODE(3,@08),@CC00345 1505 05044000 * IF RPLFDBK=DKTSYNAD THEN/* IF DSKT-RELATED 05045000 * #Y30OE78 05046000 * I/O ERROR #Y30OE78*/ 05047000 L @08,DCBPTR 1506 05048000 SLR @04,@04 1506 05049000 ICM @04,7,DCBAMWKA+16(@08) 1506 05050000 CLC RPLFDBK(3,@04),@CF00353+1 1506 05051000 BNE @RF01506 1506 05052000 * DKFEED=ON;/* INDICATE FEED #Y30OE78*/ 05053000 OI DKFEED,B'00001000' 1507 05054000 * END; /* #Y30OE78*/ 05055000 * ELSE /* IF BAD EOD EXIT #Y30OE78*/ 05056000 * IF RPLFDBK=DLMEOD THEN/* IF DLM DSKT HIT 1509 05057000 * WHILE #Y30OE78*/ 05058000 B @RC01503 1509 05059000 @RF01503 L @08,DCBPTR 1509 05060000 SLR @04,@04 1509 05061000 ICM @04,7,DCBAMWKA+16(@08) 1509 05062000 CLC RPLFDBK(3,@04),@CF00355+1 1509 05063000 BNE @RF01509 1509 05064000 * DO; /* READING DATA SET #Y30OE78*/ 05065000 * DKFEED=ON;/* INDICATE FEED @ZA00792*/ 05066000 * DKDLM=ON;/* INDICATE DLM HIT #Y30OE78*/ 05067000 OI DKFEED,B'00001010' 1512 05068000 * ERRCODE=CDDLM;/* SET ERROR CODE #Y30OE78*/ 05069000 L @08,DSNPTRJ 1513 05070000 MVC ERRCODE(3,@08),@CC00347 1513 05071000 * END; /* #Y30OE78*/ 05072000 * ELSE /* CHECK OTHER PASSBACK #Y30OE78*/ 05073000 * DO; /* @ZA00792*/ 05074000 B @RC01509 1515 05075000 @RF01509 DS 0H 1516 05076000 * DKCHNGD=ON;/* INDICATE DISKETTE WAS 1516 05077000 * @ZA00792 05078000 * CHANGED WHILE ATTEMPT @ZA00792 05079000 * ING EOV @ZA00792*/ 05080000 OI DKCHNGD,B'00000100' 1516 05081000 * IF SETDRTN1=R1IVOL1 THEN/* IF BAD VOL1, 05082000 * #Y30OE78*/ 05083000 L @08,DCBPTR 1517 05084000 SLR @04,@04 1517 05085000 ICM @04,7,DCBAMWKA+16(@08) 1517 05086000 CLI SETDRTN1(@04),X'08' 1517 05087000 BNE @RF01517 1517 05088000 * ERRCODE=CDEVOL;/* SET BAD VOL1 CODE 1518 05089000 * #Y30OE78*/ 05090000 L @08,DSNPTRJ 1518 05091000 MVC ERRCODE(3,@08),@CC00341 1518 05092000 * ELSE /* CHECK OTHER PASSBACK #Y30OE78*/ 05093000 * IF SETDRTN1=R1IHDR1 THEN/* IF INVALID 05094000 * HDR1, #Y30OE78*/ 05095000 B @RC01517 1519 05096000 @RF01517 L @08,DCBPTR 1519 05097000 SLR @04,@04 1519 05098000 ICM @04,7,DCBAMWKA+16(@08) 1519 05099000 CLI SETDRTN1(@04),X'0C' 1519 05100000 BNE @RF01519 1519 05101000 * ERRCODE=CDEHDR;/* SET BAD HDR CODE 1520 05102000 * #Y30OE78*/ 05103000 L @08,DSNPTRJ 1520 05104000 MVC ERRCODE(3,@08),@CC00343 1520 05105000 * ELSE /* CHECK OTHER PASSBACK #Y30OE78*/ 05106000 * IF SETDRTN1=R1SEQ THEN/* IF OPERATOR 05107000 * CANCEL #Y30OE78*/ 05108000 B @RC01519 1521 05109000 @RF01519 L @08,DCBPTR 1521 05110000 SLR @04,@04 1521 05111000 ICM @04,7,DCBAMWKA+16(@08) 1521 05112000 CLI SETDRTN1(@04),X'18' 1521 05113000 BNE @RF01521 1521 05114000 * ERRCODE=CDSEQ;/* OF SEQUENCE ERROR, 05115000 * #Y30OE78 05116000 * SET SEQ ERROR CODE #Y30OE78*/ 05117000 L @08,DSNPTRJ 1522 05118000 MVC ERRCODE(3,@08),@CC00349 1522 05119000 * ELSE/* TREAT AS NONSPECIFIC #Y30OE78*/ 05120000 * ERRCODE=CDEOV;/* SET ERROR CODE 1523 05121000 * #Y30OE78*/ 05122000 B @RC01521 1523 05123000 @RF01521 L @08,DSNPTRJ 1523 05124000 MVC ERRCODE(3,@08),@CC00339 1523 05125000 * END; /* #Y30OE78*/ 05126000 @RC01521 DS 0H 1524 05127000 @RC01519 DS 0H 1524 05128000 @RC01517 DS 0H 1525 05129000 * END; /* #Y30OE78*/ 05130000 @RC01509 DS 0H 1525 05131000 @RC01503 DS 0H 1526 05132000 * END; /* #Y30OE78*/ 05133000 @RC01487 DS 0H 1526 05134000 @RC01477 DS 0H 1527 05135000 * END; /* #Y30OE78*/ 05136000 * 1527 05137000 @RC01459 DS 0H 1528 05138000 * /*************************************************************/ 05139000 * /* */ 05140000 * /* END SEGMENT - READ ADS @Z30OE78*/ 05141000 * /* */ 05142000 * /*************************************************************/ 05143000 * 1528 05144000 * SETDOPCD=OPCLOSE; /* SET UP FOR SETDISKT #Y30OE78*/ 05145000 @RC01429 L @08,DCBPTR 1528 05146000 SLR @04,@04 1528 05147000 ICM @04,7,DCBAMWKA+16(@08) 1528 05148000 MVI SETDOPCD(@04),X'03' 1528 05149000 * PARMPTR=ADDR(SETDLIST); /* CLOSE #Y30OE78*/ 05150000 LA PARMPTR,SETDLIST(,@04) 1529 05151000 * CALL IOESDKTI; /* OF ADS #Y30OE78*/ 05152000 L @15,@CV00047 1530 05153000 BALR @14,@15 1530 05154000 * END; /* #Y30OE78*/ 05155000 * END GETADS; /* #Y30OE78*/ 05156000 @EL00014 DS 0H 1532 05157000 @EF00014 DS 0H 1532 05158000 @ER00014 L @14,@SA00014 1532 05159000 BR @14 1532 05160000 * 1533 05161000 */********************************************************** @Z30OE78*/ 05162000 */* @Z30OE78*/ 05163000 */* ROUTINE NAME- @Z30OE78*/ 05164000 */* JOBCLEAN @Z30OE78*/ 05165000 */* @Z30OE78*/ 05166000 */* FUNCTION- @Z30OE78*/ 05167000 */* MARK ALL DSNTAB ENTRIES FOR A JOB TO INDICATE A JOB @Z30OE78*/ 05168000 */* ERROR HAS BEEN DETECTED @Z30OE78*/ 05169000 */* IF DATA SET HAS NOT YET BEEN PROCESSED, DECREMENT @Z30OE78*/ 05170000 */* DATA SET COUNT SINCE NO FURTHER ATTEMPT WILL BE @Z30OE78*/ 05171000 */* MADE TO RETRIEVE IT @Z30OE78*/ 05172000 */* @Z30OE78*/ 05173000 */* INPUT- @Z30OE78*/ 05174000 */* DSNPTRK POINTING TO DSNTAB ENTRY FOR WHICH AN ERROR @Z30OE78*/ 05175000 */* OCCURRED @Z30OE78*/ 05176000 */* DATA SET NAME TABLE @Z30OE78*/ 05177000 */* @Z30OE78*/ 05178000 */* OUTPUT- @Z30OE78*/ 05179000 */* UPDATED DATA SET COUNT @Z30OE78*/ 05180000 */* UPDATED DSNTAB @Z30OE78*/ 05181000 */* @Z30OE78*/ 05182000 */* ROUTINES CALLED- @Z30OE78*/ 05183000 */* NONE @Z30OE78*/ 05184000 */* @Z30OE78*/ 05185000 */* MACROS- @Z30OE78*/ 05186000 */* NONE @Z30OE78*/ 05187000 */* @Z30OE78*/ 05188000 */********************************************************** @Z30OE78*/ 05189000 * 1533 05190000 *JOBCLEAN: /* SUBROUTINE TO CLEAN @Z30OE78*/ 05191000 * PROC OPTIONS(SAVE(RTNREG)); /* UP DSNTAB ENTRIES FOR @Z30OE78 05192000 * A JOB THAT CANNOT RUN @Z30OE78*/ 05193000 JOBCLEAN ST @14,12(,@13) 1533 05194000 * RFY 1534 05195000 * DSNENTRY BASED(DSNPTRI); /* @Z30OE78*/ 05196000 * DO DSNPTRI=DSNPTRK TO FRSTADSN /* GET TO FIRST @Z30OE78*/ 05197000 * BY-LENGTH(DSNENTRY) WHILE /* DSNTAB ENTRY @Z30OE78*/ 05198000 * (DSNPTRI-LENGTH(DSNENTRY))->JOBNO=/* @Z30OE78*/ 05199000 * JOBNO; /* @Z30OE78*/ 05200000 LR DSNPTRI,DSNPTRK 1535 05201000 B @DE01535 1535 05202000 @DL01535 LR @08,DSNPTRI 1535 05203000 AL @08,@CF01677 1535 05204000 CLC JOBNO-1(4,@08),JOBNO(DSNPTRI) 1535 05205000 BNE @DC01535 1535 05206000 * END; /* FOR THIS JOB @Z30OE78*/ 05207000 AH DSNPTRI,@CH01601 1536 05208000 @DE01535 C DSNPTRI,FRSTADSN 1536 05209000 BNL @DL01535 1536 05210000 @DC01535 DS 0H 1537 05211000 * DO DSNPTRI=DSNPTRI TO LASTADSN /* MARK EACH @Z30OE78*/ 05212000 * BY LENGTH(DSNENTRY) WHILE /* ENTRY FOR JOB @Z30OE78*/ 05213000 * JOBNO=DSNPTRK->JOBNO; /* @Z30OE78*/ 05214000 B @DE01537 1537 05215000 @DL01537 CLC JOBNO(4,DSNPTRI),JOBNO(DSNPTRK) 1537 05216000 BNE @DC01537 1537 05217000 * JOBERR=ON; /* WITH ERROR INDICATOR @Z30OE78*/ 05218000 OI JOBERR(DSNPTRI),B'00010000' 1538 05219000 * IF ADSSAT=OFF THEN /* IF NOT ALREADY DONE @Z30OE78*/ 05220000 TM ADSSAT(DSNPTRI),B'00000100' 1539 05221000 BNZ @RF01539 1539 05222000 * DSCNT=DSCNT-1; /* DECREMENT DS COUNT @Z30OE78*/ 05223000 L @08,DSCNT 1540 05224000 BCTR @08,0 1540 05225000 ST @08,DSCNT 1540 05226000 * END; /* @Z30OE78*/ 05227000 @RF01539 AH DSNPTRI,@CH01204 1541 05228000 @DE01537 C DSNPTRI,LASTADSN 1541 05229000 BNH @DL01537 1541 05230000 @DC01537 DS 0H 1542 05231000 * RFY 1542 05232000 * DSNENTRY BASED(DSNPTRJ); /* @Z30OE78*/ 05233000 * END JOBCLEAN; /* @Z30OE78*/ 05234000 @EL00015 DS 0H 1543 05235000 @EF00015 DS 0H 1543 05236000 @ER00015 L @14,12(,@13) 1543 05237000 BR @14 1543 05238000 * 1544 05239000 */********************************************************** #Y30OE78*/ 05240000 */* #Y30OE78*/ 05241000 */* ROUTINE NAME- #Y30OE78*/ 05242000 */* PROCSTRM #Y30OE78*/ 05243000 */* #Y30OE78*/ 05244000 */* FUNCTION- #Y30OE78*/ 05245000 */* READ JCL RECORDS AND ADS'S FROM SYSUT3 FILE AND WRITE #Y30OE78*/ 05246000 */* THEM TO THE SYSUT2(INTRDR) FILE WITH ADS RECORDS #Y30OE78*/ 05247000 */* MERGED INTO THE JOBSTREAM AS INSTREAM DATA. THIS #Y30OE78*/ 05248000 */* ROUTINE PROVIDES DELIMITER RECORDS FOR THE MERGED #Y30OE78*/ 05249000 */* ASSOCIATED DATA SETS #Y30OE78*/ 05250000 */* #Y30OE78*/ 05251000 */* INPUT- #Y30OE78*/ 05252000 */* RECORDS FROM JCL MEMBER OF THE SYSUT3 DATA SET #Y30OE78*/ 05253000 */* INCLUDING THE CONTROL INFORMATION APPENDED IN #Y30OE78*/ 05254000 */* EARLIER PARTS OF DISKETTE READER TO INDICATE #Y30OE78*/ 05255000 */* WHERE AN ADS IS TO BE MERGED IN THE JCL STREAM #Y30OE78*/ 05256000 */* RECORDS FROM ADS MEMBERS OF THE SYSUT3 DATA SET #Y30OE78*/ 05257000 */* DATA SET NAME TABLE(DSNTAB) #Y30OE78*/ 05258000 */* #Y30OE78*/ 05259000 */* OUTPUT- #Y30OE78*/ 05260000 */* STREAM OF RECORDS CREATED BY MERGING ADS RECORDS #Y30OE78*/ 05261000 */* INTO JCL STREAM IS PASSED TO SYSUT2(INTRDR) FILE #Y30OE78*/ 05262000 */* MESSAGE IEB554 IF ERROR OCCURS #Y30OE78*/ 05263000 */* #Y30OE78*/ 05264000 */* ROUTINES CALLED- #Y30OE78*/ 05265000 */* BPAMGET #Y30OE78*/ 05266000 */* PUTADS #Y30OE78*/ 05267000 */* IOEDKMSG #Y30OE78*/ 05268000 */* #Y30OE78*/ 05269000 */* MACROS- #Y30OE78*/ 05270000 */* WRITE #Y30OE78*/ 05271000 */* CHECK #Y30OE78*/ 05272000 */* #Y30OE78*/ 05273000 */********************************************************* #Y30OE78*/ 05274000 * 1544 05275000 *PROCSTRM: /* ROUTINE TO READ JCL #Y30OE78*/ 05276000 * PROC OPTIONS(SAVE(RTNREG)); /* & MERGE ADS #Y30OE78*/ 05277000 PROCSTRM ST @14,@SA00016 1544 05278000 * UT3IJEOD=OFF; /* INITIALIZE STATUS #Y30OE78*/ 05279000 * UT3IJSYN=OFF; /* INDICATORS #Y30OE78*/ 05280000 NI UT3IJEOD,B'00111111' 1546 05281000 * CURJOBNM=BLANK; /* CLEAR CURRENT @ZA00784 05282000 * JOB NAME @ZA00784*/ 05283000 MVI CURJOBNM+1,C' ' 1547 05284000 MVC CURJOBNM+2(6),CURJOBNM+1 1547 05285000 MVI CURJOBNM,C' ' 1547 05286000 * DSNPTRJ=FRSTADSN; /* POINT TO 1ST ADS ENT #Y30OE78*/ 05287000 MVC DSNPTRJ(4),FRSTADSN 1548 05288000 * CALL BPAMGET; /* GET 1ST JCL RECORD #Y30OE78*/ 05289000 BAL @14,BPAMGET 1549 05290000 * DO WHILE UT2SYNI=OFF& /* PROCESS JCL TIL END #Y30OE78*/ 05291000 * UT3IASYN=OFF& /* OF #Y30OE78*/ 05292000 * UT3IJEOD=OFF& /* INPUT #Y30OE78*/ 05293000 * UT3IJSYN=OFF; /* OR ERROR ENCOUNTERED #Y30OE78*/ 05294000 B @DE01550 1550 05295000 @DL01550 DS 0H 1551 05296000 * IF RDWLNA>LENGTH(RECJCL)+LENGTH(RDWA) THEN/* IF CNTRL #Y30OE78 05297000 * INFO ON THIS RECORD, #Y30OE78*/ 05298000 LH @08,RDWLNA 1551 05299000 CH @08,@CH01598 1551 05300000 BNH @RF01551 1551 05301000 * CNTRLSCN=ON; /* SET INDICATOR #Y30OE78*/ 05302000 OI CNTRLSCN,B'00000001' 1552 05303000 * ELSE /* IF NOT PRESENT, #Y30OE78*/ 05304000 * CNTRLSCN=OFF; /* UNSET INDICATOR #Y30OE78*/ 05305000 B @RC01551 1553 05306000 @RF01551 NI CNTRLSCN,B'11111110' 1553 05307000 * RDWLNA=LENGTH(RECJCL)+LENGTH(RDWA);/* SET RDW LENGTH #Y30OE78*/ 05308000 @RC01551 LA @08,84 1554 05309000 STH @08,RDWLNA 1554 05310000 * BDWLNA=RDWLNA+LENGTH(BDWA); /* #Y30OE78*/ 05311000 AH @08,@CH00056 1555 05312000 STH @08,BDWLNA 1555 05313000 * GEN REFS(DECB7); 1556 05314000 * /*#Y30OE78*/ 05315000 WRITE DECB7,SF,MF=E @Y30OE78 05316000 CHECK DECB7 @Y30OE78 05317000 * IF CNTRLSCN=ON& /* IF JCL RECORD #Y30OE78 05318000 * HAS CNTRL INFO #Y30OE78*/ 05319000 * UT2SYNI=OFF THEN /* AND NO PUT ERROR, #Y30OE78 05320000 * PROCESS CNTRL INFO #Y30OE78*/ 05321000 TM CNTRLSCN,B'00000001' 1557 05322000 BNO @RF01557 1557 05323000 TM UT2SYNI,B'00000010' 1557 05324000 BNZ @RF01557 1557 05325000 * IF CJOB=ON THEN /* IF JOB RECORD, #Y30OE78*/ 05326000 TM CJOB,B'00100000' 1558 05327000 BNO @RF01558 1558 05328000 * DO; /* PROCESS JOB STMT #Y30OE78*/ 05329000 * IF FIRST=ON THEN /* IF FIRST RECORD #Y30OE78*/ 05330000 TM FIRST,B'00000100' 1560 05331000 BNO @RF01560 1560 05332000 * DO; /* SAVE JOB NAME #Y30OE78*/ 05333000 * DO I=NAMECOL TO NAMECOL+LENGTH(CURJOBNM)/* #Y30OE78*/ 05334000 * WHILE RECJCL(I)^=BLANK;/* FIND END OF #Y30OE78*/ 05335000 LA I,3 1562 05336000 @DL01562 LA @08,RECJCL-1(I) 1562 05337000 CLI 0(@08),C' ' 1562 05338000 BE @DC01562 1562 05339000 * END; /* JOBNAME #Y30OE78*/ 05340000 AH I,@CH00061 1563 05341000 CH I,@CH00033 1563 05342000 BNH @DL01562 1563 05343000 @DC01562 DS 0H 1564 05344000 * CURJOBNM=RECJCL(NAMECOL:I-1);/* SAVE JOBNM #Y30OE78*/ 05345000 MVI CURJOBNM+1,C' ' 1564 05346000 MVC CURJOBNM+2(6),CURJOBNM+1 1564 05347000 LR @08,I 1564 05348000 SH @08,@CH00056 1564 05349000 EX @08,@SM01666 1564 05350000 * END; /* #Y30OE78*/ 05351000 * IF LAST=ON THEN /* IF LAST OF JOB STMT, #Y30OE78*/ 05352000 @RF01560 TM LAST,B'00000001' 1566 05353000 BNO @RF01566 1566 05354000 * DO; /* CHECK IF SCAN CONTROL #Y30OE78*/ 05355000 * SCANPUT=OFF; /* CARD SHOULD BE INSERT #Y30OE78*/ 05356000 NI SCANPUT,B'11110111' 1568 05357000 * RFY 1569 05358000 * DSNENTRY BASED(DSNPTRI);/* #Y30OE78*/ 05359000 * DO DSNPTRI=DSNPTRJ TO LASTADSN/* CHECK ALL #Y30OE78*/ 05360000 * BY LENGTH(DSNENTRY) WHILE/* DSNTAB #Y30OE78*/ 05361000 * CTRLJOB#=JOBNO&/* ENTRIES FOR JOB TO #Y30OE78*/ 05362000 * SCANPUT=OFF; /* FIND IF JCL COMMENT #Y30OE78 05363000 * MSG TO BE WRITTEN #Y30OE78*/ 05364000 L DSNPTRI,DSNPTRJ 1570 05365000 B @DE01570 1570 05366000 @DL01570 CLC CTRLJOB#(4),JOBNO(DSNPTRI) 1570 05367000 BNE @DC01570 1570 05368000 TM SCANPUT,B'00001000' 1570 05369000 BNZ @DC01570 1570 05370000 * IF JCLMSG=ON THEN /* IF SUCH ENTRY IS #Y30OE78*/ 05371000 TM JCLMSG(DSNPTRI),B'00001000' 1571 05372000 BNO @RF01571 1571 05373000 * DO; /* FOUND, INSERT SCAN #Y30OE78*/ 05374000 * SCANPUT=ON; /* INDICATE SCAN INSERT #Y30OE78*/ 05375000 OI SCANPUT,B'00001000' 1573 05376000 * RECJCL=SCANCARD;/* PUT SCAN IN BUFFER #Y30OE78*/ 05377000 MVI RECJCL+6,C' ' 1574 05378000 MVC RECJCL+7(73),RECJCL+6 1574 05379000 MVC RECJCL(6),SCANCARD 1574 05380000 * GEN REFS(DECB7); 1575 05381000 * /* WRITE RECORD #Y30OE78*/ 05382000 WRITE DECB7,SF,MF=E @Y30OE78 05383000 CHECK DECB7 @Y30OE78 05384000 * END; /* #Y30OE78*/ 05385000 * END; /* #Y30OE78*/ 05386000 @RF01571 AH DSNPTRI,@CH01204 1577 05387000 @DE01570 C DSNPTRI,LASTADSN 1577 05388000 BNH @DL01570 1577 05389000 @DC01570 DS 0H 1578 05390000 * RFY 1578 05391000 * DSNENTRY BASED(DSNPTRJ);/* #Y30OE78*/ 05392000 * END; /* #Y30OE78*/ 05393000 * END; /* #Y30OE78*/ 05394000 * ELSE /* NOT A JOB RECORD #Y30OE78*/ 05395000 * CALL PUTADS; /* PROCESS ADS #Y30OE78*/ 05396000 B @RC01558 1581 05397000 @RF01558 BAL @14,PUTADS 1581 05398000 * CALL BPAMGET; /* GET NEXT JCL RECORD #Y30OE78*/ 05399000 @RC01558 DS 0H 1582 05400000 @RF01557 BAL @14,BPAMGET 1582 05401000 * END; /* #Y30OE78*/ 05402000 @DE01550 TM UT2SYNI,B'00000010' 1583 05403000 BNZ @DC01550 1583 05404000 TM UT3IASYN,B'01000000' 1583 05405000 BNZ @DC01550 1583 05406000 TM UT3IJEOD,B'11000000' 1583 05407000 BZ @DL01550 1583 05408000 @DC01550 DS 0H 1584 05409000 * IF(JOBDEL=ON| /* IF LAST JOB IN STREAM @Z30OE78*/ 05410000 * UT3IASYN=ON| /* IS TO BE DELETED, @Z30OE78*/ 05411000 * UT3IJSYN=ON)& /* AND @Z30OE78*/ 05412000 * UT2SYNI=OFF THEN /* NO OUTPUT ERRORS @Z30OE78*/ 05413000 TM JOBDEL,B'00100000' 1584 05414000 BO @GL00056 1584 05415000 TM UT3IASYN,B'01000000' 1584 05416000 BO @GL00056 1584 05417000 TM UT3IJSYN,B'01000000' 1584 05418000 BNO @RF01584 1584 05419000 @GL00056 TM UT2SYNI,B'00000010' 1584 05420000 BNZ @RF01584 1584 05421000 * DO; /* @Z30OE78*/ 05422000 * RECJCL=DELCARD; /* PUT DELETE CARD IN @Z30OE78 05423000 * BUFFER @Z30OE78*/ 05424000 MVI RECJCL+5,C' ' 1586 05425000 MVC RECJCL+6(74),RECJCL+5 1586 05426000 MVC RECJCL(5),DELCARD 1586 05427000 * RDWLNA=LENGTH(RECJCL)+ /* SET RECORD LENGTH @Z30OE78*/ 05428000 * LENGTH(RDWA); /* @Z30OE78*/ 05429000 LA @08,84 1587 05430000 STH @08,RDWLNA 1587 05431000 * BDWLNA=RDWLNA+LENGTH(BDWA); /* AND BLOCK LENGTH @Z30OE78*/ 05432000 AH @08,@CH00056 1588 05433000 STH @08,BDWLNA 1588 05434000 * GEN REFS(DECB7); 1589 05435000 * /* WRITE CONTROL RECORD @Z30OE78*/ 05436000 WRITE DECB7,SF,MF=E @Z30OE78 05437000 CHECK DECB7 @Z30OE78 05438000 * END; /* @Z30OE78*/ 05439000 * IF UT2SYNI=ON| /* IF I/O ERRORS #Y30OE78*/ 05440000 * UT3IASYN=ON| /* DETECTED, #Y30OE78*/ 05441000 * UT3IJSYN=ON THEN /* WRITE DIAGNOSTIC #Y30OE78*/ 05442000 @RF01584 TM UT2SYNI,B'00000010' 1591 05443000 BO @RT01591 1591 05444000 TM UT3IASYN,B'01000000' 1591 05445000 BO @RT01591 1591 05446000 TM UT3IJSYN,B'01000000' 1591 05447000 BNO @RF01591 1591 05448000 @RT01591 DS 0H 1592 05449000 * DO; /* MESSAGE #Y30OE78*/ 05450000 * RTNCODE=PARTERR; /* SET RETURN CODE @Z30OE78*/ 05451000 MVI RTNCODE,X'04' 1593 05452000 * MSGIDEX=M554; /* SET MSG INDEX #Y30OE78*/ 05453000 MVI MSGIDEX,X'0C' 1594 05454000 * MSGTYPE=MTYPWTO; /* INDICATE WTO #Y30OE78*/ 05455000 MVI MSGTYPE,X'01' 1595 05456000 * DDNK=DDNV; /* SET DDNAME KEY #Y30OE78*/ 05457000 MVI DDNK,X'07' 1596 05458000 * IF UT2SYNI=ON THEN /* PUT CORRECT DDNAME #Y30OE78*/ 05459000 TM UT2SYNI,B'00000010' 1597 05460000 BNO @RF01597 1597 05461000 * DDN=DDNAME(UT2); /* IN MESSAGE #Y30OE78*/ 05462000 MVC DDN(8),DDNAME+24 1598 05463000 * ELSE /* TEXT #Y30OE78*/ 05464000 * DDN=DDNAME(UT3); /* #Y30OE78*/ 05465000 B @RC01597 1599 05466000 @RF01597 MVC DDN(8),DDNAME+36 1599 05467000 * JJJK=JJJV; /* SET JOBNAME KEY #Y30OE78*/ 05468000 @RC01597 MVI JJJK,X'0B' 1600 05469000 * JJJ=CURJOBNM; /* SET JOBNAME IN TEXT #Y30OE78*/ 05470000 MVC JJJ(8),CURJOBNM 1601 05471000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARMS #Y30OE78*/ 05472000 LA PARMPTR,MSGINT 1602 05473000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 05474000 L @15,@CV00048 1603 05475000 BALR @14,@15 1603 05476000 * DDNK=SKIPV; /* RESET DDNAME KEY #Y30OE78*/ 05477000 MVI DDNK,X'00' 1604 05478000 * JJJK=SKIPV; /* RESET JOBNAME KEY #Y30OE78*/ 05479000 MVI JJJK,X'00' 1605 05480000 * END; /* #Y30OE78*/ 05481000 * END PROCSTRM; /* #Y30OE78*/ 05482000 @EL00016 DS 0H 1607 05483000 @EF00016 DS 0H 1607 05484000 @ER00016 L @14,@SA00016 1607 05485000 BR @14 1607 05486000 * 1608 05487000 */********************************************************** #Y30OE78*/ 05488000 */* #Y30OE78*/ 05489000 */* ROUTINE NAME- #Y30OE78*/ 05490000 */* PUTADS #Y30OE78*/ 05491000 */* #Y30OE78*/ 05492000 */* FUNCTION- #Y30OE78*/ 05493000 */* WRITE RECORDS OF ADS TO SYSUT2(INTRDR) FILE IF ADS'S #Y30OE78*/ 05494000 */* FOR THE JOB WERE RETRIEVED SUCCESSFULLY #Y30OE78*/ 05495000 */* WRITE JCL COMMENT MESSAGE IEB551 TO SYSUT2(INTRDR) #Y30OE78*/ 05496000 */* FILE IF ADS WAS NOT RETRIEVED BECAUSE OF DISKETTE #Y30OE78*/ 05497000 */* READER-DETECTED ERROR #Y30OE78*/ 05498000 */* WRITE ADS DELIMITER RECORD TO SYSUT2(INTRDR) FILE #Y30OE78*/ 05499000 */* #Y30OE78*/ 05500000 */* INPUT- #Y30OE78*/ 05501000 */* CONTROL INFORMATION ON JCL RECORD INDICATING ADS IS #Y30OE78*/ 05502000 */* TO BE INSERTED AT THIS POINT IN JCL STREAM #Y30OE78*/ 05503000 */* DSNTAB ENTRY CORRESPONDING TO CONTROL INFORMATION #Y30OE78*/ 05504000 */* NUMBER #Y30OE78*/ 05505000 */* #Y30OE78*/ 05506000 */* OUTPUT- #Y30OE78*/ 05507000 */* ADS RECORDS, MESSAGE IEB551 AND DATA DELIMITER #Y30OE78*/ 05508000 */* RECORDS WRITTEN TO SYSUT2(INTRDR) FILE #Y30OE78*/ 05509000 */* DSNPTRJ UPDATED TO POINT TO NEXT DSNTAB ENTRY #Y30OE78*/ 05510000 */* #Y30OE78*/ 05511000 */* ROUTINES CALLED- #Y30OE78*/ 05512000 */* IOEDKMSG #Y30OE78*/ 05513000 */* BPAMGET #Y30OE78*/ 05514000 */* #Y30OE78*/ 05515000 */* MACROS- #Y30OE78*/ 05516000 */* WRITE #Y30OE78*/ 05517000 */* CHECK #Y30OE78*/ 05518000 */* FIND #Y30OE78*/ 05519000 */* READ - BUFFER INITIALIZE #Y30OE78*/ 05520000 */* #Y30OE78*/ 05521000 */********************************************************* #Y30OE78*/ 05522000 * 1608 05523000 *PUTADS: /* PROCESS AN ADS WHILE #Y30OE78*/ 05524000 * PROC OPTIONS(SAVE(RTNREG)); /* MERGING ADS INTO JCL #Y30OE78*/ 05525000 PUTADS ST @14,@SA00017 1608 05526000 * IF JOBERR=ON THEN /* IF JOB ERROR ,DATA #Y30OE78*/ 05527000 L @08,DSNPTRJ 1609 05528000 TM JOBERR(@08),B'00010000' 1609 05529000 BNO @RF01609 1609 05530000 * DO; /* WAS NOT RETRIEVED #Y30OE78*/ 05531000 * RECJCL=DLMCARD; /* GET DLM RECORD IMAGE #Y30OE78*/ 05532000 MVC RECJCL(80),DLMCARD 1611 05533000 * RECJCL(1:2)=DLM; /* GET DELIMITER FOR DS #Y30OE78*/ 05534000 MVC RECJCL(2),DLM(@08) 1612 05535000 * GEN REFS(DECB7); 1613 05536000 * /* WRITE DELIMITER #Y30OE78*/ 05537000 WRITE DECB7,SF,MF=E @Y30OE78 05538000 CHECK DECB7 @Y30OE78 05539000 * IF JCLMSG=ON& /* IF JCL COMMENT MSG #Y30OE78 05540000 * IS TO BE WRITTEN AND #Y30OE78*/ 05541000 * UT2SYNI=OFF THEN /* NO ERROR HAS OCCURRED #Y30OE78*/ 05542000 L @08,DSNPTRJ 1614 05543000 TM JCLMSG(@08),B'00001000' 1614 05544000 BNO @RF01614 1614 05545000 TM UT2SYNI,B'00000010' 1614 05546000 BNZ @RF01614 1614 05547000 * DO; /* #Y30OE78*/ 05548000 * MSGIDEX=M551; /* SET MSG INDEX #Y30OE78*/ 05549000 MVI MSGIDEX,X'0B' 1616 05550000 * MSGTYPE=MTYPPUT; /* INDICATE WRITE/CHECK #Y30OE78*/ 05551000 MVI MSGTYPE,X'03' 1617 05552000 * DDDK=CCCV; /* SET MSG CODE KEY #Y30OE78*/ 05553000 MVI DDDK,X'0D' 1618 05554000 * DDD=ERRCODE; /* SET MSG CODE #Y30OE78*/ 05555000 MVC DDD(3),ERRCODE(@08) 1619 05556000 * PARMPTR=ADDR(MSGINT); /* POINT TO PARMS #Y30OE78*/ 05557000 LA PARMPTR,MSGINT 1620 05558000 * CALL IOEDKMSG; /* HAVE MSG WRITTEN #Y30OE78*/ 05559000 L @15,@CV00048 1621 05560000 BALR @14,@15 1621 05561000 * DDDK=SKIPV; /* RESET CODE KEY #Y30OE78*/ 05562000 MVI DDDK,X'00' 1622 05563000 * END; /* #Y30OE78*/ 05564000 * END; /* #Y30OE78*/ 05565000 * ELSE /* ADS WAS SUCCESSFULLY #Y30OE78*/ 05566000 * DO; /* RETRIEVED, PUT IT #Y30OE78*/ 05567000 B @RC01609 1625 05568000 @RF01609 DS 0H 1626 05569000 * BUFCBPTR=ADDR(BUFCB2); /* POINT TO BUFFER CNTRL #Y30OE78 05570000 * BLOCK FOR ADS READ #Y30OE78*/ 05571000 LA @08,BUFCB2 1626 05572000 ST @08,BUFCBPTR 1626 05573000 * UT3IAEOD=OFF; /* RESET STATUS SWITCHES #Y30OE78*/ 05574000 * UT3IASYN=OFF; /* #Y30OE78*/ 05575000 NI UT3IAEOD,B'00111111' 1628 05576000 * DO I=1 TO 2; /* RESET #Y30OE78*/ 05577000 LA I,1 1629 05578000 @DL01629 DS 0H 1630 05579000 * BLKLEN=LENGTH(BDW); /* BUFFERS FOR NEW DS #Y30OE78*/ 05580000 L @08,BUFCBPTR 1630 05581000 L @05,BUFELPTR(,@08) 1630 05582000 L @03,BUFPTR(,@05) 1630 05583000 MVC BLKLEN(2,@03),@CH00056 1630 05584000 * BUFELPTR=BUFELNXT; /* GET OTHER BUFFER #Y30OE78*/ 05585000 L @05,BUFELNXT(,@05) 1631 05586000 ST @05,BUFELPTR(,@08) 1631 05587000 * END; /* #Y30OE78*/ 05588000 AH I,@CH00061 1632 05589000 CH I,@CH00135 1632 05590000 BNH @DL01629 1632 05591000 * BLKPTR=ADDR(TTR0); /* POINT TO FIND LIST #Y30OE78*/ 05592000 L BLKPTR,DSNPTRJ 1633 05593000 LA BLKPTR,TTR0(,BLKPTR) 1633 05594000 * GEN REFS(UT3BPINA,BLKPTR) /* DO FIND FOR MEMBER #Y30OE78*/ 05595000 * (FIND UT3BPINA,(BLKPTR),C);/* #Y30OE78*/ 05596000 FIND UT3BPINA,(BLKPTR),C 05597000 * PARMPTR=DECBPTR; /* GET PARMS FOR 1ST #Y30OE78*/ 05598000 L @08,BUFCBPTR 1635 05599000 L @08,BUFELPTR(,@08) 1635 05600000 L PARMPTR,DECBPTR(,@08) 1635 05601000 * BLKPTR=BUFPTR; /* READ-BUFFER PRIME #Y30OE78*/ 05602000 L BLKPTR,BUFPTR(,@08) 1636 05603000 * GEN REFS(PARMPTR,BLKPTR) /* ISSUE 1ST READ #Y30OE78*/ 05604000 * (READ (PARMPTR),SF,,(BLKPTR),MF=E);/* #Y30OE78*/ 05605000 READ (PARMPTR),SF,,(BLKPTR),MF=E 05606000 * BUFELPTR=BUFELNXT; /* POINT TO OTHER BUFFER #Y30OE78 05607000 * SO 1ST BPAMGET WILL #Y30OE78 05608000 * CAUSE BUFFER SWITCH #Y30OE78 05609000 * AND SET RECPTR #Y30OE78*/ 05610000 L @08,BUFCBPTR 1638 05611000 L @03,BUFELPTR(,@08) 1638 05612000 L @03,BUFELNXT(,@03) 1638 05613000 ST @03,BUFELPTR(,@08) 1638 05614000 * CALL BPAMGET; /* GET 1ST RECORD #Y30OE78*/ 05615000 BAL @14,BPAMGET 1639 05616000 * DO WHILE UT3IAEOD=OFF& /* WHILE NOT AT EOD AND #Y30OE78*/ 05617000 * UT3IASYN=OFF& /* NO SYNAD ERRORS, #Y30OE78*/ 05618000 * UT2SYNI=OFF; /* #Y30OE78*/ 05619000 B @DE01640 1640 05620000 @DL01640 DS 0H 1641 05621000 * BDWLNA=RDWLNA+LENGTH(BDWA);/* SET BDW LENGTH #Y30OE78*/ 05622000 LA @08,4 1641 05623000 AH @08,RDWLNA 1641 05624000 STH @08,BDWLNA 1641 05625000 * GEN REFS(DECB7); 1642 05626000 * /* WRITE A RECORD #Y30OE78*/ 05627000 WRITE DECB7,SF,MF=E @Y30OE78 05628000 CHECK DECB7 @Y30OE78 05629000 * CALL BPAMGET; /* GET NEXT RECORD #Y30OE78*/ 05630000 BAL @14,BPAMGET 1643 05631000 * END; /* #Y30OE78*/ 05632000 @DE01640 TM UT3IAEOD,B'11000000' 1644 05633000 BNZ @DC01640 1644 05634000 TM UT2SYNI,B'00000010' 1644 05635000 BZ @DL01640 1644 05636000 @DC01640 DS 0H 1645 05637000 * IF UT2SYNI=OFF THEN /* IF NO OUTPUT ERROR, #Y30OE78*/ 05638000 TM UT2SYNI,B'00000010' 1645 05639000 BNZ @RF01645 1645 05640000 * DO; /* WRITE DELIMITER #Y30OE78*/ 05641000 * RECA=DLMCARD; /* GET DLM RECORD IMAGE #Y30OE78*/ 05642000 MVI RECA+80,C' ' 1647 05643000 MVC RECA+81(47),RECA+80 1647 05644000 MVC RECA(80),DLMCARD 1647 05645000 * RECA(1:2)=DLM; /* GET DLM FOR DS #Y30OE78*/ 05646000 L @08,DSNPTRJ 1648 05647000 MVC RECA(2),DLM(@08) 1648 05648000 * RDWLNA=LENGTH(RECJCL)+LENGTH(RDWA);/* SET RDW #Y30OE78*/ 05649000 LA @08,84 1649 05650000 STH @08,RDWLNA 1649 05651000 * BDWLNA=RDWLNA+LENGTH(BDWA);/* SET BDW LENGTH #Y30OE78*/ 05652000 AH @08,@CH00056 1650 05653000 STH @08,BDWLNA 1650 05654000 * GEN REFS(DECB7); 1651 05655000 * /* WRITE DLM RECORD #Y30OE78*/ 05656000 WRITE DECB7,SF,MF=E @Y30OE78 05657000 CHECK DECB7 @Y30OE78 05658000 * END; /* #Y30OE78*/ 05659000 * BUFCBPTR=ADDR(BUFCB1); /* RESET BUFFER CNTRL #Y30OE78 05660000 * FOR JCL READING #Y30OE78*/ 05661000 @RF01645 LA @08,BUFCB1 1653 05662000 ST @08,BUFCBPTR 1653 05663000 * END; /* #Y30OE78*/ 05664000 * DSNPTRJ=DSNPTRJ+LENGTH(DSNENTRY);/* BUMP TO NEXT ENTRY #Y30OE78 05665000 * IN DSNTAB #Y30OE78*/ 05666000 @RC01609 LA @08,40 1655 05667000 AL @08,DSNPTRJ 1655 05668000 ST @08,DSNPTRJ 1655 05669000 * END PUTADS; /* #Y30OE78*/ 05670000 @EL00017 DS 0H 1656 05671000 @EF00017 DS 0H 1656 05672000 @ER00017 L @14,@SA00017 1656 05673000 BR @14 1656 05674000 * 1657 05675000 */********************************************************** #Y30OE78*/ 05676000 */* #Y30OE78*/ 05677000 */* ROUTINE NAME- #Y30OE78*/ 05678000 */* BPAMGET #Y30OE78*/ 05679000 */* #Y30OE78*/ 05680000 */* FUNCTION- #Y30OE78*/ 05681000 */* PASSES ONE LOGICAL RECORD FROM VARIABLE BLOCKED BPAM #Y30OE78*/ 05682000 */* SYSUT3 FILE TO CALLERS RECORD WORK AREA #Y30OE78*/ 05683000 */* DOES DEBLOCKING AND ISSUES I/O REQUESTS TO KEEP #Y30OE78*/ 05684000 */* BUFFERS FULL #Y30OE78*/ 05685000 */* #Y30OE78*/ 05686000 */* INPUT- #Y30OE78*/ 05687000 */* OPENED DCB FOR SYSUT3 FILE #Y30OE78*/ 05688000 */* FIRST BUFFER FILLED BEFORE FIRST CALL OF THIS ROUTINE #Y30OE78*/ 05689000 */* BUFCBPTR POINTING TO AN INTERNALLY CONSTRUCTED #Y30OE78*/ 05690000 */* BUFFER CONTROL BLOCK #Y30OE78*/ 05691000 */* BUFFER ELEMENTS(BUFEL) INITIALIZED FOR EACH BUFFER #Y30OE78*/ 05692000 */* TO BE USED #Y30OE78*/ 05693000 */* BLOCKS OF DATA FROM SYSUT3 FILE #Y30OE78*/ 05694000 */* #Y30OE78*/ 05695000 */* OUTPUT- #Y30OE78*/ 05696000 */* A LOGICAL RECORD PLACED IN RECORD WORK AREA(RWORK) #Y30OE78*/ 05697000 */* STATUS SWITCHES INDICATING ERROR IF ONE OCCURS #Y30OE78*/ 05698000 */* #Y30OE78*/ 05699000 */* ROUTINES CALLED- #Y30OE78*/ 05700000 */* NONE #Y30OE78*/ 05701000 */* #Y30OE78*/ 05702000 */* MACROS- #Y30OE78*/ 05703000 */* READ #Y30OE78*/ 05704000 */* CHECK #Y30OE78*/ 05705000 */* #Y30OE78*/ 05706000 */********************************************************* #Y30OE78*/ 05707000 * 1657 05708000 *BPAMGET: /* BPAM BLOCKING ROUTINE #Y30OE78*/ 05709000 * PROC OPTIONS(SAVE(RTNREG)); /* FOR INPUT @ZA00784*/ 05710000 BPAMGET ST @14,@SA00018 1657 05711000 * IF BLKLEN=LENGTH(BDW) THEN /* IF BLOCK IS EMPTY, DO #Y30OE78*/ 05712000 L @08,BUFCBPTR 1658 05713000 L @08,BUFELPTR(,@08) 1658 05714000 L @03,BUFPTR(,@08) 1658 05715000 CLC BLKLEN(2,@03),@CH00056 1658 05716000 BNE @RF01658 1658 05717000 * DO; /* END-OF-BLOCK PROCESS #Y30OE78*/ 05718000 * PARMPTR=DECBPTR; /* GET ADDR OF DECB #Y30OE78*/ 05719000 L PARMPTR,DECBPTR(,@08) 1660 05720000 * BLKPTR=BUFPTR; /* GET ADDR OF BUFFER #Y30OE78*/ 05721000 LR BLKPTR,@03 1661 05722000 * GEN REFS(PARMPTR,BLKPTR) /* READ NEXT BLOCK OF #Y30OE78*/ 05723000 * (READ (PARMPTR),SF,,(BLKPTR),MF=E);/* DATA #Y30OE78*/ 05724000 READ (PARMPTR),SF,,(BLKPTR),MF=E 05725000 * BUFELPTR=BUFELNXT; /* GET OTHER BUFFER #Y30OE78*/ 05726000 L @08,BUFCBPTR 1663 05727000 L @03,BUFELPTR(,@08) 1663 05728000 L @03,BUFELNXT(,@03) 1663 05729000 ST @03,BUFELPTR(,@08) 1663 05730000 * RECPTR=ADDR(RECAREA); /* POINT TO 1ST RECORD #Y30OE78 05731000 * IN NEW BUFFER #Y30OE78*/ 05732000 L @15,BUFPTR(,@03) 1664 05733000 LA @00,RECAREA(,@15) 1664 05734000 ST @00,RECPTR(,@08) 1664 05735000 * PARMPTR=DECBPTR; /* GET DECB ADDRESS #Y30OE78*/ 05736000 L PARMPTR,DECBPTR(,@03) 1665 05737000 * GEN REFS(PARMPTR) /* WAIT FOR COMPLETION #Y30OE78*/ 05738000 * (CHECK (PARMPTR)); /* OF READ ON NEW BUFFER #Y30OE78*/ 05739000 CHECK (PARMPTR) 05740000 * GO TO BPINCHK; /* BRANCH PAST EODAD #Y30OE78 05741000 * CODE #Y30OE78*/ 05742000 B BPINCHK 1667 05743000 *UT3EOD: 1668 05744000 * EODHIT=ON; /* SET EOD INDICATOR #Y30OE78*/ 05745000 UT3EOD L @08,BUFCBPTR 1668 05746000 OI EODHIT(@08),B'10000000' 1668 05747000 *BPINCHK: /* LABEL TO BYPASS EODAD #Y30OE78*/ 05748000 * END; /* #Y30OE78*/ 05749000 BPINCHK DS 0H 1670 05750000 * IF EODHIT=OFF& /* IF NOT AT EOD #Y30OE78*/ 05751000 * SYNHIT=OFF THEN /* AND NO ERROR, #Y30OE78*/ 05752000 @RF01658 L @08,BUFCBPTR 1670 05753000 TM EODHIT(@08),B'11000000' 1670 05754000 BNZ @RF01670 1670 05755000 * DO; /* MOVE A DATA RECORD #Y30OE78*/ 05756000 * RECLEN=RECLENG; /* GET RECORD LENGTH #Y30OE78*/ 05757000 L @15,RECPTR(,@08) 1672 05758000 SLR RECLEN,RECLEN 1672 05759000 ICM RECLEN,3,RECLENG(@15) 1672 05760000 * RWORK(1:RECLEN)=SLOT(1:RECLEN);/* #Y30OE78*/ 05761000 LR @14,RECLEN 1673 05762000 BCTR @14,0 1673 05763000 EX @14,@SM01678 1673 05764000 * BLKLEN=BLKLEN-RECLEN; /* DECREMENT BLOCK LENG #Y30OE78*/ 05765000 L @14,BUFELPTR(,@08) 1674 05766000 L @14,BUFPTR(,@14) 1674 05767000 LH @00,BLKLEN(,@14) 1674 05768000 SLR @00,RECLEN 1674 05769000 STH @00,BLKLEN(,@14) 1674 05770000 * RECPTR=RECPTR+RECLEN; /* BUMP RECPTR #Y30OE78*/ 05771000 ALR @15,RECLEN 1675 05772000 ST @15,RECPTR(,@08) 1675 05773000 * END; /* #Y30OE78*/ 05774000 * END BPAMGET; /* #Y30OE78*/ 05775000 @EL00018 DS 0H 1677 05776000 @EF00018 DS 0H 1677 05777000 @ER00018 L @14,@SA00018 1677 05778000 BR @14 1677 05779000 *RDERABEX: /* RDER ABEND EXIT @Z30OE78*/ 05780000 * PROC OPTIONS(NOSAVE); /* #Y30OE78*/ 05781000 RDERABEX DS 0H 1679 05782000 * IF OKIGNORE=ON THEN /* IF ABEND CAN BE @Z30OE78 05783000 * IGNORED, @Z30OE78*/ 05784000 TM OKIGNORE(PARMPTR),B'00000100' 1679 05785000 BNO @RF01679 1679 05786000 * OPMASK=IGNORE; /* SET IGNORE OPTION @Z30OE78*/ 05787000 MVI OPMASK(PARMPTR),X'04' 1680 05788000 *RDERSYN: 1681 05789000 * ENTRY; /* SYNAD ENTRY POINT @Z30OE78*/ 05790000 B @EC01681 1681 05791000 RDERSYN DS 0H 1681 05792000 @EC01681 DS 0H 1682 05793000 * INERR=ON; /* SET ERROR INDICATOR #Y30OE78*/ 05794000 OI INERR,B'00001000' 1682 05795000 * END RDERABEX; /* @Z30OE78*/ 05796000 @EL00019 DS 0H 1683 05797000 @EF00019 DS 0H 1683 05798000 @ER00019 BR @14 1683 05799000 *DATAEOD: /* EODAD EXIT FOR READ #Y30OE78*/ 05800000 * PROC OPTIONS(NOSAVE); /* ING ADS FROM DSKT #Y30OE78*/ 05801000 DATAEOD DS 0H 1685 05802000 * INEOF=ON; /* SET EOD INDICATOR #Y30OE78*/ 05803000 OI INEOF,B'00010000' 1685 05804000 * IF RPLFDBK2=GOODEOV /* SIGNIFY THAT @ZA04466*/ 05805000 * THEN /* DISKETTE HAS BEEN @ZA04466*/ 05806000 L @08,DCBPTR 1686 05807000 SLR @03,@03 1686 05808000 ICM @03,7,DCBAMWKA+16(@08) 1686 05809000 CLI RPLFDBK2(@03),X'10' 1686 05810000 BNE @RF01686 1686 05811000 * DKCHNGD=ON; /* CHANGED @ZA04466*/ 05812000 OI DKCHNGD,B'00000100' 1687 05813000 * END DATAEOD; /* #Y30OE78*/ 05814000 @EL00020 DS 0H 1688 05815000 @EF00020 DS 0H 1688 05816000 @ER00020 BR @14 1688 05817000 *UT2SYN: /* UT2 SYSAD EXIT #Y30OE78*/ 05818000 * PROC OPTIONS(NOSAVE); /* #Y30OE78*/ 05819000 UT2SYN DS 0H 1690 05820000 * UT2SYNI=ON; /* SET ERROR INDICATOR #Y30OE78*/ 05821000 OI UT2SYNI,B'00000010' 1690 05822000 * END UT2SYN; /* #Y30OE78*/ 05823000 @EL00021 DS 0H 1691 05824000 @EF00021 DS 0H 1691 05825000 @ER00021 BR @14 1691 05826000 *UT3OABEX: /* UT3 OUTPUT ABEND EXIT @Z30OE78*/ 05827000 * PROC OPTIONS(NOSAVE); /* #Y30OE78*/ 05828000 UT3OABEX DS 0H 1693 05829000 * IF OKIGNORE=ON THEN /* IF ABEND MAY BE @Z30OE78 05830000 * IGNORED, @Z30OE78*/ 05831000 TM OKIGNORE(PARMPTR),B'00000100' 1693 05832000 BNO @RF01693 1693 05833000 * OPMASK=IGNORE; /* SET IGNORE OPTION @Z30OE78*/ 05834000 MVI OPMASK(PARMPTR),X'04' 1694 05835000 *UT3OSYN: 1695 05836000 * ENTRY; /* SYNAD ENTRY POINT @Z30OE78*/ 05837000 B @EC01695 1695 05838000 UT3OSYN DS 0H 1695 05839000 @EC01695 DS 0H 1696 05840000 * UT3SYN=ON; /* SET ERROR INDICATOR #Y30OE78*/ 05841000 OI UT3SYN,B'00000001' 1696 05842000 * END UT3OABEX; /* @Z30OE78*/ 05843000 @EL00022 DS 0H 1697 05844000 @EF00022 DS 0H 1697 05845000 @ER00022 BR @14 1697 05846000 *UT3IABEX: /* UT3 INPUT ABEND @Z30OE78 05847000 * EXIT @Y30OE78*/ 05848000 * PROC OPTIONS(NOSAVE); /* @Y30OE78*/ 05849000 UT3IABEX DS 0H 1699 05850000 * IF OKIGNORE=ON THEN /* IF ABEND MAY BE @Z30OE78 05851000 * IGNORED, @Z30OE78*/ 05852000 TM OKIGNORE(PARMPTR),B'00000100' 1699 05853000 BNO @RF01699 1699 05854000 * OPMASK=IGNORE; /* SET IGNORE OPTION @Z30OE78*/ 05855000 MVI OPMASK(PARMPTR),X'04' 1700 05856000 *UT3ISYN: 1701 05857000 * ENTRY; /* SYNAD ENTRY POINT @Z30OE78*/ 05858000 B @EC01701 1701 05859000 UT3ISYN DS 0H 1701 05860000 @EC01701 DS 0H 1702 05861000 * IF EODHIT=OFF THEN /* IF NOT IN EOD QUIESCE @Y30OE78*/ 05862000 L @08,BUFCBPTR 1702 05863000 TM EODHIT(@08),B'10000000' 1702 05864000 BNZ @RF01702 1702 05865000 * SYNHIT=ON; /* SET SYNAD INDICATOR @Y30OE78*/ 05866000 OI SYNHIT(@08),B'01000000' 1703 05867000 * END UT3IABEX; /* @Z30OE78*/ 05868000 @EL00023 DS 0H 1704 05869000 @EF00023 DS 0H 1704 05870000 @ER00023 BR @14 1704 05871000 *RDREXIT: /* @Y30OE78*/ 05872000 * PROC OPTIONS(NOSAVE); /* @Y30OE78*/ 05873000 RDREXIT DS 0H 1706 05874000 * RFY 1706 05875000 * RTNREG RSTD; /* @Y30OE78*/ 05876000 * RFY 1707 05877000 * IHADCB BASED(EXDCBPTR); /* @Y30OE78*/ 05878000 * IF DCBBLKSI=ZERO THEN /* IF BLKSIZE NOT YET @Y30OE78 05879000 * SPECIFIED, @Y30OE78*/ 05880000 LA @15,52 1708 05881000 ALR @15,EXDCBPTR 1708 05882000 ICM @08,3,DCBBLKSI(@15) 1708 05883000 BNZ @RF01708 1708 05884000 * DCBBLKSI=DCBLRECL; /* SET EQUAL TO LRECL @Y30OE78*/ 05885000 MVC DCBBLKSI(2,@15),DCBLRECL+72(EXDCBPTR) 1709 05886000 * END RDREXIT; /* @Y30OE78*/ 05887000 @EL00024 DS 0H 1710 05888000 @EF00024 DS 0H 1710 05889000 @ER00024 BR @14 1710 05890000 *UT3EXIT: /* @Y30OE78*/ 05891000 * PROC OPTIONS(NOSAVE); /* @Y30OE78*/ 05892000 UT3EXIT DS 0H 1712 05893000 * IF DCBBLKSI=ZERO THEN /* IF BLKSIZE NOT YET @Y30OE78 05894000 * SPECIFIED, @Y30OE78*/ 05895000 LA @15,52 1712 05896000 ALR @15,EXDCBPTR 1712 05897000 ICM @08,3,DCBBLKSI(@15) 1712 05898000 BNZ @RF01712 1712 05899000 * DCBBLKSI=DFLTBLKS; /* SET DEFAULT BLKSIZE @Y30OE78*/ 05900000 MVC DCBBLKSI(2,@15),@CH00194 1713 05901000 * IF DCBBLKSI