VDC TITLE 'DMKVDC (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V407466 00002000 COPY OPTIONS @V407466 00003000 COPY LOCAL @V407466 00004000 *. 00005000 * MODULE NAME - 00006000 * 00007000 * DMKVDC 00008000 * 00009000 * CONTENTS - 00010000 * 00011000 * DMKVDCPS - ACQUIRE VIRTUAL BLOCKS FOR DEVICES WHICH ARE 00012000 * LIKELY TO BE ATTACHED BY THE 'ATTACH' COMMAND. 00013000 * 00014000 * DMKVDCAL - SUBROUTINE TO CHAIN RDEVBLOKS OFF THE 00015000 * ALLOCATION CHAIN ANCHORS. 00016000 * 00017000 * DMKVDCSC - COMMON 'ATTACH/DETACH' COMMAND LINE SCANNER 00018000 * AND SYNTAX CHECKER. 00019000 * 00020000 *. 00021000 DMKVDC START 0 @V407490 00022000 DC CL8'DMKVDC' IDENTIFY ATTACH RANGE/MULT @V407466 00023000 * PRESCAN 00024000 USING PSA,R0 @V407466 00025000 USING VMBLOK,R11 @V407466 00026000 USING SAVEAREA,R13 @V407466 00027000 USING VDCWORK,R4 @V407466 00028000 USING IOBLOK,R3 IOBLOK ADDRESSABILITY @V407466 00029000 EXTRN DMKVIOMK @V407466 00030000 EXTRN DMKCFCSC RANGE SCAN @V407466 00031000 EXTRN DMKSCNFD SCAN COMMAND LINE @V407466 00032000 EXTRN DMKSCNAU USER LOGGED ON @V407466 00033000 EXTRN DMKCVTHB @V407466 00034000 EXTRN DMKFRERC @V407466 00035000 EXTRN DMKSCNRU @V407466 00036000 EXTRN DMKIOSQR @V407466 00037000 EXTRN DMKSCNVU @V407466 00038000 EXTRN DMKPGTP5 @V407466 00039000 EXTRN DMKPGTT5 @V407466 00040000 EXTRN DMKPGTP0 @V407466 00041000 EXTRN DMKPGTT0 @V407466 00042000 EXTRN DMKPGTP4 @V407466 00043000 EXTRN DMKPGTT4 @V407466 00044000 EXTRN DMKSYSOW @V407466 00045000 EXTRN DMKPGTTM @V407466 00046000 EXTRN DMKPGT90 @V407466 00047000 EXTRN DMKPGT4P @V407466 00048000 EXTRN DMKPGT4T @V407466 00049000 EXTRN DMKPGT5P @V407466 00050000 EXTRN DMKPGT5T @V407466 00051000 EXTRN DMKPGT7P HRC106DK 00051100 EXTRN DMKPGT7T HRC106DK 00051200 EXTRN DMKPGT8P HRC106DK 00051300 EXTRN DMKPGT8T HRC106DK 00051400 EJECT 00052000 *. 00053000 * SUBROUTINE NAME - 00054000 * DMKVDCPS - CREATE VIRTUAL BLOCKS FOR DEVICES LIKELY 00055000 * TO BE ATTACHED BY THE 'ATTACH' COMMAND. 00056000 * 00057000 * FUNCTION - 00058000 * TO ACQUIRE FREE STORAGE IN ADVANCE FOR VIRTUAL BLOCKS 00059000 * FOR ALL THOSE DEVICES WHICH ARE LIKELY TO BE ATTACHED 00060000 * ON THIS COMMAND EXECUTION. 00061000 * 00062000 * ATTRIBUTES - 00063000 * 00064000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00065000 * 00066000 * ENTRY CONDITIONS - 00067000 * 00068000 * GPR11 - ADDRESS OF ATTACHEE'S VMBLOK 00069000 * 00070000 * GPR3 = 0; RANGE HAS BEEN SPECIFIED ON COMMAND LINE. 00071000 * GPR2 - FIRST ADDRESS IN RANGE IN BINARY 00072000 * GPR4 - LAST ADDRESS IN RANGE IN BINARY 00073000 * 00074000 * OR 00075000 * 00076000 * GPR3 NONZERO; MULTIPLE ADDRESSES SPECIFIED ON COMMAND LINE 00077000 * GPR3 - CONTAINS ADDRESS OF FREE STORAGE BUFFER USED BY 00078000 * DMKVDA CONTAINING MULTIPLE ADDRESSES IN BINARY FORM. 00079000 * 00080000 * EXIT CONDITIONS: 00081000 * 00082000 * CC=0; IF SUCCESSFUL (AND GPR2 = 0) 00083000 * CC=1; IF UNSUCCESSFUL - ERROR CODE 32 RETURNED IN GPR2 00084000 * ERROR CODE 124: EXCEEDED MAX 00084500 * 00085000 * CALLS TO OTHER ROUTINES - 00086000 * 00087000 * DMKFRERC - ACQUIRE FREE STORAGE WITH RETURN CODE IN REQUEST 00088000 * CANNOT BE SATISFIED. 00089000 * DMKSCNRU - FIND RDEVBLOK 00090000 * DMKIOSQR - SCHEDULE I/O REQUEST FOR TIO 00091000 * DMKSCNVU - FIND VIRTUAL BLOCKS 00092000 * DMKVIOMK - ADDRESS OF MASK TABLE 00093000 * 00094000 * EXTERNAL REFERENCES - 00095000 * 00096000 * NONE 00097000 * 00098000 * TABLES/WORK AREAS - 00099000 * 00100000 * DMKVDA SAVEAREA 00101000 * IOBLOK 00102000 * CPEXBLOK 00103000 * DMKVDC WORK AREA 00104000 * RDEVBLOK 00105000 * IOERBLOK 00106000 * VCHBLOK 00107000 * VCUBLOK 00108000 * VDEVBLOK 00109000 * MASK TABLE IN DMKVIO (DMKVIOMK) 00110000 * 00111000 * REGISTER USAGE - 00112000 * 00113000 * GPR4 - WORK AREA ADDRESS 00114000 * GPR5 - BAL REGISTER 00115000 * GPR10 - ADDRESS OF ATTACHEE'S VMBLOK/ADDRESS OF IOBLOK 00116000 * GPR11 - ADDRESS OF ATTACHEE'S VMBLOK 00117000 * GPR12 - BASE REGISTER 00118000 * GPR13 - ADDRESS OF STANDARD SAVEAREA/ADDRESS OF DMKVDA 00119000 * SAVEAREA 00120000 * 00121000 * GPR0-GPR3 - WORK REGISTERS 00122000 * GPR6-GPR9 - WORK REGISTERS 00123000 * GPR14-GPR15 - WORK REGISTERS 00124000 * 00125000 * NOTES - NONE 00126000 * 00127000 * OPERATION - 00128000 * 1. ACQUIRE FREE STORAGE WORK AREA FOR COUNTERS ETC. 00129000 * 2. FIND RDEVBLOK FOR SPECIFIED ADDRESS 00130000 * IF THE DEVICE IS OFFLINE OR ALREADY DEDICATED, PROCESS 00131000 * NEXT ADDRESS. 00132000 * 3. ACQUIRE IOBLOK AND CPEXBLOK AND SCHEDULE TIO TO THE 00133000 * DEVICE BY CALLING DMKIOSQR. IF THE DEVICE DOES NOT EXIST, 00134000 * SKIP TO PROCESS NEXT ADDRESS. 00135000 * 4. SEE IF VIRTUAL DEVICE IS ALREADY DEFINED (DMKSCNVU). 00136000 * IF THE DEVICE IS ALREADY DEFINED, SKIP TO PROCESS NEXT 00137000 * ADDRESS. IF THE CHANNEL IS DEDICATED, SKIP TO PROCESS 00138000 * NEXT DEVICE. OTHERWISE, KEEP A COUNTER FOR THE NUMBER 00139000 * OF VCHBLOKS/VCUBLOKS/VDEVBLOKS WHICH ARE LIKELY TO BE 00140000 * CREATED IN THIS COMMAND EXECUTION. PERFORM THIS FUNCTION 00141000 * FOR ALL ADDRESSES IN THE RANGE/ALL MULTIPLE DEVICE ADDRESSES. 00142000 * 5. RELEASE IOBLOK AND CPEXBLOK AFTER THIS PHASE IS COMPLETE. 00143000 * 6. DETERMINE NUMBER OF UNUSED (EMPTY SLOTS) IN CURRENT 00144000 * TABLES OF VCHBLOKS/VCUBLOKS/VDEVBLOKS. 00145000 * 7. SUBTRACT NUMBER OF BLOCKS OF EACH TYPE WHICH WILL BE 00146000 * CREATED AS A RESULT OF THIS COMMAND EXECUTION FROM THE NUMBER 00147000 * OF CURRENTLY AVAILABLE BLOCKS OF EACH TYPE TO DETERMINE THE 00148000 * EXACT NUMBER OF NEW VCHBLOKS/VCUBLOKS/VDEVBLOKS WHICH MUST BE 00149000 * CREATED IN THIS COMMAND EXECUTION. 00150000 * 8. ACQUIRE STORAGE FOR NEW VIRTUAL BLOCKS REQUIRED BY 00151000 * CALLING DMKFRERC. IF STORAGE CANNOT BE OBTAINED, RETURN TO 00152000 * DMKVDA WITH GPR2=32. DMKVDA WILL THEN ISSUE ERROR MESSAGE 00153000 * DMKVDA131E. MOVE OLD TABLE OF VCHBLOKS/VCUBLOKS/VDEVBLOKS 00154000 * TO NEWLY ACQUIRED TABLES AND MARK ALL ADDITIONAL BLOCKS AS 00155000 * EMPTY SLOTS. @VA13217 00156000 * 00157000 * 9. RELEASE WORK AREA AND EXIT. 00158000 * 00159000 * RESPONSES - 00160000 * NONE 00161000 * 00162000 * ERROR MESSAGES - 00163000 * NONE 00164000 *. 00165000 EJECT 00166000 DMKVDCPS RELOC @V407466 00167000 USING VDCWORK,R4 VDC WORK AREA ADDRESSABILITY @V407466 00168000 LR R2,R13 PTR TO CALLER'S SAVEAREA @V407466 00169000 L R13,SAVER13 R13 CONTAINS VDA SAVEAREA ADDR @V407466 00170000 ST R2,SAVEWRK6 STORE VDC SAVE IN VDA SAVEWRK6 @V407466 00171000 LTR R3,R3 MULTIPLE ADDRESSES OR RANGE? @V407466 00172000 BNZ PRESCAND MULTIPLES SPECIFIED @V407466 00173000 L R2,VDCRADD1 FIRST ADDRESS IN RANGE @V407466 00174000 SLR R3,R3 ZERO R3 FOR INDICATOR @V407466 00175000 SLR R4,R4 CLEAR REGISTER 4 @V407466 00176000 PRESCANB BAL R5,PRESCANA GO PERFORM PRESCAN @V407466 00177000 NI VDCBYTE1,X'FF'-(ATTCTCA+DED2305) TURN BITS OFF @V407490 00178000 LTR R3,R3 IOBLOK ALREADY OBTAINED? @V407466 00179000 BZ SKIPCLR NO, SKIP CSW AND STATUS CLEAR @V407466 00180000 MVI IOBSTAT,X'00' CLEAR IOBSTAT FOR NEXT TIME @V407466 00181000 XC IOBCSW(L'IOBCSW),IOBCSW CLEAR CSW FOR NEXT TI@V407466 00182000 SKIPCLR LA R2,1(,R2) NEXT ADDRESS IN RANGE @V407466 00183000 CH R2,VDCRADD2 COMPARE WITH RADDR2 IN RANGE @V407466 00184000 BNH PRESCANB STILL WITHIN RANGE @V407466 00185000 FRETBLK LTR R3,R3 IOBLOK ALREADY OBTAINED? @V407466 00186000 BZ SKIPFRET NO, SKIP RELEASE OF BLOCKS @V407466 00187000 PRESCANC L R1,IOBMISC2 POINTER TO CPEXBLOK @V407466 00188000 LA R0,CPEXSIZE SIZE OF CPEXBLOK @V407466 00189000 CALL DMKFRET RELEASE IT @V407466 00190000 LR R1,R3 IOBLOK POINTER @V407466 00191000 LA R0,IOBSIZE SIZE OF IOBLOK @V407466 00192000 CALL DMKFRET RELEASE IT @V407466 00193000 SPACE 2 00194000 SKIPFRET LA R2,VDCCHMAP POINT TO BIT MAP FOR VCHBLOKS @V407466 00195000 LA R3,COUNT2 NUMBER OF BYTES IN VDCCHMAP (2) @V407466 00196000 BAL R5,COUNTBIT NUMBER OF VCHBLOKS @V407466 00197000 STH R6,VDCVCH NUMBER OF REQUIRED VCHBLOKS @V407466 00198000 LA R3,COUNT32 32 BYTES IN FIELD TO BE SCANNED @V407466 00199000 BAL R5,COUNTBIT NUMBER OF EMPTY VCUBLOKS @V407466 00200000 STH R6,VDCVCU NUMBER OF REQUIRED VCUBLOKS @V407466 00201000 EMPTY LA R0,VCHSIZE SIZE OF VCHBLOK @V407466 00202000 SLR R2,R2 MAKE SURE R2 ZERO TO START @V407466 00203000 L R1,VMCHSTRT VCHBLOK TABLE POINTER @V407466 00204000 LH R2,VMCHCNT NUMBER BLOCKS IN TABLE @V407466 00205000 SLR R6,R6 CLEAR R6 @V407466 00206000 BAL R5,EMPSLOT SEE IF EMPTY SLOTS @V407466 00207000 STH R6,VDCVCHE SAVE EMPTY VCHBLOK COUNT @V407466 00208000 SLR R6,R6 CLEAR R6 FOR NEXT COUNTER @V407466 00209000 LA R0,VCUSIZE SIZE OF VCUBLOK @V407466 00210000 L R1,VMCUSTRT VCUBLOK TABLE POINTER @V407466 00211000 LH R2,VMCUCNT NUMBER OF VCUBLOKS @V407466 00212000 BAL R5,EMPSLOT FIND EMPTY SLOTS IN VCUBLOKS @V407466 00213000 STH R6,VDCVCUE NUMBER OF EMPTY VCUBLOK SLOTS @V407466 00214000 SLR R6,R6 CLEAR R6 FOR NEXT COUNTER @V407466 00215000 LA R0,VDEVSIZE SIZE OF VDEVBLOK @V407466 00216000 L R1,VMDVSTRT POINT TO VDEVBLOK TABLE @V407466 00217000 LH R2,VMDVCNT NUMBER OF VDEVBLOKS IN TABLE @V407466 00218000 BAL R5,EMPSLOT FIND EMPTY SLOTS IN VDEVBLOKS @V407466 00219000 STH R6,VDCVDEVE NUMBER OF EMPTY VDEVBLOK SLOTS @V407466 00220000 LH R6,VDCVDEV NO. REQUIRED VDEVBLOKS @V407466 00221000 LH R7,VDCVDEVE NO. EMPTY VDEVBLOKS WHICH EXIST @V407466 00222000 SR R6,R7 ACTUAL NO. VDEVBLOKS TO BE @V407466 00223000 * ACQUIRED 00224000 BC 12,ACQVCU < OR = 0; ACQUIRE NO VDEVBLOKS @V407466 00225000 SLR R3,R3 R3 ZERO TO START @V407466 00226000 LH R2,VMDVCNT NO. EXISTING VDEVBLOKS @V407466 00227000 LA R9,VDEVSIZE VDEVBLOK SIZE IN DBL. WORDS @V407466 00228000 LA R1,VDEVSIZE ...SAME @V407466 00229000 L R8,VMDVSTRT PTR. TO EXISTING VDEVBLOK TABLE @V407466 00230000 OI VDCFLAG,DEVBLD IND. BUILDING VDEVBLOKS @V407466 00231000 BAL R5,BLDBLOK CREATE NEW VDEVBLOK TAB (OLD+NEW)@V407466 00232000 SLR R8,R8 CLEAR R8 @V407466 00233000 LA R7,VDEVSIZE SIZE OF VDEVBLOK IN DBL.WDS. @V407466 00234000 LH R8,VMDVCNT NUMBER VDEVBLOKS IN OLD TABLE @V407466 00235000 MR R6,R8 NO. DBL. WDS. IN OLD TABLE @V407466 00236000 LR R0,R7 INTO R0 FOR FRET @V407466 00237000 LR R5,R1 SAVE NEW TABLE PTR TEMP. @V407466 00238000 L R1,VMDVSTRT OLD TABLE PTR @V407466 00239000 CALL DMKFRET RELEASE OLD TABLE @V407466 00240000 ST R5,VMDVSTRT STORE NEW TABLE POINTER @V407466 00241000 STH R3,VMDVCNT TOT. NO. VDEVBLOKS IN NEW TABLE @V407466 00242000 ACQVCU SLR R6,R6 CLEAR R6 @V407466 00243000 LH R6,VDCVCU NO. REQUIRED VCUBLOKS @V407466 00244000 LH R7,VDCVCUE NO. EMPTY VCUBLOKS @V407466 00245000 SR R6,R7 ACT. NO. VCUBLOKS TO BE ACQUIRED @V407466 00246000 BC 12,ACQVCH < OR = 0; ACQUIRE NO VCUBLOKS @V407466 00247000 SLR R3,R3 ... @V407466 00248000 LH R2,VMCUCNT NO. EXISTING VCUBLOKS @V407466 00249000 LA R9,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00250000 LA R1,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00251000 L R8,VMCUSTRT PTR. TO TABLE OF VCUBLOKS @V407466 00252000 OI VDCFLAG,CUBLD IND. BUILDING VCUBLOKS @V407466 00253000 BAL R5,BLDBLOK CREATE TABLE OF VCUBLOKS @V407466 00254000 * (OLD+NEW) 00255000 SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00256000 LA R7,VCUSIZE SIZE OF VCUBLOK IN DBL. WDS. @V407466 00257000 LH R8,VMCUCNT NUMBER VCUBLOKS IN OLD TABLE @V407466 00258000 MR R6,R8 NUMBER DBL. WDS. IN OLD TABLE @V407466 00259000 LR R5,R1 SAVE NEW TABLE POINTER @V407466 00260000 L R1,VMCUSTRT POINTER TO OLD TABLE @V407466 00261000 LR R0,R7 TABLE LENGTH TO R0 FOR FRET @V407466 00262000 CALL DMKFRET RETURN THE STORAGE @V407466 00263000 ST R5,VMCUSTRT STORE POINTER TO NEW TABLE @V407466 00264000 STH R3,VMCUCNT STORE NO. OF VCUBLOKS IN TABLE @V407466 00265000 ACQVCH SLR R6,R6 CLEAR R6 @V407466 00266000 LH R6,VDCVCH NO. REQUIRED VCHBLOKS @V407466 00267000 LH R7,VDCVCHE NO. EMPTY VCHBLOK SLOTS @V407466 00268000 SR R6,R7 ACT. NO. OF VCHBLOKS TO BE @V407466 00269000 * ACQUIRED 00270000 BC 12,EXIT < OR = 0; ACQUIRE NO VCHBLOKS @V407466 00271000 SLR R3,R3 ... @V407466 00272000 LH R2,VMCHCNT NO. OF EXISTING VCHBLOKS @V407466 00273000 LA R9,VCHSIZE VCHBLOK SIZE IN DBL. WORDS @V407466 00274000 LA R1,VCHSIZE VCHBLOKS SIZE IN DBL. WORDS @V407466 00275000 L R8,VMCHSTRT PTR TO EXISTING VCHBLOK TABLE @V407466 00276000 BAL R5,BLDBLOK CREATE NEW VCHBLOK TABLE @V407466 00277000 * (OLD+NEW) 00278000 SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00279000 LA R7,VCHSIZE SIZE OF VCHBLOK IN DBL. WDS. @V407466 00280000 LH R8,VMCHCNT NO. OF VCHBLOKS IN OLD TABLE @V407466 00281000 MR R6,R8 R7 - NO. DBL. WDS. IN OLD TABLE @V407466 00282000 LR R0,R7 ...TO R0 FOR FRET @V407466 00283000 LR R5,R1 SAVE PTR TO NEW TABLE TEMP. @V407466 00284000 L R1,VMCHSTRT BEGINNING OF OLD TABLE @V407466 00285000 CALL DMKFRET RELEASE STORAGE @V407466 00286000 ST R5,VMCHSTRT STORE NEW TABLE PTR IN VMBLOK @V407466 00287000 STH R3,VMCHCNT NO. OF VCHBLOKS IN NEW TABLE @V407466 00288000 EXIT BAL R5,FREWRK RELEASE WORK AREA IF NECESSARY @V407466 00289000 L R13,SAVEWRK6 RESTORE VDC SAVE ADDRESS @V407466 00290000 SLR R2,R2 ZERO R2 @V407466 00291000 ST R2,SAVER2 GOOD RETURN @V407466 00292000 EXIT2 EQU * @V407490 00293000 EXIT RETURN TO CALLER @V407466 00294000 SPACE 3 00295000 FREWRK LTR R4,R4 WAS WORK AREA ACQUIRED? @V407466 00296000 BZR R5 NO, NOTHING TO FRET @V407466 00297000 LR R1,R4 ADDRESS OF WORK AREA TO R1 @V407466 00298000 LA R0,VDCSIZE NO. DBL. WDS TO FRET @V407466 00299000 CALL DMKFRET RELEASE STORAGE @V407466 00300000 BR R5 RETURN TO MAINLINE @V407466 00301000 SPACE 2 00302000 BLDBLOK AR R3,R2 R3= NUMBER EXISTING BLOCKS @V407466 00303000 AR R3,R6 PLUS NUMBER NEW BLOCKS @V407466 00304000 MR R0,R3 NO. DBL. WORDS (R3*R1 INTO R0-R1)@V407466 00305000 LR R0,R1 NO. DLBWDS. TO ACQUIRE @V407466 00306000 SLL R1,3 R1*8=# OF BYTES FOR TABLE @VA13217 00306500 CLM R1,B'0011',=X'7FFF' CANNOT EXCEED 7FFFF @VA13217 00306510 BH ERR153 RETURN CODE FOR MSG 153 @VA13217 00306520 CALL DMKFRERC ACQUIRE STORAGE @V407466 00307000 BNZ NOFREE INSUFFICIENT FREE STORAGE @V407466 00308000 ST R1,SAVEWRK7 SAVE PTR TO NEW STORAGE TEMP. @V407466 00309000 SLL R9,3 SIZE OF ONE BLOCK TO BYTES @V407466 00310000 BCTR R9,0 SUBTRACT ONE FOR EXECUTED MVC @V407466 00311000 NEXTMVC EX R9,BLDMVC MOVE OLD BLOCK TO NEW @V407466 00312000 TM VDCFLAG,DEVBLD BUILDING VDEVBLOKS?? @V407466 00313000 BO VLNK YES, @V407466 00314000 BLDNEXT LA R1,1(R9,R1) POINT TO NEXT BLOK IN EA. TAB. @V407466 00315000 LA R8,1(R9,R8) ADDING 1 TO MAKE UP FOR SUBTRACT @V407466 00316000 BCT R2,NEXTMVC MOVE NEXT BLOCK @V407466 00317000 LH R8,FFS R8 = FFFF @V407466 00318000 NEXTSTOR STH R8,0(R1) STORE FFS IN EMPTY SLOTS @V407466 00319000 TM VDCFLAG,DEVBLD BUILDING VDEVBLOKS?? @V407466 00320000 BO CLRDEV YES, CLEAR EMPTY VDEVBLOK @V407466 00321000 TM VDCFLAG,CUBLD BUILDING VCUBLOKS?? @V407466 00322000 BO CLRCU YES, CLEAR EMPTY VCUBLOKS @V407466 00323000 * OTHERWISE, MUST BE BUILDING VCHBLOKS... 00324000 USING VCHBLOK,R1 ADDRESSABILITY @V407466 00325000 MVC VCHBLOK+2(6),VCHBLOK CLEAR START OF VCHBLOK @V407466 00326000 MVC VCHCUTBL(8),FFS ... @V407466 00327000 MVC VCHCUTBL+8(24),VCHCUTBL ... @V407466 00328000 NEXTBLK LA R1,1(R9,R1) POINT TO NEXT EMPTY SLOT @V407466 00329000 BCT R6,NEXTSTOR STORE FFS IN NEXT BLOCK @V407466 00330000 L R1,SAVEWRK7 RESTORE PTR TO BEGINNING OF TABLE@V407466 00331000 BR R5 @V407466 00332000 SPACE 00333000 BLDMVC MVC 0(0,R1),0(R8) MOVE OLD BLOCK TO NEW STORAGE @V407466 00334000 SPACE 00335000 USING VDEVBLOK,R1 ADDRESSABILITY @V407466 00336000 VLNK CLC VDEVADD(2),FFS EMPTY SLOT?? @V407466 00337000 BE BLDNEXT YES, DON'T WORRY ABOUT VDEVLINK @V407466 00338000 CLI VDEVTYPC,CLASDASD DASD DEVICE?? @V407466 00339000 BNE BLDNEXT NO, MOVE & BUILD NEXT BLOK @V407466 00340000 TM VDEVFLAG,VDEVTDSK T-DISK?? @V407466 00341000 BO BLDNEXT .... @V407466 00342000 L R14,VDEVLINK PTR TO VDEVBLOK FOR SAME MINIDISK@V407466 00343000 * SAME MINIDISK LINKED BY SAME OR DIFFERENT USER 00344000 LTR R14,R14 SAME MINIDISK LINKED BY SOMEONE @V407466 00345000 * ELSE 00346000 BZ BLDNEXT NO, MOVE & BUILD NEXT BLOCK @V407466 00347000 LR R15,R1 R15 POINTS TO NEW BLOCK @V407466 00348000 B BLDCHCK SEE IF VDEVBLOK POINTS TO OLD @V407466 00349000 * BLOK 00350000 BLDLOOP LR R15,R14 SAVE PREVIOUS VDEVBLOK ADDRESS @V407466 00351000 L R14,VDEVLINK-VDEVBLOK(,R14) NEXT VDEVBLOK ADDR @V407466 00352000 BLDCHCK CR R8,R14 DOES IT PT TO OLD BLOK?? @V407466 00353000 BNE BLDLOOP NO, KEEP LOOKING @V407466 00354000 ST R1,VDEVLINK-VDEVBLOK(,R15) POINT IT TO NEW ONE @V407466 00355000 B BLDNEXT MOVE & BUILD NEXT BLOCK @V407466 00356000 SPACE 00357000 USING VDEVBLOK,R1 ADDRESSABILITY @V407466 00358000 CLRDEV NI VDCFLAG,X'FF'-DEVBLD CLEAR VDEVBLOK IND. @V407466 00359000 XC VDEVADD+2(VDEVSIZE*8-2),VDEVADD+2 CLEAR VDEVBLOK@V407466 00360000 B NEXTBLK CLEAR NEXT EMPTY SLOT @V407466 00361000 SPACE 00362000 USING VCUBLOK,R1 ADDRESSABILITY @V407466 00363000 CLRCU NI VDCFLAG,X'FF'-CUBLD RESET VCUBLOK IND. @V407466 00364000 MVC VCUBLOK+2(6),ZEROES CLEAR VCUBLOK @V407466 00365000 MVC VCUDVTBL(8),FFS FFS @V407466 00366000 MVC VCUDVTBL+8(24),VCUDVTBL FFS ... @V407466 00367000 B NEXTBLK CLEAR NEXT EMPTY BLOCK @V407466 00368000 DROP R1 @V407466 00369000 SPACE 2 00370000 EMPSLOT LTR R8,R1 ANY ENTRIES IN TABLE @V407466 00371000 BCR 13,R5 NO TABLE ENTRIES; ZERO EMPTY @V407466 00372000 * SLOTS 00373000 SLL R0,3 CONVERT BLOCK SIZE TO BYTES @V407466 00374000 USING VDEVBLOK,R8 VDEVBLOK ADDRESSABILITY @V407466 00375000 TSTEMP TM VDEVADD,X'80' EMPTY SLOT? @V407466 00376000 BC 1,UPDSLOT YES, UPDATE EMPTY SLOTS @V407466 00377000 NEXTSLOT AR R8,R0 NEXT BLOCK @V407466 00378000 BCT R2,TSTEMP CONTINUE TO LOOK FOR EMPTY SLOTS @V407466 00379000 BR R5 RETURN TO MAINLINE @V407466 00380000 SPACE 2 00381000 UPDSLOT AH R6,F1+2 ONE OR MORE EMPTY SLOTS @V407466 00382000 B NEXTSLOT CONTINUE SEARCH FOR EMPTY SLOTS @V407466 00383000 SPACE 2 00384000 DROP R8 @V407466 00385000 COUNTBIT SLR R6,R6 CLEAR R6 @V407466 00386000 REPEAT1 LA R8,BITMAP POINT TO TABLE OF BITS @V407466 00387000 LA R7,COUNT8 COUNTER @V407466 00388000 REPEAT2 IC R1,0(R8) GET NEXT TABLE CHARACTER @V407466 00389000 EX R1,COMPARE EQUAL @V407466 00390000 BNO NEXTBYTE ADD 1 TO COUNT OF BLOCKS TO @V407466 00391000 * ACQUIRE 00392000 ADD1 AH R6,F1+2 ADD ONE TO COUNT @V407466 00393000 NEXTBYTE LA R8,1(,R8) POINT TO NEXT @V407466 00394000 BCT R7,REPEAT2 TEST ALL POSSIBLE BITS @V407466 00395000 LA R2,1(,R2) NEXT BYTE IN VDCCHMAP @V407466 00396000 BCT R3,REPEAT1 REPEAT WHOLE OPERATION FOR @V407466 00397000 * ANOTHER BYTE 00398000 BR R5 RETURN TO MAINLINE @V407466 00399000 SPACE 2 00400000 COMPARE TM 0(R2),0 @V407466 00401000 SPACE 2 00402000 PRESCANA LTR R4,R4 FIRST TIME PRESCAN INVOKED? @V407466 00403000 BP SKIP1 NO, SKIP ACQUIRING STORAGE @V407466 00404000 LA R0,VDCSIZE ACQUIRE FREE STORAGE FOR COUNTERS@V407466 00405000 CALL DMKFREE GO GET IT @V407466 00406000 LR R4,R1 R4 POINTS TO COUNTERS @V407466 00407000 XC 0(VDCSIZE*8,R1),0(R1) CLEAR TO ZEROS @V407466 00408000 SKIP1 LR R1,R2 ADDRESS FROM R2 TO R1 @V407466 00409000 CALL DMKSCNRU FIND RDEVBLOK @V407466 00410000 BCR 7,R5 REAL DEVICE DOES NOT EXIST @V407466 00411000 USING RDEVBLOK,R8 @V407466 00412000 TM RDEVSTAT,RDEVDISA+RDEVDED CHECK REAL DEVICE @V407466 00413000 BNZR R5 OFFLINE OR ALREADY IN USE @V407466 00414000 TM RDEVTYPC,CLASDASD+CLASTAPE DASD OR TAPE @V407466 00415000 BNZ DISKTAP YES @V407466 00416000 TM RDEVTYPC,CLASURI+CLASURO INPUT OR OUTPUT? @V407466 00417000 BNZ URIO YES -- SPOOL @V407466 00418000 TM RDEVTYPC,CLASTERM+CLASGRAF TERM OR GRAPHIC? @V407466 00419000 BNZ TRMGR YES, TERM OR GRAF @V407466 00420000 CLI RDEVTYPC,CLASSPEC CLASS SPECIAL? @V407466 00421000 BNE VDCEXIST NO, GO PERFORM TIO @V407466 00422000 CLI RDEVTYPE,TYP3705 IS THIS 3704/3705? @V407466 00423000 BNE CHKCTCA IF NOT, IS IT CTCA @V407466 00424000 TM RDEVSTAT,RDEVRSVD LINES IN USE BY THE SYSTEM? @V407466 00425000 BOR R5 YES, CAN'T ATTACH THEN @V407466 00426000 TM RDEVFLAG,RDEVRCVY IN RECOVERY BY SYSTEM @V407466 00427000 BOR R5 YES, THEN CAN'T ATTACH @V407466 00428000 B VDCEXIST PERFORM TIO @V407466 00429000 SPACE 2 00430000 DISKTAP TM RDEVFLAG,RDEVSYS+RDEVOWN IN USE BY SYSTEM @V407466 00431000 BNZR R5 YES, CANNOT ATTACH @V407466 00432000 B CHKDASD SEE IF 2305 DRUM @V407466 00433000 SPACE 2 00434000 URIO TM RDEVFLAG,RDEVDRAN IS THE DEVICE DRAINED? @V407466 00435000 BZR R5 YES, CANNOT ATTACH @V407466 00436000 ICM R15,15,RDEVSPL CHECK FOR ACTIVE SFBLOK @V407466 00437000 BNZR R5 YES, CANNOT ATTACH @V407466 00438000 B VDCEXIST PERFORM TIO @V407466 00439000 SPACE 2 00440000 TRMGR TM RDEVFLAG,RDEVENAB IN USE BY THE SYSTEM? @V407466 00441000 BOR R5 YES, CANNOT ATTACH @V407466 00442000 B VDCEXIST PERFORM TIO @V407466 00443000 SPACE 2 00444000 CHKCTCA LA R1,CLASSPEC*256+TYPCTCA CHECK FOR REAL CTCA @V407466 00445000 CH R1,RDEVTYPC CTCA? @V407466 00446000 BNE CHKDASD KEEP GOING @V407466 00447000 OI VDCBYTE1,ATTCTCA INDICATE PROCESSING CTCA @V407466 00448000 CHKDASD CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00449000 BNE VDCEXIST SKIP TIO; @V407466 00450000 CLI RDEVTYPE,TYP2305 2305 MULT. EXPOSURE DEVICE @V407466 00451000 BNE VDCEXIST NO, CONTINUE PRESCAN PHASE @V407466 00452000 TM RDEVADD+1,BASEXP ATTACHING BASE EXPOSURE @V407466 00453000 BCR 7,R5 NO, PROCESS NEXT ADDRESS @V407466 00454000 OI VDCBYTE1,DED2305 MULTIPLE EXPOSURE 2305 @V407466 00455000 VDCEXIST LTR R3,R3 IOBLOK/CPEXBLOK ALREADY ACQUIRED?@V407466 00456000 BP SKIP2 YES, SKIP STORAGE ACQUIRE @V407466 00457000 LA R0,IOBSIZE SIZE OF IOBLOK @V407466 00458000 CALL DMKFREE AND GO GET ONE IOBLOK @V407466 00459000 XC 0(IOBSIZE*8,R1),0(R1) CLEAR IOBLOK TO ZEROS @V407466 00460000 LR R3,R1 IOBLOK PTR @V407466 00461000 OI IOBSPEC,IOBTIO FLAG SPECIAL TIO REQUEST @V407466 00462000 LA R0,CPEXSIZE GET A CPEXBLOK @V407466 00463000 CALL DMKFREE ACQUIRE CPEXBLOK @V407466 00464000 ST R1,IOBMISC2 SAVE CPEXBLOK HERE @V407466 00465000 ST R11,IOBUSER VMBLOK ADDRESS @V407466 00466000 LA R1,AFTERTIO INTERRUPT RETURN ADDRESS @V407466 00467000 ST R1,IOBIRA ... @V407466 00468000 MVI IOBFLAG,IOBCP CP GENERATED IO @V407466 00469000 USING CPEXBLOK,R1 ACROSS CALL TO IOS @V407466 00470000 SKIP2 L R1,IOBMISC2 ADDR OF CPEXBLOK @V407466 00471000 STM R0,R15,CPEXR0 SAVE ALL CURRENT REGISTERS @V407466 00472000 DROP R1 @V407466 00473000 LR R10,R3 IOBLOK POINTER TO R10 @V407466 00474000 CALL DMKIOSQR R8=RDEVBLOK,R10=IOBLOK @V407466 00475000 GOTO DMKDSPCH WAIT FOR IT @V407466 00476000 DROP R3 @V407466 00477000 SPACE 2 00478000 AFTERTIO EQU * INTERRUPT RETURN POINT @V407466 00479000 USING *,R12 @V407466 00480000 USING IOBLOK,R10 IOBLOK ADDRESSABILITY @V407466 00481000 L R1,IOBMISC2 RESTORE CPEXBLOK ADDRESS @V407466 00482000 USING CPEXBLOK,R1 CPEXBLOK ADDRESSABILITY @V407466 00483000 LM R0,R15,CPEXR0 RESTORE VDC'S REGISTERS @V407466 00484000 DROP R1,R10 @V407466 00485000 USING IOBLOK,R3 RESTORE ORIGINAL ADDRESSABILITY @V407466 00486000 USING DMKVDC,R12 MODULE ADDRESSABILITY @V407466 00487000 TM IOBSTAT,IOBCC3 DEVICE DOES NOT EXIST @V407466 00488000 BOR R5 IF CC=3 @V407466 00489000 BZ SETR6 CC=0; NO PROBLEMS @V407466 00490000 CLI RDEVTYPC,CLASDASD CC=1; CSW STORED @V407466 00491000 BNE TAPE NOT DASD, CHECK FOR TAPE @V407466 00492000 B RELIOER FRET IOERBLOK @V407466 00493000 SPACE 2 00494000 TAPE CLI RDEVTYPC,CLASTAPE MIXED CC=1; CSW STORED @V407466 00495000 BNE SETR6 NOT TAPE, ASSUME DEVICE THERE @V407466 00496000 L R1,IOBIOER GET IOERBLOK @V407466 00497000 LTR R1,R1 IS THERE ONE @V407466 00498000 BZ VBLOCKS SEE HOW MANY VIRTUAL BLOCKS EXIST@V407466 00499000 USING IOERBLOK,R1 IOERBLOK ADDRESSABILITY @V407466 00500000 TM IOERDATA,X'40' INTERVENTION REQUIRED @V407466 00501000 BZ SETR6 NO, NOT SERIOUS @V407466 00502000 TM IOERDATA+1,X'60' STATUS A AND B ON @V407466 00503000 BNZ SETR6 SOMETHING ON, DEVICE THERE @V407466 00504000 RELIOER LR R6,R5 ESTABLISH BRANCH ADDRESS @V407466 00505000 FRETIOER L R1,IOBIOER IOERBLOK ADDRESS @V407466 00506000 LTR R1,R1 DOES IOERBLOK EXIST @V407466 00507000 BZ IOBUCHK SEE IF UC ON DASD @V407466 00508000 LA R0,IOERSIZE SIZE OF IOERBLOK @V407466 00509000 AH R0,IOEREXT PLUS EXT SIZE @V407466 00510000 CALL DMKFRET AND RELEASE IT @V407466 00511000 IOBUCHK CLI RDEVTYPC,CLASTAPE TAPE DEVICE? @V407466 00512000 BER R6 YES, CONTINUE @V407466 00513000 CLI RDEVTYPC,CLASDASD DASD? @V407466 00514000 BNER R6 NO, CONTINUE @V407466 00515000 TM IOBCSW+4,UC UC ON DASD 'TIO'? @V407466 00516000 BZ VBLOCKS NO, CONTINUE TO PROCESS @V407466 00517000 TM RDEVFTR,FTRVIRT 3330V DEVICE? @V407466 00518000 BZR R6 NO, RETURN TO MAINLINE @V407466 00519000 B VBLOCKS UC ON 3330V - VOLUME NOT MOUNTED @V407466 00520000 SPACE 2 00521000 SETR6 LA R6,VBLOCKS ESTABLISH BRANCH ADDRESS @V407466 00522000 B FRETIOER @V407466 00523000 DROP R1 @V407466 00524000 SPACE 2 00525000 VBLOCKS LR R1,R2 ADDRESS @V407466 00526000 CALL DMKSCNVU SEE IF ALREADY DEFINED @V407466 00527000 BCR 8,R5 DEVICE ALREADY DEFINED (BR IF @V407466 00528000 * ZERO) 00529000 LA R9,1 ESTABLISH INCREMENT @V407466 00530000 BC 4,NCHANNEL CHANNEL BLOCK DOES NOT EXIST @V407466 00531000 BC 2,NOTDEDCH CONTROL UNIT BLOCK DOES NOT EXIST@V407466 00532000 TM VDCBYTE1,ATTCTCA ATTACHING A CTCA @V407466 00533000 BCR 1,R5 PROCESS NEXT ADDRESS (BR IF ONES)@V407466 00534000 TM VDCBYTE1,DED2305 2305 MULTIPLE EXPOSURE DEVICE @V407466 00535000 BNO NOTDEDCH NO, SKIP 2305 PROCESSING @V407466 00536000 USING VCUBLOK,R7 CONTROL UNIT BLOCK ADDRESSABILITY@V407466 00537000 STM R2,R3,SAVEWRK7 SAVE REGISTERS TEMPORARILY @V407466 00538000 N R1,F8 OBTAIN BASE ADDRESS INDEX @V407466 00539000 SLL R1,1 CONVERT TO VCUDVTBL 2 BYTE INDEX @V407466 00540000 LA R3,VCUDVTBL+2*7(R1) TABLE ADDR OF LAST EXPOSURE @V407466 00541000 LA R1,VCUDVTBL(R1) TABLE ADDR OF FIRST EXPOSURE @V407466 00542000 LA R2,2 TABLE ENTRY LENGTH FOR INDEX @V407466 00543000 SCAN CLI 0(R1),X'FF' DEVICE DEFINED? @V407466 00544000 BNE RESTREGS RESTORE R2 AND R3 @V407466 00545000 BXLE R1,R2,SCAN NEXT ENTRY @V407466 00546000 LM R2,R3,SAVEWRK7 RESTORE R2 AND R3 @V407466 00547000 NOTDEDCH EQU * @V407466 00548000 AIF (NOT &DEDCH).NOCHAN **AIF** @V407466 00549000 USING VCHBLOK,R6 @V407466 00550000 TM VCHSTAT,VCHDED CHANNEL DEDICATED @V407466 00551000 BCR 1,R5 YES, CANNOT ATTACH THIS DEVICE @V407466 00552000 DROP R6,R7 @V407466 00553000 .NOCHAN ANOP 00554000 NCHANNEL EQU * @V407490 00555000 TM VDCBYTE1,DED2305 2305 TYPE DEVICE @V407466 00556000 BZ SINGBLOK NO, CREATE SINGLE VDEVBLOK @V407466 00557000 LA R9,8 CREATE VDEVBLOK FOR EACH EXP. @V407466 00558000 SINGBLOK AH R9,VDCVDEV MUST FIGURE ON STORAGE FOR @V407466 00559000 * VDEVBLOK 00560000 STH R9,VDCVDEV RETURN TO WORK AREA @V407466 00561000 CH R6,=H'-1' CHANNEL BLOCK EXIST? @V407466 00562000 BNE CHKVCU VCHBLOK EXISTS; GO CHECK FOR @V407466 00563000 * VCUBLOK 00564000 LA R6,X'F00' ISOLATE CHANNEL BITS @V407466 00565000 NR R6,R1 FROM THE DEVICE ADDRESS @V407466 00566000 SRL R6,7 CHANNEL ADDRESS * 2 @V407466 00567000 L R1,=A(DMKVIOMK) ADDRESS OF MASK TABLE @V407466 00568000 LH R1,0(R1,R6) GET APPROP. MASK FROM TABLE @V407466 00569000 LH R9,VDCCHMAP CHANNEL BIT MAP TO R9 @V407466 00570000 OR R1,R9 TURN ON CHANNEL BIT IN MAP @V407466 00571000 STH R1,VDCCHMAP RETURN TO WORK AREA @V407466 00572000 CHKVCU CH R7,=H'-1' DOES VCUBLOK EXIST? @V407466 00573000 BCR 7,R5 VCUBLOK ALREADY EXISTS; NEXT ADDR@V407466 00574000 LR R1,R2 RESTORE ORIGINAL ADDRESS @V407466 00575000 LA R7,X'0F0' ISOLATE CONTROL UNIT BITS FROM @V407466 00576000 NR R7,R1 DEVICE ADDRESS @V407466 00577000 SRL R7,3 CONTROL UNIT ADDRESS * 2 @V407466 00578000 L R1,=A(DMKVIOMK) ADDRESS MASK TABLE @V407466 00579000 LH R1,0(R1,R7) GET MASK FROM TABLE @V407466 00580000 LH R9,VDCCUMAP(R7) CONTROL UNIT MAP @V407466 00581000 OR R1,R9 TURN ON BIT IN CONTROL UNIT MAP @V407466 00582000 STH R1,VDCCUMAP(R7) RETURN TO WORK AREA @V407466 00583000 BR R5 RETURN TO MAINLINE @V407466 00584000 SPACE 2 00585000 RESTREGS LM R2,R3,SAVEWRK7 RESTORE R2 AND R3 @V407466 00586000 BR R5 RETURN TO MAINLINE @V407466 00587000 SPACE 2 00588000 USING MDSECT,R4 MULTIPLE ADDRESS WORK AREA @V407466 00589000 PRESCAND ST R3,SAVEWRK9 ..... SAME FOR R4 @V407466 00590000 LR R4,R3 MULT STORAGE ADDRESS TO R4 @V407466 00591000 L R2,MULTADD FIRST MULTIPLE ADDRESS @V407466 00592000 SLR R3,R3 CLEAR R3 @V407466 00593000 SLR R4,R4 AND R4 @V407466 00594000 PRESCANE BAL R5,PRESCANA GO DO PRESCAN @V407466 00595000 LR R5,R4 SAVE VDCWORK TEMP @V407466 00596000 L R4,SAVEWRK9 RESTORE PTR TO MULT ADDRESSES @V407466 00597000 LA R4,4(,R4) NEXT ADDRESS @V407466 00598000 ST R4,SAVEWRK9 SAVE UPDATED POINTER @V407466 00599000 L R2,0(,R4) NEXT MULT ADDRESS TO R2 @V407466 00600000 LR R4,R5 RESTORE R4 @V407466 00601000 NI VDCBYTE1,X'FF'-(ATTCTCA+DED2305) TURN BITS OFF @V407490 00602000 CH R2,FFS END OF MULTIPLE ADDRESSES? @V407466 00603000 BE FRETBLK FRET BLOCKS @V407466 00604000 MVI IOBSTAT,X'00' CLEAR IOBSTAT FOR NEXT TIME @V407466 00605000 XC IOBCSW(L'IOBCSW),IOBCSW CLEAR CSW @V407466 00606000 B PRESCANE CONTINUE NEXT ADDRESS @V407466 00607000 SPACE 2 00608000 USING VDCWORK,R4 ADDRESSABILITY @V407466 00609000 NOFREE NI VDCFLAG,X'FF'-(DEVBLD+CUBLD) RESET IND. @V407466 00610000 BAL R5,FREWRK RELEASE STORAGE AREA @V407466 00611000 L R13,SAVEWRK6 RESTORE VDC SAVEAREA ADDRESS @V407466 00612000 LA R2,RC32 INSUFFICIENT FREE STORAGE @V407466 00613000 ST R2,SAVER2 SAVE FOR CALLER @V407466 00614000 LCR R2,R2 PLUS TO MINUS SETS CC=1 @V407466 00615000 B EXIT2 RETURN TO CALLER @V407466 00616000 ERR153 DS 0H @VA13217 00616500 NI VDCFLAG,X'FF'-(DEVBLD+CUBLD) RESET INDIC @VA13217 00616510 BAL R5,FREWRK RELEASE STORAGE @VA13217 00616520 L R13,SAVEWRK6 RESTORE VDC SAVE AREA @VA13217 00616530 LA R2,RC124 RETURN CODE FOR MSG 153 @VA13217 00616540 ST R2,SAVER2 PASS TO CALLER @VA13217 00616550 LCR R2,R2 SET CC=1 IN PSW @VA13217 00616560 B EXIT2 LEAVE @VA13217 00616570 DROP R4 @V407466 00617000 SPACE 00618000 BITMAP DC X'8040201008040201' @V407466 00619000 SPACE 00620000 * EQUATE FOR ERROR CODE - INSUFFICIENT FREE STORAGE 00621000 RC32 EQU 32 @V407466 00622000 RC124 EQU 124 EXCEEDED MAX DEVICES @VA13217 00622500 SPACE 00623000 * EQUATES FOR COUNTERS 00624000 COUNT2 EQU 2 @V407466 00625000 COUNT8 EQU 8 @V407466 00626000 COUNT32 EQU 32 @V407466 00627000 EJECT 00628000 *. 00629000 * SUBROUTINE NAME - 00630000 * 00631000 * DMKVDCAL - CHAIN RDEVBLOKS OFF ALLOCATION CHAIN 00632000 * ANCHORS. 00633000 * 00634000 * FUNCTION - 00635000 * 00636000 * TO CHAIN RDEVBLOKS OFF THE ALLOCATION CHAIN ANCHORS 00637000 * FOR THE DASD DEVICE TYPE AND THEN TO MASSAGE 00638000 * ALLOCATION DATA . 00639000 * 00640000 * ATTRIBUTES - 00641000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00642000 * 00643000 * ENTRY CONDITIONS - 00644000 * 00645000 * GPR4 - POINTER TO OWNED LIST ENTRY 00646000 * GPR8 - ADDRESS OF RDEVBLOK 00647000 * GPR10 - IOBLOK ADDRESS 00648000 * GPR12 - BASE REGISTER 00649000 * GPR13 - STANDARD SAVE AREA ADDRESS 00650000 * 00651000 * GPR0-GPR3 WORK REGISTERS 00652000 * GPR5-GPR9 WORK REGISTERS 00653000 * 00654000 * EXIT CONDITIONS: 00655000 * 00656000 * CC=0; NO ERROR CONDITIONS ARE GENERATED IN THIS 00657000 * MODULE. 00658000 * 00659000 * CALLS TO OTHER ROUTINES - 00660000 * 00661000 * DMKSYSOW 00662000 * DMKPGTTM 00663000 * 00664000 * EXTERNAL REFERENCES - 00665000 * 00666000 * NONE 00667000 * TABLES / WORK AREAS - 00668000 * 00669000 * RDEVBLOK 00670000 * IOBLOK 00671000 * OWNED LIST ENTRY 00672000 * ALOCBLOK 00673000 * 00674000 * REGISTER USAGE - 00675000 * 00676000 * GPR3 - INDEX TO APPROPRIATE CHAIN 00677000 * GPR4 - POINTER TO OWNEDLIST ENTRY 00678000 * GPR8 - ADDRESS OF RDEVBLOK 00679000 * GPR10 - ADDRESS OF IOBLOK 00680000 * GPR12 - BASE REGISTER 00681000 * GPR13 - STANDARD SAVE AREA ADDRESS 00682000 * 00683000 * GPR0-GPR3 WORK REGISTERS 00684000 * GPR5-GPR7 WORK REGISTERS 00685000 * GPR9, GPR14-GPR15 WORK REGISTERS 00686000 * 00687000 * NOTES - NONE 00688000 * 00689000 * OPERATION - 00690000 * 00691000 * 1. GET THE PROPER CHAIN ANCHOR BASED ON DASD DEVICE 00692000 * TYPE AND PREFERRED VOLUME INDEX. 00693000 * 2. READ ALLOCATION DATA OFF DISK AND BUILD MINI 00694000 * ALLOCATION BLOCK TO BE CHAINED INTO THE ALLOCATION 00695000 * CHAIN. 00696000 * 00697000 * RESPONSES - 00698000 * NONE 00699000 * 00700000 * ERROR MESSAGES - 00701000 * NONE 00702000 *. 00703000 EJECT 00704000 DMKVDCAL RELOC SUBROUTINE TO CHAIN IN ALLOCATION TABLES @V407466 00705000 USING RDEVBLOK,R8 @V407466 00706000 USING IOBLOK,R10 EXPANDED IOBLOK ADDRESSABILITY @V407466 00707000 USING OWNDLIST,R4 OWNED LIST ADDRESSABILTIY @V407466 00708000 ST R8,SAVEWRK9 SAVE ADDRESS OF RDEVBLOK @V407466 00709000 LA R14,ALL2314-4 @V407466 00710000 LA R5,203 EACH DEVICE TYPE HAS TWO CHAINS @V407466 00711000 CLI RDEVTYPE,TYP2314 ...AND DIFFERENT CYL NUMBERS @V407466 00712000 BE ALLLIST @V407466 00713000 TST3350 LA R14,ALL3350-4 3350 TABLE @V407466 00714000 LA R5,555 @V407466 00715000 CLI RDEVTYPE,TYP3350 3350 DEVICE TYPE @V407466 00716000 BE ALLLIST YES, PROCESS 3350 @V407466 00717000 LA R14,ALL3375-4 3375 table HRC106DK 00717100 LA R5,959 Number of cylinders for 3375 HRC106DK 00717150 CLI RDEVTYPE,TYP3375 3375 device type HRC106DK 00717200 BE ALLLIST Yes, process 3375 HRC106DK 00717250 CLI RDEVTYPE,TYP3380 3380 device type HRC106DK 00717300 BNE NOT3380 No - move on to next type HRC106DK 00717350 LA R14,ALL3380-4 3380 table HRC106DK 00717400 LA R5,2655 Number of cylinders for 3380 (K) HRC106DK 00717450 TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 00717500 BO ALLLIST Yes, process triple density 3380 HRC106DK 00717550 LA R5,1770 Number of cylinders for 3380 (E) HRC106DK 00717600 TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 00717650 BO ALLLIST Yes, process double density 3380 HRC106DK 00717700 LA R5,885 Num. cylinders for 3380 (A/D/J) HRC106DK 00717750 B ALLLIST Process single density 3380 HRC106DK 00717800 NOT3380 EQU * HRC106DK 00717850 CLI RDEVTYPE,TYP3340 3340 DEVICE TYPE @V407466 00718000 BNE TST3330 NO - TEST 3330 TYPE @V407466 00719000 LA R14,ALL3340-4 POINT TO 3340 TABLE @V407466 00720000 LA R5,MB35 NUMBER OF CYLINDERS FOR 35MB @V56BDA8 00721000 LA R2,VDCLBUF-VDCLOK(R5,R10) ALLOC RECORD PLUS ONE @V407466 00722000 CLI 0(R2),X'FF' VALID 35MB ALLOCATION RECORD ? @V407466 00723000 BE ALLLIST YES - @V407466 00724000 TM RDEVFTR,FTR35MB 3340 WITH 35MB PACK @V407466 00725000 BO ALLLIST YES -- GO @V407466 00726000 LA R5,MB70 NUMBER OF CYLINDERS FOR 70MB @V56BDA8 00727000 B ALLLIST 3340 WITH 70MB PACK @V407466 00728000 SPACE 2 00729000 TST3330 LA R14,ALL3330-4 3330 TABLE @V407466 00730000 LA R5,404 @V407466 00731000 CLI RDEVTYPE,TYP3330 @V407466 00732000 BNE TST2305 IF NOT 3330 GO TEST FOR 2305 @V407466 00733000 CLI RDEVMDL,11 MOD 11 3330 ? @V407466 00734000 BNE ALLLIST NO- ALL SET @V407466 00735000 LA R5,808 SET UP FOR A MOD 11 3330 @V407466 00736000 B ALLLIST @V407466 00737000 SPACE 2 00738000 TST2305 LA R14,ALL2305-4 POINT TO TABLE @V407466 00739000 LA R5,96 @V407466 00740000 CLI RDEVMDL,X'01' MOD 1 2305 ? @V407466 00741000 BNE ALLLIST NO- ALL SET @V407466 00742000 LA R5,48 SET UP FOR A MOD 1 2305 @V407466 00743000 ALLLIST EQU * ADD RDEVBLOK TO ALLOCATION LIST @V407466 00744000 L R1,0(R3,R14) GET ADDRESS OF CHAIN ANCHOR @V407466 00745000 L R2,0(,R1) FIRST RDEVBLOK, IF ANY @V407466 00746000 LTR R2,R2 IS IT ANY ? @V407466 00747000 BNZ ALLINST YES - INSERT THIS RDEVBLOK @V407466 00748000 ST R8,RDEVPNT CHAIN RDEVBLOK TO ITSELF @V407466 00749000 ST R8,0(,R1) ...AND INTO CHAIN ANCHOR @V407466 00750000 B SETALLN GO MASSAGE ALLOCATION DATA @V407466 00751000 SPACE 2 00752000 ALLINST EQU * @V407466 00753000 L R1,RDEVPNT-RDEVBLOK(,R2) @V407466 00754000 ST R1,RDEVPNT @V407466 00755000 ST R8,RDEVPNT-RDEVBLOK(,R2) @V407466 00756000 SETALLN EQU * MASSAGE ALLOCATION DATA @V407466 00757000 LR R2,R8 RDEVBLOK ADDRESS @V407466 00758000 SL R2,ARIODV GET DISPLACEMENT @V407466 00759000 SRL R2,3(0) CONVERT TO DOUBLE-WORD INDEX @V407466 00760000 STH R2,OWNDRDEV ...INTO OWNED-LIST ENTRY @V407466 00761000 SL R4,=A(DMKSYSOW) COMPUTE "RDEVCODE" @V407466 00762000 SRL R4,3(0) ... @V407466 00763000 DROP R4 @V407466 00764000 STH R4,RDEVCODE @V407466 00765000 SPACE 00766000 ST R10,SAVEWRK6 SAVE IOBLOK ADDRESS @V407466 00767000 LA R4,VDCLBUF-2-VDCLOK(,R10) START OF ALLOCATION @V407466 00768000 * RECORD 00769000 * GPR 5 CONTAINS NUMBER OF CYLINDERS ON DEVICE 00770000 SPACE 00771000 LA R1,63(R5) ROUND UP IF NECESSARY... @V407466 00772000 SRL R1,6 NO DBLWDS NEEDED: 64 CYL/DBLWD @V407466 00773000 LA R0,(ALOCMAP-ALOCBLOK+7)/8(R1) ADD IN HDR SIZE @V407466 00774000 CALL DMKFREE GET MINI ALOCBLOK @V407466 00775000 USING ALOCBLOK,R1 @V407466 00776000 ST R1,RDEVALLN SET RDEVALLN TO MINI ALOCBLOK @V407466 00777000 ST R1,BALR1 SAVE ADDRESS OF LAST ALLOCATION @V407466 00778000 * BLOCK 00779000 DROP R8 @V407466 00780000 SR R8,R8 ZERO TDISK CYLINDER COUNTER @V407466 00781000 LR R6,R1 ADDR OF ALOCBLOK @V407466 00782000 LR R7,R0 SIZE OF THE BLOCK @V407466 00783000 SLL R7,3 IN BYTES PLEASE. @V407466 00784000 L R15,F0 PAD & COUNT @V407466 00785000 MVCL R6,R14 CLEAR THE BLOCK @V407466 00786000 STH R5,ALOCMAX SET ALOCMAX @V407466 00787000 SR R9,R9 CLEAR @V407466 00788000 LA R14,2(,R4) POINT TO ALLOCATION DATA @V407466 00789000 LR R15,R14 SAVE START OF ALOCMAP @V407466 00790000 ALOCLKUP CLI 0(R14),X'00' IS THERE ANY ALLOCATION ON THIS @V407466 00791000 * CYLINDER? 00792000 BE NOTTDISK GO TEST FOR END OF TDISK AREA @V407466 00793000 CLI 0(R14),TEMP ... @VM00019 00794000 BE NOTTDISK TREAT AS TEMP @VM00019 00795000 LA R10,1 SET TENTATIVE DECREMENT @V407466 00796000 LR R6,R5 GET NUMBER CYLINDERS FOR THIS @V407466 00797000 * DEVICE 00798000 SRL R6,1 /2 @V407466 00799000 LR R7,R14 GET ADDRESS OF CURRENT BYTE @V407466 00800000 SR R7,R15 GET CYLINDER NUMBER WHERE WE @V407466 00801000 * ARE NOW 00802000 SR R6,R7 @V407466 00803000 BP *+8 @V407466 00804000 LPR R6,R6 MAKE POSITIVE @V407466 00805000 SR R10,R10 SET DECREMENT TO 0 @V407466 00806000 AR R6,R6 DOUBLE @V407466 00807000 SR R6,R10 DECREMENT, IF NECESSARY @V407466 00808000 SRDL R6,3 /8 @V407466 00809000 SRL R7,29 GET REMAINDER IN LOW ORDER 3 BITS@V407466 00810000 IC R7,ALOCTBL(R7) GET BITS THAT ARE ALREADY IN @V407466 00811000 * ALOCTBL 00812000 LA R6,ALOCMAP(R6) GET PROPER OUTPUT BYTE @V407466 00813000 EX R7,ALLOCON TURN ON APPROPRIATE BIT @V407466 00814000 LA R9,1(,R9) KEEP TOTAL OF ALLOCATED CYLINDERS@V407466 00815000 CLI 0(R14),X'02' TDISK CYLINDER ?? @V407466 00816000 BNE NOTTDISK NO -- GO TEST FOR END OF TDISK @V407466 00817000 LA R8,1(,R8) BUMP TDISK CYLINDER COUNT @V407466 00818000 B ALOCNXT AND GO PROCESS NEXT CYLINDER @V407466 00819000 SPACE 00820000 NOTTDISK LTR R8,R8 ANY TDISK ALLOCATED ?? @V407466 00821000 BZ ALOCNXT NO -- @V407466 00822000 ST R1,BALR6 SAVE CURRENT (OLD) ADDR @V407466 00823000 LA R7,7(R8) ROUND UP IF NECESSARY... @V407466 00824000 SRL R7,3 NO DBLWDS NEEDED: 8 CYL/DBLWD @V407466 00825000 LA R7,(ALOCMAP-ALOCBLOK+7)/8(R7) ADD IN HDR SIZE @V407466 00826000 LR R0,R7 TO R0 FOR DMKFREE PLEASE @V407466 00827000 STM R14,R15,BALR14 SAVE REGS 14 AND 15 OVER CALL @V407466 00828000 CALL DMKFREE GET CORE FOR A TDISK BLOK @V407466 00829000 LR R6,R1 NEW BLOK ADDR @V407466 00830000 SLL R7,3 SIZE IN BYTES @V407466 00831000 L R15,F0 PAD & COUNT @V407466 00832000 MVCL R6,R14 CLEAR THE BLOCK @V407466 00833000 LM R14,R15,BALR14 RESTORE R14, R15 @V407466 00834000 L R7,BALR1 RESTORE ADDRESS OF LAST @V407466 00835000 * ALLOCATION BLOCK 00836000 ST R1,ALOCPNT-ALOCBLOK(,R7) CHAIN IT TO OLD LAST @V407466 00837000 * BLOCK 00838000 MVI 0(R7),X'80' AND FLAG IT AS TDISK ALLOCATION @V407466 00839000 ST R1,BALR1 AND SAVE ADDRESS OF NEW LAST @V407466 00840000 * BLOCK 00841000 LR R7,R14 GET CURRENT CYLINDER @V407466 00842000 SR R7,R15 RELATIVE TO ZERO @V407466 00843000 BCTR R7,0 LESS ONE (LAST TDISK CYLINDER) @V407466 00844000 STH R7,ALOCCYL2 SAVE AS LAST CYLINDER ADDRESS @V407466 00845000 SR R7,R8 GET 1ST CYLINDER ADDRESS @V407466 00846000 LA R7,1(,R7) ... @V407466 00847000 STH R7,ALOCCYL1 SAVE IN ALOCBLOK @V407466 00848000 LA R10,ALOCMAP(R8) POINT TO FIRST NON-ALLOCATED @V407466 00849000 * BYTE 00850000 SR R8,R8 CLEAR TDISK COUNTER FOR NEXT TIME@V407466 00851000 LR R7,R1 SAVE ADDRESS OF BLOK @V407466 00852000 L R1,BALR6 RESTORE ADDR OF OLD BLOK @V407466 00853000 SLL R0,3 GET LENGTH OF BLOK @V407466 00854000 AR R7,R0 GET END OF BLOK @V407466 00855000 BCTR R7,0 GET LAST BYTE OF BLOK @V407466 00856000 CR R10,R7 BLOK FULL ?? @V407466 00857000 BH ALOCNXT YES -- @V407466 00858000 LA R6,1 GET INCREMENT FOR BXLE @V407466 00859000 MVI 0(R10),X'AA' FLAG UNUSED BYTES AS ALLOCATED @V407466 00860000 BXLE R10,R6,*-4 LOOP UNTIL BLOK IS FULL @V407466 00861000 SPACE 00862000 ALOCNXT CLI 0(R14),X'FF' END OF ALLOCATION ?? @V407466 00863000 LA R14,1(,R14) IN ANY CASE, INDEX UP @V407466 00864000 BE ALOCFINI YES @V407466 00865000 LR R10,R14 GET CURRENT ALOCATION BYTE @V407466 00866000 SR R10,R4 MINUS START OF TABLE @V407466 00867000 BCTR R10,0 ... @V407466 00868000 BCTR R10,0 ... @V407466 00869000 CH R10,ALOCMAX EXCEEDED MAXIMUM ? @V407466 00870000 BL ALOCLKUP NO @V407466 00871000 CLI 0(R14),X'FF' END OF ALLOCATION DATA ? @V407466 00872000 BE NOTTDISK SEE IF T-DISK AT TOP OF DEVICE @V407466 00873000 SPACE 1 00874000 ALOCFINI EQU * HERE AT END OF MAXI ALLOCATION @V407466 00875000 * TABLE SCAN 00876000 STH R9,ALOCUSED SET TOTAL NUMBER OF CYLINDERS @V407466 00877000 * ALLOCATED 00878000 STH R9,ALOCNTMP SET NUMBER OF NON-TEMP CYLS @V407466 00879000 LA R0,IOBSIZE+ALLOLEN IOBLOK+BUFFER @V407466 00880000 L R1,SAVEWRK6 IOBLOK ADDRESS @V407466 00881000 L R10,IOBMISC-IOBLOK(,R1) REST. ATTACHEE'S VMBLOK @VA07393 00882000 ST R10,SAVER10 .... @VA07393 00883000 CALL DMKFRET @V407466 00884000 L R15,SAVEWRK9 ADDRESS OF RDEVBLOK @V407466 00885000 TM RDEVFLAG-RDEVBLOK(R15),RDEVPREF TEMP SPACE ? @V407466 00886000 BO VDCALOUT NO -- PAGING SPACE @V407466 00887000 SR R5,R9 GET NUMBER OF TEMP CYLINDERS ON @V407466 00888000 * VOLUME 00889000 L R15,=A(DMKPGTTM) ADDRESS OF TEMP CYL COUNTER @V407466 00890000 A R5,0(,R15) INCREMENT COUNT @V407466 00891000 ST R5,0(,R15) AND SAVE @V407466 00892000 SPACE 00893000 L R15,=A(DMKPGTTM) GET MAX NUMBER OF TEMP CYLS @V407466 00894000 L R3,0(,R15) INTO GPR3 @V407466 00895000 M R2,F9 TIMES 90 PERCENT @V407466 00896000 D R2,F10 .. @V407466 00897000 L R15,=A(DMKPGT90) ADDRESS OF 90 PERCENT COUNTER @V407466 00898000 ST R3,0(R15) STORE NEW 90 PERCENT COUNT @V407466 00899000 VDCALOUT EXIT GO GIVE RESPONSES @V407466 00900000 SPACE 00901000 ALLOCON OI 0(R6),*-* @V407466 00902000 SPACE 00903000 ALOCTBL DC X'8040201008040201' BIT/BYTE TRANSLATION @V407466 00904000 SPACE 00905000 ALL2305 DC A(DMKPGTP5,DMKPGTT5) 2305 ALLOCATION CHAIN @V407466 00906000 * ANCHORS 00907000 ALL3330 DC A(DMKPGTP0,DMKPGTT0) 3330 ALLOCATION CHAIN @V407466 00908000 * ANCHORS 00909000 ALL3340 DC A(DMKPGT4P,DMKPGT4T) 3340 ALLOCATION ANCHORS @V407466 00910000 ALL3350 DC A(DMKPGT5P,DMKPGT5T) 3350 ALLOCATION ANCHORS @V407466 00911000 ALL3375 DC A(DMKPGT7P,DMKPGT7T) 3375 allocation anchors HRC106DK 00911100 ALL3380 DC A(DMKPGT8P,DMKPGT8T) 3380 allocation anchors HRC106DK 00911200 ALL2314 DC A(DMKPGTP4,DMKPGTT4) 2314 ALLOCATION CHAIN @V407466 00912000 * ANCHORS 00913000 SPACE 3 00914000 ALLOLEN EQU 1024/8+64/8 EXTRA SIZE FOR ALLOCATION @V407466 00915000 EJECT 00916000 *. 00917000 * SUBROUTINE NAME - 00918000 * 00919000 * DMKVDCSC - SCAN 'ATTACH/DETACH' COMMAND LINE 00920000 * 00921000 * FUNCTION - 00922000 * TO PERFORM SYNTAX CHECKING ON 'ATTACH/DETACH' COMMAND 00923000 * LINE. 00924000 * 00925000 * ATTRIBUTES - 00926000 * 00927000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00928000 * 00929000 * ENTRY CONDITIONS: 00930000 * 00931000 * GPR9 - COMMAND LINE BUFFER POINTER 00932000 * GPR12 - BASE REGISTER 00933000 * GPR13 - STANDARD SAVE AREA ADDRESS 00934000 * 00935000 * EXIT CONDITIONS: 00936000 * 00937000 * GPR2 = 0 IF SUCCESSFUL SYNTAX CHECK 00938000 * GPR2 = ERROR CODE IF SYNTAX CHECK IS UNSUCCESSFUL. 00939000 * DMKVDA WILL ISSUE ERROR MESSAGE BASED ON ERROR CODE 00940000 * WHICH WAS PASSED TO IT BY DMKVDCSC. 00941000 * 00942000 * CALLS TO OTHER ROUTINES - 00943000 * 00944000 * DMKSCNFD 00945000 * DMKSCNAU 00946000 * DMKCVTHB 00947000 * DMKCFCSC 00948000 * 00949000 * EXTERNAL REFERENCES - 00950000 * 00951000 * NONE 00952000 * 00953000 * TABLES / WORK AREAS - 00954000 * 00955000 * COMMAND LINE BUFFER 00956000 * DMKVDA'S SAVEAREA 00957000 * WORK AREA TO STORE CONVERTED MULTIPLE ADDRESSES WHICH 00958000 * ARE TO BE PROCESSED BY DMKVDA. 00959000 * 00960000 * REGISTER USAGE 00961000 * 00962000 * GPR2 - ERROR CODE 00963000 * GPR9 - COMMAND LINE BUFFER POINTER 00964000 * GPR12 - BASE REGISTER 00965000 * GPR13 - STANDARD SAVE AREA ADDRESS 00966000 * 00967000 * ALL OTHER REGISTERS ARE WORK REGISTERS 00968000 * 00969000 * NOTES - NONE 00970000 * 00971000 * OPERATION - 00972000 * 1. THE INPUT LINE IS SCANNED VIA DMKCFCSC, DMKSCNFD AND 00973000 * DMKCVTHB TO OBTAIN AND CONVERT FROM HEX TO BINARY 00974000 * (WHERE APPROPRIATE) THE REAL DEVICE, VIRTUAL DEVICE, 00975000 * AND USERID. IF ANY FIELDS ARE OMITTED OR INVALID, AN 00976000 * ERROR CODE IS RETURNED TO DMKVDA/DMKVDD VIA GPR2 AND 00977000 * DMKVDA/DMKVDD ISSUES THE APPROPRIATE ERROR MESSAGE. 00978000 * 00979000 * 2. WHEN MULTIPLE ADDRESSES ARE SPECIFIED ON THE COMMAND 00980000 * LINE, A WORK AREA IS ACQUIRED AND THE CONVERTED DEVICE 00981000 * ADDRESSES STORED IN THE AREA. THE ADDRESS OF THE AREA 00982000 * IS RETURNED TO DMKVDA/DMKVDD FOR LATER PROCESSING. 00983000 * 00984000 * RESPONSES - 00985000 * NONE 00986000 * 00987000 * ERROR MESSAGES - 00988000 * 00989000 * NONE; DMKVDCSC RETURNS ERROR CODES TO DMKVDA/DMKVDD 00990000 * VIA GPR2 AND DMKVDA/DMKVDD ISSUES THE APPROPRIATE ERROR 00991000 * MESSAGE. 00992000 * 00993000 *. 00994000 EJECT 00995000 DMKVDCSC RELOC @V407466 00996000 USING BUFFER,R9 @V407490 00997000 LR R5,R13 SAVE R13 SAVE ADD FOR LATER @V407466 00998000 L R13,SAVER13 CALLER'S SAVEAREA ADDRESS @V407466 00999000 VDCSCAN EQU * PARSE THE COMMAND LINE @V407466 01000000 MVC CMDUSER(8),BLANKS @V407466 01001000 XC VIRTADD(2),VIRTADD @V60B6B8 01002000 SPACE 01003000 CALL DMKSCNFD FIND FIRST PARAMETER @V407466 01004000 BNZ INVADD1 ADDR1 MISSING OR INVALID @V407466 01005000 CL R0,F7 ADDR > 7 - ERROR @V407466 01006000 BH INVADD1C INVALID @V407490 01007000 LA R2,DASH PREPARE SCAN FOR '-' @V407466 01008000 SPACE 01009000 CALL DMKCFCSC SEE IF RANGE ON COMMAND LINE @V407466 01010000 BZ NORANGE RANGE NOT FOUND (R1-R2) @V407466 01011000 CR R1,R2 INVALID IF '-' FIRST CHARACTER @V407466 01012000 BNL INVADD1C ... @V407490 01013000 CL R0,F3 RANGE < 3? (R1-R2) @V407466 01014000 BL INVADD1C ERROR IF IT IS @V407490 01015000 LR R3,R2 R1 INTO R3 FOR NOW @V407466 01016000 SR R3,R1 LENGTH OR RADDR1 FIELD @V407466 01017000 LR R6,R0 SAVE ENTIRE OPERAND LENGTH @V407466 01018000 LR R0,R3 RADDR1 LENGTH @V407466 01019000 MVI 0(R2),BLANK REPLACE '-' WITH BLANK @V407466 01020000 CALL DMKCVTHB CONVERT FIRST RADDR IN RANGE @V407466 01021000 BNZ INVADD1A INVALID ADDR1 FIELD @V407490 01022000 ST R1,DEVADDR STORE FIRST RADDR FOR LATER @V407466 01023000 LA R1,1(,R2) POINT TO SEC. RADDR IN RANGE @V407466 01024000 SR R6,R3 GET RADDR2 LENGTH @V407466 01025000 BCTR R6,0 MINUS 1 FOR '-' @V407466 01026000 LR R0,R6 RADDR2 LENGTH IN R0 @V407466 01027000 CALL DMKCVTHB CONVERT SEC. RADDR IN RANGE @V407466 01028000 BNZ INVADD1B INVALID ADDR1 FIELD @V407490 01029000 L R2,DEVADDR RADDR1 IN RANGE @V407466 01030000 CR R1,R2 RADDR2 MUST BE > RADDR1 IN RANGE @V407466 01031000 BNH INVADD1B OTHERWISE , INVALID @V407490 01032000 STH R1,VDCBITS+2 STORE RADDR2 FOR LATER @V407466 01033000 OI VDCBITS,RANGE INDICATE RANGE @V407466 01034000 B USERSCAN SCAN FOR SECOND OPERAND @V407466 01035000 SPACE 2 01036000 NORANGE CL R0,F3 LONGER THAN A DEVICE ADDRESS @V407466 01037000 BNH CHKDADD NO @V407466 01038000 LR R2,R0 LENGTH INTO R2 @V407466 01039000 BCTR R2,0 @V407466 01040000 EX R2,TSTCHAN SEE IF 'CHANNEL' @V407466 01041000 BNE INVADD1C NO - INVALID ADDR 1 FIELD @V407490 01042000 OI VDCBITS,CHANNEL OPTION - ATTACH OR DETACH @V407466 01043000 CALL DMKSCNFD GET CHANNEL ADDRESS @V407466 01044000 BNZ INVADD1 NOT SPECIFIED @V407466 01045000 CL R0,F1 MAXIMUM LENGTH = 1 @V407466 01046000 BH INVADD1C @V407490 01047000 CHKDADD EQU * CONVERT ADDRESS @V407466 01048000 CALL DMKCVTHB @V407466 01049000 BNZ INVADD1B INVALID ADDR 1 FIELD @V407490 01050000 ST R1,DEVADDR SAVE IN WORK AREA @V407466 01051000 USERSCAN TM VMCLEVEL,VMCLASSB IF HE ISN'T CLASS B IT CAN @V407466 01052000 * ONLY 01053000 BO USER2 BE 'DETACH' OF A VIRTUAL DEVICE @V407466 01054000 TM VMTRCTL,VMTRIO+VMTRSIO TRACING I/O ? @VA09655 01054300 BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01054700 OI VDCBYTE1,VDETACH DETACH VIRTUAL @V407466 01055000 USER2 CALL DMKSCNFD FIND SECOND PARAMETER (USERID) @V407466 01056000 BNZ SCANADD ADDRESS ONLY - MAYBE DETACH @V407466 01057000 CL R0,F4 IF LONGER THAN 'FROM' @V407466 01058000 BH SCNUSER ...MUST BE A USERID @V407466 01059000 LR R2,R0 @V407466 01060000 BCTR R2,0 @V407466 01061000 TM VDCBYTE2,DETACH IS THIS 'DETACH'? @V407466 01062000 BO CHKFROM YES, TEST FOR 'FROM' @V407466 01063000 EX R2,FINDTO ATTACH - TEST FOR 'TO' @V407466 01064000 BE GETUSER YES, SCAN FOR USERID @V407466 01065000 MULTIPLE TM VDCBITS,RANGE RANGE BEING PROCESSED @V407466 01066000 BO SCNUSER2 YES, MUST BE USERID THEN @V407466 01067000 LR R6,R1 SAVE R1 @V407466 01068000 CALL DMKCVTHB CONVERT ADDRESS @V407466 01069000 BNZ RESTORE RESTORE R1/R2 VALUE @V407466 01070000 CL R0,F3 MAX LENGTH FOR DEVICE @V407490 01071000 BH RESTORE ATTEMPT TO FIND USERID @VA09375 01072500 TM VDCBITS,MULTR FIRST PASS THROUGH HERE @V407466 01073000 BO NEXTADD NOT FIRST MULT, STORE ADDRESS @V407466 01074000 ST R1,SAVEWRK6 SAVE R1 TEMPORARILY @V407466 01075000 USING MDSECT,R4 @V407466 01076000 LR R3,R4 R3 POINTS TO FREE STORAGE @V407466 01077000 OI VDCBITS,MULTR MULTIPLE REAL ADDRESSES @V407466 01078000 L R1,DEVADDR FIRST MULTIPLE @V407466 01079000 ST R1,MULTADD MOVE MULT ADDRESS TO WORK AREA @V407466 01080000 L R1,SAVEWRK6 RESTORE R1 @V407466 01081000 NEXTADD LA R4,4(,R4) BUMP PTR TO NEXT FREE SLOT @V407466 01082000 ST R1,MULTADD STORE NEXT MULTIPLE ADDRESS @V407466 01083000 B USERSCAN GO SCAN AGAIN FOR USERID @V407466 01084000 SPACE 2 01085000 SCANADD TM VDCBYTE2,DETACH IF THIS ISN'T DETACH @V407466 01086000 BZ INVUSID THERE IS A MISSING USERID @V407466 01087000 TM VMTRCTL,VMTRIO+VMTRSIO TRACING I/O ? @VA09655 01087300 BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01087700 OI VDCBYTE1,VDETACH ADDRESS ONLY @V407466 01088000 LOADFFS L R1,FFS STORE FFS AS DELIMITER FOR @V407466 01089000 * MULTIPLES 01090000 ST R1,4(R4) IN WORKAREA @V407466 01091000 B SCANCOMP COMMAND LINE SCAN COMPLETE @V407466 01092000 SPACE 2 01093000 RESTORE LR R1,R6 RESTORE R1 @V407466 01094000 B SCNUSER2 MAYBE OPERAND IS A USERID?? @V407466 01095000 SPACE 2 01096000 CHKFROM EQU * LOOK FOR OPTIONAL WORD 'FROM' @V407466 01097000 EX R2,FNDFROM DETACH - TEST FOR 'FROM' @V407466 01098000 BNE MULTIPLE SEE IF MULTIPLES ON COMMAND @V407466 01099000 GETUSER EQU * FIND USERID PARAMETER @V407466 01100000 CALL DMKSCNFD @V407466 01101000 BNZ INVUSID @V407466 01102000 SPACE 01103000 SCNUSER EQU * FOUND USERID FIELD @V407466 01104000 LR R2,R0 @V407466 01105000 BCTR R2,0 @V407466 01106000 SCNUSER2 TM VMCLEVEL,VMCLASSB CLASS B USER @V407466 01107000 BZ LOADFFS NO, MUST BE DETACH VIRTUAL @V407466 01108000 CL R2,F7 IF TOO LONG... @V407466 01109000 BH INVUSID ...INVALID USERID FIELD @V407466 01110000 CL R0,F1 IS IT ONE CHAR? @V407466 01111000 BH MOVEIT NOPE, ... USE IT @V407466 01112000 CLI 0(R1),C'*' IS IT STAR? @V407466 01113000 BNE MOVEIT NOPE, USE IT @V407466 01114000 LA R1,VMUSER MAKE IT THE OPERATOR @V407466 01115000 LA R2,7 ADJUSTED LENGTH FOR EXECUTE @V407466 01116000 LA R0,8 MAKE TOTAL LENGTH 8 @V407466 01117000 MOVEIT EQU * @V407466 01118000 EX R2,MVCUSER MOVE TO WORK AREA @V407466 01119000 CLC CMDUSER(8),=CL8'SYSTEM' ATTACH TO SYSTEM ? @V407466 01120000 BNE GETBLOK NO @V407466 01121000 L R10,ASYSVM ADDRESS OF SYSTEM VMBLOK @V407466 01122000 TM VDCBYTE2,DETACH DETACH COMMAND? @V407466 01123000 BO SYSDET YES, DETACH FROM 'SYSTEM' @V407466 01124000 TM VDCBITS,RANGE+MULTR RANGE OR MULTIPLE RADDR @V407466 01125000 * SPECIFIED? 01126000 BM INVUSID YES, CANNOT ATTACH TO 'SYSTEM' @V407466 01127000 SYSDET OI VDCBITS,ATTSYST ATTACH/DETACH TO/FROM SYSTEM @V407466 01128000 B NEXTOPT GO GET VOLID @V407466 01129000 SPACE 2 01130000 GETBLOK EQU * FIND VMBLOK OF ATTACHEE @V407466 01131000 CALL DMKSCNAU @V407466 01132000 BC 2,INVUSID INVALID USERID @V407466 01133000 BNZ NOTLOGD USER NOT LOGGED ON @V407466 01134000 LR R10,R1 SAVE VMBLOK ADDRESS IN R10 @V407466 01135000 TM VDCBYTE2,DETACH DETACH ? @VA09655 01135100 BZ NEXTOPT NO,TEST FOR TRACE NOT NEEDED @VA09655 01135300 TM VMTRCTL-VMBLOK(R10),VMTRIO+VMTRSIO TRACING I/O @VA09655 01135500 BNZ INVTRACE YES, CAN NOT DETACH @VA09655 01135700 SPACE 01136000 NEXTOPT EQU * @V407466 01137000 TM VDCBITS,CHANNEL ATTACHING A CHANNEL @V407466 01138000 BZ NEXTOPT2 FIND NEXT OPERAND @V407466 01139000 TM VDCBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 01140000 BO INVUSID INVALID USERID @V407466 01141000 B SCANCOMP RETURN TO DMKVDA TO ATT CHANNEL @V407466 01142000 CHKLEAVE EQU * HRC003DK 01142080 MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS HRC003DK 01142160 CALL DMKSCNFD CALL WORD SCANNER HRC003DK 01142240 BNZ LOADFFS NO MORE PARMS, LOAD FENCE HRC003DK 01142320 LR R2,0 GET PARM LENGTH HRC003DK 01142400 BCTR R2,0 DECR BY 1 FOR EXECUTE HRC003DK 01142480 EX R2,CMPLEAVE COMPARE FOR LEAVE HRC003DK 01142560 BNZ INVOPTS NOPE - INVALID OPT HRC003DK 01142640 OI VDCBITS+1,TPNORUN INDICATE LEAVE REQ HRC003DK 01142720 B LOADFFS DONE HRC003DK 01142800 CMPLEAVE CLC 0(0,R1),=C'LEAVE ' HRC003DK 01142880 SPACE 2 01143000 NEXTOPT2 TM VDCBYTE2,DETACH DETACH COMMAND? @V407466 01144000 BO CHKLEAVE YES, DETACH REAL - CHK LEAVE HRC003DK 01145490 MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS @V407490 01146000 CALL DMKSCNFD FIND NEXT PARAMETER @V407466 01147000 BNZ MANY1 NO PARM - MUST BE RANGE/MULTIPLES@V407466 01148000 TM VDCBITS,RANGE+MULTR RANGE OR MULTIPLE ADDRESSES?@V407466 01149000 BM CHKRO THEN, IT BETTER BE R/O @V407466 01150000 SPACE 01150010 * HERE WE ARE IF ATTACH TO SYSTEM OR USERID AND WE EXPECT WE 01150020 * NOW HAVE 'AS' OR A VADDR OR THE VOLID FOR SYSTEM 01150030 SPACE 01150040 LR R2,R0 @V407466 01151000 BCTR R2,0 @V407466 01152000 EX R2,FINDAS IT MAY BE "AS" @V407466 01153000 BNE CHKVADD NO - ASSUME IT'S AN ADDRESS @V407466 01154000 MVC SAVEWRK8(8),BUFNXT SAVE BUFFER POINTERS @V407490 01155000 CALL DMKSCNFD FIND VIRTUAL ADDRESS @V407466 01156000 BNZ MANY1 VOLID OR DEV ADDR MISSING @VA11347 01157500 CHKVADD EQU * @V407466 01158000 TM VDCBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 01159000 BZ CHKRO NOT RANGE/MULTIPLES @VA12315 01160001 SPACE 01160010 * HERE WE NOW GOTS AN ATTACH TO THE SYSTEM AND HAVE WHAT MAY 01160020 * BE A VOLID, WILL USE IT AS SUCH AND LEAVE 01160030 SPACE 01160040 LR R2,R0 @V407466 01161000 CL R2,F6 MAXIMUM LENGTH FOR VOLID @V407466 01162000 BH INVOLID VOLID INVALID @V407466 01163000 MVC CMDUSER(8),BLANKS CLEAR VOLUME SERIAL BUFFER @V407466 01164000 BCTR R2,0 @V407466 01165000 EX R2,MVCUSER MOVE TO WORK AREA @V407466 01166000 OI SAVEWRK9,VOLPRES VOLID PRESENT ON COMMAND @V60B6B8 01167000 MVC SAVEWRK6(6),BLANKS BLANK BEFORE SAVING VOLSER @VA11886 01167500 EX R2,MVCVOL SAVE IN CASE 3330V VOLUME @V60B6B8 01168000 SLR R1,R1 CLEAR R1 FOR LOAD HALF @V407466 01169000 LH R1,VIRTADD VIRTUAL ADDRESS TO R1 @V407466 01170000 B SCANCOMP 'ATTACH' DATA IS ALL READY @V407466 01171000 SPACE 2 01172000 * WE WENT TO READ THE NEXT PARM AND IS NOT THERE.... IF ATT TO 01172010 * SYSTEM ITS NO VOLID, IF TO USER ITS NO VADDR AND WE'LL GIVE A 01172020 * DEFAULT OF THE RADDR, IF FOR THE RANGE AND MULTIPLES ITS OK 01172030 * WE JUST GOT NO R/O OR 3330V STUFF ... GO CHECK THE ADDRESSES 01172040 SPACE 01172050 MANY1 TM VDCBITS,RANGE WAS RANGE SPECIFIED ON COMMAND @V407466 01173000 * LINE? 01174000 BO MAXRANGE VERIFY VIRTUAL DEVICE ADDRESSES @V407466 01175000 TM VDCBITS,MULTR MULTIPLE RADDR SPECIFIED? @V407466 01176000 BO MAXMULT VERIFY VIRTUAL DEVICE ADDRESSES @V407466 01177000 TM VDCBITS,ATTSYST ATTACH TO SYSTEM???? 01178000 BO INVOLID YES,THEN SHOULD HAVE VOLID @V407490 01179000 USERADDR L R1,DEVADDR REAL DEVICE ADDRESS @V407466 01180000 STH R1,VIRTADD RADDR=VADDR @V407466 01181000 LTR R14,R10 DO WE HAVE AN R10 VMBLOK @V407466 01182000 BNZ MAXDEV YES, USE IT @V407466 01183000 LR R14,R11 NO, USE R11 THEN @V407466 01184000 USING VMBLOK,R14 JUST BRIEFLY @V407466 01185000 MAXDEV MAXDV R15 HIGHEST VIRTUAL DEVICE PER @V407466 01186000 * USER'S VMBLOK 01187000 CLR R1,R15 IS VIRTUAL DEVICE VALID @V407466 01188000 BH INVADD2 NO, ISSUE ERROR MSG @V407466 01189000 B SCANCOMP OK, KEEP PROCESSING @V407466 01190000 SPACE 2 01191000 MAXRANGE L R1,DEVADDR FIRST VIRTUAL DEVICE ADDRESS @V407466 01192000 B CHKMAX VERIFY MAX VIRTUAL DEVICE ADDRESS@V407466 01193000 SPACE 2 01194000 MAXMULT L R1,FFS FENCE @V407466 01195000 ST R1,4(R4) INDICATE END OF MULT ADDRESSES @V407466 01196000 LR R4,R3 POINT TO BEG OF FREE STORAGE AREA@V407466 01197000 L R1,MULTADD FIRST MULTIPLE ADDRESS @V407466 01198000 B CHKMAX BRANCH TO VERIFY DEVICE ADDRESS @V407466 01199000 SPACE 2 01200000 MULTINC LA R4,4(,R4) POINT TO NEXT MULT ADDRESS @V407466 01201000 L R1,MULTADD PICK UP THE ADDRESS @V407466 01202000 C R1,FFS ANYMORE ADDRESSES? @V407466 01203000 BNE CHKNEXT VERIFY NEXT ADDRESS IN RANGE @V407466 01204000 LR R4,R3 RESTORE R4 TO BEGINNING @V407466 01205000 B SCANCOMP NO MORE, GO PROCESS THE COMMAND @V407466 01206000 SPACE 2 01207000 INCREMRA LA R1,1(,R1) NEXT ADDRESS IN RANGE @V407466 01208000 CH R1,VDCBITS+2 COMPARE WITH HIGHEST RANGE @V407466 01209000 * ADDRESS 01210000 BC 2,SCANCOMP END OF RANGE, RETURN TO MAINLINE @V407466 01211000 B CHKNEXT VERIFY NEXT ADDRESS IN RANGE @V407466 01212000 SPACE 2 01213000 * HERE FOR AN ATTACH TO USERID AND WE HAVE A VADDR FIELD 01213010 SPACE 01213020 CVTVADD EQU * @V60B6B8 01214000 TM SAVEWRK9,VADDPRES DO WE HAVE VADDR? @VA12315 01214500 BO INVOPTS YES... TUT,TUT @VA12315 01214600 CL R0,F3 CHECK OPERAND LENGTH @V60B6B8 01215000 BH INVADD2 INVALID ADDRESS @VA14002 01216700 CALL DMKCVTHB CONVT VIRTUAL ADDR TO BINARY @V60B6B8 01217000 BNZ INVADD2 INVALID ADDRESS. @VA12315 01218100 OI SAVEWRK9,VADDPRES WE HAVE VADDR. @VA12315 01218200 STH R1,VIRTADD SET VIRT ADDRESS. @VA12315 01218300 CHKMAX LTR R14,R10 DO WE HAVE AN R10 VMBLOK? @V407466 01222000 BNZ CHKMAXDV YES - USE IT @V407466 01223000 LR R14,R11 NO - USE R11, THEN @V407466 01224000 CHKMAXDV MAXDV R15 HIGHEST VIRTUAL DEVICE PER @V407466 01225000 * USER'S VMBLOK 01226000 DROP R14 (BACK TO NORMAL) @V407466 01227000 CHKNEXT CLR R1,R15 IS VIRTUAL DEVICE VALID ? @V407466 01228000 BH INVADD2 NOPE @V407466 01229000 TM VDCBITS,RANGE RANGE SPECIFIED @V407466 01230000 BO INCREMRA PROCESS NEXT ADDRESS IN RANGE @V407466 01231000 TM VDCBITS,MULTR MULTIPLE RADDR FIELDS @V407466 01232000 BO MULTINC PROCESS NEXT ADDRESS @V407466 01233000 CALL DMKSCNFD SEE IF "R/O" GIVEN @V407466 01234000 BNZ SCANCOMP 'ATTACH' - EVERYTHING IS READY @V407466 01235000 B CHKRO GO CHECK OUT THE OPTIONS @VA11388 01236010 SPACE 01256000 TSTCHAN CLC 0(*-*,R1),=C'CHANNEL' FOR ATTACH/DETACH @V407466 01257000 FINDTO CLC 0(*-*,R1),=C'TO ' OPTIONAL WORDS @VA10197 01258100 FINDAS CLC 0(*-*,R1),=C'AS ' ........ @VA10197 01259100 FNDFROM CLC 0(*-*,R1),=C'FROM' ... @V407466 01260000 MVCUSER MVC CMDUSER(*-*),0(R1) MOVE USERID TO WORK AREA @V407466 01261000 MVCVOL MVC SAVEWRK6(0),0(R1) MOVE VOLID TO SAVE AREA @V60B6B8 01262000 VIRTCOMP DC CL5'3330V' POSSIBLE PARAMETER @V60B6B8 01263000 SPACE 01264000 DASH DC C'-' RANGE DELIMITER @V407466 01265000 BLANK EQU X'40' RANGE DELIMITER @V407466 01266000 SPACE 01267000 * FLAGS DEFINED IN VDCBITS: 01268000 CHANNEL EQU X'80' CHANNEL OPTION SPECIFIED @V407466 01269000 VDETACH EQU X'02' DETACH VIRTUAL DEVICE @V407466 01270000 ATTSYST EQU X'10' ATTACH TO/FROM SYSTEM @V407466 01271000 ATTREAD EQU X'08' ATTACH R/O @V407466 01272000 * FLAGS DEFINED IN VDCBITS+1: 01273000 DETACH EQU X'08' DETACH REQUEST @V407466 01274000 TPNORUN EQU X'01' DONT RUN TAPE HRC003DK 01274500 * FLAGS DEFINED IN SAVEWRK9: 01275000 VIRTPRES EQU X'40' '3330V' PRESENT ON INPUT @V60B6B8 01276000 VOLPRES EQU X'80' 'VOLID' PRESENT ON INPUT @V60B6B8 01277000 VADDPRES EQU X'20' VIRT. ADDR. PRESENT @VA12315 01277100 EJECT 01278000 INVOPTS LA R2,RC28 INVALID OPTION @V407466 01279000 LR R13,R5 RELOAD SAVE AREA POINTER @V407490 01280000 STM R0,R1,SAVER0 RETURN REGS 0&1 TO CALLER @V407490 01281000 B VDCRET RETURN TO DMKVDA @V407466 01282000 SPACE 01283000 INVADD2 LA R2,RC36 INVALID VADDR @V407466 01284000 B VDCRET RETURN TO DMKVDA @V407466 01285000 SPACE 01286000 INVOLID LA R2,RC40 VOLID INVALID @V407466 01287000 B VDCRET RETURN TO DMKVDA @V407466 01288000 SPACE 01289000 NOTLOGD LA R2,RC44 USER NOT LOGGED ON @V407466 01290000 B VDCRET RETURN TO DMKVDA @V407466 01291000 SPACE 2 01292000 INVUSID LA R2,RC48 INVALID USERID @V407466 01293000 B VDCRET RETURN TO DMKVDA @V407466 01294000 SPACE 01294200 INVTRACE EQU * @VA09655 01294400 LA R2,RC72 RETURN CODE TO VDD @VA09655 01294600 B VDCRET RETURN TO VDD @VA09655 01294800 SPACE 01295000 INVADD1A EQU * INVALID RADDR @V407490 01296000 LR R2,R6 PICK UP COUNT OF TOTAL FIELD @V407490 01297000 L R1,BUFNXT GET UPDATED BUFFER ADDR @V407490 01298000 SR R1,R2 GET START OF BAD FIELD @V407490 01299000 B INVADD1C GO SAVE BAD PARM @V407490 01300000 SPACE 01301000 INVADD1B L R1,BUFNXT GET UPDATED BUFFER ADDR @V407490 01302000 SR R1,R0 START OF PREVIOUS FIELD @V407490 01303000 INVADD1C BCTR R0,0 DECREMENT FOR EXECUTE @V407490 01304000 LTR R2,R0 MOVE COUNT FOR EXECUTE @V407490 01305000 BNM CKSIZE BR IF COUNT IS POSITIVE @V407490 01306000 L R2,F0 SET COUNT TO MOVE ONE CHAR. @V407490 01307000 CKSIZE CL R2,F7 SIZE > 8 CHARACTERS?? @V407490 01308000 BNH SIZEOK BR IF 8 OR LESS @V407490 01309000 L R2,F7 SET COUNT TO MOVE 8 (MAX) @V407490 01310000 SIZEOK EX R2,MVCUSER SAVE INVALID FIELD @V407490 01311000 INVADD1 LA R2,RC52 INVALID RADDR @V407466 01312000 VDCRET EQU * @V407490 01313000 LR R13,R5 RESTORE SAVE AREA ADDRESS @V407466 01314000 BADRC ST R2,SAVER2 ERROR RETURN CODE @V407466 01315000 LCR R2,R2 PLUS TO MINUS SETS COND. CODE @V407466 01316000 B VDCEXIT2 RETURN TO DMKVDA @V407466 01317000 SPACE 2 01318000 SCANCOMP SR R0,R0 CLEAR ZERO RETURN CODE @V407466 01319000 LR R13,R5 RESTORE R5 SAVE AREA ADDRESS @V407466 01320000 ZERORC ST R0,SAVER2 PASS BACK ZERO RETURN CODE @V407466 01321000 VDCEXIT2 STM R10,R11,SAVER10 RETURN R10, R11 TO CALLER @V407466 01322000 EXIT @V407466 01323000 EJECT 01324000 * TEST TO SEE IF R/O VOLID OR 3330V PARAMETERS ARE 01325010 * PRESENT, WHICH INDICATE THE COMMAND MAY PERTAIN 01328000 * TO MSS VUA'S. 01329000 * 01330000 * NOTE: IF THE SYSTEM AND VOLID PARMS ARE PRESENT, THEN 01331000 * THE VOLID IS STORED IN FIELD CMDUSER (SAVEWRK3-4) 01332000 * IF THE 'USERID' AND 'VOLID' PARMS ARE PRESENT, THEN 01333000 * THE VOLID IS STORED IN FIELD SAVEWRK6. 01334000 * 01335000 CHKRO DS 0H @VA11388 01336050 CL R0,F3 IS THIS GREATER THAN THREE CHARS @VA11388 01336100 BH CHKMSS ITS HIGHER THAN CHECK THE OTHERS @VA11388 01336150 BNE CHKRRR AND ITS NOT EQUAL @VA11388 01336200 CLC 0(3,R1),=C'R/O' IS IT REALLY R/O ? @VA11388 01336250 SETREAD DS 0H @VA11388 01336300 BNE CVTVADD COULD BE VIRT ADDR @VA12315 01336355 TM VDCBITS,ATTREAD WE ALREADY FIND R/O OPT ? @VA11388 01336400 BO INVOPTS YES THIS IS INVALID @VA11388 01336450 OI VDCBITS,ATTREAD INDICATE WE GOT R/O OPTION @VA11388 01336500 B NEXTOPTN GO GET THE NEXT ONE @VA11388 01336550 CHKRRR DS 0H @VA11388 01336600 CLI 0(R1),C'R' IS IT THE ABBREVIATION ? @VA11388 01336750 B SETREAD CONTINUE FOR CHECK @VA11388 01336800 SPACE 01336850 CHKMSS DS 0H @VA11388 01336900 CLC 0(5,R1),=C'3330V' IS IT 3330V OPTION @VA11388 01337050 BNE CHKVOL NO GO HANDLE AS VOLID @VA11388 01337100 TM SAVEWRK9,VIRTPRES WE ALREADY GET 3330V ? @VA11388 01337150 BO INVOPTS YES DONT NEED TWO @VA11388 01337200 OI SAVEWRK9,VIRTPRES INDICATE WE GOT THIS ONE @VA11388 01337250 B NEXTOPTN GO GET SOME MORE @VA11388 01337300 SPACE 01337350 CHKVOL DS 0H @VA11388 01337400 TM VDCBITS,RANGE+MULTR IS IT FOR RANGE OR MULTIS ? @VA11388 01337450 BM INVOPTS YES SHOULDNT BE THIS FAR PAL @VA11388 01337500 TM SAVEWRK9,VOLPRES WE ALREADY DO A VOLID ? @VA11388 01337550 BO INVOPTS IF YES, INVALID OPTION @VA14002 01337610 CLC 0(5,R1),=CL5'VOLID' IS IT VOLID? @VA12315 01337655 BE MSSVOL GET VOLID @VA12315 01337660 TM SAVEWRK9,VADDPRES IS VIRT ADDRESS IND ON? @VA12315 01337665 BZ INVADD2 INVALID ADDRESS @VA12315 01337670 B INVOPTS IF NOT... INVALID OPTION @VA12315 01337675 MSSVOL EQU * @VA12315 01337680 CALL DMKSCNFD GET VOLID @VA12315 01337685 BNZ INVOLID NONE....INVALID VOLID @VA12315 01337690 OI SAVEWRK9,VOLPRES INDICATE WE GOT IT @VA14002 01337697 CL R0,F6 GREATER THAN 6 CHARS ? @VA11388 01337700 BH INVOLID YES...WRONG VOLID @VA12315 01337760 LR R2,R0 INIT THE LENGTH @VA11388 01337800 BCTR R2,0 DECREMENT IT @VA11388 01337850 MVC SAVEWRK6(6),BLANKS BLANK BEFORE SAVING VOLSER @VA11886 01337870 EX R2,MVCVOL MOVE IT INTO SAVEWRK6 @VA11388 01337900 SPACE 01337950 NEXTOPTN DS 0H @VA11388 01338000 CALL DMKSCNFD GO GET THE NEXT LITTLE BEAUTY @VA11388 01338050 BZ CHKRO BEGIN THE SEARCH @VA11388 01338100 TM VDCBITS,MULTR WAS IT MULTIS @VA11388 01338150 BO MAXMULT YES GO TO ITS SPECIAL PLACE @VA11388 01338200 TM VDCBITS,RANGE WAS IT RANGE TYPE @VA14002 01338210 BO MAXRANGE GO THERE ALSO @VA14002 01338220 TM SAVEWRK9,VADDPRES IS VIRT ADDRSS PRESENT ? @VA12315 01338260 BO VADDOK YES.. IT'S ALRIGHT @VA12315 01338310 MVC VIRTADD(2),DEVADDR+2 PUT ONE THERE @VA11388 01338400 VADDOK DS 0H @VA11388 01338450 B SCANCOMP ELSE WE'S ALL DONE JACK @VA11388 01338600 EJECT 01364000 LTORG @V407466 01365000 EJECT 01366000 COPY SAVE @V407466 01367000 COPY IOBLOKS @V407466 01368000 COPY CONBUF @V407490 01369000 SPACE 01370000 VDCBITS EQU SAVEWRK1 FLAGS USED WITHIN VDA @V407466 01371000 DEVADDR EQU SAVEWRK2 REAL DEVICE ADDRESS @V407466 01372000 CMDUSER EQU SAVEWRK3 AND SAVEWRK4 - USERID @V407466 01373000 VIRTADD EQU SAVEWRK1+2 VIRTUAL DEVICE ADDRESS @V407466 01374000 SPACE 1 01375000 MB35 EQU 348 3340/44 35MB CYLINDERS @V56BDA8 01376000 MB70 EQU 696 3340/44 70MB CYLINDERS @V56BDA8 01377000 SPACE 01378000 TEMP EQU X'08' TEMP SPACE @VM00019 01379000 SPACE 01380000 SPACE 2 01381000 VDCLOK DSECT , DSECT FOR EXPANDED IOBLOK @V407466 01382000 DS (IOBSIZE)D @V407466 01383000 VDCLCCW DS 7D .... @V407466 01384000 * SEEK, TIC, NOP, SEARCH, TIC, READ SENSE @V407466 01385000 VDCLCNT DS 1D SEEK AND SEARCH ARGS @V407466 01386000 VDCLBUF DS 10D 80-BYTE LABEL-RECORD BUFFER @V407466 01387000 VDCLSNS DS 4D 32-BYTE SENSE AREA @V407466 01388000 VDCLLEN EQU (*-VDCLOK)/8 BLOCK LENGTH IN DBL-WDS @V407466 01389000 EJECT 01390000 MDSECT DSECT @V407466 01391000 MULTADD DS F ADDRESS @V407466 01392000 DS 47F UP TO 48 CCU ON ONE COMMAND LINE @V407466 01393000 DS 4D ... @V407466 01394000 MULTSIZE EQU (*-MULTADD)/8 @V407466 01395000 SPACE 01396000 VDCWORK DSECT @V407466 01397000 VDCVDEV DS H VDEVBLOK COUNT TO BE ATTACHED @V407466 01398000 VDCVCH DS H REQUIRED NUMBER VCHBLOKS @V407466 01399000 VDCVCU DS H REQUIRED NUMBER VCUBLOKS @V407466 01400000 VDCVCUE DS H EMPTY VCUBLOK SLOTS @V407466 01401000 VDCVCHE DS H EMPTY VCHBLOK SLOTS @V407466 01402000 SPACE 01403000 VDCVDEVE DS H EMPTY VDEVBLOK SLOTS @V407466 01404000 VDCCHMAP DS H CHANNEL BIT MAP @V407466 01405000 VDCCUMAP DS 16H CONTROL UNIT BIT MAP @V407466 01406000 VDCFLAG DS X BUILD BLOK FLAG @V407466 01407000 DS X RESERVED FOR IBM USE @V407466 01408000 VDCSIZE EQU (*-VDCWORK+7)/8 @V407466 01409000 SPACE 01410000 * FLAGS DEFINED IN VDCFLAG 01411000 DEVBLD EQU X'80' BUILDING VDEVBLOKS @V407466 01412000 CUBLD EQU X'40' BUILDING VCUBLOKS @V407466 01413000 SPACE 01414000 VDCBYTE1 EQU SAVEWRK1 FLAG INDICATING MULT/RANGE @V407466 01415000 VDCBYTE2 EQU SAVEWRK1+1 @V407466 01416000 VDCRADD2 EQU SAVEWRK1+2 SECOND RADDR IN RANGE @V407466 01417000 VDCRADD1 EQU SAVEWRK2 FIRST RADDR IN RANGE @V407466 01418000 VDCUSER EQU SAVEWRK3 USERID ASSOCIATED WITH ATTACH @V407466 01419000 VDCVADD EQU SAVEWRK5 VIRTUAL ADDRESS @V407466 01420000 * 01421000 * FLAGS DEFINED IN VDCBYTE1 01422000 * 01423000 SPACE 01424000 MULTR EQU X'20' MULTIPLE ADDRESSES ON ATTACH @V407466 01425000 RANGE EQU X'04' ADDRESS RANGE ON ATTACH @V407466 01426000 ATTCTCA EQU X'02' ATTACHING CTCA @V407466 01427000 DED2305 EQU X'01' 2305 MULTIPLE EXPOSURE DEVICE @V407466 01428000 SPACE 01429000 * RETURN CODES PASSED BACK TO DMKVDA 01430000 SPACE 01431000 RC28 EQU 28 @V407466 01432000 RC36 EQU 36 INVALID VADDR @V407466 01433000 RC40 EQU 40 INVALID VOLID @V407466 01434000 RC44 EQU 44 USER NOT LOGGED ON @V407466 01435000 RC48 EQU 48 INVALID USERID @V407466 01436000 RC52 EQU 52 INVALID RADDR @V407466 01437000 RC72 EQU 72 USER IS TRACING I/O @VA09655 01437500 SPACE 01438000 BASEXP EQU X'07' 2305 BASE EXPOSURE @V407466 01439000 EJECT 01440000 COPY VMBLOK @V407466 01441000 COPY VBLOKS @V407466 01442000 COPY IOER @V407466 01443000 COPY EQU @V407466 01444000 COPY DEVTYPES @V407466 01445000 PSA @V407466 01446000 COPY RBLOKS @V407466 01447000 COPY ALLOC @V407466 01448000 END DMKVDC 01449000