VDA TITLE 'DMKVDA (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
* DMKVDA 00008000
* 00009000
* FUNCTION - 00010000
* TO 'ATTACH' A REAL DEVICE TO A USER AS A VIRTUAL DEVICE, 00011000
* OR TO DEDICATE ALL DEVICES ON A PARTICULAR CHANNEL TO A 00012000
* SPECIFIED USER. 00013000
*. 00014000
SPACE 2 00015000
DMKVDA START 00016000
SPACE 00017000
DC CL8'DMKVDA' MODULE IDENTIFICATION @V407466 00018000
SPACE 00019000
USING PSA,R0 @V407466 00020000
USING VMBLOK,R11 @V407466 00021000
USING SAVEAREA,R13 @V407466 00022000
SPACE 00023000
EXTRN DMKCVTBH @VA13651 00024000
EXTRN DMKSCNRU,DMKSCNVU @VA13651 00025000
EXTRN DMKSCNVS,DMKSCNRN,DMKSCNAU @V407466 00026000
EXTRN DMKLOCKQ,DMKLOCKD,DMKVDSAT @V407466 00027000
EXTRN DMKVCHDC @VA13651 00028000
EXTRN DMKSSSVA,DMKSSSAS,DMKSTKCP @V60B6B8 00030000
EXTRN DMKVDCPS,DMKVDCAL,DMKVDCSC @V407466 00031000
EXTRN DMKSYSOW,DMKSYSOC @V407466 00032000
EXTRN DMKVDEDC READ LABEL/ALLOC RECORD @V407466 00033000
EXTRN DMKVDERR ERROR MESSAGE ROUTINE @VA13651 00033500
*. 00034000
* 00035000
* COMMAND LINE FORMAT - 00036000
* 00037000
* +--------+-----------------------------------------------+ 00038000
* | | | 00039000
* | ATTACH | RADDR <TO> USERID <AS> <VADDR> <R/O> | 00040000
* | | <3330V> <VOLID XXXXXX> | 00040500
* | | RADDR <TO> SYSTEM <AS> VOLID | 00041000
* | | RADDR1-RADDR2 <TO> USERID <R/O> | 00042000
* | | RADDR1 RADDR2 ... <TO> USERID <R/O> | 00043000
* | | | 00044000
* | | CHANNEL X <TO> USERID | 00045000
* | | | 00046000
* +--------+-----------------------------------------------+ 00047000
* 00048000
* ATTRIBUTES - 00049000
* 00050000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00051000
* 00052000
* ENTRY CONDITIONS - 00053000
* 00054000
* GPR 2 = 0 00055000
* GPR 9 = ADDRESS OF COMMAND BUFFER 00056000
* GPR 11 = ADDRESS OF CALLER'S VMBLOK 00057000
* GPR 12 = ADDRESS OF DMKVDAAT 00058000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00059000
* 00060000
* EXIT CONDITIONS - 00061000
* 00062000
* GPR 2 = 0 IF DEVICE HAS BEEN ATTACHED, OR 00063000
* ERROR-CODE (SEE ERROR MESSAGES) IF UNSUCCESSFUL. 00064000
* 00065000
* CALLS TO OTHER ROUTINES - 00066000
* 00067000
* DMKSSSVA 00068000
* DMKSSSAS 00069000
* DMKSTKCP 00070000
* DMKSCNRN 00072000
* DMKSCNRU 00074000
* DMKSCNAU 00075000
* DMKSCNVU 00076000
* DMKSCNVS 00077000
* DMKVDSAT 00078000
* DMKCVTBH 00079000
* DMKQCNWT 00080000
* DMKFREE 00081000
* DMKLOCKQ - LOCK USERID 00082000
* DMKLOCKD - UNLOCK USERID 00083000
* DMKVCHDC 00084000
* DMKVDCPS - PRESCAN 00085000
* DMKVDCAL - ALLOCATION ROUTINE 00086000
* DMKVDCSC - SCAN COMMAND LINE 00087000
* DMKSYSOW 00088000
* DMKSYSOC 00089000
* DMKVDERR - PUT OUR 'ATTACH' ERROR MESSAGES 00089500
* DMKVDEDC - READ LABEL/ALLOCATION RECORD 00090000
* 00091000
* EXTERNAL REFERENCES - 00092000
* 00093000
* DMKSYSOW - OWNED LIST START 00094000
* DMKSYSOC - COUNT OF OWNED LIST VOLUMES 00094500
* 00095000
* TABLES / WORK AREAS - 00096000
* 00097000
* VMBLOK 00098000
* UDEVBLOK (DUMMY FOR USE BY DMKVDSAT SUBROUTINE) 00099000
* ATTMSG - WORK AREA FOR RANGE MESSAGES 00100000
* MDSECT - WORK AREA FOR MULTIPLE DEVICE ADDRESSES 00101000
* 00102000
* REGISTER USAGE - 00103000
* 00104000
* GPR 8 = ADDRESS OF RDEVBLOK 00105000
* GPR 9 = ADDRESS OF COMMAND BUFFER 00106000
* GPR 10 = ADDRESS OF VMBLOK FOR ATTACHED-TO USER 00107000
* GPR 11 = ADDRESS OF CALLER'S OR USER'S VMBLOK 00108000
* GPR 12 = BASE REGISTER 00109000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00110000
* 00111000
* GPRS 0-7 AND 14-15 ARE WORK REGISTERS. 00112000
* 00113000
* 00114000
* OPERATION - 00115000
* 00116000
* 1. THE INPUT LINE IS SCANNED VIA A CALL TO DMKVDCSC. 00117000
* DMKVDCSC WILL SCAN THE COMMAND LINE VIA DMKSCNFD AND DMKCVTHB 00118000
* TO OBTAIN AND CONVERT FROM HEX TO BINARY (WHERE APPROPRIATE) 00119000
* THE REAL DEVICE, USERID, AND VIRTUAL DEVICE. IF ANY FIELDS 00120000
* ARE OMITTED OR INVALID, AN ERROR CODE IS RETURNED TO THE 00121000
* CALLER AND DMKVDA WILL ISSUE AN APPROPRIATE ERROR MESSAGE 00122000
* BASED ON THE RETURN CODE RECEIVED. DMKCFCSC IS CALLED BY 00123000
* DMKVDCSC TO SCAN THE FIRST COMMAND OPERAND TO DETERMINE IF 00124000
* A RANGE OF REAL DEVICE ADDRESSES WAS SPECIFIED. IF MULTIPLE 00125000
* ADDRESSES ARE SPECIFIED ON THE COMMAND LINE, A WORK AREA 00126000
* IS OBTAINED AND ALL MULTIPLE REAL ADDRESSES ARE STORED IN 00127000
* BINARY FORM IN THIS WORK AREA FOR LATER PROCESSING. 00128000
* 00129000
* 2. DMKVDCPS WILL BE CALLED TO PERFORM A PRESCAN WHEN A RANGE 00130000
* OF REAL ADDRESSES OR MULTIPLE REAL ADDRESSES WERE SPECIFIED 00131000
* ON THE COMMAND LINE. THE PURPOSE OF THE PRESCAN IS TO 00132000
* DETERMINE THE NUMBER OF REAL DEVICES WHICH ARE LIKELY TO BE 00133000
* ATTACHED ON THIS COMMAND EXECUTION AND TO ACQUIRE STORAGE 00134000
* FOR VIRTUAL BLOCKS IN ADVANCE TO MINIMIZE REPEATED CALLS 00135000
* TO DMKFRE LATER BY DMKVDS. DMKVDCPS WILL BE CALLED ONLY 00136000
* WHEN MULTIPLE REAL ADDRESSES OR A RANGE OF REAL ADDRESSES 00137000
* WERE SPECIFIED ON THE COMMAND LINE. 00138000
* 00139000
* 3. DMKSCNRU IS CALLED TO FIND RDEVBLOK FOR THE REAL DEVICE 00140000
* (ERROR RETURNED IF NOT FOUND). DMKSCNAU IS CALLED TO FIND 00141000
* THE ACTIVE USER FOR WHOM THE ATTACH IS SPECIFIED (ERROR 00142000
* RETURNED IF HE IS NOT LOGGED ON). DMKSCNVU IS CALLED TO 00143000
* ENSURE THAT THE VIRTUAL DEVICE DOES NOT ALREADY EXIST 00144000
* (ERROR RETURNED IF IT DOES). 00145000
* 00146000
* 4. A CALL IS MADE TO DMKVDEDC TO VERIFY DEVICE 00147000
* EXISTENCE. SETS UP AN I/O TASK (TIO) TO SEE IF 00148000
* THE DEVICE EXISTS. IF THE DEVICE DOES NOT EXIST, 00149000
* IT IS MARKED OFFLINE AND A 'DOES NOT EXIST' MESSAGE 00150000
* IS ISSUED FROM DMKVDA. 00151000
* 00152000
* FOR DASD, DMKVDEDC WILL SET UP AND EXECUTE AN 00153000
* I/O TASK TO READ THE DASD VOLUME LABEL OF THE DEVICE 00154000
* BEING ATTACHED. IF SUCCESSFUL, THE VOLUME SERIAL 00155000
* IS INSERTED INTO THE 'RDEVSER' FIELD OF THE REAL 00156000
* DEVICE BLOCK. AN ERROR RETURN CODE IS PASSED BACK TO 00157000
* DMKVDA IF FAILURE ENCOUNTERED ON THE READ. A FLAG 00158000
* IS SET IF IT IS A CP/370 OWNED VOLUME. 00159000
* IF DMKVDEDC WAS CALLED WITH PARM = 1, INDICATING 00160000
* ALLOCATION DATA IS PRESENT, THE ALLOCATION 00161000
* RECORD IS READ INTO FREE STORAGE. 00162000
* 00163000
* 5. IF THESE TESTS ARE SATISFACTORY, THEN DMKVDSAT IS CALLED 00164000
* TO ATTACH THE GIVEN REAL DEVICE AS A VIRTUAL DEVICE. IF AN 00165000
* ERROR RETURN OCCURS FROM DMKVDSAT, THEN THE ERROR CODE IS 00166000
* RETURNED TO THE CALLER OF DMKVDAAT AND AN ERROR MESSAGE IS 00167000
* SENT. 00168000
* 00169000
* 6. IF DMKVDSAT WAS SUCCESSFUL, A MESSAGE IS 00170000
* SENT TO THE USER INDICATING THE DEVICE HAS BEEN ATTACHED; 00171000
* AN ADDITIONAL MESSAGE IS SENT TO THE CALLER INDICATING THAT 00172000
* THE DEVICE HAS BEEN ATTACHED. IF THE CALLER IS NOT THE 00173000
* SYSTEM OPERATOR, A MESSAGE IS SENT TO THE SYSTEM OPERATOR 00174000
* INDICATING WHAT DEVICE WAS ATTACHED BY WHAT CALLER TO WHAT 00175000
* USER. 00176000
* 00177000
* 7. PROCESSING WILL CONTINUE IF AN ERROR IS ENCOUNTERED WHILE 00178000
* PROCESSING MULTIPLE REAL ADDRESSES OR A RANGE. AN ERROR 00179000
* MESSAGE WILL BE ISSUED FOR THE DEVICE ADDRESSES IN ERROR. 00180000
* A RESPONSE TYPE MESSAGE WILL ALSO BE ISSUED FOR THOSE REAL 00181000
* ADDRESSES IN THE RANGE WHICH COULD BE ATTACHED OR THOSE 00182000
* MULTIPLE ADDRESS IN THE COMMAND LINE WHICH COULD BE 00183000
* ATTACHED. 00184000
* 00185000
* 8. FOR THE ATTACH CHANNEL COMMAND, A CHECK IS MADE TO ENSURE 00186000
* THAT THE COMMAND LINE IS CORRECT VIA A CALL TO DMKVDCSC. 00187000
* DMKVCHDC IS THEN CALLED TO ATTACH THE CHANNEL AND MARK ALL 00188000
* CONTROL UNITS AND DEVICES ON THE CHANNEL AS DEDICATED. 00189000
* 00190000
* RESPONSES - 00191000
* 00192000
* 'TYPE VADDR ATTACHED' 00193000
* OR 00194000
* 'DASD VADDR ATTACHED R/O' (IF READONLY OPTION WAS SPECIFIED) 00195000
* 00196000
* 'TYPE RADDR ATTACH TO $USERID$ VADDR' 00197000
* 00198000
* 'TYPE RADDR ATTACH TO $USERID$ VADDR BY $USERID$' 00199000
* 00200000
* 'DASD RADDR ATTACH TO SYSTEM $VOLID$' 00201000
* 00202000
* 'DASD RADDR ATTACH TO SYSTEM $VOLID$ BY $USERID$' 00203000
* 00204000
* 'RADDR ... ATTACHED' 00205000
* 'RADDR ... ATTACHED TO $USERID$' 00206000
* 'RADDR ... ATTACHED TO $USERID$ BY $USERID$' 00207000
* 00208000
* 'RADDR-RADDR ATTACHED' 00209000
* 'RADDR-RADDR ATTACHED TO $USERID$' 00210000
* 'RADDR-RADDR ATTACHED TO $USERID$ BY $USERID$' 00211000
* 00212000
* 00213000
* ERROR MESSAGES - 00214000
* 00215000
* SEE DMKVDERR FOR ERROR MESSAGE TEXT. 00216000
EJECT 00246000
DMKVDAAT RELOC ATTACH A REAL DEV/CHANNEL TO USER'S VM @V407490 00247000
XC VDABITS(4),VDABITS CLEAR FLAG-BIT WORD @V407466 00248000
* (SAVEWRK1) 00249000
SLR R10,R10 CLEAR R10 FOR LATER @V407466 00250000
SLR R4,R4 CLEAR R4 @V407466 00251000
ST R4,SAVER2 CLEAR R2 FOR ZERO RETURN CODE @V407466 00252000
LA R0,MULTSIZE+MSGSIZE+VOLSIZE LARGE PIECE OF @V60B6B8 00253000
* STORAGE 00254000
CALL DMKFREE GO GET IT @V407466 00255000
LR R4,R1 R4 CONTAINS ADDR OF AREA @V407466 00256000
USING ATTMSG,R4 ESTABLISH ADDRESSABILITY @V407466 00257000
MVI ATTMSG,BLANK PROPAGATE BLANKS THROUGH AREA @V407466 00258000
MVC ATTMSG+1((MULTSIZE*8+MSGSIZE*8)-1),ATTMSG @V407466 00259000
ST R4,SAVEWRK5 SAVE ADDR OF WORKAREA @V407466 00260000
EJECT 00261000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00262000
* DMKVDCSC WILL SCAN THE COMMAND LINE AND PERFORM SYNTAX CHECKING. * 00263000
* R9 POINTS TO THE COMMAND LINE AT ENTRY TO DMKVDCSC. DMKVDCSC WILL * 00264000
* USE THE DMKVDA SAVEAREA TO STORE COMMAND LINE OPERANDS AND FLAGS. * 00265000
* UPON RETURN FROM DMKVDCSC R2 = 0 IF A SUCCESSFUL SYNTAX CHECK WAS * 00266000
* PERFORMED. OTHERWISE R2 WILL CONTAIN THE APPROPRIATE ERROR CODE. * 00267000
* UPON RETURN R4 STILL POINTS TO LARGE WORK AREA. * 00268000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00269000
SPACE 2 00270000
CALL DMKVDCSC SCAN COMMAND LINE @V407466 00271000
LTR R2,R2 ANY SYNTAX ERRORS @V407466 00272000
BNZ ERROR JUMP TO ERROR MESSAGE CODE @V407466 00273000
TM VDABITS,CHANNEL ATTACHING A CHANNEL? @V407466 00274000
BO DEDCHAN YES, TRANSFER TO DMKVCHDC @V407466 00275000
LA R0,MULTSIZE+MSGSIZE CONSTRUCT VOLID OFFSET @V60B6B8 00276000
SLL R0,3 ...NO OF BYTES INTO MSG BUFFER @V60B6B8 00277000
LR R3,R4 BUFFER ADDR @V60B6B8 00278000
AR R3,R0 ACTUAL ADDR OF OFFSET @V60B6B8 00279000
MVC 0(VOLIDSIZ,R3),SAVEWRK6 VOLID SET BY DMKVDCSC @V60B6B8 00280000
LR R3,R4 WORK AREA ADDR TO R3 @V407466 00281000
TM VDABITS,MULTR MULTIPLE ADDRESSES ON COMMAND @V407466 00282000
BO GOODCMD2 YES, PREPARE FOR PRESCAN @V407466 00283000
TM VDABITS,RANGE MULTIPLE ADDRESSES ON COMMAND @V407466 00285000
BO GOODCMD YES, RANGE PROCESSING @V407466 00286000
LH R1,VIRTADD VIRTUAL ADDR TO R1 IF SINGLE @V407466 00287000
MVC SAVEWRK5(FLAGLEN),SAVEWRK9 SAVE FLAG SET IN DMKVDC 00287100
TM VMOSTAT,VMSYSOP THE SYSTEM OPERATOR @V407466 00288000
BO PROCESS YES @V407466 00289000
OI VDABITS,NSYSOP ATTACH BY OTHER THAN PRIMARY OP. @V407466 00290000
B PROCESS KEEP PROCESSING SINGLE ADDR @V407466 00291000
SPACE 2 00292000
GOODCMD EQU * SCAN DID NOT FAIL @V407466 00293000
SLR R3,R3 ZERO R3 TO INDICATE RANGE @V407466 00294000
GOODCMD2 EQU * ENSURE PARAMETER VALIDITY @V60B6B8 00295000
TM SAVEWRK9,VOLPRES WAS 'VOLID' PRESENT WITH @V60B6B8 00296000
* RANGE OR MULT 00297000
BO MSG076 YES, INVALID, SET UP ERROR MSG @VMI2020 00298000
BAL R5,SWPUSER SWITCH TO ATTACHEE'S VMBLOK @V60B6B8 00299000
BAL R5,LOKUSER LOCK USER'S DEVICE BLOCKS @V407466 00300000
BAL R5,SWPCALL BACK TO CALLER'S VMBLOK @V407466 00301000
EJECT 00302000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00303000
* R3 POINTS TO FREE STORAGE CONTAINING MULTIPLE ADDRESSES. * 00304000
* IF R3 = 0, THEN DMKVDCPS IS PROCESSING A RANGE OF ADDRESSES. * 00305000
* R2 UPON RETURN CONTAINS AN ERROR CODE IF APPROPRIATE. * 00306000
* R4 REMAINS UNCHANGED ACROSS THE CALL TO DMKVDCPS. * 00307000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00308000
SPACE 2 00309000
CALL DMKVDCPS DO PRESCAN FOR RANGE/MULTIPLES @V407466 00310000
CH R2,=H'124' EXCEEDED MAX DEVICES? @VA13217 00310300
BE ERR153 YES - ISSUE ERROR MSG @VA13217 00310600
LTR R2,R2 INSUFFICIENT STORAGE FOR REQUEST @V407466 00311000
BNZ ERROR JUMP TO ERROR MSG CODE IF SO @V407466 00312000
LA R0,MULTSIZE+MSGSIZE LENGTH OF MSG BUFFER @V60B6B8 00313000
L R15,SAVEWRK5 BUFFER ADDR @VMI2002 00314000
SLL R0,3 MSG BUFFER LENGTH IN BYTES @V60B6B8 00315000
AR R15,R0 BUMP OVER MSG BUFFER @VMI2002 00316000
MVC 0(VOLIDSIZ,R15),SAVEWRK3 VOLID IF PASSED FROM @VMI2002 00317000
* DMKVDC 00318000
TM VMOSTAT,VMSYSOP THE SYSTEM OPERATOR ???? @V407490 00319000
BO ATTSYSOP YES, GO CONTINUE PROCESSING @V407490 00320000
OI VDABITS,NSYSOP ATTACH BY OTHER THAN PRIMARY OP @V407490 00321000
ATTSYSOP EQU * @V407490 00322000
MVC SAVEWRK5(FLAGLEN),SAVEWRK9 SAVE FLAG SET IN @VA10488 00322100
* DMKVDC 00322200
TM VDABITS,RANGE PROCESSING RANGE @V407466 00323000
BNO CHKMULT NO, SEE IF MULTIPLE ADDRESSES @V407466 00324000
L R1,DEVADDR RADDR1 IN RANGE @V407466 00325000
PROCESS DS 0H @V4M0193 00326000
LR R9,R1 SAVE R1 @V4M0193 00327000
BAL R5,SWPCALL SWITCH BACK TO CALLER'S VMBLOK @V4M0193 00328000
LR R1,R9 RESTORE R1 @V4M0193 00329000
LA R9,SAVEWRK6 SAVEWRK6,7,8 = UDEVBLOK @V407466 00330000
USING UDEVBLOK,R9 @V407466 00331000
MVC UDEVBLOK(12),ZEROES CLEAR TO ZERO @V407466 00332000
STH R1,UDEVADD ... INTO UDEVBLOK @V407466 00333000
BAL R5,GETRDEV GET RDEVBLOK @V407466 00336000
USING RDEVBLOK,R8 @V407466 00337000
CLI RDEVTYPC,CLASDASD IS THIS DASD DEVICE @V60B6B8 00338000
BNE TSTDISA NO, CONTINUE @V60B6B8 00339000
CLI RDEVTYPE,TYP3330 IS IT A 3330 DASD @V60B6B8 00340000
BNE TSTDISA NO, CONTINUE @V60B6B8 00341000
TM RDEVFTR,VIRTUAL+SYSVIRT IS IT AN MSS VUA @V60B6B8 00342000
BZ TSTDISA NO, CONTINUE @V60B6B8 00343000
TM VDABITS,ATTSYST ATT TO THE SYSTEM @VMI2002 00346000
BO TSTSYSV YES, TEST DEVICE FEATURE @VMI2002 00347000
TM RDEVFTR,VIRTUAL ATT TO USER, IS RDEV A VIRT @VMI2002 00348000
BZ INVTYPE NO, INVALID DEV TYPE @VMI2002 00349000
B TSTVOLPR DEV TYPE OK, SEE IF SPECIFIC @VMI2002 00350000
* VOL NEEDED 00351000
TSTSYSV EQU * @VMI2002 00352000
TM RDEVFTR,SYSVIRT ATT TO SYS, IS RDEV A SYSV @VMI2002 00353000
BZ INVTYPE NO, INVALID DEV TYPE @VMI2002 00354000
TSTVOLPR EQU * @VMI2002 00355000
TM SAVEWRK5,VOLPRES WAS 'VOLID' PRESENT FOR VUA @VMI2002 00356000
BZ TSTDISA NO, CONTINUE @V60B6B8 00357000
TM PSAMSS,MSSPRES MSS PRESENT IN THIS SYSTEM? @VA09319 00357010
* VMI2040 00357020
BZ TSTDISA NO,DON'T TRY TO CALL DMKSSS @VA09319 00357030
* VMI2040 00357040
L R7,SAVEWRK5 ADDR OF THE NEEDED VOLID @V60B6B8 00358000
LA R7,0(,R7) CLEAR HIGH ORDER BYTE @VA13651 00358500
LA R0,MULTSIZE+MSGSIZE LENG OF MSG AREA IN D-WORDS @V60B6B8 00359000
SLL R0,3 INTO BYTES @V60B6B8 00360000
AR R7,R0 ADDR OF VOLID IF ONE EXISTS @V60B6B8 00361000
CALL DMKSSSVA FIND 'VOLID' FOR VUA @V60B6B8 00362000
LTR R0,R0 WAS THERE AN ERROR @V60B6B8 00363000
BNZ CHKRETC POSSIBLY, TEST RETURN CODE @V60B6B8 00364000
TSTDISA EQU * TEST FOR OFFLINE DEVICE @V60B6B8 00365000
TM RDEVSTAT,RDEVDISA IS DEVICE OFFLINE? @V407466 00366000
BO ERR12 YES - ERROR MESSAGE @V407466 00367000
TM VDABITS,ATTSYST ATTACH TO SYSTEM ? @V407466 00368000
BO ATTVOLD YES @V407466 00369000
TM RDEVSTAT,RDEVDED IS DEVICE ALREADY DED.? @V407466 00370000
BO ERR24 YES, GO INFORM @V407466 00371000
TM RDEVFTR,VIRTUAL THIS AN MSS VIRTUAL VUA? @VA11344 00371100
BNO TSTDISA1 NO - THEN DON'T WORRY @VA11344 00371200
TM SAVEWRK5,VOLPRES VOL PRESENT IN COMMAND? @VA11344 00371300
BO TSTDISA1 YES - THEN DON'T RESET FLAG @VA11344 00371400
NI RDEVFLAG,X'FF'-RDEVVMNT ELSE RESET 'MTD-BY-CP' @VA11344 00371500
TSTDISA1 DS 0H @VA11344 00371600
LA R1,CLASSPEC*256+TYPCTCA CHECK FOR REAL CTCA @V407466 00372000
CH R1,RDEVTYPC TRYING TO ATTACH A CTCA ? @V407466 00373000
BNE NOTCTCA NO -- NORMAL HANDLING @V407466 00374000
OI VDABITS,ATTCTCA NEEDS SOME SPECIAL HANDLING @V407466 00375000
NOTCTCA EQU * TEST FOR DASD READ-ONLY OPTION @V407466 00376000
TM VDABITS,ATTREAD "R/O" SPECIFIED ? @V407466 00377000
BZ NOTREAD NO @V407466 00378000
CLI RDEVTYPC,CLASDASD VALID ONLY FOR DASD DEVICES @V407466 00379000
BE CHKDRUM O.K. AS IT SITS @V407466 00380000
TM VDABITS,RANGE+MULTR RANGE OR MULTIPLE ADDRESSES @V407490 00381000
BM NOTREAD YES, CONTINUE PROCESSING @V407490 00382000
MSG 'R/O' SET REGS FOR ERROR MSG ROUTINE @V407466 00383000
B INVOPTS2 INVALID OPTION @V407466 00384000
CHKRETC EQU * TEST RETURN CODE FROM DMKSSS @V60B6B8 00385000
LA R15,RC4 EXPECTED RC @V60B6B8 00386000
CR R15,R0 COMPARE TO ACTUAL @V60B6B8 00387000
BE SAVEINFO IF RC=4, SAVE PERTINENT INFO @V60B6B8 00388000
B INVTYPE PUT OUT ERROR MESSAGE @V60B6B8 00391000
SAVEINFO EQU * SAVE PERTINENT INFO (FLAGS @V60B6B8 00392000
* ETC.) 00393000
TM MSSFLAG2-OSVSCOM(R1),MSGPROC PCI YET @VA09302 00394000
BZ PCINOW YES, PROCESS @VMI2018 00395000
NI MSSFLAG2-OSVSCOM(R1),X'FF'-MSGPROC @VA09302 00396000
L R3,MSSTASK1-OSVSCOM(R1) SAVE POINTER TO @V60B6B8 00397000
* MSSTASK1 00398000
LA R0,SAVESIZE GET A DUPLICATE SAVE AREA @V60B6B8 00399000
CALL DMKFREE @V60B6B8 00400000
MVC SAVEWRK1-SAVEAREA(4,R1),SAVEWRK1 SAVE FLAGS @V60B6B8 00401000
MVC SAVEWRK2-SAVEAREA(WORKAREA,R1),SAVEWRK2 HOLLY @V60B6B8 00402000
* SAVE REMAINING INFO 00403000
ST R1,CPEXR1-CPEXBLOK(R3) PUT PTR TO INFO IN @V60B6B8 00404000
* MSSTASK1 CPEXBLOK 00405000
B VDAATEXT EXIT FOR NOW, WAIT FOR MSS MOUNT @V60B6B8 00406000
* 00407000
* THE FOLLOWING ROUTINE IS ENTERED AFTER AN MSS VOLUME 00408000
* MOUNT. 00409000
* 00410000
DMKVDAS1 RELOC @V60B6B8 00411000
USING OSVSCOM,R3 GPR 3 WAS SET BY DMKSSS @V60B6B8 00412000
MVC SAVEWRK1,SAVEWRK1-SAVEAREA(R1) RESTORE FLAGS @V60B6B8 00413000
* TO CURRENT SAVEAREA 00414000
MVC SAVEWRK2(WORKAREA),SAVEWRK2-SAVEAREA(R1) @V60B6B8 00415000
* RESTORE OTHER WORKING INFO 00416000
LA R0,SAVESIZE SIZE OF SAVE AREA @V60B6B8 00417000
CALL DMKFRET GIVE IT BACK @V60B6B8 00418000
L R1,MSSTASK3 IS THERE A PENDING I/O @V60B6B8 00419000
LTR R1,R1 REPRESENTED BY A CPEXBLOK @V60B6B8 00420000
BZ FRECOM2 NO @V60B6B8 00421000
CALL DMKSTKCP STACK THE CPEXBLOK FOR THE I/O @V60B6B8 00422000
FRECOM2 EQU * @V60B6B8 00423000
LA R0,MSSSIZE NO OF D-WORDS IN AN MSSCOM @V60B6B8 00424000
LR R1,R3 MSSCOM ADDR @V60B6B8 00425000
CALL DMKFRET RETURN CORE TO THE SYSTEM @V60B6B8 00426000
B TSTDISA AND COMPLETE THE ATTACH @V60B6B8 00427000
PCINOW EQU * MSS VOLUME IS NOW MOUNTED @VMI2018 00428000
L R14,=V(DMKSSSMQ) ADDR OF MSSCOM Q PTR @VMI2018 00429000
L R15,0(R14) FIRST MSSCOM IN Q @VMI2018 00430000
CHKNEXT EQU * SEE IF OUR MSSCOM IS IN Q @VMI2018 00431000
CR R15,R1 IS Q ENTRY OURS? @VMI2018 00432000
BE DEQIT YES, REMOVE IT @VMI2018 00433000
LA R14,MSSNEXT-OSVSCOM(R15) NEXT CHAIN PTR @VMI2018 00434000
L R15,MSSNEXT-OSVSCOM(R15) NEXT MSSCOM @VMI2018 00435000
B CHKNEXT AND CHECK IT @VMI2018 00436000
DEQIT EQU * @VMI2018 00437000
MVC 0(4,R14),MSSNEXT-OSVSCOM(R15) RECHAIN @VMI2018 00438000
LA R0,MSSSIZE SIZE OF THE MSSCOM @VMI2018 00439000
CALL DMKFRET RELEASE IT @VMI2018 00440000
B TSTDISA AND COMPLETE THE ATTACH @VMI2018 00441000
EJECT 00442000
USING MDSECT,R4 @V407466 00443000
CHKMULT L R2,MULTADD FIRST MULTIPLE ADDRESS @V407466 00444000
USING ATTMSG,R4 @V407466 00445000
GOODCMD3 LR R1,R2 DEVICE ADDRESS TO R1 @V407466 00446000
NI VDABITS,X'FF'-DED2305 RESET DRUM FLAG @V407490 00447000
B PROCESS PROCESS MULTIPLE ADDRESSES @V407466 00448000
SPACE 00449000
NOTREAD EQU * @V407466 00450000
CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL DEVICE @V407466 00451000
BNE NOTLINE NO @V407466 00452000
TM RDEVFLAG,RDEVENAB+RDEVPREP IS LINE ACTIVE @V407466 00453000
BNZ ERR16 SEND MSG = VDA143E @V407466 00454000
TM RDEVSTAT,RDEVBUSY IS IT BUSY @V407466 00455000
BO ERR16 YES, SEND MSG VDA143E @V407466 00456000
B GOODOPT CHECK DEVICE STATUS @V407466 00457000
SPACE 00458000
NOTLINE EQU * ... @V407466 00459000
CLI RDEVTYPC,CLASGRAF IS IT A GRAF DEVICE ? @VA08560 00459100
BNE NOTGRAF NO,CHECK NEXT TYPE @VA08560 00459130
CLC RDEVNAME,TST3138 IS IT A 3138 CONSOLE ? @VA08560 00459160
BE GRAFCONS YES IT IS @VA08560 00459190
CLC RDEVNAME,TST3148 IS IT A 3148 CONSOLE ? @VA08560 00459220
BE GRAFCONS YES IT IS @VA08560 00459250
CLC RDEVNAME,TST3158 IS IT A 3158 CONSOLE ? @VA08560 00459280
BE GRAFCONS YES IT IS @VA08560 00459310
CLC RDEVNAME,TST3036 IS IT A 3036 CONSOLE ? @VA08560 00459340
BE GRAFCONS YES IT IS @VA08560 00459370
CLC RDEVNAME,TST3066 IS IT A 3066 CONSOLE ? @VA08560 00459400
BE GRAFCONS YES IT IS @VA08560 00459430
B GOODOPT CHECK DEVICE STATUS @VA08560 00459460
DS 0D @VA08560 00459490
TST3036 DC X'3036' @VA08560 00459520
TST3066 DC X'3066' @VA08560 00459550
TST3138 DC X'3138' @VA08560 00459580
TST3148 DC X'3148' @VA08560 00459610
TST3158 DC X'3158' @VA08560 00459640
SPACE 00459670
GRAFCONS EQU * @VA08560 00459700
OI UDEVSTAT,UDEV3158 INDICATE CONSOLE DEVICE @VA08560 00459730
B GOODOPT CHECK DEVICE STATUS @VA08560 00459760
SPACE 00459790
NOTGRAF EQU * @VA08560 00459820
TM RDEVTYPC,CLASURI+CLASURO UNIT RECORD DEVICE @V407466 00460000
BZ NOTUR NO, CHECK NEXT TYPE @V407466 00461000
TM RDEVFLAG,RDEVDRAN IS THE DEVICE DRAINED @V407466 00462000
BZ ERR08 NO, CANNOT ATTACH @V407466 00463000
ICM R15,15,RDEVSPL CHECK FOR ACTIVE SFBLOK @V407466 00464000
BNZ ERR08 YES, CANNOT ATTACH @V407466 00465000
B GOODOPT ATTACH THE DEVICE @V407466 00466000
SPACE 00467000
NOTUR EQU * ... @V407466 00468000
CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE @V407466 00469000
BNE GOODOPT NO, CHECK DEVICE EXISTENCE @V407466 00470000
OI UDEVMODE,UDEVW YES- SET ACCESS MODE TO R/W @V407466 00471000
CHKDRUM EQU * SPECIAL TEST FOR 2305 ATTACH @V407466 00472000
CLI RDEVTYPE,TYP2305 MULTIPLE-EXPOSURE DEVICE ? @V407466 00473000
BNE GOODOPT NO -- ALL SET @V407466 00474000
TM RDEVADD+1,X'07' ATTACHING BASE EXPOSURE? @V407466 00475000
BNZ VDA021A NOPE, BAD NEWS... @V407490 00476000
TM UDEVADD+1,X'07' ATTACHING AS BASE EXPOSURE? @V407466 00477000
BNZ VDA022B NOPE, ALSO BAD NEWS. @V407466 00478000
OI VDABITS,DED2305 IND. MESSING WITH DEDICATED 2305@V407466 00479000
SPACE 00480000
GOODOPT EQU * FIND THE VOLUME LABEL @V407466 00481000
BAL R7,DEVCHECK FIND THE VOLUME LABEL @V407466 00482000
DROP R8 @V407466 00483000
SPACE 00484000
CHEKLOK EQU * CHK USERID FOR LOCKED OR IN LOGON@V407466 00485000
LA R1,CMDUSER ATTACHEE'S USERID @V407466 00486000
BAL R5,CHKUSER ENSURE STILL THERE @V407466 00487000
LR R10,R1 ENSURE USE OF CURRENT VMBLOK @VA08223 00488000
BAL R5,SWPUSER SWITCH TO ATTACHEE'S VMBLOK @V407466 00489000
TM VDABITS,RANGE+MULTR MORE THAN 1 ADDRESS @V407466 00490000
BM SKIPLOCK YES, ALREADY LOCKED @V407466 00491000
BAL R5,LOKUSER LOCK THE USER'S DEVICE BLOCKS @V407466 00492000
SPACE 00493000
SKIPLOCK LH R1,UDEVADD VIRTUAL DEVICE ADDRESS @V407466 00494000
CALL DMKSCNVU SEE IF ALREADY DEFINED @V407466 00495000
BZ ERR56 ALREADY DEFINED @V407466 00496000
BC 4,NOTDEDCH CHANNEL NOT FOUND @V407466 00497000
BC 2,CHKDEDCH CONTROL UNIT NOT FOUND @V407466 00498000
TM VDABITS,ATTCTCA ATTACHING A CTCA ? @V407466 00499000
BO ERR56 YES - CANNOT DO IT IF C.U. EXISTS@V407466 00500000
TM VDABITS,DED2305 DEDICATED 2305 TYPE ATTACH? @V407466 00501000
BZ CHKDEDCH NOPE, SKIP @V407466 00502000
USING VCUBLOK,R7 ADDRESS THE VCUBLOK @V407466 00503000
N R1,F8 OBTAIN BASE ADDR INDEX @V407466 00504000
SLL R1,1 CONVERT TO VCUDVTBL 2 BYTE INDEX @V407466 00505000
LR R5,R3 SAVE R3 TEMPORARILY @V407466 00506000
LA R3,VCUDVTBL+2*7(R1) TABLE ADDR OF LAST EXPOSURE @V407466 00507000
LA R1,VCUDVTBL(R1) TABLE ADDR OF FIRST EXPOSURE @V407466 00508000
LA R2,COUNT2 TABLE ENTRY LENGTH FOR BXLE @V407490 00509000
PRESCAN CLI 0(R1),X'FF' IS THIS DEVICE DEFINED? @V407466 00510000
BE EXPOS LOOK AT ALL 8 EXPOSURES @V407466 00511000
LA R2,RC60 ERROR 56 @V407466 00512000
LR R3,R5 RESTORE VIRTUAL ADDRESS @VA11421 00512500
B ERROR COMMON ERROR PROCESSING @V407466 00513000
SPACE 2 00514000
EXPOS BXLE R1,R2,PRESCAN NO, LOOK AT ALL 8 EXPOSURES @V407466 00515000
LR R3,R5 RESTORE R3 @V407466 00516000
CHKDEDCH EQU * CANNOT ATTACH TO DED CHANNEL @V407466 00517000
AIF (NOT &DEDCH).NOTDED1 **AIF** @V407466 00518000
USING VCHBLOK,R6 @V407466 00519000
TM VCHSTAT,VCHDED IS CHANNEL DEDICATED @V407466 00520000
BNO NOTDEDCH NO, KEEP GOING @V407466 00521000
LA R2,RC64 CHANNEL DEDICATED ERROR @V407466 00522000
B ERROR GO TO COMMON ERROR PROCESSING @V407466 00523000
SPACE 2 00524000
DROP R6,R7 NO MORE VCHBLOK OR VCUBLOK @V407466 00525000
.NOTDED1 ANOP 00526000
NOTDEDCH EQU * ALL CLEAR - FIRE AT WILL @V407466 00527000
L R1,SAVEWRK9 RDEVBLOK ADDRESS @V407466 00528000
LR R2,R9 ...UDEVBLOK @V407466 00529000
CALL DMKVDSAT PERFORM REAL ATTACH @V407466 00530000
TM VDABITS,RANGE+MULTR MORE THAN ONE ADDRESS @V407466 00531000
BM SKIPFRE YES, SKIP 'FREUSER' @V407466 00532000
BAL R5,FREUSER UNLOCK AND SWAP R11 @V407466 00533000
SKIPFRE BAL R5,SWPCALL SWITCH TO CALLER'S VMBLOK @V407466 00534000
CH R2,=H'124' MAX DEVICES EXCEEDED? @VA13217 00534300
BE ERR153 YES - ISSUE ERROR MSG @VA13217 00534600
LTR R2,R2 DID VDSAT GIVE AN ERROR ? @V407466 00535000
BNZ ERROR JUMP TO ERROR MESSAGE CODE @V407466 00536000
OI VDEVSTAT-VDEVBLOK(R8),VDEVCATT ATTACH VIA CMD @V407466 00537000
TM SAVEWRK5,VIRTPRES WAS 3330V REQUESTED @V60B6B8 00538000
BZ TSTMLT NO, CONTINUE @V60B6B8 00539000
OI VDEVFLG2-VDEVBLOK(R8),VDEVVIRT SET FLAG @VA09758 00540010
L R1,SAVEWRK9 RDEVBLOK ADDR @V60B6B8 00541000
OI RDEVFLAG-RDEVBLOK(R1),RDEV333V @V60B6B8 00542000
TSTMLT EQU * TEST FOR MULT @V60B6B8 00543000
TM VDABITS,MULTR PROCESSING MULTIPLE ADDRESSES @V407466 00544000
BO MULTMSG SPECIAL FORMAT FOR MULTMSG @V407466 00545000
TM VDABITS,RANGE PROCESSING A RANGE @V407466 00546000
BNO RESPATT NO, FORMAT MESSAGE @V407466 00547000
LH R1,UDEVADD SEE IF ANY MORE ADDRESSES IN @V407466 00548000
LR R2,R1 POSSIBLE MORE ADDRS TO PROCESS @V407490 00549000
CALL DMKCVTBH RADDR1 TO PRINT HEX @V407466 00550000
USING ATTMSG,R4 MSG BUFFER ADDRESSABILITY @V407466 00551000
CLC ATTRADD1(3),=CL3' ' RADDR1 IN MESSAGE @V407466 00552000
BE STORADD1 NO, STORE IN RADDR1 FIELD @V407466 00553000
STCM R1,B'0111',ATTRADD2 STORE IN MSG BUFFER @V407466 00554000
CHKEND EQU * @V407490 00555000
TM VDABITS,DED2305 WORKING WITH DRUM ?? @V407490 00556000
BZ CHKEND1 NO , TEST WITH WHAT WE HAVE @V407490 00557000
LA R2,7(,R2) BUMP FOR EIGHT EXPOSURES @V407490 00558000
CHKEND1 CH R2,VDABITS+2 AT THE END OF THE RANGE @V407490 00559000
BNL RESPOND2 YES, ALL DONE, PROCESS MSG @V407490 00560000
LA R2,1(,R2) BUMP FOR NEXT ADDR TO PROCESS @V407490 00561000
B GOODCMD3 GO PROCESS NEXT ADDR @V407490 00562000
SPACE 2 00563000
RESPOND2 CLC ATTRADD1,=CL3' ' RADDR1 = BLANK @V407466 00564000
BCR 8,R6 DO NOT ISSUE ANY MESSAGE @V407466 00565000
CLC ATTRADD2,=CL3' ' RADDR2 BLANK IN MSG @V407466 00566000
BE SINGMSG YES, ISSUE MSG FOR SINGLE ADDR @V407466 00567000
CLC ATTRADD1,ATTRADD2 RADDR1=RADDR2 IN MSG BUF @V407466 00568000
BE SINGMSG YES, ISSUE SINGLE MESSAGE @V407466 00569000
MVC ATTDASH,DASH PLACE '-' IN MSG @V407466 00570000
MVC ATTFLD1(L'ATTACHED),ATTACHED 'ATTACHED' TO MSG @V407466 00571000
TM VDABITS,ATTSYST ATTACH TO 'SYSTEM' @V407466 00572000
BO OPERMSG SKIP SHORT MESSAGE @V407466 00573000
LA R0,ATTFLD1+8-ATTMSG CURRENT LENGTH @V407466 00574000
B SNDUSR1 SWITCH TO TARGET USER'S VMBLOK @V407466 00575000
SPACE 2 00576000
STORADD1 STCM R1,B'0111',ATTRADD1 STORE ADDR1 IN MSG @V407466 00577000
B CHKEND SEE IF END OF RANGE @V407466 00578000
SPACE 00579000
SINGMSG MVC ATTADD1(3),ATTRADD1 PREPARE FOR SINGLE MESSAGE @V407466 00580000
MVI ATTADD1-1,BLANK BLANK CHAR BEFORE ADDR @V407466 00581000
RESPATT EQU * CONTRUCT MSGS FOR 'ATTACH REAL' @V407466 00582000
BAL R5,GETRTYP GET EBCDIC TYPE-NAME OF DEVICE @V407466 00583000
TM VDABITS,RANGE RANGE BEING PROCESSED @V407466 00584000
BO STORTYPE YES, STORE DEVICE TYPE @V407466 00585000
EJECT 00586000
* 00587000
* CONSTRUCT AND TYPE VARIOUS CONSOLE MESSAGES 00588000
* 00589000
MVI ATTMSG,X'40' CLEAR TO BLANKS @V407466 00590000
MVC ATTMSG+1((ATTSIZE*8)-1),ATTMSG @V407466 00591000
STORTYPE MVC ATTFLD1(8),ATTACHED USER/OPERATOR CUE @V407466 00592000
ST R3,ATTDTYP TYPE-NAME OF AFFECTED DEVICE @V407466 00593000
TM VDABITS,ATTSYST ATTACH TO SYSTEM ? @V407466 00594000
BO OPERMSG YES - SKIP USER MESSAGE @V407466 00595000
TM VDABITS,RANGE RANGE BEING PROCESSED @V407466 00596000
BO LENGTH SKIP FOLLOWING CONVERT @V407466 00597000
LH R1,VIRTADD VIRTUAL ADDRESS @V407466 00599000
CALL DMKCVTBH ...INTO PRINTABLE FORM @V407466 00600000
STCM R1,B'0111',ATTADD1 INTO TWO PLACES @V407466 00601000
LENGTH LA R0,ATTFLD1+8-ATTMSG CURRENT LENGTH @V407466 00602000
TM VDABITS,ATTREAD ATTACHED R/O ? @V407466 00603000
BZ SNDUSR1 NO @V407466 00604000
LA R0,ATTUSER+3-ATTMSG EXTRA LENGTH @V407466 00605000
MVC ATTUSER(3),=C'R/O' ADD THIS TO MESSAGE @V407466 00606000
SNDUSR1 EQU * SWITCH TO TARGET USER'S VMBLOK @V407466 00607000
CLR R10,R11 ATTACH TO/FROM HIMSELF ? @V407466 00608000
BE OPERMSG YES - SKIP SHORT MESSAGE @V407466 00609000
SNDUSR2 EQU * SEND INFORMATION MESSAGE TO USER @V407466 00610000
LR R4,R0 SAVE R0 @V4M0193 00611000
BAL R5,SWPUSER SW TO USER'S VMBLOK @VA07393 00612000
LR R0,R4 RESTORE R0 @V4M0193 00613000
L R4,SAVEWRK5 RESTORE R4 @V4M0193 00614000
LA R4,0(,R4) CLEAR HIGH ORDER BYTE @VA13651 00614500
LR R1,R4 MESSAGE START @V407466 00615000
L R2,=A(NOTRESP) INDICATE NON-COMMAND MSG @V60C2B8 00616000
CALL DMKQCNWT,PARM=NORET(,R2) @V60C2B8 00617000
BAL R5,SWPCALL BACK TO CALLER'S VMBLOK @V407466 00618000
OPERMSG EQU * BUILD MSG FOR ATTACHER/DETACHER @V407466 00619000
MVC ATTFLD1+6(8),BLANKS CLEAN UP AFTER USER MSG @V407466 00620000
MVC ATTFLD2(2),=C'TO' @V407466 00621000
TM VDABITS,RANGE RANGE MESSAGE FORMAT? @V407466 00622000
BNO OPRMSG1 NO, CONTINUE TO FORMAT @V407466 00623000
LA R0,ATTADD2-ATTMSG CURRENT LENGTH @V407466 00624000
B OPRMSG2 CONTINUE TO FORMAT @V407466 00625000
SPACE 2 00626000
OPRMSG1 EQU * @V407466 00627000
MVC ATTADD2(4),ATTADD1 MOVE VADDR FURTHER OUT @V407466 00628000
MVI ATTADD2-1,X'40' FIX UP BLANKS FOR SPACING @V407466 00629000
MVI ATTFLD2+2,X'40' ... @V407466 00630000
BAL R5,CVTRADD CONVERT REAL ADDRESS TO HEX @V407466 00631000
STCM R1,B'0111',ATTADD1 ...INTO OPERATOR MESSAGES @V407466 00632000
LA R0,ATTFLD3-ATTMSG CURRENT LENGTH @V407466 00633000
OPRMSG2 MVC ATTUSER(8),CMDUSER USERID OF ATTACHEE @V407466 00634000
TM VDABITS,ATTSYST ATTACH TO SYSTEM ? @V407466 00635000
BZ SNDOPER NO @V407466 00636000
MVC ATTUSER(8),=CL8'SYSTEM' @V407466 00637000
MVC ATTADD2-2(6),CMDUSER THIS IS THE VOLID @V407466 00638000
B SNDOPMG @V407466 00639000
SPACE 2 00640000
SNDOPER EQU * @V407466 00641000
TM VDABITS,RANGE RANGE MESSAGE? @V407466 00642000
BO SNDOPMG SKIP R/O IN MESSAGE @V407466 00643000
TM VDABITS,ATTREAD ATTACH READ/ONLY ? @V407466 00644000
BZ SNDOPMG NO @V407466 00645000
MVC ATTFLD3(3),=C'R/O' @V407466 00646000
LA R0,ATTOPER-ATTMSG @V407466 00647000
SNDOPMG EQU * TYPE MESSAGE TO ATTACHER @V407466 00648000
LR R1,R4 MESSAGE START @V407466 00649000
CALL DMKQCNWT,PARM=NORET @V407466 00650000
TM VDABITS,NSYSOP ATTACH BY SYSTEM OPERATOR ? @V407466 00651000
BZ VERERR NECESSARY TO ISSUE ERROR MSG @V407466 00652000
TM VDABITS,RANGE RANGE MESSAGE @V407466 00653000
BZ SNDOPMG2 NO, SLIGHTLY DIFFERENT FORMAT @V407466 00654000
MVC ATTADD2(3),=C'BY ' SUBSTITUTE 'BY ' @V407466 00655000
MVI ATTADD2-1,BLANK DELIMITER @V407466 00656000
MVC ATTFLD3(8),VMUSER ATTACHER @V407466 00657000
LA R0,ATTFLD3-ATTMSG+L'ATTOPER MSG LENGTH @V407466 00658000
B SNDOPMG3 CONTINUE BELOW ... @V407466 00659000
SPACE 2 00660000
SNDOPMG2 MVC ATTFLD3(3),=C'BY ' @V407466 00661000
MVC ATTOPER(8),VMUSER ATTACHER @V407466 00662000
LA R0,ATTOPER-ATTMSG+L'ATTOPER MSG LENGTH @V407466 00663000
SNDOPMG3 LR R1,R4 MESSAGE START @V407466 00664000
CALL DMKQCNWT,PARM=NORET+OPERATOR @V407466 00665000
TM VDABITS+1,ATTERR ISSUE ERROR AFTER RESPONSE ? @V407466 00666000
BZ CLEANXT NO, FRET THE BUFFER @V407466 00667000
BLDBUFF MVI ATTMSG,BLANK PROPAGATE BLANKS THROUGH @V407466 00668000
MVC ATTMSG+1((ATTSIZE*8)-1),ATTMSG MESSAGE AREA @V407466 00669000
LH R1,UDEVADD ERROR ADDRESS @V407466 00670000
BR R6 RETURN TO ISSUE ERROR MESSAGE @V407466 00671000
EJECT 00672000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00673000
* WHEN MULTIPLE ADDRESSES ARE BEING PROCESSED, THE MESSAGE * 00674000
* IDENTIFYING THOSE DEVICES SUCCESSFULLY ATTACHED WILL ASSUME TWO * 00675000
* FORMATS. * 00676000
* THE USER WILL RECEIVE THE MESSAGE - R1 R2 ... ATTACHED * 00677000
* THE OPERATOR WILL RECEIVE THE MESSAGE - * 00678000
* R1 R2 ... ATTACHED TO USERID * 00679000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00680000
SPACE 2 00681000
MULTMSG EQU * @V407490 00682000
USING MDSECT,R6 CHANGE ADDRESSABILITY @V407466 00683000
SLR R7,R7 ZERO R7 @V407466 00684000
IC R7,MULTCUU NUMBER OF MULTIPLES IN MSG @V407466 00685000
LA R1,1(,R7) INCREMENT BY 1 @V407466 00686000
STCM R1,B'0001',MULTCUU COUNT OF MULTIPLES IN MSG @V407466 00687000
LA R8,L'MULTADD L'CUU + L'DELIMITER @V407490 00688000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00689000
AR R7,R3 PLUS ADDR OF WORK AREA @V407466 00690000
LR R6,R7 NEXT SLOT FOR ADDR @V407466 00691000
LH R1,UDEVADD MULT. ADDR FOR MESSAGE @V407466 00692000
CALL DMKCVTBH CONVERT TO HEX FOR MSG @V407466 00693000
STCM R1,B'0111',MULTADD STORE IN MESSAGE @V407466 00694000
MVI DELIM1,BLANK SEPARATE HDR FROM CCU @V407466 00695000
DROP R6 @V407466 00696000
USING MDSECT,R4 WORK AREA ADDRESSABILITY @V407466 00697000
MULTCONT LA R4,4(,R4) TO SEE IF MORE MULT. ADDRS @V407466 00698000
L R2,MULTADD TO BE PROCESSED @V407466 00699000
C R2,FFS END OF MULTIPLES? @V407466 00700000
BNE GOODCMD3 THERE ARE MORE, KEEP GOING @V407466 00701000
DROP R4 @V407466 00702000
USING MDSECT,R6 @V407466 00703000
SLR R7,R7 CLEAR R7 @V407466 00704000
IC R7,MULTCUU NO. MULTIPLES @V407466 00705000
LTR R7,R7 ANY MULTIPLES? @V407466 00706000
BZ CLEANXT NO MULTS, RELEASE STG AND EXIT @V407466 00707000
LA R8,L'MULTADD LENGTH OF MULTIPLE @V407490 00708000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00709000
AR R7,R3 ADD BEG. MSG BUFFER ADDR @V407466 00710000
LR R6,R7 AND PUT INTO R6 @V407466 00711000
MVC MULTADD(L'MULTADD*2),=C'ATTACHED' SUBST. CONST @V407466 00712000
MVI DELIM2,BLANK SEPARATE CCU FROM 'ATTACHED' @V407466 00713000
MVC CONTO,=C'TO ' CONSTANT 'TO' @V407466 00714000
MVC USERID,CMDUSER USERID @V407466 00715000
TM VDABITS,ATTSYST ATTACH TO 'SYSTEM' @V407466 00716000
BZ NOTSYS NO, USERID OK @V407466 00717000
MVC USERID,=CL8'SYSTEM' SUBSTITUTE 'SYSTEM' @V407466 00718000
NOTSYS MVI DELIM3,BLANK DELIMITER @V407466 00719000
MVC CONBY,=CL3'BY ' CONSTANT 'BY' @V407466 00720000
MVC ATTACHER,VMUSER ATTACHER USERID @V407466 00721000
SLR R7,R7 CLEAR R7 AGAIN @V407466 00722000
IC R7,MULTCUU NO. OF MULTIPLES @V407466 00723000
CLR R10,R11 ATTACH TO HIMSELF? @V407466 00724000
BE SKIPMSG YES @V407466 00725000
BAL R5,SWPUSER SEND INFORMATION MSG TO USER @V407466 00726000
CH R7,=H'10' IF EXCEEDS 10 - MULTIPLE LINES @V407466 00727000
BH MANY1 YES, ISSUE MULTIPLE LINES @V407466 00728000
MR R6,R8 R7 * R8 INTO R6-R7 @V407466 00729000
LA R0,USERSIZE(,R7) + L'ATTACHED @V407466 00730000
L R1,SAVEWRK5 ADDR OF MSG BUFFER @V407466 00731000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00731500
CALL DMKQCNWT,PARM=NORET @V407466 00732000
BAL R5,SWPCALL BACK TO CALLER'S VMBLOK @V407466 00733000
L R1,SAVEWRK5 POINT TO BEGINNING OF MSG AREA @V4M0193 00734000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00734500
LA R0,OPERSIZE(,R7) + L'TO + L'USERID @V407466 00735000
MULTMSG5 CALL DMKQCNWT,PARM=NORET @V407466 00736000
TM VDABITS,NSYSOP ATTACH BY SYSTEM OPERATOR @V407466 00737000
BZ CLEANXT YES, RELEASE MULTIPLE WORK AREA @V407466 00738000
LA R2,OPERATOR NO, SEND MSG TO SYSTEM OPERATOR @V407466 00739000
LA R0,ASIZE(,R7) + L'BY + L'USERID @V407466 00740000
LASTLINE CALL DMKQCNWT,PARM=NORET+0(,R2) @V407466 00741000
B CLEANXT FREE USER'S BLOCKS AND SWITCH R11@V407466 00742000
SPACE 2 00743000
MANY1 BAL R5,MULTLINE ISSUE REPEATED LINES OF 10 CUU @V407466 00744000
LA R0,USERSIZE(,R7) ... @V407466 00745000
CALL DMKQCNWT,PARM=NORET LAST LINE @V407466 00746000
BAL R5,SWPCALL BACK TO CALLER'S VMBLOK @V407466 00747000
L R1,SAVEWRK5 POINT TO BEGIN OF MSG AREA @V407466 00748000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00748500
IC R7,MULTCUU NUMBER OF CUU IN MSG @V407466 00749000
MANY2 BAL R5,MULTLINE REPEATED LINES FOR NEXT MSG @V407466 00750000
LA R0,OPERSIZE(,R7) +L'TO + L'USERID @V407466 00751000
CALL DMKQCNWT,PARM=NORET LAST LINE @V407466 00752000
TM VDABITS,NSYSOP ATTACH BY SYSTEM OPERATOR? @V407466 00753000
BZ CLEANXT YES, RELEASE STORAGE @V407466 00754000
LA R2,OPERATOR SEND MSG TO SYSTEM OPERATOR @V407466 00755000
L R1,SAVEWRK5 POINT TO BEG OF MSG AREA @V407466 00756000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00756500
IC R7,MULTCUU NUMBER OF CUU'S IN MSG @V407466 00757000
BAL R5,MULTLINE ISSUE REPEATED LINES @V407466 00758000
LA R0,ASIZE(,R7) + L'TO + L'USERID @V407466 00759000
B LASTLINE VERY, VERY LAST LINE @V407466 00760000
SPACE 2 00761000
SKIPMSG CH R7,=H'10' EXCEEDS 10 - MULTIPLE LINES @V407466 00762000
BH MANY2 YES @V407466 00763000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00764000
LA R0,OPERSIZE(,R7) PLUS FIXED LENGTH @V407466 00765000
L R1,SAVEWRK5 BEGINNING OF MSG AREA @V407466 00766000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00766500
B MULTMSG5 ISSUE SINGLE LINE MSG @V407466 00767000
SPACE 2 00768000
MULTLINE LA R0,MAXCUU MAX 10 CUU PER LINE @V407490 00769000
L R1,SAVEWRK5 BEGINNING OF MSG AREA @V407466 00770000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00770500
NEXTLINE CALL DMKQCNWT,PARM=NORET @V407466 00771000
LA R1,MAXCUU(,R1) NEXT LINE POINTER @V407490 00772000
SH R7,=H'10' SUBTRACT 10 @V407466 00773000
CH R7,=H'10' STILL MORE THAN 10 LEFT @V407466 00774000
BH NEXTLINE YES, ISSUE ANOTHER LINE @V407466 00775000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00776000
BR R5 PUT OUT LAST LINE @V407466 00777000
SPACE 2 00778000
VERERR TM VDABITS+1,ATTERR WAS ERROR MESSAGE ISSUED? @V407466 00779000
BO BLDBUFF YES, CLEAR MSG BUFFER @V407466 00780000
SPACE 2 00781000
CLEANXT EQU * @V407466 00782000
L R1,SAVEWRK5 MESSAGE BUFFER TO FRET @V407466 00783000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00783500
LA R0,MULTSIZE+MSGSIZE+VOLSIZE WORKAREA SIZE @V60B6B8 00784000
CALL DMKFRET @V407466 00785000
DROP R6 @V407466 00786000
BAL R5,SWPUSER SWITCH TO ATTACHEE'S VMBLOK @V407466 00787000
UNLOCK BAL R5,FREUSER UNLOCK USER'S BLOCKS @V407466 00788000
SPACE 3 00789000
VDAATEXT EQU * @V407466 00790000
EXIT RETURN TO CALLER @V407466 00791000
EJECT 00792000
ATTMSG DSECT NORMAL RESPONSES FOR 'ATTACH/DETACH' @V407466 00793000
ATTDTYP DC C'DEVX ' EBCDIC DEVICE TYPE-NAME @V407466 00794000
ATTADD1 DC C'CCU ' ADDRESS 1 @V407466 00795000
ATTFLD1 DC C'ATTACH ' FIRST VARIABLE FIELD @V407466 00796000
ATTFLD2 DC C'TO ' ... @V407466 00797000
ATTUSER DC C'$USERID$ ' ATTACHEE USERID @V407466 00798000
ATTADD2 DC C'CCU ' ADDRESS 2 @V407466 00799000
ATTFLD3 DC C'BY ' @V407466 00800000
ATTOPER DC C'$USERID$' USERID OF ATTACHER (NOT SYSOP) @V407466 00801000
SPACE 00802000
ATTSIZE EQU (*-ATTMSG+7)/8 BUFFER SIZE IN DBL-WDS @V407466 00803000
SPACE 00804000
* RANGE MESSAGE FORMAT FOLLOWS 00805000
ORG ATTDTYP @V407466 00806000
ATTRADD1 DC C'CUU' RADDR1 @V407466 00807000
ATTDASH DC C'-' - @V407466 00808000
ATTRADD2 DC C'CUU' RADDR2 @V407466 00809000
SPACE 2 00810000
SPACE 00811000
DMKVDA CSECT , RE-ENTER PREVIOUS CSECT @V407466 00812000
ATTACHED DC CL8'ATTACHED' CONSTANT FOR MESSAGE @V407466 00813000
SPACE 2 00814000
*---------------------------------------------------------------------* 00815000
* CVTRADD - CONVERT DEVICE ADDRESS TO HEXADECIMAL * 00816000
* ZAPVOLD - REMOVE VOLUME SERIAL FROM REAL DEVICE BLOCK * 00817000
*---------------------------------------------------------------------* 00818000
SPACE 2 00819000
CVTRADD EQU * CONVERT REAL DEVICE ADDRESS @V407466 00820000
L R1,DEVADDR @V407466 00821000
TM VDABITS,RANGE+MULTR RANGE/MULTIPLES BEING PROC @V407466 00822000
BZ CONVERT NO, USE ADDR IN DEVADDR FIELD @V407466 00823000
LH R1,UDEVADD DEVICE ADDRESS @V407466 00824000
CONVERT CALL DMKCVTBH @V407466 00825000
BR R5 @V407466 00826000
EJECT 00835000
ATTVOLD EQU * ATTACH TO SYSTEM AS VOLID @V407466 00836000
USING RDEVBLOK,R8 @V407466 00837000
LA R7,MSGAREA(R4) USED IN CASE ERROR MSG @V407466 00838000
CLI RDEVTYPC,CLASDASD IS IT A DASD DEVICE ? @V407466 00839000
BNE INVTYPE NO - CANNOT ATTACH TO SYSTEM @V407466 00840000
TM PSAMSS,MSSPRES MSS PRESENT IN THIS SYSTEM? @VA09319 00840010
* VMI2040 00840020
BZ ATTVOLD2 NO,DON'T TRY TO CAL DMKSSS @VA09319 00840030
* VMI2040 00840040
TM RDEVFTR,VIRTUAL+SYSVIRT IS THIS A 3330V @V60B6B8 00841000
BNZ SYS3330V YES, CALL DMKSSS @V60B6B8 00842000
SPACE 2 00843000
* CANNOT ATTACH 3330V DEVICE ADDRESSES TO 'SYSTEM' 00844000
SPACE 00845000
* RDEVSYS RDEVOWN RDEVMOUT MEANING 00846000
* FLAG 0 0 1 DEV FREE; VOLUME MOUNTED, 00847000
* NOT ATTACHED 00848000
* 0 0 0 DEVICE ATTACHED TO SYSTEM 00849000
* EXCEPT IF THE VOLID IS 00850000
* BLANK 00851000
* 1 0 0 DEVICE ATTACHED TO SYSTEM 00852000
* WITH OR WITHOUT LINKS HRC039DK 00853100
* 1 1 0 DEV ATTACHED TO SYSTEM & 00854000
* IS A SYSTEM OWNED VOLUME 00855000
SPACE 00856000
.SYSTEM ANOP 00857000
ATTVOLD2 TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE ? @V407466 00858000
BO ERR12 YES -- SEND OFFLINE MESSAGE @VA13651 00859000
TM RDEVSTAT,RDEVDED DEDICATED TO A USER ? @V407466 00860000
BO ERR24 YES -- SEND DEDICATED MESSAGE @VA13651 00861000
TM RDEVFLAG,RDEVOWN CP-OWNED VOLUME ? @V407466 00862000
BO DEVOWND YES -- @V407466 00863000
CLC RDEVLNKS,=H'0' Does dasd have existing links? HRC039DK 00864100
BNE DEVSHRD Minidisks in use on dasd HRC039DK 00864200
TM RDEVFLAG,RDEVSYS Dasd already attached to sys.? HRC039DK 00864300
BZ ALLOK No. Can be attached now. HRC039DK 00864400
TM RDEVFLAG,RDEVMOUT VOL ALREADY ATTACHED TO SYS? @V407466 00866000
BO ALLOK NO- DEV NOT MOUNTED AFTER IPL @V407466 00867000
CLC RDEVSER(6),BLANKS VOLID BLANK (NOT RDY AT IPL) @V407466 00868000
BE ALLOK @V407466 00869000
MVC CMDUSER(6),RDEVSER SEND MSG WITH RDEVSER @V407466 00870000
B MSG125E SEND THE MESSAGE @V407466 00871000
SPACE 2 00872000
SYS3330V EQU * ATTACH A VUA TO THE SYSTEM @V60B6B8 00873000
LA R0,CMDUSER ADDR OF VOLID @V60B6B8 00874000
CALL DMKSSSAS VERIFY PARMS, MOUNT VOID IF @V60B6B8 00875000
* NECESSARY 00876000
LTR R0,R0 WAS THERE AN ERROR @V60B6B8 00877000
BZ ALLOK NO, VOLUME NOW AVAILABLE @V60B6B8 00878000
LA R15,RC4 EXPECTED RETURN CODE @V60B6B8 00879000
CR R0,R15 AGAINST ACTUAL @V60B6B8 00880000
BE SAVEINFO OK, WAIT FOR MSS MOUNT @V60B6B8 00881000
B WRNGVOL @V60B6B8 00882000
* 00883000
* THE FOLLOWING ENTRY POINT IS REACHED AFTER AN 00884000
* MSS VOLUME MOUNT TO SATISFY AN ATTACH 00885000
* REQUEST. SCHEDULE A PENDING I/O REQUEST 00886000
* IF THERE IS ONE, THEN FREE UP THE MSSCOM 00887000
* BLOCK WHICH REPRESENTED THE MOUNT. 00888000
* 00889000
DMKVDAS2 RELOC @V60B6B8 00890000
USING OSVSCOM,R3 R3 SET BY DMKSSS @V60B6B8 00891000
MVC SAVEWRK1,SAVEWRK1-SAVEAREA(R1) RESTORE FLAGS @V60B6B8 00892000
* TO CURRENT SAVEAREA 00893000
MVC SAVEWRK2(WORKAREA),SAVEWRK2-SAVEAREA(R1) @V60B6B8 00894000
* RESTORE OTHER WORKING INFO 00895000
LA R0,SAVESIZE SIZE OF SAVE AREA @V60B6B8 00896000
CALL DMKFRET GIVE IT BACK @V60B6B8 00897000
L R1,MSSTASK3 ADDR OF CPEXBLOK, IF IT EXISTS @V60B6B8 00898000
LTR R1,R1 IS THERE PENDING I/O @V60B6B8 00899000
BZ FRECOM1 NO @V60B6B8 00900000
CALL DMKSTKCP STACK THE CPEXBLOK FOR I/O @V60B6B8 00901000
FRECOM1 EQU * @V60B6B8 00902000
LA R0,MSSSIZE NO OF D-WORDS IN MSSCOM @V60B6B8 00903000
LR R1,R3 ADDR OF MSSCOM @V60B6B8 00904000
CALL DMKFRET RETURN STORAGE TO SYSTEM @V60B6B8 00905000
ALLOK EQU * @V407466 00906000
LA R1,CMDUSER THIS IS THE VOLID @V407466 00907000
LA R0,VOLIDSIZ ... LENGTH @V407490 00908000
TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A 3330V ? @VA09301 00908100
BZ SKPON NO, DON'T TURN THE FLAG ON @VA09301 00908200
OI RDEVFLAG,RDEVMOUT TELL SCNVS THIS VOL OK @V60B6B8 00909000
SKPON CALL DMKSCNVS SEARCH FOR DUPLICATE VOLID @VA09301 00910000
BZ DUPVOL DUPLICATE VOLID - MSG DMKVDA125E @V407466 00911000
TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A 3330V ? @VA09301 00911100
BZ SKPOFF NO,DON'T TURN THE FLAG OFF @VA09301 00911200
NI RDEVFLAG,X'FF'-RDEVMOUT @V60B6B8 00912000
SKPOFF BAL R7,DEVCHECK VERIFY DEVICE EXISTENCE @VA09301 00913100
LTR R2,R2 ERROR ENCOUNTERED ON LABEL READ? @V407466 00914000
BNZ ERROR YES, ISSUE MESSAGE @V407466 00915000
LA R7,MSGAREA(R4) RESTORE R7 FOR MSG BUFFER @V407466 00916000
CLC CMDUSER(6),RDEVSER DO THE LABELS MATCH ? @V407466 00917000
BNE WRNGVOL NO @V407466 00918000
SWITCH CONTINUE PROCESSING ON I/O PROC @V407508 00919000
TM VDABITS+1,CPOWND ALLOCATION DATA PRESENT ? @V407466 00920000
BZ RESMOUT NO - ALL FINISHED EXCEPT MSGS @V407466 00921000
SPACE 1 00922000
* SEARCH OWNED-VOLUME LIST TO SEE IF THE ALLOCATION DATA 00923000
* IS PERTINENT TO THE RUNNING SYSTEM 00924000
SPACE 00925000
L R4,=A(DMKSYSOW) OWNED LIST START @V407466 00926000
USING OWNDLIST,R4 @V407466 00927000
L R3,=A(DMKSYSOC) COUNT OF VOLUMES @V407466 00928000
L R3,0(,R3) ... @V407466 00929000
VOLSRCH EQU * SEE IF ACTUALLY OWNED @V407466 00930000
CLC OWNDVSER(6),RDEVSER @V407466 00931000
BE VOLCHAN FOUND IT @V407466 00932000
LA R4,8(,R4) NEXT ENTRY IN LIST @V407466 00933000
BCT R3,VOLSRCH LOOP THRU OWNED LIST @V407466 00934000
RESMOUT NI RDEVFLAG,X'FF'-RDEVMOUT INDICATE ATTACHED TO SYS@V407466 00935000
OI RDEVFLAG,RDEVSYS Device now attached to system HRC039DK 00935100
L R4,SAVEWRK5 MSGAREA ADDRESS @V407466 00936000
LA R4,0(,R4) CLEAR HIGH ORDER BYTE @VA13651 00936500
B RESPATT NOT PERTINENT - GIVE RESPONSES @V407466 00937000
SPACE 00938000
VOLCHAN EQU * VOLUME IS CP-OWNED @V407466 00939000
OI VDABITS+1,ALLOCN READ ALLOCATION RECORD @V407466 00940000
BAL R7,DEVCHECK VERIFY DEVICE EXISTENCE @V407466 00941000
LTR R2,R2 ERROR READING ALLOC. DATA @V407466 00942000
BNZ ERROR YES, ISSUE ERROR MESSAGE @V407466 00943000
SWITCH CONTINUE PROCESSING ON I/O PROC @V407508 00944000
OI RDEVFLAG,RDEVOWN+RDEVSYS @V407466 00945000
NI RDEVFLAG,X'FF'-RDEVMOUT INDICATE VOLUME ATTACHED@V407466 00946000
LH R15,OWNDPREF SEE IF PAGING VOLUME @V407466 00947000
LTR R15,R15 THIS BETTER BE MINUS... @V407466 00948000
BM VDA2A OR ELSE SOMETHING IS REALLY WRONG@V407466 00949000
SPACE 00950000
ABEND 2 ...LIKE I SAID.. @V407466 00951000
SPACE 00952000
VDA2A EQU * @V407466 00953000
LPR R15,R15 MAKE -1, -2 INTO +1, +2 @V407466 00954000
SLL R15,2 ...INTO +4, +8 @V407466 00955000
B *(R15) SKIP FLAG SET IF NOT PREFERRED @V407466 00956000
SPACE 2 00957000
OI RDEVFLAG,RDEVPREF @V407466 00958000
SPACE 00959000
* SET UP TO CHAIN IN ALLOCATION TABLES 00960000
* R10 - ADDRESS OF IOBLOK 00961000
* R4 OWNDLIST POINTER 00962000
* R8 - RDEVBLOK POINTER 00963000
* R3 - INDEX 00964000
SPACE 00965000
LR R3,R15 MOVE INDEX TO R3 @V407466 00966000
CALL DMKVDCAL @V407466 00967000
L R4,SAVEWRK5 RESTORE MSGAREA ADDRESS @V407466 00968000
LA R4,0(,R4) CLEAR HIGH ORDER BYTE @VA13651 00968500
B RESPATT ISSUE RESPONSE MESSAGES @V407466 00969000
EJECT 00970000
EJECT 00971000
*********************************************************************** 00972000
* CALL TO DMKVDEDC 00973000
* SUBROUTINE TO VERIFY DEVICE EXISTENCE. 00974000
* 00975000
* A CALL IS MADE TO DMKVDEDC TO VERIFY DEVICE 00976000
* EXISTENCE. SETS UP AN I/O TASK (TIO) TO SEE IF 00977000
* THE DEVICE EXISTS. IF THE DEVICE DOES NOT EXIST, 00978000
* IT IS MARKED OFFLINE AND A 'DOES NOT EXIST' MESSAGE 00979000
SPACE 2 00980000
* IS ISSUED FROM DMKVDA. 00981000
* 00982000
* FOR DASD, DMKVDEDC WILL SET UP AND EXECUTE AN 00983000
* I/O TASK TO READ THE DASD VOLUME LABEL OF THE DEVICE 00984000
* BEING ATTACHED. IF SUCCESSFUL, THE VOLUME SERIAL 00985000
* IS INSERTED INTO THE 'RDEVSER' FIELD OF THE REAL 00986000
* DEVICE BLOCK. AN ERROR RETURN CODE IS PASSED BACK TO 00987000
* DMKVDA IF FAILURE ENCOUNTERED ON THE READ. A FLAG 00988000
* IS SET IF IT IS A CP/370 OWNED VOLUME. 00989000
* IF DMKVDEDC WAS CALLED WITH PARM = 1, INDICATING 00990000
* ALLOCATION DATA IS PRESENT, THE ALLOCATION 00991000
* RECORD IS READ INTO FREE STORAGE. 00992000
*********************************************************************** 00993000
SPACE 00994000
DEVCHECK EQU * CHECK DEVICE EXISTENCE ROUT. @V407466 00995000
L R6,DEVADDR GET VADDR IN CUU FORM @V407466 00997000
TM VDABITS,RANGE+MULTR RANGE OR MULTIPLES? @V407466 00998000
BZ TSTALLOC SEE IF READING ALLOC. DATA @V407466 00999000
LH R6,UDEVADD MUST GET VADDR FROM UDEVBLOK @V407466 01000000
TSTALLOC TM VDABITS+1,ALLOCN READING ALLOC. REC. THIS TIME? 01001000
BZ VDE NO, REGL LABEL READ @V407466 01002000
SPACE 01003000
* R8 POINTS TO RDEVBLOK @V407466 01004000
* R6 CONTAINS RADDR OF DEVICE BEING ATTACHED @V407466 01005000
* R10 AND R11 CONTAIN VMBLOK ADDRESSES @V407466 01006000
SPACE 01007000
CALL DMKVDEDC,PARM=1 IND. ALLOC READ @V407466 01008000
B CHKRC NOW CHECK FOR ERRORS @V407466 01009000
SPACE 01010000
VDE CALL DMKVDEDC GO VERIFY DEVICE EXISTENCE @V407466 01011000
SPACE 01012000
* UPON RETURN FROM DMKVDEDC, R2 CONTAINS ERROR CODE OR @V407466 01013000
* ZERO INDICATING SUCCESSFUL COMPLETION. @V407466 01014000
SPACE 01015000
CHKRC CH R2,=H'68' DEVICE NOT READY? @V407466 01016000
BE ERROR ... @VA07393 01017000
CH R2,=H'80' DEVICE UNKNOWN @V407466 01018000
BE ERROR YES, ISSUE ERROR MSG @V407466 01019000
CH R2,=H'120' BUSY CONDITION @VA11952 01019100
BE ERROR @VA11952 01019150
* THERE MAY HAVE BEEN A BAD LABEL READ BUT THIS @V407466 01020000
* ERROR MESSAGE IS ISSUED ONLY WHEN ATTACHING TO THE SYSTEM @V407466 01021000
BR R7 CONTINUE TO PROCESS @V407466 01022000
SPACE 2 01023000
* BITS DEFINED IN VDABITS+1 : 01024000
* 01025000
CPOWND EQU X'20' ALLOCATION DATA PRESENT ON VOLUME@V407466 01026000
ALLOCN EQU X'10' READING ALLOCATION DATA @V407466 01027000
NOTREDY EQU X'08' 'NOTREADY' @V407466 01028000
ATTERR EQU X'02' ERROR MSG TO FOLLOW RESPONSE @V407466 01029000
SPACE 01030000
BLANK EQU X'40' BLANK @V407466 01031000
SPACE 01032000
DASH DC C'-' RANGE DELIMITER @V407466 01033000
SPACE 01034000
SPACE 01035000
EJECT 01036000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01037000
* DEDCHAN - ATTACH DEDICATED CHANNEL(S); CONTROL TRANSFERS * 01038000
* TO THE MODULE DMKVCHDC FOR TESTING THE AVAILABILITY * 01039000
* OF THE CHANNEL AND DEVICES, AND FOR THE ACTUAL ATTACH * 01040000
* FUNCTION. FLAGS AND COMMAND INE DATA ARE PASSED TO * 01041000
* DMKVCHDC IN REGISTERS 1-4. * 01042000
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01043000
DS 0F 01044000
SPACE 2 01045000
DEDCHAN EQU * PROCESSING FOR DEDICATED CHANNELS@V407466 01046000
L R1,VDABITS FLAGS USED WITHIN DMKVDA @V407466 01047000
L R2,DEVADDR BYTE 3 HAS CHANNEL NUMBER @V407466 01048000
LM R3,R4,CMDUSER USERID WANTING THE CHANNEL @V407466 01049000
SPACE 01050000
CALL DMKVCHDC @V407466 01051000
BAL R5,SWPCALL SWITCH TO CALLER'S VMBLOK @V407466 01052000
ST R2,SAVER2 SAVE RETURN CODE @V407490 01053000
LA R0,MULTSIZE+MSGSIZE+VOLSIZE WORKAREA SIZE @V60B6B8 01054000
L R1,SAVEWRK5 ADDR OF WORK AREA @V407466 01055000
CALL DMKFRET RELEASE STORAGE @V407466 01056000
B VDAATEXT EXIT @V407466 01057000
EJECT 01058000
*---------------------------------------------------------------------* 01059000
* FREUSER AND SWPUSER - UNLOCK USERID AND SWAP VMBLOKS * 01060000
* LOKUSER AND SWPCALL - LOCK A USERID AND SWAP VMBLOKS * 01061000
*---------------------------------------------------------------------* 01062000
SPACE 2 01063000
FREUSER EQU * UNLOCK ATTACHEE'S USERID @V407466 01064000
LA R1,VMUSER @V407466 01065000
CALL DMKLOCKD DIRECTORY UNLOCK SUBROUTINE @V407466 01066000
SWPCALL EQU * GO BACK TO CALLER'S VMBLOK @V407466 01067000
L R1,SAVER11 GET CALLER'S VMBLOK ADDRESS @V407508 01068000
SWTCHVM SWITCH TO CALLER'S VMBLOK @V4M0193 01069000
BR R5 ...RETURN TO CALLER @V407466 01070000
SPACE 2 01071000
LOKUSER EQU * THROW A LOCK ON DEVICE BLOCKS @V407466 01072000
LA R1,VMUSER POINT TO THE USERID @V407466 01073000
CALL DMKLOCKQ ...AND LOCK IT @V407466 01074000
LA R0,L'VMUSER LENGTH OF USERID @VA08223 01075000
CALL DMKSCNAU USER STILL LOGGED ON? @V407466 01076000
BNZ NOTLOGD NO - ERROR @V407466 01077000
BR R5 @V407466 01078000
SPACE 2 01079000
SWPUSER EQU * SWAP TO TARGET USER'S VMBLOK @V407466 01080000
LR R1,R10 GET USER'S VMBLOK ADDRESS @V407508 01081000
SWTCHVM SWITCH TO SPECIFIED USER @V4M0193 01082000
BR R5 @V407466 01083000
EJECT 01084000
CHKUSER EQU * ... @V407466 01085000
LA R0,8 LENGTH OF USERID @V407466 01086000
CALL DMKSCNAU USER STILL LOGGED ON @V407466 01087000
BNZ NOTLOGD NOT LOGGED ON - ERROR @V407466 01088000
BR R5 RETURN TO MAINLINE CODE @V407466 01089000
SPACE 3 01090000
*---------------------------------------------------------------------* 01091000
* GETRDEV, GETRTYP - GET REAL DEVICE BLOCK + TYPE NAME * 01092000
*---------------------------------------------------------------------* 01093000
SPACE 2 01094000
GETRDEV EQU * LOCATE REAL DEVICE BLOCK @V407466 01095000
TM VDABITS,RANGE+MULTR RANGE OR MULTIPLES @V407466 01096000
BM GETRDEV2 YES, R1 ALREADY SET UP @V407466 01097000
L R1,DEVADDR REAL DEVICE ADDRESS @V407466 01098000
GETRDEV2 CALL DMKSCNRU ...FIND THE RDEVBLOK @V407466 01099000
BNZ UNKNOWN REAL DEVICE DOES NOT EXIST @V407466 01100000
ST R8,SAVEWRK9 SAVE THE RDEVBLOK POINTER @V407466 01101000
BR R5 @V407466 01102000
SPACE 01103000
GETRTYP EQU * GET EBCDIC TYPE-NAME OF REAL DEV @V407466 01104000
L R8,SAVEWRK9 RDEVBLOK ADDRESS @V407466 01105000
CALL DMKSCNRN ...GET IT'S TYPE-NAME @V407466 01106000
LR R3,R1 ...INTO R4 @V407466 01107000
BR R5 @V407466 01108000
EJECT 01109000
ERR08 LA R2,RC8 DEVICE NOT DRAINED @V407466 01110000
B ERROR ISSUE ERROR MSG @V407466 01111000
SPACE 01112000
ERR12 LA R2,RC12 DEVICE OFFLINE @V407466 01113000
CLI RDEVTYPC,CLASDASD DASD DEVICE ?? @V407490 01114000
BNE ERROR NO @V407490 01115000
CLI RDEVTYPE,TYP2305 HOW ABOUT A DRUM ?? @V407490 01116000
BNE ERROR NOPE @V407490 01117000
TM RDEVADD+1,X'07' IS THIS A BASE ADDRESS ?? @V407490 01118000
BNZ VDA021A INVALID BASE ADDRESS,GIVE VDA021 @V407490 01119000
B ERROR COMMON ERROR PROCESSING @V407490 01120000
SPACE 01121000
ERR16 LA R2,RC16 DEVICE SHARED @V407466 01122000
B ERROR ISSUE ERROR MSG @V407466 01123000
SPACE 01123200
DEVOWND EQU * DEVICE ALREADY CP OWNED @VA13651 01123400
LA R2,RC20 SET UP ERROR INDEX @VA13651 01123600
B ERROR ISSUE ERROR MESSAGE @VA13651 01123800
SPACE 2 01124000
ERR24 LA R2,RC24 DEVICE ALREADY DEDICATED @V407466 01125000
B ERROR COMMON ERROR PROCESSING @V407466 01126000
SPACE 01126200
NOTLOGD EQU * USERID NOT LOGGED ON @VA13651 01126400
LA R2,RC44 SET UP ERROR INDEX @VA13651 01126600
B ERROR ISSUE ERROR MESSAGE @VA13651 01126800
SPACE 2 01127000
ERR56 LA R2,RC56 DEVICE ALREADY DEFINED @V407466 01128000
B ERROR ISSUE ERROR MESSAGE @VA13651 01128020
SPACE 1 01128040
UNKNOWN EQU * DEV ADDR DOES NOT EXIST @VA13651 01128060
LA R2,RC80 SET UP ERROR INDEX @VA13651 01128080
B ERROR ISSUE ERROR MESSAGE @VA13651 01128100
SPACE 1 01128120
DEVSHRD EQU * DASD RADDR IN USE BY NNN USERS @VA13651 01128140
LA R2,RC84 SET UP ERROR INDEX @VA13651 01128160
B ERROR ISSUE ERROR MESSAGE @VA13651 01128180
SPACE 1 01128200
INVOPTS2 EQU * INVALID OPTION @VA13651 01128220
LA R2,RC88 SET UP ERROR INDEX @VA13651 01128240
B ERROR ISSUE ERROR MESSAGE @VA13651 01128260
SPACE 1 01128280
INVTYPE EQU * INVALID DEVICE TYPE @VA13651 01128300
LA R2,RC92 SET UP ERROR INDEX @VA13651 01128320
B ERROR ISSUE ERROR MESSAGE @VA13651 01128340
SPACE 1 01128360
VDA021A EQU * RADDR MISSING OR INVALID @VA13651 01128380
LA R2,RC96 SET UP ERROR INDEX @VA13651 01128400
B ERROR ISSUE ERROR MESSAGE @VA13651 01128420
SPACE 1 01128440
VDA022B EQU * VADDR MISSING OR INVALID @VA13651 01128460
LA R2,RC100 SET UP ERROR INDEX @VA13651 01128480
B ERROR ISSUE ERROR MESSAGE @VA13651 01128500
SPACE 1 01128520
DUPVOL EQU * VOLID ALREADY ATTACHED @VA13651 01128540
LR R8,R1 PICK UP ADDR OF DEV CONT VOLID @VA13651 01128560
MSG125E EQU * @VA13651 01128580
LA R2,RC104 SET UP ERROR INDEX @VA13651 01128600
B ERROR ISSUE ERROR MESSAGE @VA13651 01128620
SPACE 1 01128640
WRNGVOL EQU * @VA13651 01128660
LA R2,RC108 SET UP ERROR INDEX @VA13651 01128680
B ERROR ISSUE ERROR MESSAGE @VA13651 01128700
SPACE 1 01128720
MSG076 EQU * INVALID PARAMETERS @VA13651 01128740
LA R2,RC112 SET UP ERROR INDEX @VA13651 01128760
B ERROR ISSUE ERROR MESSAGE @VA13217 01128790
SPACE 1 01128820
ERR153 EQU * MAXIMUM DEVICES EXCEEDED @VA13217 01128850
LA R2,RC124 SET UP ERROR INDEX @VA13217 01128880
B ERROR ISSUE ERROR MESSAGE @VA13217 01128910
SPACE 1 01128940
ERROR EQU * COMMON ERROR MESSAGE ROUTINE @V407466 01129000
ST R2,SAVEWRK7 SAVE ERROR INDEX @VA13651 01130000
B ERRTABL-8(R2) BRANCH TO ERROR ROUTINE @V407466 01133000
SPACE 2 01134000
ERRTABL EQU * JUMP TABLE FOR R2 ERROR INDEX @VA13651 01135000
B CHKRANGE INDEX = 8 @VA13651 01138000
B CHKRANGE INDEX = 12 @VA13651 01141000
B CHKRANGE INDEX = 16 @VA13651 01144000
B CHKRANGE INDEX = 20 @VA13651 01147000
B CHKRANGE INDEX = 24 @VA13651 01150000
B SENDEMSG INDEX = 28 @VA13651 01153000
B SENDEMSG INDEX = 32 @VA13651 01156000
B SENDEMSG INDEX = 36 @VA13651 01159000
B SENDEMSG INDEX = 40 @VA13651 01162000
B SENDEMSG INDEX = 44 @VA13651 01165000
B SENDEMSG INDEX = 48 @VA13651 01168000
B SENDEMSG INDEX = 52 @VA13651 01171000
B CHKRANGE INDEX = 56 @VA13651 01174000
B BAD05 INDEX = 60 @VA13651 01177000
B CHANDED INDEX = 64 @VA13651 01180000
B CHKRANGE INDEX = 68 @VA13651 01183000
B SENDEMSG INDEX = 72 @VA13651 01186000
B SENDEMSG INDEX = 76 @VA13651 01189000
B CHKRANGE INDEX = 80 @VA13651 01192000
B CHKRANGE INDEX = 84 @VA13651 01195000
B CHKRANGE INDEX = 88 @VA13651 01198000
B SENDEMSG INDEX = 92 @VA13651 01201000
B CHKRANGE INDEX = 96 @VA13651 01204000
B CHKRANGE INDEX = 100 @VA13651 01207000
B SENDEMSG INDEX = 104 @VA13651 01210000
B SENDEMSG INDEX = 108 @VA13651 01213000
B SENDEMSG INDEX = 112 @VA13651 01216000
B SENDEMSG INDEX = 120 @VA11952 01217000
B CHKRANGE INDEX = 124 @VA13217 01218000
EJECT 01239000
BAD05 LA R6,VCUDVTBL-VCUBLOK(R7) POINT TO DEVICE TABLE @V407466 01240000
SLR R1,R6 CALC BAD DEVICE TABLE INDEX @V407466 01241000
SRL R1,1 CONVERT INDEX TO 'DEV' ADDR @V407466 01242000
LH R2,VIRTADD VIRTUAL ADDRESS TO R2 @V407466 01244000
OR R1,R2 ADD BAD DEV ADDR TO BASE FOR MSG @V407466 01245000
STH R1,VIRTADD AND RESAVE @V407466 01246000
B CHKRANGE GO TEST FOR RANGE @VA13651 01247000
SPACE 01287000
CHANDED EQU * ERROR FOR DEDICATED CHANNELS @V407490 01288000
AIF (NOT &DEDCH).NOTDED3 **AIF** @V407466 01289000
LR R8,R6 SAVE R6 FOR LATER @V407466 01290000
.NOTDED3 ANOP **ANOP** 01291000
SPACE 1 01298000
CHKRANGE EQU * @VA13651 01305000
BAL R5,TSTRANGE TEST FOR RANGE BEING PROCESSED @VA13651 01312000
SENDEMSG EQU * CALL VDE ROUTINE TO ISSUE MSG @VA13651 01319000
LR R2,R0 SAVE PARM COUNT FOR VDERR MSG @VA13651 01326000
LR R7,R1 SAVE PARM ADDRESS FOR VDERR MSG @VA13651 01333000
BAL R5,SWPCALL ENSURE VMBLOK SWITCH BEFORE CALL @VA13651 01340000
LR R0,R2 RESTORE PARM COUNT FOR VDERR MSG @VA13651 01347000
LR R1,R7 RESTORE PARM ADDR FOR VDERR MSG @VA13651 01354000
L R2,SAVEWRK7 RELOAD ERROR INDEX FOR VDERR @VA13651 01361000
L R7,SAVEWRK5 LOAD ADDRESS OF WORKAREA @VA13651 01368000
LA R7,MSGAREA(,R7) GET ADDRESS OF MESSAGE AREA @VA13651 01375000
CALL DMKVDERR CALL ERROR MESSAGE ROUTINE @VA13651 01382000
B BRTABLE(R2) CONTINUE AT APPROPRIATE PLACE @VA13651 01389000
SPACE 1 01396000
BRTABLE EQU * @VA13651 01403000
B CLEANXT EXIT @VA13651 01410000
B PROCESS CONTINUE PROCESSING RANGE @VA13651 01417000
B MULTCONT CONTINUE PROCESSING MULTIPLES @VA13651 01424000
B RESPATT ISSUE RESPONSES @VA13651 01431000
SPACE 2 01449000
TSTRANGE TM VDABITS,RANGE RANGE BEING PROCESSED @V407466 01450000
BCR 14,R5 NO, JUST ISSUE ERROR MESSAGE @V407466 01451000
OI VDABITS+1,ATTERR ISSUE SUCCESSFUL MSG FIRST @V407466 01452000
ST R5,SAVEWRK8 STORE R5 TEMPORARILY @V407466 01453000
BAL R6,RESPOND2 GO ISSUE RESPONSE MESSAGES @V407466 01454000
NI VDABITS+1,X'FF'-ATTERR TURN OFF SWITCH @V407466 01455000
L R5,SAVEWRK8 RESTORE R5 @V407466 01456000
BR R5 RETURN TO MAINLINE @V407466 01457000
SPACE 2 01458000
SPACE 01481000
* THE FOLLOWING ERROR CODE EQUATES ARE USED IN THIS MODULE 01482000
RC12 EQU 12 DEVICE IS OFFLINE @V407466 01483000
RC8 EQU 8 DEVICE NOT DRAINED @V407466 01484000
RC16 EQU 16 DEVICE SHARED @V407466 01485000
RC20 EQU 20 DEVICE ALREADY CP OWNED @VA13651 01485500
RC24 EQU 24 DEVICE ALREADY ATTACHED @V407466 01486000
RC44 EQU 44 USERID NOT LOGGED ON @VA13651 01486500
RC56 EQU 56 DEVICE ALREADY DEFINED @V407466 01487000
RC60 EQU 60 BAD LABEL READ @V407466 01488000
RC64 EQU 64 CHANNEL DEDICATED @V407466 01489000
RC80 EQU 80 DEVICE DOES NOT EXIST @VA13651 01490000
RC84 EQU 84 DEVICE ALREADY IN USE @VA13651 01490100
RC88 EQU 88 INVALID OPTION @VA13651 01490200
RC92 EQU 92 INVALID DEVICE TYPE @VA13651 01490300
RC96 EQU 96 RADDR MISSING OR INVALID @VA13651 01490400
RC100 EQU 100 VADDR MISSING OR INVALID @VA13651 01490500
RC104 EQU 104 DUPLICATE VOLUME @VA13651 01490600
RC108 EQU 108 VOLUMES DON'T MATCH @VA13651 01490700
RC112 EQU 112 INVALID PARAMETERS @VA13651 01490800
RC124 EQU 124 MAXIMUM DEVICES EXCEEDED @VA13217 01490900
* FLAGS SET IN SAVEWRK9 BY DMKVDC 01491000
VIRTPRES EQU X'40' 3330V PARM PRESENT @V60B6B8 01492000
VOLPRES EQU X'80' VOLID PARM PRESENT @V60B6B8 01493000
EJECT 01494000
RC4 EQU 4 @V60B6B8 01530000
VOLSIZE EQU 1 @V60B6B8 01532000
FLAGLEN EQU 1 LENGTH OF FLAGS IN SAVEWRK @V60B6B8 01533000
EJECT 01535000
LTORG @V407466 01536000
EJECT 01537000
COPY SAVE @V407466 01538000
WORKAREA EQU ((SAVEWRK9+L'SAVEWRK9)-SAVEWRK2) LNGTH OF WORKAR@V60B6B8 01539000
EJECT 01540000
*----------------------------* 01541000
* 01542000
WRK2 DSECT ERROR MESSAGE DSECT @V407466 01543000
ATTCUU DS CL3 CUU @V407466 01544000
ATTSIZE1 EQU *-ATTCUU DATA LENGTH @V407466 01545000
ATTDEL4 DS X DELIMITER @V407466 01546000
ATTNO DS CL3 NUMBER OF USERS @V407466 01547000
ATTSIZE5 EQU *-ATTCUU DATA LENGTH @V407466 01548000
DS X ... @V407466 01549000
ATTDEL1 DS X DELIMITER @V407466 01550000
ATTUSE DS CL3 USERID @V407466 01551000
ATTDEL5 DS X DELIMITER @V407466 01552000
ATTUSER2 DS CL4 USERID @V407466 01553000
ATTSIZE2 EQU *-ATTCUU DATA LENGTH @V407466 01554000
ATTDEL2 DS X DELIMITER @V407466 01555000
ATTVADDR DS CL3 VADDR @V407466 01556000
ATTSIZE3 EQU *-ATTCUU DATA LENGTH @V407466 01557000
MSGSIZE EQU (*-ATTCUU+7)/8 @V407466 01558000
ORG ATTDEL1 SAVEWRK4 @V407466 01559000
ATTDEL3 DS X DELIMITER @V407466 01560000
ATTCHAN DS CL2 CHANNEL @V407466 01561000
ATTSIZE4 EQU *-ATTCUU DATA LENGTH @V407466 01562000
ORG ATTCUU @V407466 01563000
DS CL4 @V407466 01564000
ATTCON DS CL8 CONSTANT 'ATTACHED' @V407466 01565000
*----------------------------* 01566000
* 01567000
VDABITS EQU SAVEWRK1 FLAGS USED WITHIN VDA @V407466 01568000
MULTCUU EQU SAVEWRK1+2 NO. MULT. ADDRS IN MSG @V407466 01569000
DEVADDR EQU SAVEWRK2 REAL/VIRTUAL DEVICE ADDRESS @V407466 01570000
CMDUSER EQU SAVEWRK3 AND SAVEWRK4 - USERID @V407466 01571000
VIRTADD EQU SAVEWRK1+2 VIRTUAL DEVICE ADDRESS @V407466 01572000
SPACE 01573000
* EQUATES 01574000
MAXCUU EQU 40 @V407490 01601000
VOLIDSIZ EQU 6 @V407490 01602000
COUNT2 EQU 2 @V407490 01603000
SPACE 01605000
* 01606000
* FLAGS DEFINED IN "VDABITS" : 01607000
* 01608000
CHANNEL EQU X'80' "CHANNEL" OPTION SPECIFIED @V407466 01609000
NSYSOP EQU X'40' CALLER IS NOT SYSTEM OPERATOR @V407466 01610000
MULTR EQU X'20' MULTIPLE RADDR ON COMMAND LINE @V407466 01611000
ATTSYST EQU X'10' ATTACH/DETACH TO/FROM "SYSTEM" @V407466 01612000
ATTREAD EQU X'08' ATTACH "R/O" @V407466 01613000
ATTCTCA EQU X'02' ATTACH REAL CHAN-TO-CHAN ADAPTER @V407466 01614000
DED2305 EQU X'01' ATTACH/DEDICATE MULTI EXP DEVICE @V407466 01615000
RANGE EQU X'04' RANGE ON COMMAND LINE @V407466 01616000
SPACE 01617000
MDSECT DSECT @V407466 01618000
MULTADD DS F @V407466 01619000
DS 47F UP TO 48 CCU ON ONE COMMAND EXEC.@V407466 01620000
DS 4D @V407466 01621000
MULTSIZE EQU (*-MULTADD+7)/8 @V407466 01622000
MSGAREA EQU *-MULTADD @V407466 01623000
SPACE 01624000
ORG MULTADD @V407466 01625000
DS CL3 ... @V407466 01626000
DELIM1 DS XL1 @V407466 01627000
DS CL4 CONSTANT - 'ATTACH' @V407466 01628000
DELIM2 DS XL1 @V407466 01629000
USERSIZE EQU *-MULTADD SIZE OF USER MSG IN BYTES @V407466 01630000
CONTO DS CL3 CONSTANT - 'TO ' @V407466 01631000
USERID DS CL8 USERID @V407466 01632000
OPERSIZE EQU *-MULTADD SIZE OF OPERATOR MSG IN BYTES @V407466 01633000
DELIM3 DS XL1 @V407466 01634000
CONBY DS CL3 CONSTANT - 'BY ' @V407466 01635000
ATTACHER DS CL8 ATTACHER @V407466 01636000
ASIZE EQU *-MULTADD SIZE OF ATTACHER MSG IN BYTES @V407466 01637000
EJECT 01638000
COPY EQU @V407466 01639000
OSVSCOM MSSCOM @V60B6B8 01640000
DMKVDA CSECT @V60B6B8 01641000
COPY DEVTYPES @V407466 01642000
PSA @V407466 01643000
COPY VMBLOK @V407466 01644000
COPY RBLOKS @V407466 01645000
COPY VBLOKS @V407466 01646000
COPY IOBLOKS @V407466 01647000
COPY IOER @V407466 01648000
EJECT 01649000
COPY ALLOC @V407466 01650000
COPY UDIRECT @V407466 01651000
END DMKVDA 01652000