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 USERID | 00049000 * | | RADDR1-RADDR2 USERID | 00050000 * | | RADDR . . . USERID | 00051000 * | | RADDR SYSTEM | 00052000 * | | RADDR . . . SYSTEM | 00053000 * | | RADDR1-RADDR2 SYSTEM | 00054000 * | | | 00055000 * | | CHANNEL X | 00056000 * | | CHANNEL X 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