VDD TITLE 'DMKVDD (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V407466 00002000
COPY OPTIONS @V407466 00003000
COPY LOCAL @V407466 00004000
SPACE 2 00005000
EJECT 00006000
*. 00007000
* MODULE NAME - 00008000
* DMKVDD 00009000
* 00010000
* FUNCTION - 00011000
* DMKVDDDE - 'DETACH' A VIRTUAL OR REAL DEVICE. 00012000
* 00013000
*. 00014000
DMKVDD START 0 @V407490 00015000
SPACE 00016000
DC CL8'DMKVDD' TO IDENTIFY "VIRTUAL DEVICE @V407466 00017000
* BUILD" MODULE 00018000
SPACE 00019000
USING PSA,R0 @V407466 00020000
USING VMBLOK,R11 @V407466 00021000
USING SAVEAREA,R13 @V407466 00022000
SPACE 00023000
EXTRN DMKCVTBH,DMKCVTHB,DMKCVTBD @V407466 00024000
EXTRN DMKSCNFD,DMKSCNRD,DMKSCNRU,DMKSCNVU @V407466 00025000
EXTRN DMKSCNVS,DMKSCNRN,DMKSCNVN,DMKSCNAU @V407466 00026000
EXTRN DMKLOCKQ,DMKLOCKD,DMKVDSAT @V407466 00027000
EXTRN DMKVCHDC,DMKERMSG @V407466 00028000
EXTRN DMKVDREL,DMKIOSQR @V407466 00029000
SPACE 00030000
EXTRN DMKSYSOW,DMKSYSOC OWNED LIST @V407466 00031000
EXTRN DMKPGT4P,DMKPGT4T @V407466 00032000
EXTRN DMKPGT5P,DMKPGT5T 3350 ALLOCATION ANCHORS @V407466 00033000
EXTRN DMKPGTTM,DMKPGT90 SYSTEM TEMPSPACE COUNTS @V407466 00034000
EXTRN DMKPGTP5,DMKPGTP0,DMKPGTP4 PREFERRED ALLOCATION @V407466 00035000
EXTRN DMKPGTT5,DMKPGTT0,DMKPGTT4 TEMPSPACE ALLOCATION @V407466 00036000
EXTRN DMKVDCSC,DMKDSBRD,DMKSTKIO @VA08187 00037000
EJECT 00038000
*. 00039000
* 00040000
* COMMAND LINE FORMAT - 00041000
* 00042000
* +--------+--------------------------------+ 00043000
* | | | 00044000
* | DETACH | VADDR | 00045000
* | | VADDR1-VADDR2 | 00046000
* | | VADDR . . . | 00047000
* | | | 00048000
* | | RADDR <FROM> USERID | 00049000
* | | RADDR1-RADDR2 <FROM> USERID | 00050000
* | | RADDR . . . <FROM> USERID | 00051000
* | | RADDR <FROM> SYSTEM | 00052000
* | | RADDR . . . <FROM> SYSTEM | 00053000
* | | RADDR1-RADDR2 <FROM> SYSTEM | 00054000
* | | | 00055000
* | | CHANNEL X | 00056000
* | | CHANNEL X <FROM> USERID | 00057000
* | | | 00058000
* +--------+--------------------------------+ 00059000
* 00060000
* ATTRIBUTES - 00061000
* 00062000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00063000
* 00064000
* ENTRY CONDITIONS - 00065000
* 00066000
* GPR 2 = 0 00067000
* GPR 9 = ADDRESS OF COMMAND BUFFER 00068000
* GPR 11 = ADDRESS OF USER'S VMBLOK 00069000
* GPR 12 = ADDRESS OF DMKVDDDE 00070000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00071000
* 00072000
* EXIT CONDITIONS - 00073000
* 00074000
* GPR 2 = 0 IF DEVICE HAS BEEN DETACHED, OR 00075000
* ERROR-CODE (SEE ERROR MESSAGES) IF UNSUCCESSFUL. 00076000
* 00077000
* CALLS TO OTHER ROUTINES - 00078000
* 00079000
* DMKSCNFD 00080000
* DMKCVTHB 00081000
* DMKSCNRU 00082000
* DMKSCNVU 00083000
* DMKSCNRN 00084000
* DMKSCNVN 00085000
* DMKSCNAU 00086000
* DMKERMSG 00087000
* DMKVDREL 00088000
* DMKCVTBH 00089000
* DMKQCNWT 00090000
* DMKVCHDC 00091000
* DMKVDCSC 00092000
* DMKLOCKD 00093000
* DMKLOCKQ 00094000
* DMKCVTBD 00095000
* 00096000
* EXTERNAL REFERENCES - 00097000
* 00098000
* NONE 00099000
* 00100000
* TABLES / WORK AREAS - 00101000
* 00102000
* VMBLOK 00103000
* RDEVBLOK 00104000
* VCHBLOK 00105000
* VCUBLOK 00106000
* VDEVBLOK 00107000
* VCUDVTBL 00108000
* VCHCUTBL 00109000
* VMCHTBL 00110000
* 00111000
* REGISTER USAGE - 00112000
* 00113000
* GPR 6 = ADDRESS OF VCHBLOK 00114000
* GPR 7 = ADDRESS OF VCUBLOK 00115000
* GPR 8 = ADDRESS OF RDEVBLOK/VDEVBLOK 00116000
* GPR 9 = ADDRESS OF COMMAND BUFFER 00117000
* GPR 11 = ADDRESS OF USER'S VMBLOK 00118000
* GPR 12 = BASE REGISTER 00119000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00120000
* 00121000
* GPRS 0-5 AND 14-15 ARE WORK REGISTERS. 00122000
* GPR 10 IS ALSO A WORK REGISTER 00123000
* 00124000
* NOTES - NONE 00125000
* 00126000
* OPERATION - 00127000
* 00128000
* 1. DMKVDCSC IS CALLED TO PERFORM SYNTAX CHECKING 00129000
* ON THE COMMAND LINE; DMKVDCSC WILL CALL DMKCFCSC TO 00130000
* DETERMINE IF THE FIRST OPERAND ON THE COMMAND IS A RANGE 00131000
* OF DEVICE ADDRESSES. REGARDLESS OF WHETHER A RANGE OR A 00132000
* SINGLE ADDRESS OR MULTIPLE ADDRESSES ARE SPECIFIED ON THE 00133000
* COMMAND LINE, DMKSCNFD AND DMKCVTHB ARE USED TO OBTAIN AND 00134000
* CONVERT FROM HEX TO BINARY THE DEVICE ADDRESSES. 00135000
* IF THE DEVICE ADDRESS IS MISSING OR INVALID, OR THE COMMAND 00136000
* FAILS TO PASS THE COMMAND SYNTAX CHECKING, AN ERROR CODE 00137000
* IS RETURNED TO THE CALLER (DMKVDD) AND DMKVDD ISSUES 00138000
* AN APPROPRIATE ERROR MESSAGE. 00139000
* 00140000
* 2. A CHECK IS MADE FOR THE ERROR CONDITIONS 00141000
* OF THE DEVICE BEING OFFLINE, SHARED, CP OWNED, OR NOT 00142000
* DEDICATED TO THE SPECIFIED USER (ERROR CODE AND MESSAGE 00143000
* RETURNED IF NOT). IF THESE CHECKS ARE OK, THEN THE 00144000
* APPROPRIATE VMBLOK AND VIRTUAL DEVICE ADDRESS ARE 00145000
* REFERENCED IN THE NEXT STEP. 00146000
* 00147000
* 3. THE VIRTUAL DEVICE ADDRESS IS CHECKED FOR VALIDITY, AND 00148000
* DMKSCNVU IS CALLED TO OBTAIN THE VCHBLOK, VCUBLOK, AND 00149000
* VDEVBLOK (ERROR CODE AND MESSAGE IF NOT FOUND). IF OK, THEN 00150000
* THE DMKVDREL SUBROUTINE IS CALLED TO PERFORM THE NECESSARY 00151000
* INTERNAL FUNCTIONS TO RELEASE THE VIRTUAL DEVICE. 00152000
* 00153000
* 4. THEN THE VDEVADD ADDRESS IN VDEVBLOK IS SET TO X'FFFF' TO 00154000
* INDICATE THE DEVICE NO LONGER EXISTS, AND THE CORRESPONDING 00155000
* VCUDVTBL ENTRY IN THE VCUBLOK IS ALSO SET TO X'FFFF'. IF ALL 00156000
* THE VIRTUAL DEVICES ON THIS CONTROL UNIT HAVE BEEN RELEASED, 00157000
* THEN THE VCUADD IN THE VCUBLOK, AND THE CORRESPONDING VCHCUTBL 00158000
* ENTRY IN THE VCHBLOK ARE ALSO SET TO X'FFFF'. SIMILARLY 00159000
* (IF THIS WAS DONE), THEN IF ALL THE VIRTUAL CONTROL UNITS 00160000
* ON THE CHANNEL HAVE BEEN RELEASED, THEN THE VCHADD IN THE 00161000
* VCHBLOK AND THE CORRESPONDING VMCHTBL ENTRY IN THE VMBLOK 00162000
* ARE ALSO SET TO X'FFFF'. 00163000
* 00164000
* 5. WHEN DETACHING A DEDICATED DASD DEVICE, DMKVDD WILL 00165000
* CREATE AND STACK (DMKSTKIO) A DEVICE END INTERRUPT IOBLOK 00166000
* FOR DMKDSBRD TO READ THE VOLUME LABEL. THIS WILL ENSURE 00167000
* THAT THE VOLUME SERIAL OF THE PACK THAT WAS ACTUALLY ON 00168000
* THE DRIVE WILL BE MOVED TO THE RDEVBLOK AND QUERY REQUESTS 00169000
* WILL REFLECT THE TRUE VOLUME SERIAL ON THE DRIVE. 00170000
* 00171000
* 6. IF A REAL DEVICE WAS DETACHED, MESSAGES ARE SENT TO THE 00172000
* CALLER, AND TO THE USER TO WHOM THE DEVICE BELONGED, 00173000
* INDICATING THAT THE DEVICE HAS BEEN DETACHED, AND RETURN IS 00174000
* MADE TO THE CALLER. 00175000
* 00176000
* 7. FOR A VIRTUAL DEVICE, THE CALLER (USER) IS SENT A MESSAGE 00177000
* THAT THE DEVICE HAS BEEN DETACHED, AND RETURN IS MADE TO HIM. 00178000
* 00179000
* 8. FOR THE "DETACH CHANNEL" COMMAND, THE COMMAND LINE IS 00180000
* SCANNED FOR PROPER FORMAT AND THAT THE USER HAS A HIGH 00181000
* ENOUGH COMMAND LEVAL CLASS TO ISSUE THE COMMAND. IF THE 00182000
* COMMAND LINE IS CORRECT A CALL IS MADE TO DMKVCHDC TO 00183000
* DO THE ACTUAL DETACHING. 00184000
* 00185000
* 9. ERROR MESSAGES WILL BE ISSUED FOR THOSE DEVICE ADDRESSES 00186000
* IN THE RANGE OR THOSE MULTIPLE ADDRESSES ON THE COMMAND LINE 00187000
* WHICH CANNOT BE DETACHED. COMMAND PROCESSING WILL NOT 00188000
* TERMINATE WHEN ONE OF THE DEVICES CANNOT BE DETACHED. 00189000
* INSTEAD, SUCCESSFUL DETACH MESSAGES AND ERROR MESSAGES 00190000
* WILL BE ISSUED UNTIL ALL DEVICE ADDRESSES ON THE COMMAND 00191000
* LINE HAVE BEEN PROCESSED. 00192000
* 00193000
* RESPONSES - 00194000
* 00195000
* 'TYPE VADDR DETACHED' 00196000
* 'VADDR . . . DETACHED' 00197000
* 'VADDR1-VADDR2 DETACHED' 00198000
* 00199000
* 'TYPE RADDR DETACHED $USERID$ VADDR' 00200000
* 'RADDR . . . DETACHED $USERID$' 00201000
* 'RADDR1-RADDR2 DETACHED $USERID$' 00202000
* 00203000
* 'TYPE RADDR DETACHED $USERID$ VADDR BY $USERID$' 00204000
* 'RADDR . . . DETACHED $USERID$ BY $USERID$' 00205000
* 'RADDR1-RADDR2 DETACHED $USERID$ BY $USERID$' 00206000
* 00207000
* 'DASD RADDR DETACHED SYSTEM $VOLID$' 00208000
* 'DASD RADDR DETACHED SYSTEM $VOLID$ BY $USERID$' 00209000
* 'RADDR . . . DETACHED SYSTEM BY $USERID$' 00210000
* 'RADDR1-RADDR2 DETACHED SYSTEM BY $USERID$' 00211000
* 00212000
* ERROR MESSAGES - 00213000
* 00214000
* DMKVDD006E INVALID DEVICE TYPE - RADDR 00215000
* DMKVDD020E USERID MISSING OR INVALID 00216000
* DMKVDD021E RADDR MISSING OR INVALID 00217000
* DMKVDD022E VADDR MISSING OR INVALID 00218000
* DMKVDD034E CHANNEL MISSING OR INVALID 00219000
* DMKVDD040E DEV ADDR DOES NOT EXIST 00220000
* DMKVDD045E $USERID$ NOT LOGGED ON 00221000
* DMKVDD046E TYPE RADDR OFFLINE 00222000
* DMKVDD121E TYPE RADDR NOT ATTACHED TO $USERID$ 00223000
* DMKVDD123E DASD RADDR CP OWNED 00224000
* DMKVDD124E DASD RADDR IN USE BY NNN USERS 00225000
* DMKVDD135E TYPE RADDR NOT DETACHED; CHAN XX DEDICATED 00226000
* DMKVDD140E TYPE RADDR ATTACHED TO $USERID$ 00227000
* DMKVDD142E TYPE RADDR NOT DRAINED 00228000
* DMKVDD143E TYPE RADDR IN USE BY SYSTEM 00229000
* DMKVDD273E DETACH REJ VIRT MACH TRACING I/O 00229500
*. 00230000
SPACE 2 00231000
DMKVDDDE RELOC DETACH A DEVICE FROM A USER'S VM @V407466 00232000
XC VDDBITS(4),VDDBITS CLEAR FLAG-BIT WORD @V407466 00233000
* (SAVEWRK1) 00234000
OI VDDBITS+1,DETACH INDICATE "DETACH" COMMAND @V407466 00235000
SLR R2,R2 CLEAR R2 FOR ZERO RETURN CODE @V407466 00236000
ST R2,SAVER2 SAVE IN CASE NO ERRORS @V407466 00237000
LA R0,MULTSIZE SIZE OF WORKAREA @V407466 00238000
CALL DMKFREE ACQUIRE STORAGE @V407466 00239000
LR R4,R1 TRANSFER ADDR TO R4 @V407466 00240000
USING DETMSG,R4 ESTABLISH ADDRESSABILITY @V407466 00241000
MVI DETMSG,BLANK PROPAGATE BLANKS THROUGH WORKAREA@V407466 00242000
MVC DETMSG+1((MULTSIZE*8)-1),DETMSG ... @V407466 00243000
SPACE 2 00244000
* R9 POINTS TO COMMAND LINE 00245000
* R4 POINTS TO ACQUIRED WORK AREA 00246000
EJECT 00247000
CALL DMKVDCSC SCAN COMMAND LINE @V407466 00248000
LTR R2,R2 ANY ERRORS @V407466 00249000
BNZ ERRTABL-8(R2) BRANCH TO ERROR ROUTINE @V407466 00250000
TM VDDBITS,RANGE IS IT A RANGE? @VA11655 00250200
BZ NOTRANGE YES, BRANCH. @VA11655 00250400
OI RAFLG,FRSTHRU TURN ON FLAG. @VA11655 00250600
NOTRANGE DS 0H @VA11655 00250800
TM VDDBITS,VDETACH DETACH 'VIRTUAL'? @V407466 00251000
BZ DETREAL NO, MUST BE DETACH REAL @V407466 00252000
LR R10,R11 VMBLOK IN R10 ALSO FOR 'LOCKUSER'@V407466 00253000
TM VDDBITS,CHANNEL IS IT DETACH CHANNEL? @V407466 00254000
BO DEDCHAN YES, DO IT! @V407466 00255000
LA R5,SCNVU BR ADDRESS FOR FIND VIRTUAL @V407466 00256000
* BLOCKS 00257000
TM VDDBITS,MULTR MULTIPLES SPECIFIED @V407466 00258000
BZ INIT INITIALIZE FOR RANGE/SINGLE ADDR @V407466 00259000
BAL R5,MULTIPLE ESTABLISH MULTIPLE REGISTERS @V407466 00260000
SCNVU CALL DMKSCNVU FIND OUT WHAT KIND OF DEVICE @V407466 00261000
BNZ UNKNOWN IT'S NOT EVEN THERE @V407466 00262000
B CHKVTYPE CHECK WHAT KIND OF DEVICE @V407466 00263000
SPACE 2 00264000
DETREAL EQU * FIRST CHECK FOR CHANNEL @V407490 00265000
TM VDDBITS,CHANNEL DETACH CHANNEL ??? @V407490 00266000
BO DEDCHAN YES, BETTER GO DO IT @V407490 00267000
TM VMOSTAT,VMSYSOP IS CALLER SYSTEM OPERATOR? @V407490 00268000
BO DTSYSOP YES @V407466 00269000
OI VDDBITS,NSYSOP THREE MESSAGES RESULTANT @V407466 00270000
DTSYSOP EQU * @V407466 00271000
LA R5,FINDRDEV BRANCH ADDRESS @V407466 00272000
TM VDDBITS,MULTR MULTIPLES SPECIFIED? @V407466 00273000
BZ INIT YES, ACQUIRE STORAGE FOR MESSAGE @V407466 00274000
BAL R5,MULTIPLE GET DEVICE ADDRESS @V407466 00275000
FINDRDEV BAL R5,GETRDEV FIND RDEVBLOK @V407466 00276000
USING RDEVBLOK,R8 @V407466 00277000
TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE ? @V407466 00278000
BO DEVOFFL BRANCH IF YES @V407466 00279000
TM RDEVTYPC,CLASDASD+CLASTAPE DISK OR TAPE ? @V407466 00280000
BZ DETRLDV NO -- SKIP THESE TESTS @V407466 00281000
TM RDEVFLAG,RDEVOWN IS IT A CP OWNED VOLUME ? @V407466 00282000
BO DEVOWND BRANCH IF YES @V407466 00283000
CLC RDEVLNKS,=H'0' Are there links to device? HRC039DK 00284100
BNE ERR16 Can't detach if there are links HRC039DK 00284200
DETRLDV EQU * TEST FOR DETACH FROM SYSTEM @V407466 00286000
TM VDDBITS,ATTSYST "DETACH FROM SYSTEM" @V407466 00287000
BO DETSYST YES - GO DO IT @V407466 00288000
TM RDEVSTAT,RDEVDED IS IT A DEDICATED DEVICE ? @V407466 00289000
BZ ERR68 NO @V407466 00290000
CLM R10,B'0111',RDEVUSER+1 IS THIS THE RIGHT USER ? @V407466 00291000
BNE ERR68 NO - ERROR @V407466 00292000
CLC RDEVTYPC(2),=AL1(CLASDASD,TYP2305) 2305 ? @V407466 00293000
BNE DETNDRM NO -- NORMAL DEVICE @V407466 00294000
TM RDEVADD+1,X'07' TRY TO DETACH AN EXPOSURE ? @V407466 00295000
BNZ VDD021 YUP, BAD NEWS. @V407466 00296000
OI VDDBITS,DED2305 INDICATE 2305 TYPE DETACH @V407466 00297000
SPACE 00298000
DETNDRM EQU * @V407466 00299000
BAL R5,SWPUSER GET THE DETACHEE'S VMBLOK @V407466 00300000
TM VMRSTAT,VMLOGON+VMLOGOFF IS DETACHEE LOGGING OFF@V407466 00301000
BNZ NOTLOGD YES, DON'T ALLOW THE DETACH @V407466 00302000
TM VMOSTAT,VMKILL IS DETACHEE BEING FORCED @V407466 00303000
BNZ NOTLOGD YES, DON'T ALLOW THE DETACH @V407466 00304000
LH R1,RDEVATT LOAD ATTACHED VIRTUAL DEVICE @V407466 00305000
* ADDRESS 00306000
LR R2,R8 SAVE RDEVBLOK ADDR FOR LATER @V407466 00307000
B DETRDEV REJOIN DEVICE DETACH CODE @V407466 00308000
DROP R8 @V407466 00309000
SPACE 00310000
INIT L R1,DEVADDR SINGLE ADDR/1ST RANGE RADDR @V407466 00311000
LR R9,R1 ... TO R9 @V407466 00312000
XC SAVEWRK8(L'SAVEWRK8),SAVEWRK8 CLEAR @V407466 00313000
BR R5 RETURN TO MAINLINE @V407466 00314000
SPACE 00315000
USING MDSECT,R4 ADDRESSABILITY @V407466 00316000
MULTIPLE L R9,MULTADD FIRST MULTIPLE ADDRESS @V407466 00317000
LR R1,R9 DEVICE ADDRESS @V407466 00318000
ST R4,SAVEWRK8 SAVE PTR @V407466 00319000
BR R5 RETURN TO MAINLINE @V407466 00320000
SPACE 00321000
USING VDEVBLOK,R8 @V407466 00322000
CHKVTYPE CLC VDEVTYPC(2),=AL1(CLASDASD,TYP2305) DETACH ZEUS @V407466 00323000
BNE DETRDEV NO -- NORMAL DEVICE @V407466 00324000
TM VDEVSTAT,VDEVDED IS THIS A DEDICATED 2305? @V407466 00325000
BZ DETRDEV NOPE, THEN 1 EXPOSURE IS OK @V407466 00326000
TM DEVADDR+3,X'07' YUP, IS IT BASE ADDRESS? @V407466 00327000
BNZ VDD022 NOPE, BAD NEWS. @V407490 00328000
OI VDDBITS,DED2305 IND. MESSING WITH DEDICATED 2305@V407466 00329000
DETRDEV EQU * DETACH OF REAL DEVICE @V407466 00330000
ST R9,SAVEWRK7 SAVE R9 FOR LATER @V407466 00331000
LA R9,8(0,0) LOOP COUNTER IF 2305 @V407466 00332000
ST R1,VIRTADD SAVE THE VIRTUAL ADDRESS @V407466 00333000
BAL R5,LOKUSER LOCK THE USER'S BLOCKS @V407466 00334000
L R1,VIRTADD VIRTUAL DEVICE ADDRESS @V407466 00335000
DETDRUM EQU * ENTER HERE FOR 2305 DETACH @V407466 00336000
CALL DMKSCNVU GET THE VDEVBLOK ADDRESS @V407466 00337000
BNZ INVADDF1 BRANCH IF NOT FOUND @V407466 00338000
USING VCHBLOK,R6 @V407466 00339000
USING VCUBLOK,R7 @V407466 00340000
AIF (NOT &DEDCH).NOTDED2 @V407466 00341000
TM VCHSTAT,VCHDED IS THIS CHANNEL DEDICATED @V407466 00342000
BO CHANDED YES - CANNOT DETACH THIS DEVICE @V407466 00343000
.NOTDED2 ANOP 00344000
CLI VDEVTYPC,CLASDASD DASD TYPE DEVICE @V407466 00345000
BNE VIRTDET SEE IF 'VDETACH' IS INDICATED @V407466 00346000
TM VDEVSTAT,VDEVDED DED. REAL VOLUME (NOT MDISK) @V407466 00347000
BZ VIRTDET NO, DON'T READ LABEL FOR MDISK @V407466 00348000
TM VDDBITS,DED2305 2305 ? @VA07801 00349000
BZ SKIP2305 GO AHEAD WITH UNSOL. DE @VA07801 00349100
TM VDEVADD+1,X'07' BASE EXPOSURE ? @VA07801 00349200
BNZ VIRTDET NO, SKIP UNSOL DE @VA07801 00349300
SKIP2305 LR R3,R8 SAVE VDEVBLOK ADDR TEMP @VA07801 00349400
L R8,VDEVREAL GET RDEVBLOK ADDRESS @V407466 00350000
LA R0,IOBSIZE SIZE OF IOBLOK IN DBL. WDS. @V407466 00351000
CALL DMKFREE GO GET IOBLOK @V407466 00352000
LR R2,R1 IOBLOK ADDRESSED VIA R2 @V407466 00353000
USING IOBLOK,R2 ADDRESSABILITY @V407466 00354000
XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK @V407466 00355000
ST R2,IOBLINK IOBLOK POINTS TO ITSELF @V407466 00356000
CALL DMKSCNRD GET DEVICE ADDR IN 'CUU' FORM @V407466 00357000
STH R1,IOBRADD STORE IN IOBLOK @V407466 00358000
LR R8,R3 RESTORE VDEVBLOK ADDR TO R8 @V407466 00359000
L R1,ASYSVM SET USER TO SYSTEM @V407466 00360000
ST R1,IOBUSER SAVE IN IOBLOK @V407466 00361000
L R1,=A(DMKDSBRD) RETURN ADDRESS AFTER UNSTK @VA08187 00362000
ST R1,IOBIRA ... @V407466 00363000
MVI IOBCSW+4,DE INDICATE UNSOLICITED INTERRUPT @V407466 00364000
OI IOBSPEC,IOBUNSL FLAG AS UNSOLICITED INTERR. @V407466 00365000
LR R1,R10 SAVE VMBLOK PTR. TEMP. @V407466 00366000
LR R10,R2 IOBLOK ADDRESS TO R10 @V407466 00367000
CALL DMKSTKIO STACK IOBLOK @V407466 00368000
LR R10,R1 RESTORE VMBLOK PTR. @V407466 00369000
DROP R2 @V407466 00370000
VIRTDET TM VDDBITS,VDETACH DETACH VIRTUAL?? @V407466 00371000
BO DETRELSE YES - ALLOW MSG FROM DMKVDREL @V407466 00372000
NI VDEVSTAT,X'FF'-VDEVCATT SUPPRESS VDDRL MESSAGE @V407466 00373000
DETRELSE EQU * @V407466 00374000
TM VDEVTYPC,CLASTAPE TAPE DEV ? HRC003DK 00374010
BNO DETRELS2 HRC003DK 00374020
TM VDDBITS+1,TPNORUN DETACH LEAVE ? HRC003DK 00374030
BNO DETRELS2 HRC003DK 00374040
OI VDEVFLG2,VDEVTNR HRC003DK 00374050
DETRELS2 EQU * HRC003DK 00374060
TM VDEVTYPC,CLASURI+CLASURO IS IT UNIT RECORD @VA07232 00374100
BNO MAINLINE NO DONT BOTHER @VA07232 00374200
TM VDEVSFLG,VDEVSVC ACTIVE SPOOLING ? @VA07232 00374300
BO EMSG143E YES,NOT ALLOWED TO DETACH @VA07232 00374400
MAINLINE EQU * @VA07232 00374500
CALL DMKVDREL RELEASE THE DEVICE @V407466 00375000
LOADFFS L R2,FFS LOAD FFFFFFFF @V407466 00376000
SR R3,R3 ZERO INDEX REGISTER @V407466 00377000
ST R4,SAVEWRK6 SAVE R4 TEMPORARILY @V407466 00378000
LA R4,COUNT4 LOAD INCREMENT REGISTER @V407490 00379000
LA R5,COUNT28 LOAD COMPARAND REGISTER @V407490 00380000
LH R1,VDEVADD GET VIRTUAL DEVICE ADDRESS @V407466 00381000
AR R1,R1 MULTIPLY IT BY 2 @V407466 00382000
STH R2,VDEVADD INDICATE DEVICE NO LONGER EXISTS @V407466 00383000
STH R2,VCUDVTBL(R1) REMOVE RDEVBLOK INDEX FROM TABLE@V407466 00384000
DETCULP CL R2,VCUDVTBL(R3) ANY MORE DEVICES ON THIS CU ? @V407466 00385000
BNE DETDONE BRANCH IF YES @V407466 00386000
BXLE R3,R4,DETCULP BRANCH IF MORE TABLE ENTRIES @V407466 00387000
LH R1,VCUADD LOAD VIRTUAL CONTROL UNIT ADDRESS@V407466 00388000
SRL R1,3 MULTIPLY IT BY 2 @V407466 00389000
STH R2,VCUADD INDICATE CONTROL UNIT NO LONGER @V407466 00390000
* EXISTS 00391000
STH R2,VCHCUTBL(R1) REMOVE VCUBLOK INDEX FROM TABLE @V407466 00392000
SR R3,R3 ZERO INDEX REGISTER @V407466 00393000
DETCHLP CL R2,VCHCUTBL(R3) ANY MORE CTL UNITS ON THIS @V407466 00394000
* CHAN ? 00395000
BNE DETDONE BRANCH IF YES @V407466 00396000
BXLE R3,R4,DETCHLP BRANCH IF MORE TABLE ENTRIES @V407466 00397000
LH R1,VCHADD LOAD VIRTUAL CHANNEL ADDRESS @V407466 00398000
SRL R1,7 MULTIPLY IT BY 2 @V407466 00399000
STH R2,VCHADD INDICATE CHANNEL NO LONGER EXISTS@V407466 00400000
STH R2,VMCHTBL(R1) REMOVE VCHBLOK INDEX FROM TABLE @V407466 00401000
DETDONE EQU * DETACH FINISHED @V407466 00402000
L R4,SAVEWRK6 RESTORE R4 @V407466 00403000
TM VDDBITS,DED2305 IS THIS A DEDICATED 2305? @V407466 00404000
BZ DETRESP NOPE, BR. @V407466 00405000
L R1,VIRTADD VIRTUAL DEVICE ADDRESS @V407466 00406000
LA R1,1(0,R1) MOVE TO NEXT EXPOSURE @V407466 00407000
ST R1,VIRTADD . . . @V407466 00408000
BCT R9,DETDRUM DETACH ALL EIGHT AT ONCE @V407466 00409000
S R1,F8 RESTORE ORIGINAL ADDRESS @V407466 00410000
ST R1,VIRTADD . . . @V407466 00411000
DETRESP EQU * @V407466 00412000
BAL R5,FREUSER UNLOCK USER + SWAP VMBLOKS @V407466 00413000
L R9,SAVEWRK7 RESTORE R9 @V407466 00414000
TM VDDBITS,MULTR MULTIPLES BEING PROCESSED @V407466 00415000
BO MULTMSG YES, FORMAT MULT MSG @V407466 00416000
TM VDDBITS,RANGE RANGE BEING PROCESSED @V407466 00417000
BO RAMSG NO, NORMAL MESSAGE PATH @V407466 00418000
CALL DMKSCNVN GET EBCDIC TYPE-NAME @V407466 00419000
LR R3,R1 ...INTO R3 @V407466 00420000
DROP R6,R7,R8 @V407466 00421000
RESPOND EQU * MAXIMUM OF THREE MESSAGES @V407466 00422000
USING DETMSG,R4 @V407466 00423000
ST R3,DETDTYP TYPE-NAME OF AFFECTED DEVICE @V407466 00424000
MVI DETDEL1,BLANK DELIMITER @V407466 00425000
L R1,VIRTADD VIRTUAL ADDRESS @V407466 00426000
CALL DMKCVTBH ...INTO PRINTABLE FORM @V407466 00427000
STCM R1,B'0111',DETADD1 INTO TWO PLACES @V407466 00428000
MVI DETDEL2,BLANK DELIMITER @V407466 00429000
RESPOND2 MVC RADET,=CL8'DETACHED' CONSTANT 'DETACHED' @V407466 00430000
TM VDDBITS,ATTSYST DETACH FROM 'SYSTEM' @V407466 00431000
BO OPERMSG YES, SKIP USER MSG @V407466 00432000
LA R0,RASIZE1 MSG LENGTH @V407466 00433000
TM VDDBITS,VDETACH IS THIS 'DETACH VIRTUAL' ? @V407466 00434000
BZ SNDUSR1 NO @V407466 00435000
SLR R2,R2 NO EXTRA PARMS FOR QCNWT @V407466 00436000
TM VMMLVL2,VMMIMSG USER WANT INFO MSGS? @V407466 00437000
BO SNDFRET YES - SEND MSG AND FRET BUFFER @V407466 00438000
TM VDDBITS+1,DETERR ERROR MSG BEING PROCESSED @V407466 00439000
BCR 1,R6 YES, RETURN TO PROCESS ERROR @V407466 00440000
LA R0,MULTSIZE NO - GET MSG SIZE @V407466 00441000
LR R1,R4 AND START ADDR @V407466 00442000
CALL DMKFRET RELEASE THE BUFFER @V407466 00443000
B VDDEXIT EXIT @V407466 00444000
SPACE 2 00445000
SNDUSR1 EQU * SWITCH TO TARGET USER'S VMBLOK @V407466 00446000
CLR R10,R11 DETACH FROM HIMSELF ? @V407466 00447000
BE OPERMSG YES - SKIP SHORT MESSAGE @V407466 00448000
MVC DETBY,=CL3'BY ' ADD OPERATOR CUE @V407466 00449000
MVC DETUSER(L'VMUSER),VMUSER ...FOR FORCED DETAC@V407466 00450000
MVI DETDEL3,BLANK DELIMITER @V407466 00451000
BAL R5,SWPUSER SWITCH TO USER'S VMBLOK @V4M0193 00452000
LA R0,DETSIZE5 LENGTH @V407466 00453000
LR R1,R4 MESSAGE START @V407466 00454000
CALL DMKQCNWT,PARM=NORET @V407466 00455000
BAL R5,SWPCALL BACK TO CALLER'S VMBLOK @V407466 00456000
OPERMSG EQU * BUILD MESSAGE FOR @V407466 00457000
* ATTACHER/DETACHER 00458000
MVC DETUSER2,CMDUSER USERID OF DETACHEE @V407466 00459000
LA R0,DETSIZE2 MSG LENGTH @V407466 00460000
TM VDDBITS,RANGE RANGE BEING PROCESSED @V407466 00461000
BO CHKSYS YES, SEE IF ATTACH TO SYSTEM @V407466 00462000
MVC DETADD2(4),DETADD1 MOVE VIRTUAL ADDRESS @V407466 00463000
* FURTHER OUT 00464000
MVI DETDEL4,BLANK FIX UP BLANKS FOR SPACING @V407466 00465000
BAL R5,CVTRADD CONVERT REAL ADDRESS TO HEX @V407466 00466000
STCM R1,B'0111',DETADD1 ...INTO OPERATOR MESSAGES @V407466 00467000
LA R0,DETSIZE3 CURRENT LENGTH @V407466 00468000
CHKSYS TM VDDBITS,ATTSYST ATTACH TO SYSTEM ? @V407466 00469000
BZ SNDOPMG NO @V407466 00470000
MVC DETUSER2(8),=CL8'SYSTEM' @V407466 00471000
TM VDDBITS,RANGE IS IT A RANGE? @VA11655 00471025
BO SNDOPMG YES! SEND MESSAGE @VA11655 00471050
MVC DETDEL4-1(6),CMDUSER THIS IS THE VOLID @VA08940 00472100
SNDOPMG EQU * TYPE MESSAGE TO ATTACHER @V407466 00473000
LR R1,R4 MESSAGE START @V407466 00474000
CALL DMKQCNWT,PARM=NORET @V407466 00475000
TM VDDBITS,NSYSOP ATTACH BY SYSTEM OPERATOR ? @V407466 00476000
BZ CLEANXT YES - JUST EXIT @V407466 00477000
TM VDDBITS,RANGE RANGE BEING PROCESSED @V407466 00478000
BO RAFORM YES, FORMAT RANGE @V407466 00479000
MVC DETBY2(3),=C'BY ' CONSTANT 'BY' @V407466 00480000
MVC DETUSER3(L'VMUSER),VMUSER DETACHER @V407466 00481000
LA R0,FULLEN FULL LENGTH @V407490 00482000
SENDSYS LA R2,OPERATOR SEND MESSAGE TO SYSTEM OPERATOR @V407466 00483000
SNDFRET EQU * SEND MESSAGE + RELEASE BUFFER @V407466 00484000
LR R1,R4 MESSAGE START @V407466 00485000
TM VDDBITS+1,DETERR ERROR MESSAGE TO PROCESS? @V407466 00486000
BO QCNWT ISSUE MSG, DON'T RELEASE STORAGE @V407466 00487000
LA R3,MULTSIZE SIZE OF STORAGE TO RELEASE @V407466 00488000
CALL DMKQCNWT,PARM=NORET+DFRET(,R2) ISSUE MSG + REL @V407466 00489000
* STOR. 00490000
B VDDEXIT EXIT @V407466 00491000
SPACE 2 00492000
QCNWT CALL DMKQCNWT,PARM=NORET(,R2) ISSUE MESSAGE @V407466 00493000
BR R6 RETURN TO PROCESS ERROR MSG @V407466 00494000
SPACE 00495000
RAMSG DS 0H @VA11236 00496010
******************************************************************* 00496020
* AT THIS POINT R9 HAS THE ADDRESS OF THE DEVICE WE JUST * 00496030
* DETACHED. FIRST TIME THRU RADDR1 AND RADDR2 (SAVEWRK8) ARE ZERO* 00496040
* SUBSEQUENT ENTRYS RADDR1 WILL BE THE FIRST DEVICE WE DETACHED * 00496050
* AND RADDR2 WILL BE THE SECOND LAST DEVICE WE DETACHED AND WILL * 00496060
* BE UPDATED WITH R9 DEVICE SHORTLY. RADDR1 AND RADDR2 WILL * 00496070
* THEN BE USED AS INPUT TO CONVERT FOR THE MESSAGE TEXT * 00496080
******************************************************************* 00496090
TM RAFLG,FRSTHRU IS THIS THE FOIST TIME TROO @VA11236 00496100
BZ NOTFIRST NO'SNOT UPDATE RADDR2 @VA11236 00496110
STH R9,RADDR1 YES'TIS UPDATE RADDR1 @VA11236 00496120
NI RAFLG,X'FF'-FRSTHRU REMOVE INDICATOR @VA11236 00496130
B ENDRANGE GO CHECK FOR MORE DETACHS @VA11236 00496140
NOTFIRST DS 0H @VA11236 00496150
STH R9,RADDR2 SHOW THE LAST DETACHED DEVICE @VA11236 00496160
ENDRANGE DS 0H @VA11236 00496170
TM VDDBITS,DED2305 WORKING WITH 2305 ?? @V407490 00502000
BZ ENDRNGE1 NOPE , BRANCH @V407490 00503000
LA R9,7(,R9) ADD EIGHT EXPOSURES FOR DRUM @V407490 00504000
ENDRNGE1 CH R9,ENDRADDR END OF RANGE ?? @V407490 00505000
BNL RAMSG2 YES, ISSUE MESSAGE @V407490 00506000
NI VDDBITS,X'FF'-DED2305 RESET DRUM FLAG @V407490 00507000
LA R9,1(,R9) INCREM RANGE RADDR @V407490 00508000
LR R1,R9 NEXT ADDR TO R1 @V407466 00509000
USING DETMSG,R4 ADDRESSABILITY FOR MSG @V407466 00510000
MVI DETMSG,BLANK PROPAGATE BLANKS THROUGH @V407466 00511000
MVC DETMSG+1((MULTSIZE*8)-1),DETMSG MSG AREA @V407466 00512000
TM VDDBITS,VDETACH DETACH 'VIRTUAL' @V407466 00513000
BO SCNVU FIND VIRTUAL BLOCKS @V407466 00514000
B FINDRDEV OTHERWISE, FIND REAL DEVICE @V407466 00515000
SPACE 2 00519000
USING DETMSG,R4 MSG AREA ADDRESSABILITY @V407466 00520000
RAMSG2 SLR R1,R1 CLEAR R1 @V407466 00521000
LH R1,RADDR2 2ND RANGE RADDR @V407466 00522000
LTR R1,R1 FULL RANGE FOR MSG @V407466 00523000
BNZ CONVERT YES, GO FORMAT MSG @V407466 00524000
LH R1,RADDR1 FIRST ADDRESS IN RANGE @V407466 00525000
LTR R1,R1 IS IT THERE? @V407466 00526000
BZ CLEANXT ALL DONE, GET OUT @V407466 00527000
B CONVERT2 OTHERWISE SINGLE MSG @V407466 00528000
SPACE 2 00529000
CONVERT CALL DMKCVTBH CONVERT ADDR @V407466 00530000
STCM R1,B'0111',RACUU2 2ND RADDR IN RANGE @V407466 00531000
MVI RADASH,DASH RANGE DELIMITER '-' @V407466 00532000
MVC RADEL1,BLANKS DELIMITER @V407466 00533000
SINGLE LH R1,RADDR1 1ST RADDR IN RANGE @V407466 00534000
CONVERT2 CALL DMKCVTBH CONVERT ADDR @V407466 00535000
STCM R1,B'0111',RACUU1 1ST ADDR IN RANGE @V407466 00536000
B RESPOND2 CONTINUE TO FORMAT @V407466 00537000
SPACE 2 00538000
RAFORM MVI DETDEL4,BLANK DELIMITER @V407466 00539000
MVC DETBY3,=CL3'BY ' CONSTANT 'BY ' @V407466 00540000
MVC DETUSER4,VMUSER DETACHER @V407466 00541000
LA R0,DETSIZE4 DATA LENGTH @V407466 00542000
B SENDSYS SEND MESSAGE TO SYSTEM OPERATOR @V407466 00543000
SPACE 2 00544000
CLEANXT EQU * @V407466 00545000
TM VDDBITS+1,DETERR ERROR MESSAGE IN PROCESS @V407466 00546000
BCR 1,R6 YES, RETURN TO PROCESS ERROR @V407466 00547000
* MESSAGE 00548000
LR R1,R4 MESSAGE BUFFER @V407466 00549000
LA R0,MULTSIZE @V407466 00550000
CALL DMKFRET @V407466 00551000
DROP R4 @V407466 00552000
VDDEXIT EQU * RETURN TO DMKCFM @V407466 00553000
BAL R5,SWPCALL MAKE SURE WE HAVE THE RIGHT TIMER@V407466 00554000
EXIT @V407466 00555000
EJECT 00556000
MULTMSG EQU * @V407466 00557000
USING MDSECT,R9 @V407466 00558000
LR R1,R9 ... TO R9 @V407466 00559000
SLR R7,R7 ZERO R7 @V407466 00560000
IC R7,MULTCUU NO. CUU IN MSG @V407466 00561000
LA R5,1(,R7) INCEMENT BY ONE @V407466 00562000
STC R5,MULTCUU STORE FOR LATER @V407466 00563000
L R9,SAVEWRK8 PTR TO BEGINNING OF AREA @V407466 00564000
LA R8,L'MULTADD L'CUU + L'DELIMITER @V407490 00565000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00566000
AR R9,R7 POINTER TO SLOT FOR NEXT ADDR @V407466 00567000
CALL DMKCVTBH CONVERT TO HEX FOR MSG @V407466 00568000
STCM R1,B'0111',MULTADDR SAVE ADDR IN MSG @V407466 00569000
MVI MULTDEL1,BLANK CUU DELIMITER @V407466 00570000
DROP R9 @V407466 00571000
USING MDSECT,R4 RE-EST. ADDRESSABILTIY @V407466 00572000
MULTCONT LA R4,4(,R4) SEE IF MORE ADDRS TO PROCESS @V407466 00573000
L R1,FFS X'FFFFFFFF' TO R1 @V407466 00574000
C R1,MULTADDR ANY MORE ADDRS TO PROCESS @V407466 00575000
BE FINFORM NO, FORMAT MESSAGE @V407466 00576000
L R9,MULTADDR NEXT ADDR TO PROCESS @V407466 00577000
LR R1,R9 ADDR TO R1 @V407466 00578000
NI VDDBITS,X'FF'-DED2305 RESET DRUM FLAG @V407490 00579000
TM VDDBITS,VDETACH DETACH 'VIRTUAL' @V407466 00580000
BO SCNVU YES, FIND VIRTUAL BLOCKS @V407466 00581000
B FINDRDEV OTHERWISE FIND REAL DEVICE @V407466 00582000
SPACE 2 00583000
FINFORM SLR R5,R5 ZERO R5 @V407466 00584000
IC R5,MULTCUU NO. CUU'S IN MSG @V407466 00585000
LR R7,R5 RESTORE TO R7 @V407466 00586000
LTR R5,R5 ANY ADDRS IN BUFFER? @V407466 00587000
BZ FRETBUF NO, RELEASE STORAGE AND GET OUT @V407466 00588000
LA R8,L'MULTADD L'CUU + L'DELIMITER @V407490 00589000
L R1,SAVEWRK8 MSG BUFFER ADDR @V407466 00590000
MR R4,R8 R5*R8 INTO R4-R5 @V407466 00591000
AR R5,R1 ADJUST MSG POINTER @V407466 00592000
LR R4,R5 RESTORE TO R4 @V407466 00593000
MVC MULTCON(L'MULTCON+L'MULTDEL2),=CL9'DETACHED ' @V407466 00594000
TM VDDBITS,ATTSYST DETACH FROM SYSTEM ?? @V407490 00595000
BO MULTMSG5 YES, ISSUE MESSAGE @V407490 00596000
TM VDDBITS,VDETACH DETACH VIRTUAL? @V407466 00597000
BZ MULTMSG3 NO, MUST BE DETACH REAL @V407466 00598000
SLR R2,R2 NO EXTRA PARMS FOR QCNWT @V407466 00599000
TM VMMLVL2,VMMIMSG USER WANT INFO MSGS @V407466 00600000
BO MULTMSG4 SEND MSG & FRET BUFFER @V407466 00601000
FRETBUF LA R0,MULTSIZE SIZE OF BUFFER @V407466 00602000
L R1,SAVEWRK8 ADDR OF BUFFER TO R1 @V407466 00603000
CALL DMKFRET RELEASE STORAGE @V407466 00604000
B VDDEXIT EXIT @V407466 00605000
SPACE 00606000
MULTMSG4 CH R7,=H'10' IF > 10 CUU'S - MULTIPLE LINES @V407466 00607000
BH MANY1 YES, MULTIPLE MSG LINES @V407466 00608000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00609000
LA R0,MULTSIZ1(,R7) + L'DETACHED @V407466 00610000
LA R3,MULTSIZE SIZE OF MSG BUFFER TO FRET @V407466 00611000
CALL DMKQCNWT,PARM=NORET+DFRET(,R2) @V407466 00612000
B VDDEXIT EXIT @V407466 00613000
SPACE 00614000
MANY1 BAL R5,MULTLINE ISSUE REPEATED LINES OF 10 CCU'S @V407466 00615000
LA R0,MULTSIZ1(,R7) PLUS L'DETACHED @V407466 00616000
CALL DMKQCNWT,PARM=NORET @V407466 00617000
B FRETBUF RELEASE MSG BUFFER @V407466 00618000
SPACE 00619000
MULTMSG3 CLR R10,R11 DETACH FROM HIMSELF? @V407466 00620000
BE MULTMSG5 YES, SKIP SHORT MESSAGE @V407466 00621000
MVI MULTDEL2,BLANK DELIMITER @V407466 00622000
MVC MULTBY2,=CL3'BY ' CONSTANT 'BY ' @V407466 00623000
MVC MULTUSE3(L'VMUSER),VMUSER DETACHER @V407466 00624000
LR R2,R1 SAVE R1 VALUE @V4M0193 00625000
BAL R5,SWPUSER @V407466 00626000
LR R1,R2 RESTORE R1 VALUE @V4M0193 00627000
CH R7,=H'10' IF > 10 CUU'S - MANY MSG LINES @V407466 00628000
BH MANY2 YES, MANY MSG LINES @V407466 00629000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00630000
LA R0,MULTSIZ4(,R7) MSG LENGTH @V407466 00631000
CALL DMKQCNWT,PARM=NORET @V407466 00632000
SWAP DS 0H @V4M0193 00633000
LR R2,R1 SAVE R1 VALUE @V4M0193 00634000
BAL R5,SWPCALL SWITCH BACK TO CALLER'S VMBLOK @V4M0193 00635000
LR R1,R2 RESTORE R1 VALUE @V4M0193 00636000
SPACE 00637000
MULTMSG5 EQU * @V407466 00638000
SLR R7,R7 CLEAR R7 FOR NO. MULTIPLES @V407466 00639000
IC R7,MULTCUU NO. OF ADDRS IN MSG @V407466 00640000
MVC MULTUSER(L'VMUSER),CMDUSER USERID @V407466 00641000
TM VDDBITS,ATTSYST DETACH FROM SYSTEM @V407466 00642000
BZ MULTMSG6 NO @V407466 00643000
MVC MULTUSER(L'VMUSER),=CL8'SYSTEM' SYSTEM @V407466 00644000
MULTMSG6 CH R7,=H'10' IF > 10 CUU'S - MANY MSG LINES @V407466 00645000
BH MANY3 YES, MANY LINES @V407466 00646000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00647000
LA R0,MULTSIZ6(,R7) + L'DETACHED + L'USERID @V407466 00648000
CALL DMKQCNWT,PARM=NORET @V407466 00649000
SYSDET IC R7,MULTCUU NO. OF MULTIPLES IN MSG @V407466 00650000
TM VDDBITS,NSYSOP DETACH BY SYSTEM OPERATOR @V407466 00651000
BZ FRETBUF YES, RELEASE STORAGE @V407466 00652000
MVI MULTDEL3,BLANK DELIMITER @V407466 00653000
MVC MULTBY,=CL3'BY ' CONSTANT 'BY ' @V407466 00654000
MVC MULTUSE2(L'VMUSER),VMUSER @V407466 00655000
LA R2,OPERATOR SYSTEM OPERATOR @V407466 00656000
CH R7,=H'10' IF > 10 CUU'S MANY MSG LINES @V407466 00657000
BH MANY4 MULTIPLE LINES @V407466 00658000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00659000
LA R0,MULTSIZ2(,R7) LENGTH @V407466 00660000
LA R3,MULTSIZE MSG BUFFER SIZE @V407466 00661000
CALL DMKQCNWT,PARM=NORET+DFRET(,R2) @V407466 00662000
B VDDEXIT EXIT @V407466 00663000
SPACE 00664000
MANY2 BAL R5,MULTLINE ISSUE REPEATED LINES OF 10 CUU'S @V407466 00665000
LA R0,MULTSIZ4(,R7) LENGTH @V407466 00666000
CALL DMKQCNWT,PARM=NORET LAST LINE OF THIS MSG @V407466 00667000
L R1,SAVEWRK8 MSG BUFFER ADDR @V407466 00668000
B SWAP NEXT MSG @V407466 00669000
SPACE 00670000
MANY3 BAL R5,MULTLINE ISSUE REPEATED LINES OF 10 CUU'S @V407466 00671000
LA R0,MULTSIZ6(,R7) + L'DETACHED + L'USERID @V407466 00672000
CALL DMKQCNWT,PARM=NORET @V407466 00673000
L R1,SAVEWRK8 MSG BUFFER ADDR @V407466 00674000
B SYSDET CHECK FOR DET BY SYSTEM OPERATOR @V407466 00675000
SPACE 00676000
MANY4 BAL R5,MULTLINE ISSUE REPEATED LINES OF 10 CUU'S @V407466 00677000
LA R0,MULTSIZ2(,R7) + L'BY + L'USERID @V407466 00678000
CALL DMKQCNWT,PARM=NORET ISSUE MSG & RETURN @V407466 00679000
B FRETBUF RELEASE BUFFER @V407466 00680000
SPACE 00681000
MULTLINE LA R0,MAXCUU MAX 10 CUU PER LINE @V407490 00682000
NEXTLINE CALL DMKQCNWT,PARM=NORET @V407466 00683000
LA R1,40(,R1) NEXT LINE POINTER @V407466 00684000
SH R7,=H'10' SUBTRACE 10 @V407466 00685000
CH R7,=H'10' STILL MORE THAN 10 LEFT @V407466 00686000
BH NEXTLINE PUT OUT NEXT LINE @V407466 00687000
MR R6,R8 R7*R8 INTO R6-R7 @V407466 00688000
BR R5 RETURN TO MAINLINE @V407466 00689000
DROP R4 @V407466 00690000
EJECT 00691000
USING DETMSG,R4 ADDRESSABILITY FOR MSGAREA @V407466 00692000
TSTRANGE TM VDDBITS,RANGE RANGE BEING PROCESSED @V407466 00693000
BCR 14,R5 NO, JUST ISSUE ERROR MESSAGE @V407466 00694000
OI VDDBITS+1,DETERR ISSUE SUCCESSFUL MSG FIRST @V407466 00695000
STM R5,R6,SAVEWRK5 SAVE R5,R6 TEMPORARILY @V407466 00696000
LA R6,ONLYERR SET UP RETURN ADDRESS FOR SINGLE @V407490 00697000
SLR R1,R1 CLEAR R1 @V407466 00698000
CH R1,RADDR1 SUCCESSFUL MSG PENDING? @V407466 00699000
BE ONLYERR NO, ISSUE ERROR ONLY @V407466 00700000
CH R1,RADDR2 FULL RANGE MESSAGE? @V407466 00701000
BE SINGLE NO, ONLY SINGLE ADDR PENDING @V407466 00702000
LH R1,RADDR2 SECOND ADDR IN RANGE @V407466 00703000
BAL R6,CONVERT CONVERT & BUILD MSG @V407466 00704000
ONLYERR MVI DETMSG,BLANK PROPAGATE BLANKS @V407466 00705000
MVC DETMSG+1((MULTSIZE*8)-1),DETMSG THROUGH MSGAREA @V407466 00706000
SLR R5,R5 CLEAR R5 FOR STORE @V407466 00707000
ST R5,SAVEWRK8 REINITIALIZE RANGE ADDRESSES @V407466 00708000
OI RAFLG,FRSTHRU TURN ON FLAG @VA11655 00708100
LM R5,R6,SAVEWRK5 RESTORE R5, R6 @V407466 00709000
NI VDDBITS+1,X'FF'-DETERR TURN OFF SWITCH @V407466 00710000
BR R5 RETURN TO MAINLINE @V407466 00711000
SPACE 2 00712000
DETMSG DSECT NORMAL RESPONSES FOR DETACH @V407466 00713000
DETDTYP DS CL4 DEVICE TYPE-NAME @V407466 00714000
DETDEL1 DS CL1 DELIMITER @V407466 00715000
DETADD1 DS CL3 CUU @V407466 00716000
DETDEL2 DS CL1 DELIMITER @V407466 00717000
DETCON DS CL8 CONSTANT 'DETACHED' @V407466 00718000
DETDEL3 DS CL1 DELIMITER @V407466 00719000
DETBY DS CL3 BY + DELIMITER @V407466 00720000
DETUSER DS CL8 VMUSER @V407466 00721000
DETSIZE5 EQU *-DETDTYP MSG LENGTH @V407466 00722000
SPACE 00723000
ORG DETBY @V407466 00724000
DETUSER2 DS CL8 USERID OF DETACHEE @V407466 00725000
DETSIZE2 EQU *-DETDTYP LENGTH @V407466 00726000
DETDEL4 DS CL1 DELIMITER @V407466 00727000
DETADD2 DS CL4 VIRTUAL ADDRESS @V407466 00728000
DETDEL5 DS CL1 DELIMITER @V407466 00729000
DETSIZE3 EQU *-DETDTYP LENGTH @V407466 00730000
DETBY2 DS CL3 CONSTANT 'BY ' @V407466 00731000
DETUSER3 DS CL8 @V407466 00732000
DETSIZE EQU (*-DETDTYP+7)/8 MSG LENGTH @V407466 00733000
SPACE 00734000
ORG DETADD2 @V407466 00735000
DETBY3 DS CL3 CONSTANT 'BY ' @V407466 00736000
DETUSER4 DS CL8 USERID @V407466 00737000
DETSIZE4 EQU *-DETDTYP LENGTH @V407466 00738000
SPACE 00739000
ORG DETMSG @V407466 00740000
RACUU1 DS CL3 1ST RADDR IN RANGE @V407466 00741000
RADASH DS CL1 DASH @V407466 00742000
RACUU2 DS CL3 2ND RADDR IN RANGE @V407466 00743000
RADEL1 DS CL2 DELIMITER @V407466 00744000
RADET DS CL8 'DETACHED' @V407466 00745000
RASIZE1 EQU *-RACUU1 MSG LENGTH @V407466 00746000
SPACE 2 00747000
DMKVDD CSECT , RE-ENTER PREVIOUS CSECT @V407466 00748000
SPACE 2 00749000
*---------------------------------------------------------------------* 00750000
* CVTRADD - CONVERT DEVICE ADDRESS TO HEXADECIMAL * 00751000
* ZAPVOLD - REMOVE VOLUME SERIAL FROM REAL DEVICE BLOCK * 00752000
*---------------------------------------------------------------------* 00753000
CVTRADD EQU * CONVERT REAL DEVICE ADDRESS @V407466 00754000
LR R1,R9 ADDR TO R1 @V407466 00755000
TM VDDBITS,RANGE+MULTR RANGE OR MULTIPLES BEING @V407466 00756000
BM CVTBH PROCESSED - CONVERT ADDR IN R1 @V407466 00757000
L R1,DEVADDR OTHERWISE, SINGLE ADDR @V407466 00758000
CVTBH CALL DMKCVTBH @V407466 00759000
BR R5 @V407466 00760000
SPACE 00761000
ZAPVOLD EQU * REMOVE VOLID FROM RDEVBLOK @V407466 00762000
L R1,SAVEWRK9 REAL DEVICE BLOCK POINTER - SAVED@V407466 00763000
USING RDEVBLOK,R1 @V407466 00764000
MVC RDEVUSER(4),ASYSVM IN USE BY SYSTEM @V407466 00765000
BR R5 @V407466 00766000
DROP R1 @V407466 00767000
EJECT 00768000
DETSYST EQU * DETACH VOLUME FROM SYSTEM @V407466 00769000
USING RDEVBLOK,R8 @V407466 00770000
TM RDEVSTAT,RDEVDED ATTACHED TO A USER ? @V407466 00771000
BO DEVATTU YES - ERROR @V407466 00772000
CLI RDEVTYPC,CLASDASD IF IT ISN'T A DASD DEVICE... @V407466 00773000
BNE INVTYPE ...IT CAN'T BE ATTACHED TO SYSTEM@V407466 00774000
TM RDEVFLAG,RDEVSYS Is device attached to system? HRC039DK 00774100
BZ BADSYST Device is not attached to system HRC039DK 00774200
SWITCH CONTINUE PROCESSING ON I/O PROC @V407508 00775000
MVC CMDUSER(6),RDEVSER SAVE SERIAL FOR MESSAGES @V407466 00776000
BAL R5,ZAPVOLD CLEAR VOLID AND RDEVUSER FROM @V407466 00777000
* RDEVBLOK 00778000
BAL R5,GETRTYP GET TYPE-NAME IN TO R4 @V407466 00779000
OI RDEVFLAG,RDEVMOUT INDICATE VOLUME NOT ATTACHED @V407466 00780000
NI RDEVFLAG,255-RDEVSYS Device detached from sys. HRC039DK 00780100
TM VDDBITS,MULTR MULTIPLES BEING PROCESSED ?? @V407490 00781000
BO MULTMSG YES, FORMAT MULTIPLE MSG @V407490 00782000
TM VDDBITS,RANGE PROCESSING RANGE PER CHANCE ?? @V407490 00783000
BO RAMSG YES, GO BUILD RANGE MSG @V407490 00784000
B RESPOND SETUP FOR DETACH RESPONSES @V407466 00785000
SPACE 4 00786000
*---------------------------------------------------------------------* 00787000
* DEDCHAN - ATTACH OR DETACH DEDICATED CHANNEL(S) * 00788000
* CONTROL TRANSFERS TO THE MODULE "DMKVCHDC" FOR TESTING * 00789000
* THE AVAILABILITY OF THE CHANNEL AND DEVICES, AND FOR * 00790000
* THE ACTUAL ATTACH OR DETACH FUNCTIONS. FLAGS AND COMMAND * 00791000
* LINE DATA ARE PASSED TO DMKVCHDC IN REGISTERS 1-4. * 00792000
*---------------------------------------------------------------------* 00793000
SPACE 2 00794000
DEDCHAN EQU * PROCESSING FOR DEDICATED CHANNELS@V407466 00795000
LA R0,MULTSIZE SIZE OF WORK AREA @V407490 00796000
LR R1,R4 LOAD THE ADDRESS OF WORKAREA @V407490 00797000
CALL DMKFRET GO RELEASE THE WORKAREA @V407490 00798000
L R1,VDDBITS FLAGS USED WITHIN "DMKVDD" @V407466 00799000
L R2,DEVADDR BYTE 3 HAS CHANNEL NUMBER @V407466 00800000
LM R3,R4,CMDUSER USERID WANTING THE CHANNEL @V407466 00801000
CALL DMKVCHDC @V407466 00802000
ST R2,SAVER2 SAVE RETURN CODE @V407490 00803000
B VDDEXIT EXIT TO DMKCFM @V407466 00804000
EJECT 00805000
*---------------------------------------------------------------------* 00806000
* FREUSER AND SWPUSER - UNLOCK USERID AND SWAP VMBLOKS * 00807000
* LOKUSER AND SWPCALL - LOCK A USERID AND SWAP VMBLOKS * 00808000
*---------------------------------------------------------------------* 00809000
SPACE 2 00810000
FREUSER EQU * UNLOCK ATTACHEE'S USERID @V407466 00811000
LA R1,VMUSER @V407466 00812000
CALL DMKLOCKD DIRECTORY UNLOCK SUBROUTINE @V407466 00813000
SWPCALL EQU * GO BACK TO CALLER'S VMBLOK @V407466 00814000
L R1,SAVER11 GET CALLER'S VMBLOK ADDRESS @V407508 00815000
SWTCHVM SWITCH TO CALLER'S VMBLOK @V4M0193 00816000
BR R5 ...RETURN TO CALLER @V407466 00817000
SPACE 2 00818000
LOKUSER EQU * THROW A LOCK ON DEVICE BLOCKS @V407466 00819000
LA R1,VMUSER POINT TO THE USERID @V407466 00820000
CALL DMKLOCKQ ...AND LOCK IT @V407466 00821000
LA R0,L'VMUSER LENGTH OF USERID IN R1 @V407466 00822000
CALL DMKSCNAU USER STILL LOGGED ON? @V407466 00823000
BNZ NOTLOGD NO - ERROR @V407466 00824000
BR R5 @V407466 00825000
SPACE 2 00826000
SWPUSER EQU * SWAP TO TARGET USER'S VMBLOK @V407466 00827000
LR R1,R10 GET USER'S VMBLOK ADDRESS @V407508 00828000
SWTCHVM SWITCH TO SPECIFIED USER @V4M0193 00829000
BR R5 @V407466 00830000
SPACE 3 00831000
*---------------------------------------------------------------------* 00832000
* GETRDEV, GETRTYP - GET REAL DEVICE BLOCK + TYPE NAME * 00833000
*---------------------------------------------------------------------* 00834000
SPACE 2 00835000
GETRDEV EQU * LOCATE REAL DEVICE BLOCK @V407466 00836000
TM VDDBITS,RANGE+MULTR RANGE OR MULTIPLES @V407466 00837000
BM GETRDEV2 FIND THE RDEVBLOK @V407466 00838000
L R1,DEVADDR REAL DEVICE ADDRESS @V407466 00839000
GETRDEV2 CALL DMKSCNRU ...FIND THE RDEVBLOK @V407466 00840000
BNZ UNKNOWN REAL DEVICE DOES NOT EXIST @V407466 00841000
ST R8,SAVEWRK9 SAVE THE RDEVBLOK POINTER @V407466 00842000
BR R5 @V407466 00843000
SPACE 00844000
GETRTYP EQU * GET EBCDIC TYPE-NAME OF REAL @V407466 00845000
* DEVICE 00846000
L R8,SAVEWRK9 RDEVBLOK ADDRESS @V407466 00847000
CALL DMKSCNRN ...GET IT'S TYPE-NAME @V407466 00848000
LR R3,R1 ...INTO R3 @V407466 00849000
BR R5 @V407466 00850000
EJECT 00851000
* 00852000
* THIS IS THE SAME BRANCH TABLE USED BY ATTACH; THE EMPTY BRANCH 00853000
* ENTRIES ARE NOT USED BY DETACH. 00854000
* 00855000
SPACE 2 00856000
ERRTABL DS 0F @V407466 00857000
B NODRAIN 8 @V407466 00858000
B DEVOFFL 12 @V407466 00859000
B SHRCHEK 16 @V407466 00860000
B DEVOWND 20 @V407466 00861000
DC F'0' 24 @V407466 00862000
B INVOPT 28 HRC003DK 00863490
DC F'0' 32 @V407466 00864000
B INVADD2 36 @V407466 00865000
DC F'0' 40 @V407466 00866000
B NOTLOGD 44 @V407466 00867000
B INVUSID 48 @V407466 00868000
B INVADD1 52 @V407466 00869000
DC F'0' 56 @V407466 00870000
DC F'0' 60 @V407466 00871000
DC F'0' 64 @V407466 00872000
B BADUSER 68 @V407466 00873000
B BADTRACE 72 @VA09655 00873500
SPACE 2 00874000
ERR16 LA R2,RC16 SHARED DEVICE @V407466 00875000
B ERROR FORMAT ERROR MESSAGE @V407466 00876000
SPACE 2 00877000
ERR68 LA R2,RC68 BADUSER @V407466 00878000
ERROR LA R7,SAVEWRK2 ESTABLISH ADDRESSABILITY @V407466 00879000
USING WRK2,R7 FOR ERROR MESSAGES @V407466 00880000
B ERRTABL-8(R2) BRANCH TO APPROPRIATE ERROR @V407466 00881000
* ROUTINE 00882000
SPACE 2 00883000
RC16 EQU 16 SHARED DEVICE @V407466 00884000
RC68 EQU 68 BADUSER @V407466 00885000
EJECT 00886000
INVOPT EQU * HRC003DK 00886200
* R0 & R1 contain LENGTH already HRC003DK 00886400
LA R2,EMSG003 HRC003DK 00886600
B MSGSEND3 HRC003DK 00886800
NOTLOGD EQU * USERID NOT LOGGED ON @V407466 00887000
BAL R5,SWPCALL MAKE SURE WE HAVE RIGHT TIMER @VA10357 00887500
LA R1,CMDUSER USERID @V407466 00888000
LA R0,L'VMUSER DATA LENGTH @V407466 00889000
LA R2,EMSG045 MSG= DMKVDD045E @V407490 00890000
B MSGSEND3 GO SEND MSG @V407490 00891000
SPACE 2 00892000
INVTYPE EQU * @V407466 00893000
BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00894000
BAL R5,CVTRADD GET REAL ADDRESS @V407466 00895000
STCM R1,B'0111',SAVEWRK2 SAVE IN SAVEWRK2 @V407466 00896000
LA R0,L'SAVEWRK2-1 DATA LENGTH @V407466 00897000
LA R2,EMSG006 MSG= DMKVDD006E @V407490 00898000
B MSGSEND ISSUE MESSAGE @V407466 00899000
SPACE 2 00900000
DEVATTU EQU * TYPE RADDR ATTACHED TO USERID @V407466 00901000
BAL R5,TSTRANGE SEE IF RANGE PROCESSING @V407466 00902000
LA R2,EMSG140 MSG= DMKVDD140E @V407490 00903000
L R8,SAVEWRK9 RDEVBLOK ADDRESS @V407466 00904000
L R8,RDEVUSER-RDEVBLOK(R8) USER'S VMBLOK @V407466 00905000
MVC CMDUSER(L'VMUSER),VMUSER-VMBLOK(R8) USERID @V407466 00906000
BAL R6,USERDEV SETUP DATA STRING FOR 'ERMSG' @V407466 00907000
B MSGSEND ISSUE ERROR MESSAGE @V407466 00908000
SPACE 2 00909000
INVUSID EQU * USERID MISSING OR INVALID @V407466 00910000
LA R2,EMSG020 MSG= DMKVDD020E @V407490 00911000
B MSGONLY @V407466 00912000
SPACE 2 00913000
INVADD1 EQU * FIRST ADDR MISSING OR INVALID @V407466 00914000
BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00915000
TM VDDBITS,CHANNEL MESSAGE FOR CAHNNEL COMMAND @V407466 00916000
BZ VDD022A BRANCH IF NOT @V407490 00917000
LA R2,EMSG034 LOAD CHANNEL ERROR CODE @V407490 00918000
B MSGONLY . . . . @V407466 00919000
SPACE 00920000
INVADD2 LA R2,EMSG022 MSG= DMKVDD022E @V407490 00921000
B MSGONLY @V407466 00922000
SPACE 00923000
VDD021 BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00924000
LA R2,EMSG021 RADDR MISSING OR INVALID @V407490 00925000
VDDMSG BAL R5,CVTRADD GET REAL ADDRESS @V407490 00926000
STCM R1,B'0111',SAVEWRK2 SAVE IN SAVEWRK2 @V407490 00927000
LA R0,L'SAVEWRK2-1 GET DATA LENGTH @V407490 00928000
TM VDDBITS,RANGE PROCESSING RANGE?? @VA14197 00929100
BO MSGSEND YES, SEND MSG AND RETURN TO VDD @V407490 00930000
B MSGSEND2 JUST SEND MESSAGE @V407490 00931000
SPACE 2 00932000
VDD022 EQU * @V407490 00933000
LA R2,EMSG022 MSG NUMBER @V407490 00934000
B VDDMSG SET UP FOR MSG @V407490 00935000
BADTRACE EQU * TRACING I/O @VA09655 00935100
MVC SAVEWRK2(32),TRACEMSG MOVE IN MESSAGE @VA14558 00935210
LA R0,L'TRACEMSG LENGTH OF MSG @VA09655 00935300
LA R2,EMSG273 MSG NUMBER @VA09655 00935400
B MSGSEND SEND MSG @VA09655 00935500
TRACEMSG DC C'DETACH REJ VIRT MACH TRACING I/O' @VA14558 00935610
EJECT 00936000
VDD022A EQU * @V407490 00937000
LA R1,CMDUSER GET INVALID PARM @V407490 00938000
LA R0,L'VMUSER GET DATA LENGTH @V407490 00939000
LA R2,EMSG022 MSG NUMBER @V407490 00940000
B MSGSEND3 GO SEND MSG @V407490 00941000
SPACE 2 00942000
SPACE 2 00943000
INVADDF1 EQU * DEV ADDR DOES NOT EXIST @V407466 00944000
L R9,SAVEWRK7 RESTORE R9 @V407466 00945000
BAL R5,FREUSER UNLOCK USER'S CONTROL BLOCKS @V407466 00946000
UNKNOWN EQU * DEV ADDR DOES NOT EXIST @V407466 00947000
BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00948000
BAL R5,CVTRADD CONVERT ADDRESS TO HEX @V407466 00949000
STCM R1,B'0111',SAVEWRK2 @V407466 00950000
LA R0,L'SAVEWRK2-1 DATA LENGTH @V407466 00951000
LA R2,EMSG040 MSG= DMKVDD040E @V407490 00952000
B MSGSEND GO BUILD + TYPE MESSAGE @V407466 00953000
SPACE 2 00954000
DEVOFFL EQU * TYPE RADDR OFFLINE @V407466 00955000
CLI RDEVTYPC,CLASDASD DASD TYPE ?? @V407490 00956000
BNE DEVOFFLI NO @V407490 00957000
CLI RDEVTYPE,TYP2305 HOW ABOUT A DRUM ??? @V407490 00958000
BNE DEVOFFLI NO @V407490 00959000
TM RDEVADD+1,X'07' BASE ADDRESS ?? @V407490 00960000
BNZ VDD021 NO, DETACHING EXPOSURE,BAD NEWS @V407490 00961000
DEVOFFLI EQU * @V407490 00962000
BAL R5,TSTRANGE SEE IF RANGE SPECIFIED @V407466 00963000
LA R2,EMSG046 MSG= DMKVDD046E @V407490 00964000
B TYPRADD GO BUILD VARIABLE STRING @V407466 00965000
SPACE 00966000
BADSYST EQU * 00966100
MVC CMDUSER,=C'SYSTEM ' Specify userid as SYSTEM HRC039DK 00966200
BADUSER EQU * TYPE RADDR NOT ATTACHED TO USERID@V407466 00967000
BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00968000
BAL R6,USERDEV SET UP 'TYPE RADDR USERID' STRING@V407466 00969000
LA R2,121(,0) MSG= DMKVDD121E @V407466 00970000
B MSGSEND @V407466 00971000
SPACE 2 00972000
DEVOWND EQU * DASD RADDR CP OWNED @V407466 00973000
BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00974000
BAL R5,CVTRADD CONVERT ADDRESS @V407466 00975000
STCM R1,B'0111',SAVEWRK2 @V407466 00976000
LA R0,L'SAVEWRK2-1 DATA LENGTH @V407466 00977000
LA R2,EMSG123 MSG= DMKVDD123E @V407490 00978000
B MSGSEND @V407466 00979000
SPACE 2 00980000
DEVSHRD EQU * DASD RADDR IN USE BY NNN USERS @V407466 00981000
BAL R5,CVTRADD CONVERT ADDRESS @V407466 00982000
STCM R1,B'0111',SAVEWRK2 SAVE IN MESSAGE @V407466 00983000
MVI DELIM1,BIN0 DELIMITER @V407466 00984000
LM R1,R2,SAVEWRK3 SAVE USERID SINCE DESTROYED @V407466 00985000
STM R1,R2,SAVEWRK5 WHEN MSG IS BUILT @V407466 00986000
SLR R1,R1 CLEAR FOR NEXT LOAD HALF @V407466 00987000
LH R1,RDEVLNKS-RDEVBLOK(,R8) NO. OF USERS @V407466 00988000
CALL DMKCVTBD CONVERT TO DECIMAL @V407466 00989000
STCM R1,B'0111',SAVEWRK3 SAVE IN MSG BUFFER @V407466 00990000
LA R0,DETSIZE1 DATA LENGTH @V407466 00991000
LA R2,EMSG124 MSG= DMKVDD124E @V407490 00992000
B MSGSEND ISSUE ERROR MESSAGE @V407466 00993000
SPACE 00994000
SHRCHEK EQU * CHECK DIFFERENT VARIETIES OF @V407466 00995000
* 'SHARED' 00996000
BAL R5,TSTRANGE PROCESS SUCCESSFUL MSG FIRST @V407466 00997000
L R8,SAVEWRK9 GET RDEVBLOK ADDRESS @V407466 00998000
USING RDEVBLOK,R8 @V407466 00999000
CLI RDEVTYPC,CLASDASD IS IT DASD DEVICE ? @V407466 01000000
BE DEVSHRD YES - ACTUAL LINK USAGE @V407466 01001000
EMSG143E LA R2,EMSG143 MSG = DMKVDD143E @VA07232 01002000
B TYPRADD @V407466 01004000
SPACE 01005000
AIF (NOT &DEDCH).NOTDED3 **AIF** @V407466 01006000
CHANDED EQU * ERROR FOR DEDICATED CHANNELS @V407466 01007000
LA R7,SAVEWRK2 GET ADDRESSABILITY TO MSG AREA @VA07240 01007100
L R9,SAVEWRK7 RESTORE R9 @V407466 01008000
BAL R5,FREUSER UNLOCK USER'S CONTROL BLOCKS @V407466 01009000
BAL R5,TSTRANGE DETERMINE IF RANGE PROCESSING @V407466 01010000
USING VCHBLOK,R6 @V407466 01011000
LH R1,VCHADD GET ADDRESS OF VIRTUAL CHANNEL @V407466 01012000
SRL R1,8(0) ... @V407466 01013000
CALL DMKCVTBD CONVERT TO DECIMAL @V407466 01014000
DROP R6 @V407466 01015000
MVI SAVEWRK4,BIN0 DELIMITER @V407466 01016000
STCM R1,B'0011',DETCHAN STORE CHANNEL NUMBER @V407466 01017000
TM DETCHAN,HEX0F CHANNEL NUMBER > 9 @V407466 01018000
BNZ SKIPNEXT YES - LEAVE CHANNEL NUMBER ALONE @V407466 01019000
MVI DETCHAN,BIN0 CLEAR HI ORDER BYTE @V407466 01020000
SKIPNEXT BAL R5,GETRDEV GET REAL DEVICE BOLCKS @V407466 01021000
BAL R5,GETRTYP GO GET THE TYPE OF DEVICE @V407466 01022000
BAL R5,CVTRADD ... @V407466 01023000
ST R3,SAVEWRK2 SAVE IT. @V407466 01024000
ST R1,SAVEWRK3 STORE DEVICE ADDRESS @V407466 01025000
MVI SAVEWRK3,BIN0 DELIMITER @V407466 01026000
LA R0,DETSIZE7 MESSAGE LENGTH @V407466 01027000
LA R2,EMSG135 YES, MSG= DMKVDD135E @V407490 01028000
B MSGSEND @V407466 01029000
.NOTDED3 ANOP 01030000
SPACE 01031000
NODRAIN EQU * TYPE RADDR NOT DRAINED @V407466 01032000
LA R2,EMSG142 MSG= DMKVDD142E @V407490 01033000
TYPRADD EQU * @V407466 01034000
LM R0,R1,SAVEWRK3 SAVE USERID SINCE FIELD DESTROYED@V407466 01035000
STM R0,R1,SAVEWRK5 WHEN MSG BUILT @V407466 01036000
BAL R5,GETRTYP @V407466 01037000
BAL R5,CVTRADD @V407466 01038000
ST R3,SAVEWRK2 PLACE 'TYPE' IN MESSAGE @V407466 01039000
ST R1,SAVEWRK3 @V407466 01040000
MVI SAVEWRK3,BIN0 DELIMITER @V407466 01041000
LA R0,L'SAVEWRK2+L'SAVEWRK3 DATA LENGTH @V407466 01042000
B MSGSEND ISSUE MESSAGE @V407466 01043000
SPACE 2 01044000
MSGONLY EQU * NO EXTRA DATA FOR MESSAGE @V407466 01045000
SLR R1,R1 ZERO R1 @V407466 01046000
SLR R0,R0 ZERO R0 @V407466 01047000
B MSGSEND2 ISSUE ERROR MESSAGE @V407466 01048000
SPACE 2 01049000
MSGSEND EQU * BUILD + TYPE ERROR MESSAGE @V407466 01050000
ICM R2,B'1000',=X'80' RETURN TO DMKVDD AFTER MSG @V407466 01051000
* RETURN 01052000
MSGSEND2 LA R1,SAVEWRK2 START OF MOST DATA @V407466 01053000
MSGSEND3 EQU * @V407490 01054000
LTR R2,R2 ARE WE GOING TO RETURN ??? @V407490 01055000
BM WILLRET YES, WE SHALL RETURN.. @V407490 01056000
ICM R2,B'1000',=X'40' NOT RETURNING, SET UP FRET @V407490 01057000
LA R3,MULTSIZE SIZE OF THE WORKAREA @V407490 01058000
SLL R3,24 GET IT TO THE HI ORDER @V407490 01059000
OR R3,R4 LOAD IN THE ADDRESS @V407490 01060000
WILLRET EQU * @V407490 01061000
ICM R0,B'1110',DMKVDD+3 MODULE IDENTIFIER @V407466 01062000
CALL DMKERMSG GO DO IT @V407466 01063000
ST R2,SAVER2 SAVE ERROR NUMBER @V407490 01064000
CH R2,=H'140' ERROR MSG 140E? @V407466 01065000
BE MVCUSER RESTORE USERID TO ORIG. LOC. @V407466 01066000
CH R2,=H'121' ERROR MSG 121E? @V407466 01067000
BE MVCUSER RESTORE USERID TO ORIG. LOC. @V407466 01068000
CH R2,=H'124' ERROR MSG 124E? @V407466 01069000
BE MVCUSER2 RESTORE USERID @V407466 01070000
CH R2,=H'142' ERROR MSG 142E? @V407466 01071000
BE MVCUSER2 RESTORE USERID @V407466 01072000
CH R2,=H'143' ERROR MSG 143E? @V407466 01073000
BE MVCUSER2 RESTORE USERID @V407466 01074000
CH R2,=H'46' ERROR MSG 046E? @V407466 01075000
BE MVCUSER2 RESTORE USERID @V407466 01076000
CH R2,=H'273' ERROR MSG 273E ? @VA09655 01076300
BE CLEANXT RETURN TO CALLER @VA09655 01076700
CONTINUE TM VDDBITS,MULTR PROCESSING MULTIPLE ADDRS @V407466 01077000
BO MULTCONT CONTINUE PROCESSING MULTIPLES @V407466 01078000
TM VDDBITS,RANGE PROCESSING RANGE @V407466 01079000
BNO CLEANXT NO, CLEANUP AND GET OUT @V407466 01080000
B ENDRANGE SEE IF MORE RANGE TO PROCESS @V407466 01081000
SPACE 01082000
MVCUSER MVC SAVEWRK3(8),SAVEWRK4+1 RESTORE USERID TO ORIG. @V407466 01083000
* LOC. 01084000
B CONTINUE PROCEED WITH NEXT ADDR @V407466 01085000
SPACE 01086000
MVCUSER2 LM R1,R2,SAVEWRK5 RESTORE USERID @V407466 01087000
STM R1,R2,SAVEWRK3 TO ORIGINAL LOCATION @V407466 01088000
B CONTINUE AND CONTINUE TO PROCESS @V407466 01089000
EJECT 01090000
SPACE 2 01091000
*---------------------------------------------------------------------* 01092000
* USERDEV - BUILD STRING FOR DMKERMSG = "TYPE RADDR USERID" * 01093000
*---------------------------------------------------------------------* 01094000
SPACE 2 01095000
USERDEV EQU * @V407466 01096000
BAL R5,GETRTYP GET 'TYPE' IN GPR 4 @V407466 01097000
BAL R5,CVTRADD GET 'RADD' IN GPR 1 @V407466 01098000
MVC SAVEWRK5+1(L'VMUSER),CMDUSER SLIDE USER OVER @V407490 01099000
MVI SAVEWRK5,BIN0 LAST DELIMITER @V407466 01100000
ST R1,SAVEWRK4 'RADD' @V407466 01101000
MVI SAVEWRK4,BIN0 FIRST DELIMITER @V407466 01102000
ST R3,SAVEWRK3 'TYPE' @V407466 01103000
MVC SAVEWRK2(20),SAVEWRK3 LEFT-JUSTIFY ENTIRE STRING@V407466 01104000
LA R0,DETSIZE6 DATA LENGTH @V407466 01105000
BR R6 RETURN @V407466 01106000
SPACE 3 01106010
RAFLG DC X'00' RANGE FLAG @VA11236 01106020
FRSTHRU EQU X'80' FIRST TIME THRU THE RANGE @VA11236 01106030
SPACE 2 01107000
EJECT 01108000
LTORG @V407466 01109000
EJECT 01110000
COPY SAVE @V407466 01111000
EJECT 01112000
*----------------------------* 01113000
* 01114000
VDDBITS EQU SAVEWRK1 FLAGS USED WITHIN VDD @V407466 01115000
MULTCUU EQU SAVEWRK1+2 NO. MULTIPLE ADDRS IN MSG @V407466 01116000
DEVADDR EQU SAVEWRK2 REAL/VIRTUAL DEVICE ADDRESS @V407466 01117000
CMDUSER EQU SAVEWRK3 AND SAVEWRK4 - USERID @V407466 01118000
VIRTADD EQU SAVEWRK5 VIRTUAL DEVICE ADDRESS @V407466 01119000
ENDRADDR EQU SAVEWRK1+2 RANGE RADDR @V407466 01120000
RADDR1 EQU SAVEWRK8 FIRST ADDR IN RANGE @V407466 01121000
RADDR2 EQU SAVEWRK8+2 SECOND ADDR IN RANGE @V407466 01122000
EMSG003 EQU 3 HRC003DK 01122500
EMSG006 EQU 6 @V407490 01123000
EMSG020 EQU 20 @V407490 01124000
EMSG021 EQU 21 @V407490 01125000
EMSG022 EQU 22 @V407490 01126000
EMSG034 EQU 34 @V407490 01127000
EMSG040 EQU 40 @V407490 01128000
EMSG045 EQU 45 @V407490 01129000
EMSG046 EQU 46 @V407490 01130000
EMSG123 EQU 123 @V407490 01131000
EMSG124 EQU 124 @V407490 01132000
EMSG135 EQU 135 @V407490 01133000
EMSG140 EQU 140 @V407490 01134000
EMSG142 EQU 142 @V407490 01135000
EMSG143 EQU 143 @V407490 01136000
EMSG273 EQU 273 @VA09655 01136500
FULLEN EQU 48 @V407490 01137000
MAXCUU EQU 40 @V407490 01138000
COUNT4 EQU 4 @V407490 01139000
COUNT28 EQU 28 @V407490 01140000
SPACE 01141000
* 01142000
* FLAGS DEFINED IN "VDDBITS" : 01143000
* 01144000
CHANNEL EQU X'80' "CHANNEL" OPTION SPECIFIED @V407466 01145000
NSYSOP EQU X'40' CALLER IS NOT SYSTEM OPERATOR @V407466 01146000
MULTR EQU X'20' DETACH VIRTUAL DEVICE @V407466 01147000
ATTSYST EQU X'10' ATTACH/DETACH TO/FROM "SYSTEM" @V407466 01148000
ATTREAD EQU X'08' ATTACH "R/O" @V407466 01149000
RANGE EQU X'04' RANGE PROCESSING @V407466 01150000
VDETACH EQU X'02' DETACH VIRTUAL @V407466 01151000
DED2305 EQU X'01' ATTACH/DEDICATE MULTI EXP DEVICE @V407466 01152000
* 01153000
* FLAGS DEFINED IN "VDDBITS" : 01154000
* 01155000
DETACH EQU X'08' DETACH COMMAND @V407466 01156000
DETERR EQU X'02' ERROR MESSAGE INDICATOR @V407466 01157000
TPNORUN EQU X'01' LEAVE OPTION SPECIFIED HRC003DK 01157500
SPACE 01158000
BIN0 EQU X'00' MESSAGE DELIMITER @V407466 01159000
BLANK EQU X'40' BLANK @V407466 01160000
HEX0F EQU X'0F' @V407466 01161000
DASH EQU C'-' RANGE DELIMITER @V407466 01162000
SPACE 2 01163000
MDSECT DSECT DSECT FOR MULTIPLE ADDRESSES @V407466 01164000
MULTADD DS F MULTIPLE ADDRESS @V407466 01165000
DS 47F UP TO 48 CUU ON ONE COMMAND @V407466 01166000
DS 4D @V407466 01167000
MULTSIZE EQU (*-MULTADD)/8 LENGTH OF BUFFER IN DOUBLEWORDS @V407466 01168000
SPACE 2 01169000
ORG MULTADD OVERLAY @V407466 01170000
MULTCON DS CL8 CONSTANT 'DETACHED' @V407466 01171000
MULTSIZ1 EQU *-MULTCON L'DETACHED @V407466 01172000
MULTDEL2 DS CL1 DELIMITER @V407466 01173000
MULTUSER DS CL8 USERID @V407466 01174000
MULTSIZ8 EQU *-MULTDEL2 MSG LENGTH @V407466 01175000
MULTSIZ6 EQU *-MULTCON L'DETACHED + L'DELIM +L'USERID @V407466 01176000
MULTDEL3 DS CL1 DELIMITER @V407466 01177000
MULTBY DS CL3 CONSTANT @V407466 01178000
MULTUSE2 DS CL8 USERID @V407466 01179000
MULTSIZ2 EQU *-MULTCON MESSAGE LENGTH @V407466 01180000
MULTSIZ3 EQU *-MULTDEL2 MESSAGE LENGTH @V407466 01181000
SPACE 2 01182000
ORG MULTUSER @V407466 01183000
MULTBY2 DS CL3 CONSTANT 'BY ' @V407466 01184000
MULTUSE3 DS CL8 USERID @V407466 01185000
MULTSIZ4 EQU *-MULTCON MSG LENGTH @V407466 01186000
SPACE 01187000
ORG MULTADD @V407466 01188000
MULTADDR DS CL3 MULTIPLE ADDR @V407466 01189000
MULTDEL1 DS CL1 DELIMITER @V407466 01190000
SPACE 01191000
WRK2 DSECT ERROR MESSAGE DSECT @V407466 01192000
DETADD DS XL3 DASD RADDR IN USE BY NNN USERS @V407466 01193000
DELIM1 DS X MSG DELIMITER @V407466 01194000
DETNNN DS XL3 NNN USERS @V407466 01195000
DETSIZE1 EQU *-DETADD MSG LENGTH @V407466 01196000
DS XL6 RESERVED @V407466 01197000
DETUSE DS CL4 USERID @V407466 01198000
DETSIZE6 EQU *-DETADD MSG LENGTH @V407466 01199000
ORG DETADD @V407466 01200000
DS CL9 @V407466 01201000
DETCHAN DS CL2 CHANNEL NUMBER @V407466 01202000
DETSIZE7 EQU (*-DETADD) MSG LENGTH @V407466 01203000
EJECT 01204000
COPY EQU @V407466 01205000
COPY DEVTYPES @V407466 01206000
PSA @V407466 01207000
COPY VMBLOK @V407466 01208000
COPY RBLOKS @V407466 01209000
COPY VBLOKS @V407466 01210000
COPY IOBLOKS @V407466 01211000
VDDLOK DSECT , DSECT FOR EXPANDED IOBLOK @V407466 01212000
DS (IOBSIZE)D @V407466 01213000
VDDLCCW DS 5D SEEK,SEARCH,TIC,READ,SENSE @V407466 01214000
VDDLCNT DS 1D SEEK AND SEARCH ARGS @V407466 01215000
VDDLBUF DS 10D 80-BYTE LABEL-RECORD BUFFER @V407466 01216000
VDDLSNS DS 3D 24-BYTE SENSE AREA @V407466 01217000
VDDLLEN EQU (*-VDDLOK)/8 BLOCK LENGTH IN DBL-WDS @V407466 01218000
SPACE 01219000
DMKVDD CSECT , RE-ENTER MAIN CSECT @V407466 01220000
EJECT 01221000
COPY ALLOC @V407466 01222000
COPY UDIRECT @V407466 01223000
END DMKVDD 01224000