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