LNK TITLE 'DMKLNK (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
* 00003100
* MODULE NAME - 00004000
* 00005000
* DMKLNK 00006000
* 00007000
* FUNCTION - 00018000
* 00019000
* TO LINK TO A VIRTUAL DASD DEVICE (IF FEASIBLE) 00020000
* 00021000
* COMMAND LINE FORMAT - 00022000
* 00023000
* +--------+-------------------------------------------------------+ 00024000
* | LINK | <TO> USERID | * XXX <AS> YYY <MODE> <PASSWORD> | 00025000
* +--------+-------------------------------------------------------+ 00026000
* 00027000
* SEE "NOTES" FOR FURTHER INFORMATION ON COMMAND LINE FORMAT. 00028000
* 00029000
* ATTRIBUTES - 00030000
* 00031000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00032000
* 00033000
* ENTRY POINTS - 00034000
* 00035000
* DMKLNKIN - COMMAND TO LINK TO A VIRTUAL DEVICE 00036000
* DMKLNKSB - LINK SUBROUTINE ENTRY POINT FROM LOGON 00037100
* DMKLNKSS - ENTRY FROM THE DISPATCHER AFTER MOUNT 00037200
* 00038000
* ENTRY CONDITIONS - 00039000
* 00040000
* DMKLNKIN ENTRY POINT: 00041000
* GPR 9 CONTAINS ADDRESS OF COMMAND BUFFER 00042000
* 00043000
* DMKLNKSB ENTRY POINT: 00044000
* GPR0-1 HOLD USERID TO WHOM DASD DEVICE BELONGS 00045000
* GPR 2 HOLDS LINK-TO DEVICE (IN BINARY) 00046000
* GPR 3 HOLDS LINK-AS DEVICE (IN BINARY) 00047000
* GPR 4 = ADDRESS OF UDEVBLOK (AT LEAST 9 DBL-WORDS) 00048000
* GPR 5 = INDEXER FOR DESIRED LINK-MODE (0, ..., 24) 00049000
* 00050000
* DMKLNKSS ENTRY POINT: 00051100
* GPR 1 = ADDRESS OF WORK AREA 00051200
* GPR 3 = ADDRESS OF MSSCOM BLOCK 00051300
* GPR 4 = ADDRESS OF UDEVBLOK 00051400
* 00051500
* ALL ENTRY POINTS: 00051600
* GPR 11 = ADDRESS OF USER'S VMBLOK 00052000
* GPR 12 = ADDRESS OF DMKLNKIN 00053000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00054000
* 00055000
* EXIT CONDITIONS - 00056000
* 00057000
* GPR2 = 0 IF LINK WAS MADE AS REQUESTED 00058000
* GPR2 = 101 TO 103 IF A "FORCED R/O" LINK WAS GIVEN 00059000
* GPR2 = OTHER ERROR CODES IF NO LINK WAS GIVEN 00060000
* (SEE ERROR MESSAGES) 00061000
* 00062000
* NOTE: GPR 2 = 115 (WITH ERROR MESSAGE) IF A LINK COMMAND 00063000
* HAS BEEN ISSUED AN EXCESSIVE NUMBER OF TIMES IN ONE 00064000
* TERMINAL SESSION FROM A VIRTUAL MACHINE WITH AN 00065000
* INCORRECT PASSWORD INCLUDED IN THE COMMAND LINE. 00066000
* IF SECURITY JOURNALING IS ON, GPR 2 = 115 IF A 00066200
* LINK COMMAND HAS BEEN ISSUED AN EXCESSIVE 00066400
* NUMBER OF TIMES IN ONE TERMINAL SESSION WITH 00066600
* AN INCORRECT PASSWORD. 00066800
* (SEE DMKLNK115E ERROR MESSAGE) 00067000
EJECT 00068000
* CALLS TO OTHER ROUTINES - 00069000
* 00070000
* DMKSCNFD - GET NEXT FIELD FROM COMMAND LINE 00072000
* DMKUDRFU - FIND USER IN CP DIRECTORY 00073000
* DMKUDRFD FIND USERID XXX DEVICE 00074000
* DMKLOCK - LOCK USERID BRIEFLY 00075000
* DMKLOCKD - UNLOCK USERID 00076000
* DMKUDRRV - RELEASE VIRTUAL PAGES USED BY DMKUDR ROUTINES 00077000
* DMKCVTHB - CONVERT INPUT FIELD FROM HEX TO BINARY 00078000
* DMKCVTBH - XXX OR YYY DEVICE FROM BINARY TO HEX 00079000
* DMKCVTBD - NNN USERS FROM BINARY TO DECIMAL 00080000
* DMKSCNVS - FIND VOLUME SERIAL NUMBER 00081000
* DMKSCNAU - FIND VMBLOK OF ACTIVE USER 00082000
* DMKSCNVU - FIND BLOCKS FOR VIRTUAL DEVICE 00083000
* DMKVDREL - RELEASE A VIRTUAL DEVICE 00084000
* DMKSCNLI - FIND ALL LINKS TO A GIVEN MINIDISK 00085000
* DMKEPSWD - ENTER PASSWORD 00086000
* DMKQCNWT - SEND MESSAGE TO USER TERMINAL 00087000
* DMKFREE - OBTAIN FREE STORAGE 00087100
* DMKFRET - RETURN FREE STORAGE 00088000
* DMKVDSLK - ESTABLISH READ OR WRITE LINK TO GIVEN DISK 00089000
* DMKERMSG - CONSTRUCT & SEND ERROR MESSAGE TO USER 00090000
* DMKSCNVN - TO GET MNEMONIC NAME OF VIRTUAL DEVICE 00091000
* 00092000
* EXTERNAL REFERENCES - 00093000
* 00094000
* NONE 00095000
* 00096000
* TABLES / WORK AREAS - 00097000
* 00098000
* DECISION TABLES (INTERNAL TO DMKLNK). 00099000
* 00100000
* REGISTER USAGE - 00101000
* 00102000
* GPR 4 = POINTER TO USER DIRECTORY BLOCK / DEVICE BLOCK 00103000
* GPR 5 = ADDRESS OF DECISION-TABLE ENTRY 00104000
* GPR 8 = ADDRESS OF VDEVBLOK / WORK REGISTER 00105000
* GPR 9 = ADDRESS OF COMMAND BUFFER / ADDRESS OF RDEVBLOK 00106000
* GPR 10 = RETURN-REGISTER FOR INTERNAL SUBROUTINE 00107000
* GPR 11 = VMBLOK ADDRESS 00108000
* GPR 12 = BASE REGISTER 00109000
* GPR 13 = ADDRESS OF STANDARD SAVE AREA 00110000
* 00111000
* GPRS 0-3, 6-7, AND 14-15 ARE WORK REGISTERS. 00112000
EJECT 00113000
* NOTES - 00114000
* 00115000
* USERID SPECIFIES THE NAME OF THE USER WHOSE DIRECTORY IS TO 00116000
* BE SEARCHED FOR DEVICE XXX. AN '*' MAY BE USED TO 00117000
* SPECIFY THAT A USER IS LINKING TO ONE OF HIS OWN DISKS. 00118000
* 00119000
* XXX SPECIFIES THE VIRTUAL DEVICE ADDRESS TO BE LINKED TO 00120000
* 00121000
* YYY SPECIFIES THE VIRTUAL ADDRESS TO WHICH THE DEVICE IS 00122000
* TO BE ASSIGNED. 00123000
* 00124000
* MODE SPECIFIES THE PRIMARY ACCESS REQUESTED (READ/ONLY, 00125000
* WRITE, OR MULTIPLE), AND THE ALTERNATE ACCESS 00126000
* (READ/ONLY OR WRITE) DESIRED (IF ANY), AS FOLLOWS: 00127000
* 00128000
* R SPECIFIES THAT READ/ONLY (R/O) ACCESS IS REQUESTED. 00129000
* THE LINK WILL NOT BE GIVEN IF ANY OTHER USER HAS THE 00130000
* DISK IN WRITE STATUS. "R" IS THE DEFAULT MODE IF THE 00131000
* LINK IS TO ANOTHER USERID. 00132000
* 00133000
* RR SPECIFIES THAT READ/ONLY ACCESS IS REQUESTED, EVEN IF 00134000
* ANOTHER USER HAS THE DISK IN WRITE STATUS. 00135000
* 00136000
* W SPECIFIES THAT WRITE ACCESS IS REQUESTED. THE LINK WILL 00137000
* NOT BE GIVEN IF ANY OTHER USER HAS THE DISK IN READ OR 00138000
* WRITE STATUS. 00139000
* 00140000
* WR SPECIFIES THAT WRITE ACCESS IS REQUESTED IF NO OTHER 00141000
* USER HAS THE DISK IN READ OR WRITE STATUS, BUT THAT AN 00142000
* ALTERNATE ACCESS OF READ/ONLY IS ACCEPTABLE IF OTHER(S) 00143000
* DO HAVE A LINK TO THE DISK; IN THIS EVENT, A READ/ONLY 00144000
* LINK IS TO BE GIVEN; THIS IS ACCOMPANIED BY AN ERROR 1 00145000
* OR 2, AND THE 'DEV XXX FORCED R/O' MESSAGE. 00146000
* 00147000
* M SPECIFIES THAT "MULTIPLE" ACCESS IS REQUESTED. THIS 00148000
* MEANS THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00149000
* UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT, 00150000
* IN WHICH EVENT NO LINK IS TO BE GIVEN. 00151000
* 00152000
* MR SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00153000
* UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT; 00154000
* IN THIS EVENT, A READ-LINK IS TO BE GIVEN, WITH AN 00155000
* ERROR 1 OR 2, AND THE 'DEV XXX FORCED R/O' MESSAGE. 00156000
* 00157000
* MW SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00158000
* IN ANY EVENT. 00159000
* 00160000
* IF THE MODE IS OMITTED FROM THE COMMAND LINE, THE 00161000
* DEFAULT IS TO "R" IF THE USERID IS ANOTHER USER; 00162000
* IF THE USER IS LINKING TO ONE OF HIS OWN DISKS, 00163000
* THE DEFAULT IS THE "USER ACCESS MODE" OF EITHER 00164000
* 'R', 'W', OR 'M' IN THE CP DIRECTORY FOR HIS DISKS. 00165000
EJECT 00166000
* NOTES (CONTINUED) - 00167000
* 00168000
* PASSWORD SPECIFIES A ONE TO EIGHT CHARACTER STRING WHICH MUST 00169000
* MATCH THAT FOR THE SPECIFIED ACCESS MODE FOR DEVICE 00170000
* "XXX" IN THE DIRECTORY FOR USER "USERID". THE PASSWORD 00171000
* (IF PRESENT) IS THE LAST OPERAND ON THE COMMAND LINE, 00172000
* AND MUST NOT BE ANY OF THE SPECIFIED MODE OPTIONS 00173000
* (R, RR, W, WR, M, MR, OR MW) 00174000
* 00175000
* THE PASSWORD (IF INCLUDED ON THE COMMAND LINE) MAY BE PRECEDED 00176000
* BY THE STRING "PASS= " IF DESIRED, BUT THIS IS NOT NECESSARY. 00177000
* NOTE: THE PASSWORD MAY NOT BE INCLUDED ON THE COMMAND 00177150
* LINE IF THE PASSWORD SUPPRESSION FACILITY HAS BEEN 00177300
* SYSGENED AND THE COMMAND CAME FROM CP OR FROM A VM 00177450
* WHICH REQUESTED PASSWORD SUPPRESSION (VMNPWOCL BIT 00177600
* IN VMBLOK VMFSTAT). 00177750
* 00178000
* 00179000
* 00180000
* OPERATION - 00181000
* 00182000
* 1. IF THE "LINK" WAS EXECUTED AS A VIRTUAL CONSOLE FUNCTION, 00183000
* CHECKS TO SEE IF TOO MANY WRONG PASSWORDS HAVE BEEN ENTERED; 00184000
* IF YES, EXITS IMMEDIATELY WITH RETURN CODE 115 AND A MESSAGE 00185000
* INDICATING THAT THE CP LINK COMMAND IS INVALID BECAUSE AN 00186000
* EXCESSIVE NUMBER OF INCORRECT PASSWORDS HAVE BEEN ENTERED. 00187000
* IF NO PROBLEM, CALLS DMKFREE TO OBTAIN FREE STORAGE FOR USE 00188000
* FOR USER DIRECTORY/DEVICE BLOCKS, AND FOR FILLED-IN MESSAGES. 00189000
* THEN CALLS DMKSCNFD TO GET USERID FIELD (ERROR IF MORE 00190000
* THAN 8 CHARACTERS, OR IF OMITTED.) IF USERID FIELD IS '* ', 00191000
* SETS FLAG INDICATING THAT THE USERID IS "MYSELF", AND 00192000
* OBTAINS THE 8-BYTE USERID FROM THE USER'S VMBLOK. 00193000
* 00194000
* 2. CALLS DMKUDRFU TO FIND THE USERID IN THE CP DIRECTORY 00195000
* (ERROR IF NOT FOUND), AND TO OBTAIN A COPY OF THE USER 00196000
* DIRECTORY BLOCK. CALLS DMKSCNFD TO GET THE XXX DEVICE 00197000
* (ERROR IF OMITTED), AND DMKCVTHB TO CONVERT TO BINARY (ERROR 00198000
* IF NOT A HEX NUMBER OR IF GREATER THAN X'FFF'). ALSO CALLS 00199000
* DMKSCNFD AND DMKCVTHB TO OBTAIN AND CONVERT YYY FIELD (ERROR 00200000
* IF OMITTED, OR NOT A VALID HEX NUMBER, OR GREATER THAN 00201000
* X'5FF' FOR BC MODE VIRTUAL MACHINE, OR GREATER THAN X'FFF' 00202000
* FOR EC MODE VIRTUAL MACHINE). THEN DMKUDRFD IS 00203000
* CALLED TO FIND THE USER DEVICE BLOCK FOR THE GIVEN DEVICE 00204000
* (AN ERROR MESSAGE AND CODE BEING RETURNED IF NOT FOUND). 00205000
* 00206000
* 3. CALLS DMKSCNFD TO SEE IF THERE ARE ANY MORE FIELDS ON THE 00207000
* INPUT LINE. IF NOT, DEFAULTS THE ACCESS REQUESTED TO 'R' IF 00208000
* THE USERID WAS NOT "MYSELF". (IF THE USERID WERE "MYSELF", 00209000
* THE ACCESS REQUESTED DEFAULTS TO THE "USER ACCESS MODE" 00210000
* IN THE USER DEVICE BLOCK.) NOW GOES TO STEP 7 BELOW. 00211000
* 00212000
* 4. IF ANOTHER FIELD IS PRESENT, CHECKS FOR ONE BYTE IN 00213000
* LENGTH, WITH A VALUE OF 'R', 'W', OR 'M'; OR TWO BYTES 00214000
* IN LENGTH, WITH A VALUE OF 'RR', 'WR', 'MR', OR 'MW'. 00215000
* IF IT IS NONE OF THE ABOVE, IT USES THE DEFAULT ACCESS 00216000
* MODE AS IN STEP 3, AND GOES TO STEP 5. IF IT IS ONE OF 00217000
* THESE REQUESTED ACCESS MODES, SETS AN INDICATOR AS NEEDED 00218000
* FOR LATER USE, AND CALLS DMKSCNFD TO CHECK FOR ANOTHER 00219000
* FIELD PRESENT; IF YES, GO TO STEP 5; IF NOT, TO STEP 7. 00220000
* 00221000
* 5. IF AN ADDITIONAL FIELD IS PRESENT, IT IS CONSIDERED 00222000
* TO BE A PASSWORD PROVIDED BY THE CALLER. 00223000
* 00224100
* 6. IN THIS CASE, THE PRESENCE AND VALUE OF THE PASSWORD 00225000
* ARE REMEMBERED FOR FUTURE HANDLING. 00226000
* 00227000
* 7. IF ALL OF THE ABOVE HAVE BEEN SUCCESSFUL, THE DEVICE FOUND 00228000
* IS CHECKED. IF THE DEVICE IS NOT A DISK, OR IF IT IS A T-DISK 00229000
* OR DEDICATED, AN ERROR MESSAGE AND ERROR CODE ARE RETURNED. 00230000
* IF OK, CALLS DMKSCNVS TO MAKE SURE THE REQUIRED VOLUME IS 00231000
* ONLINE (ERROR IF NOT). IF THE USER IS NOT "MYSELF", CHECKS 00232000
* FOR THE USERID ACTIVE (VIA DMKSCNAU), AND IF SO WHETHER HE 00233000
* IS IN THE "LOGON" PROCESS - ERROR RETURN IF YES. 00234000
* 00235000
* 8. DMKSCNVU IS NOW CALLED TO SEE IF ANY DEVICE WITH THE 00236000
* YYY ADDRESS IS CURRENTLY ONLINE FOR THE USER. IF NOT, GOES 00237000
* DIRECTLY TO STEP 9. IF YES, CHECKS THE POINTER TO THE REAL 00238000
* DEVICE BLOCK AND THE RELOCATION FACTOR TO SEE IF IT IS THE 00239000
* SAME DEVICE AS THAT FOR WHICH THE LINK IS DESIRED. 00240000
* IF NOT THE SAME, AN ERROR RETURN AND MESSAGE ARE GIVEN. 00241000
* IF IT IS THE SAME DEVICE (PRESUMABLY WITH A DIFFERENT LINK- 00242000
* MODE DESIRED), THEN DMKVDBRL IS CALLED TO RELEASE THE OLD 00243000
* VIRTUAL DEVICE BEFORE PROCEEDING TO STEP 9. 00244000
* 00245000
* 9. AN INTERNAL SUBROUTINE IS NOW CALLED TO DETERMINE WHETHER 00246000
* A READ- OR WRITE-LINK TO THE DESIRED DISK IS FEASIBLE. FIRST 00247000
* DMKUDRLK IS CALLED TO BRIEFLY LOCK THE GIVEN USERID; THEN 00248500
* DMKSCNLI IS CALLED TO DETERMINE HOW MANY READ- AND WRITE LINKS 00249000
* (IF ANY) TO THE GIVEN DISK CURRENTLY EXIST. THEN A DECISION 00249500
* TABLE (READILY REVISED PER INSTALLATION REQUIREMENTS) IS USED 00250000
* TO DETERMINE THE FEASIBILTY OF ESTABLISHING A LINK, BASED ON 00250500
* THE FOLLOWING INPUT CONDITIONS. 00251000
* WRITE LINK(S), READ LINK(S), OR NO LINKS CURRENTLY EXIST 00255000
* 00256000
* ACCESS REQUESTED (EITHER DEFAULT VALUE OR SPECIFIED) 00257000
* WAS 'R', 'RR', 'W', 'WR', 'M', 'MR', OR 'MW'. 00258000
* 00259000
* THE USER ACCESS MODE (IF USER = MYSELF), OR THE 00260000
* AVAILABLE PASSWORD(S) IN USER DEVICE BLOCK. 00261000
* 00262000
* IF THE DECISION IS THAT A LINK IS IMPOSSIBLE, EXIT IS MADE TO 00263000
* TO THE CALLER (VIA STEP 13), WITH A SUITABLE ERROR MESSAGE 00264000
* AND ERROR CODE (FOR EXAMPLE, IF THE OWNER OF THE DISK PROVIDED 00265000
* NO LINK PRIVILEGES AT ALL). OTHERWISE, CONTINUE TO NEXT STEP. 00266000
* 00267000
* 10. ON RETURN FROM THE INTERNAL SUBROUTINE, A CHECK IS NOW 00268000
* MADE AS TO WHETHER A PASSWORD IS REQUIRED TO BE ENTERED, 00269000
* AND IF SO WHETHER A READ-, WRITE-, OR MULT-PASSWORD. IF 00270000
* NO PASSWORD IS REQUIRED, PROCEEDS IMMEDIATELY TO STEP 12. 00271000
* IF THE PASSWORD WAS REQUIRED BUT WAS PROVIDED ON THE COMMAND 00272000
* LINE, IT IS NOW CHECKED; IF CORRECT GO TO STEP 12; IF WRONG, 00273000
* GIVE ERROR MESSAGE AND CODE, AND IF THE PASSWORD WAS INCLUDED 00274000
* ON THE COMMAND LINE OF A LINK ISSUED AS A VIRTUAL CONSOLE 00275000
* FUNCTION, INCREMENTS THE COUNT OF INCORRECT PASSWORDS IN THE 00276000
* VMBLOK. (IF A LINK IS SUBSEQUENTLY ISSUED FROM A VIRTUAL 00277000
* MACHINE DURING THE SAME TERMINAL SESSION, IT WILL BE REJECTED 00278000
* AS AN INVALID COMMAND AS INDICATED ABOVE IN STEP 1.) 00279000
* 00280100
* 11. IF A PASSWORD IS REQUIRED AND IS NOT AVAILABLE, 00281000
* DMKUDRUL IS CALLED TO UNLOCK THE USERID (LEFT FROM STEP 9), 00282110
* AND DMKEPSWD IS THEN CALLED TO HAVE THE USER ENTER THE 00283000
* READ-, WRITE-, OR MULT-PASSWORD, AND CHECK IT. IF 00284000
* INCORRECT, EXITS WITH MESSAGE AND ERROR-CODE. IF 00285000
* CORRECT, CALLS INTERNAL SUBROUTINE AGAIN AS IN STEP 9, 00286000
* AND UPON SUCCESSFUL RETURN CONTINUES TO STEP 12, 00287000
* OR IF UNSUCCESSFUL, GOES TO STEP 13. 00288000
* 00288100
* 12. IF ALL ABOVE STEPS HAVE SUCCEEDED, CALL DMKVDSLK TO 00289500
* ESTABLISH A READ- OR WRITE-LINK (AS DETERMINED BY THE 00290000
* DECISION TABLE) TO THE GIVEN DISK, AND IMMEDIATELY 00290500
* CALLS DMKLOCKD TO UNLOCK THE DIRECTORY. 00291000
* IF DMKVDS RETURNS AN ERROR CODE 32 IN REGISTER 2, 00291100
* DMKLNK WILL FIRST UNLOCK ANY LOCKED USERID(S) AND 00291200
* THEN ISSUE ERROR MESSAGE DMKLNK119E. 00291300
* 00291310
* 13. FINALLY, TYPES ANY RESPONSE OR ERROR MESSAGE WHICH IS TO 00295000
* BE SENT TO THE CALLER, CALLS DMKFRET TO RETURN THE FREE 00296000
* STORAGE WHICH WAS USED (UNLESS THE LINK SUBROUTINE WAS INVOKED 00297000
* VIA THE DMKLNKSB ENTRY POINT), AND RETURNS THE ERROR-CODE TO 00298000
* THE CALLER IN GPR 2. ALL PROCESSING IS NOW COMPLETE. 00299000
* 00300000
* 14. FOR THE LINK SUBROUTINE ENTRY POINT (DMKLNKSB) - CALLED 00301000
* BY "LOGON" TO ESTABLISH A LINK TO A DASD DEVICE IN THE USER'S 00302000
* DIRECTORY - THE INPUT CONDITIONS ARE STORED FOR USE BY THE 00303000
* GENERAL LINK LOGIC, A FLAG IS SET TO INDICATE THAT THE LINK 00304000
* SUBROUTINE WAS INVOKED (USED WHEREVER NECESSARY IN THE ABOVE- 00305000
* DESCRIBED LOGIC), AND THE NORMAL LINK LOGIC ENTERED AT STEP 7. 00306000
EJECT 00307000
* MESSAGES - 00308000
* 00309000
* NOTES: "USERID" GENERALLY DENOTES A SPECIFIC FILLED-IN USERID 00310000
* (E.G. "JONES") 00311000
* 00312000
* "XXX" OR "YYY" IS THE HEX VALUE (FILLED IN IF VALID) OF 00313000
* THE "XXX" OR "YYY" DEVICE SPECIFIED IN THE COMMAND LINE. 00314000
* 00315000
* "NNN" DENOTES A FILLED-IN DECIMAL NUMBER. 00316000
* 00317000
* IN THE RESPONSES AND ERROR MESSAGES WHERE "R/W BY NNN USERS" 00318000
* IS NORMALLY SPECIFIED, IF THE "NNN" IS SPECIFICALLY 001, 00319000
* THE USERID OF THE ONE USER IS GIVEN INSTEAD OF "NNN USERS". 00320000
* 00321000
* RESPONSES: 00322100
* 00329000
* MESSAGES GIVEN IF LINK WAS ESTABLISHED AS 00330000
* REQUESTED, AND IF LINK WAS ISSUED IN CP MODE 00331000
* (OMITTED IF LINK WAS ISSUED FROM VIRTUAL MACHINE): 00332000
* 00333000
* 'DASD YYY LINKED R/O' 00334000
* 00335000
* 'DASD YYY LINKED R/W' 00336000
* 00337000
* MESSAGES GIVEN IF THE LINK WAS ESTABLISHED AS REQUESTED, 00338000
* BUT OTHER USER(S) ARE ALSO LINKED TO THE SAME DEVICE: 00339000
* 00340000
* 'DASD YYY LINKED R/O; R/W BY NNN USERS' 00341000
* 00342000
* 'DASD YYY LINKED R/O; R/W BY NNN USERS; R/O BY NNN USERS' 00343000
* 00344000
* 'DASD YYY LINKED R/W; R/O BY NNN USERS' 00345000
* 00346000
* 'DASD YYY LINKED R/W; R/W BY NNN USERS' 00347000
* 00348000
* 'DASD YYY LINKED R/W; R/W BY NNN USERS; R/O BY NNN USERS' 00349000
EJECT 00350000
* MESSAGES (CONTINUED): 00351000
* 00352000
* ERROR MESSAGES: 00353000
* --------------------------------------------------------- 00354000
* DMKLNK020E USERID MISSING OR INVALID 00355000
* 00356000
* DMKLNK022E VADDR MISSING OR INVALID 00357000
* 00358000
* DMKLNK052E ERROR IN CP DIRECTORY 00359000
* 00360000
* DMKLNK053E USERID NOT IN CP DIRECTORY 00361000
* 00362000
* DMKLNK101W DASD YYY FORCED R/O; R/O BY NNN USERS 00363000
* 00364000
* DMKLNK102W DASD YYY FORCED R/O; R/W BY NNN USERS 00365000
* 00366000
* DMKLNK103W DASD YYY FORCED R/O; R/W BY NNN USERS; R/O BY NNN USERS 00367000
* 00368000
* DMKLNK104E USERID XXX NOT LINKED; R/O BY NNN USERS 00369000
* 00370000
* DMKLNK105E USERID XXX NOT LINKED; R/W BY NNN USERS 00371000
* 00372000
* DMKLNK106E USERID XXX NOT LINKED; R/W BY NNN USERS; R/O BY NNN USERS 00373000
* 00374000
* DMKLNK107E USERID XXX NOT LINKED; NOT IN CP DIRECTORY 00375000
* 00376000
* DMKLNK108E USERID XXX NOT LINKED; VOLID DSKLAB NOT MOUNTED 00377000
* 00378000
* DMKLNK109E USERID XXX NOT LINKED; INVALID LINK DEVICE 00379000
* 00380000
* DMKLNK110E USERID XXX NOT LINKED; DEV YYY ALREADY DEFINED 00381000
* 00382000
* DMKLNK111E USERID XXX NOT LINKED; NO READ PASSWORD 00383000
* 00384000
* DMKLNK112E USERID XXX NOT LINKED; NO WRITE PASSWORD 00385000
* 00386000
* DMKLNK113E USERID XXX NOT LINKED; NO MULT PASSWORD 00387000
* 00388000
* DMKLNK114E USERID XXX NOT LINKED; PASSWORD INCORRECT 00389000
* 00390000
* DMKLNK115E LINK INVALID; EXCESSIVE INCORRECT PASSWORDS 00391000
* 00392000
* DMKLNK116E USERID XXX NOT LINKED; CP DIRECTORY IN USE 00393000
* 00394000
* DMKLNK117E USERID XXX NOT LINKED; VOLID DSKLAB CONFLICT 00395000
* 00395030
* DMKLNK118E USERID XXX NOT LINKED; COMMAND FORMAT NOT VALID 00395060
* 00395100
* DMKLNK119E USERID XXX NOT LINKED; INSUFFICIENT FREE STORAGE 00395200
* 00396000
* DMKLNK137E DASD YYY NOT LINKED; CHAN XX DEDICATED 00397000
* 00397300
* DMKLNK153E DEVICE YYY EXCEEDS MAX NUM OF VIRTUAL DEVICES 00397600
* 00398100
* DMKLNK281I MSS VOL DSKLAB NOT LINKED; DEMNT IN PROCESS, RETRY 00398200
EJECT 00403000
*********************************************************************** 00404000
* 00405000
* LINK USERID | * XXX YYY < MODE > < PASSWORD > 00406000
* 00407000
* OR 00408000
* 00409000
* LINK USERID | * XXX YYY < MODE > < PASS= PASSWORD > 00410000
* 00411000
*********************************************************************** 00412000
* 00413100
* "DTBL" = DECISION-TABLE MACRO: 00414000
* &OPTIONS = FLAG-BITS USED FOR DECISION-TABLE LOGIC 00415000
* &LNKMODE = ACCESS PERMITTED PER UDEVMODE OF UDEVBLOK 00416000
* &JUMPADD = S-CONSTANT "JUMP-ADDRESS" TO CORRECT CODE 00417000
MACRO 00418000
&LABEL DTBL &OPTIONS,&LNKMODE,&JUMPADD 00419000
&LABEL DC AL1(&OPTIONS) - 0 00420000
DC AL1(&LNKMODE) - 1 00421000
DC S(&JUMPADD) - 2 00422000
SPACE 00423000
MEND 00424000
EJECT 00432000
COPY OPTIONS 00433000
COPY LOCAL 00434000
EJECT 00435000
DMKLNK CSECT 00436000
SPACE 00437000
DC CL8'DMKLNK' MODULE IDENTIFIER 00438000
SPACE 00439000
SPACE 00440000
EXTRN DMKEPSWD PASSWORD ROUTINE NOW EXTERNAL @VA14144 00440100
EXTRN DMKLOCK USERID LOCK 00441000
EXTRN DMKLOCKD USERID UNLOCK 00442000
EXTRN DMKUDRFU FIND USER 00443000
EXTRN DMKUDRFD FIND DEVICE 00444000
EXTRN DMKUDRRV RETURN VIRTUAL PAGE 00445000
EXTRN DMKCFPRD @VA04747 00445500
SPACE 00446000
EXTRN DMKCVTHB,DMKCVTBH,DMKCVTBD 00447000
EXTRN DMKQCNRD 00448000
EXTRN DMKSCNAU,DMKSCNFD,DMKSCNLI,DMKSCNVS,DMKSCNVU 00449000
EXTRN DMKVDSLK 00451000
EXTRN DMKERMSG 00452000
EXTRN DMKSCNVN 00453000
EXTRN DMKSTKCP,DMKSSSLN @VA14144 00453310
EXTRN DMKSYSJR,DMKJRLSL,DMKJRLIL @V60BBBB 00453600
EXTRN DMKFREE,DMKFRET @VA14144 00453610
SPACE 00454000
USING PSA,R0 00455000
USING VMBLOK,R11 00456000
USING SAVEAREA,R13 00458000
********************************************************************** 00458100
* * 00458200
* MAIN ENTRY POINT: THE LINK COMMAND * 00458300
* * 00458400
********************************************************************** 00458500
EJECT 00459000
DMKLNKIN RELOC "LINK" ENTRY 00460000
SR R5,R5 R5=0 MEANS NO DEC TBLS IN USE @VA14144 00461100
ST R5,SAVEWRK1 CLEAR SAVEWRK1 TO USE AS FLAGS @VA14144 00461200
ST R5,SAVER2 CLEAR R2-REG RETURNED AT EXIT @VA14144 00461300
LA R0,UDBFSIZE+2 GET FREE STOR FOR USER DIRECT @VA14144 00461400
CALL DMKFREE BLOCK, DEV BLOCK, & ERR MSG @VA14144 00461500
LR R4,R1 AND KEEP ITS ADDRESS IN R4 00466000
L R2,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00466200
USING JPSCBLOK,R2 TELL ASSEMBLER @V60BBBB 00466400
TM LINKJRL,L'LINKJRL+L'LINKJRLI JOURNALING? @V60BBBB 00466600
BZ LINK0A BR IF NOT @V60BBBB 00466800
CLC VMPSWDCT,JPSLNKDS SHALL WE LET HIM CONTINUE? @V60BBBB 00467000
B LINK0F CONTINUE @V60BBBB 00467200
DROP R2 @V60BBBB 00467400
LINK0A TM VMOSTAT,VMVIRCF WAS 'LINK' FROM VIRT. MACHINE? @V60BBBB 00467600
BZ LINK00 TRF IF NOT (NO PROBLEM) 00468000
IC R14,VMPSWDCT GET THE BAD PASSWORD COUNT @VM03198 00469000
N R14,F15 ISOLATE LOWER DIGIT @VM03198 00470000
LA R15,LNKLIMIT GET THE LIMIT @VM03198 00471000
CR R14,R15 SHALL WE LET HIM CONTINUE? @VM03198 00472000
LINK0F BNL ERROR115 NOPE, TOO BAD JACK... @V60BBBB 00473000
LINK00 DS 0H OK FOR USER TO ISSUE LINK, CONT @VA14144 00474100
USING UDBFBLOK,R4 REFERENCE UDBFBLOK BRIEFLY 00475000
MVC UDBFVADD(8),ZEROES CLEAR THE LAST DOUBLE-WORD 00476000
DROP R4 THAT'S ALL FOR NOW. 00477000
USING UDIRBLOK,R4 AND REFERENCE THE DIRECT BLOCK @VA14144 00478100
CALL DMKSCNFD GET 'TO' OR USERID 00479000
BNZ ERROR20 ERROR IF USERID MISSING @VA14144 00480100
CL R0,F2 MORE THAN 2 BYTES INPUTTED ? 00481000
BH LINK01A IF YES, IT CAN'T BE 'TO' OR '* ' 00482000
LR R15,R0 COUNT INTO R15, 00483000
BCTR R15,0 LESS 1, 00484000
LA R3,CLTO POINT AT 'TO' 00485000
EX R15,MODECLC SEE IF IT IS 'T' OR 'TO' 00486000
BNE LINK01 NOPE - ASSUME IT'S A USERID. 00487000
CALL DMKSCNFD SKIP 'TO' - NOW GET THE USERID 00488000
BNZ ERROR20 NOW WHY DID HE LEAVE IT OUT ? 00489000
LINK01 CLC =CL2'* ',0(R1) IS HE LINKING TO HIMSELF ? 00490000
BNE LINK01A TRF IF NOT THIS TIME. 00491000
MVC SAVEWRK2(8),VMUSER SAVE USERID 00492000
LA R0,8 CALL IT 8 BYTES 00493000
LA R1,SAVEWRK2 POINT TO USERID 00494000
B LINK02 GO SET FLAG MEANING "IT'S ME". @VA14144 00495100
* 00496000
LINK01A MVC SAVEWRK2(8),BLANKS 00497000
LR R15,R0 CHECK BYTE-COUNT 00498000
C R15,F8 ... 00499000
BH ERROR20 ERROR IF USERID > 8 CHARS @VA14144 00500100
BCTR R15,0 00501000
EX R15,SAVEID SAVE USERID (BLANK-FILLED) 00502000
CLC VMUSER,SAVEWRK2 IS THE USER = MYSELF ? 00503000
BNE LINK03 NOT THIS TIME. 00504000
* 00505000
LINK02 OI LINKFLAG,JMYSELF+JLNKPRV SET FLAGS FOR MYSELF @VA14144 00506100
* 00507000
LINK03 LR R2,R4 R2 = COPY OF USER DIRECT BLOCK @VA14144 00508100
CALL DMKUDRFU FIND THE USERID IN THE CP DIRECT @VA14144 00508200
BNZ ERROR53 ERROR IF USERID WAS NOT FOUND 00510000
CALL DMKSCNFD GET 'XXX' DISK-ADDRESS 00511000
BNZ ERROR22 CALLER BAD IF NOT THERE AT ALL. @VA14144 00512100
CALL DMKCVTHB CONVERT TO BINARY 00513000
BNZ ERROR22 JUST HEX NUMBERS, PLEASE. 00514000
CL R1,F4095 ADDR > X'FFF'? @VA01138 00515000
BH ERROR22 HASN'T BEEN INVENTED YET @VA01138 00516000
ST R1,SAVEWRK4 SAVE THE XXX DISK-ADDRESS. 00517000
CALL DMKSCNFD GET 'AS' OR 'YYY' DISK-ADDRESS 00518000
BNZ ERROR22 CALLER GOOFED IF HE LEFT IT OUT @VA14144 00519100
CL R0,F2 MORE THAN 2 BYTES INPUTTED ? 00520000
BH LINK03A IF YES, IT MUST BE THE YYY DEV @VA14144 00521100
LR R15,R0 COUNT INTO R15, 00522000
BCTR R15,0 LESS 1, 00523000
LA R3,CLAS POINT AT 'AS' 00524000
EX R15,MODECLC SEE IF IT IS 'A' OR 'AS' 00525000
BNE LINK03A NOPE - ASSUME IT'S THE YYY DEV @VA14144 00526100
CALL DMKSCNFD SKIP 'AS' - NOW GET THE YYY DEV @VA14144 00526200
BNZ ERROR22 JUST WHEN I HAD MY HOPES UP @VA14144 00526300
LINK03A CALL DMKCVTHB CONVERT YYY DEVICE TO BINARY 00529000
BNZ ERROR22 THAT'S 0-9 AND A-F. @VA14144 00530100
MAXDV R10 GET HIGHEST ALLOWABLE ADDR @VA01138 00531000
CLR R1,R10 LEGITIMATE 370 VIRTUAL DEV? @VA14144 00532100
BH ERROR22 ERR IF > MAX (X'5FF' OR X'FFF') @VA14144 00532200
ST R1,SAVEWRK5 SAVE THE YYY DISK-ADDRESS 00534000
L R0,SAVEWRK4 XXX DEVICE INTO R0, 00535000
LA R1,UDIRDISP R1 MUST POINT TO UDIRDISP & ON @VA14144 00536100
LR R2,R4 R2 MUST POINT TO UDIRBLOK 00537000
DROP R4 (THRU WITH UDIRBLOK NOW) 00538000
CALL DMKUDRFD FIND THE SPECIFIC DEVICE 00539000
BNZ ERROR107 ERROR IF NOT FOUND 00540000
CALL DMKUDRRV LET DMKUDR RELEASE HIS PAGES @VA14144 00541100
USING UDEVBLOK,R4 SWITCH TO UDEVBLOK DSECT NOW. 00542000
CALL DMKSCNFD ANYTHING LEFT ON INPUT LINE ? 00543000
BNZ LINK08 TRF IF NOT - GET DEFAULT LNK-MD @VA14144 00544100
CL R0,F2 MORE THAN 2 BYTES ? 00545000
BH LINK05 LOOK FOR 'PASS= ' OR PSWRD @VA14144 00546100
LR R6,R0 BYTE-COUNT INTO R6 00547000
BCTR R6,0 LESS 1 FOR EX-CLC 00548000
LA R3,MODER POINT TO 1ST MODE TO LOOK FOR @VA14144 00549100
LA R14,4 INCREMENTER FOR BXLE, 00550000
LA R15,MODEMW LAST MODE WE'LL LOOK FOR 00551000
LINK03B EX R6,MODECLC IS IT 'R ', 'RR', ETC. 00552000
BE LINK04 GOOD SHOW IF YES. 00553000
BXLE R3,R14,LINK03B ITERATE THRU VARIOUS MODES @VA14144 00554100
BAL R10,LINKDEF NOT FOUND - SET TO DEFAULT @VA14144 00554200
B LINK07 AND TREAT AS A PASSWORD. 00556000
* 00557000
LINK04 DS 0H ACCESS MODE WAS FOUND: 00558000
LH R15,2(,R3) PICK UP DECISION-TABLE INDEXER 00559000
STH R15,LINKHALF STORE WHERE NEEDED. 00560000
CALL DMKSCNFD ANYTHING MORE ON THE LINE ? 00562000
BNZ LINK09 TRF IF NOT - GO DO THE LINK NOW. 00563000
B LINK06 IF YES, CHECK FOR PASSWORD. 00564000
* 00565000
LINK05 BAL R10,LINKDEF SET DEFAULTIF NO LINK-MODE GIVEN @VA14144 00566100
* 00567000
LINK06 DS 0H @VA10715 00567610
CLC =C'PASS= ',0(R1) PERHAPS IS 'PASS= ' ? @V60BBBB 00568200
BNE LINK07 IF NOT, ASSUME IT'S THE PASSWORD @VA14144 00569100
CALL DMKSCNFD IF PASS=, THE PSWD MUST BE NEXT @VA14144 00569200
BZ LINK07 00569350
MVC SAVEWRK6(8),BLANKS TREAT MISSING PASSWORD 00569400
B ERR114 AS BAD 00569450
LINK07 L R2,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00572200
USING JPSCBLOK,R2 TELL ASSEMBLER @V60BBBB 00572400
TM MASKLINK,L'MASKLINK LINK PSWD SUPPRESSION ON? @V60BBBB 00572600
BZ LINK07F BR IF NOT @V60BBBB 00572800
DROP R2 @V60BBBB 00573000
TM VMOSTAT,VMCF CONSOLE FUNCTION? @V60BBBB 00573200
BZ LINK07F BR IF NOT @V60BBBB 00573400
TM VMOSTAT,VMVIRCF VIRTUAL CONSOLE FUNCTION @V60BBBB 00573600
BZ ERROR118 BR IF NOT @VA14144 00573810
TM VMFSTAT,VMNPWOCL VM WANT PASSWORD SUPPRESSION? @V60BBBB 00574000
BO ERROR118 BR IF YES @VA14144 00574210
LINK07F DS 0H @V60BBBB 00574400
MVC SAVEWRK6(8),BLANKS BLANK WHERE PASSWORD GOES @VA10715 00574410
LR R15,R0 PREPARE FOR EXECUTE @V60BBBB 00574600
BCTR R15,0 @V60BBBB 00574800
N R15,F7 MOVE NO MORE THAN 8 CHARACTERS @V60BBBB 00575000
EX R15,SAVEPASS SAVE THE PASSWORD @V60BBBB 00575200
C R0,F8 WAS IT LONGER THAN 8 CHARACTERS? @V60BBBB 00575400
BNH LINK07H 00576110
MVC SAVEWRK6(8),=C'TOO LONG' TREAT PASSOWRD > 8 00576120
B ERR114 CHARS AS BAD 00576130
LINK07H EQU * 00576140
OI LINKFLAG,JGOTPASS FLAG THAT WE HAVE THE PSWRD @VA14144 00576200
B LINK09 CONTINUE. 00580000
DROP R4 (THRU WITH COMMAND LINE & R9) @VA14144 00581100
* 00581200
* 00581300
LINK08 BAL R10,LINKDEF DEFAULT, IF NO LINK-MODE GIVEN @VA14144 00581400
LINK09 NI LINKFLAG,255-JMYSELF DON'T ASSUME MY OWN DISK @VA14144 00581500
LA R6,LEVLIMIT LINK-LIMIT = 2 FOR LINK COMMAND @VA14144 00581600
B LINK09A GO JOIN THE COMMON CODE @VA14144 00581700
EJECT 00581800
********************************************************************** 00581900
* * 00582000
* SUBROUTINE ENTRY POINT: LINK CALLED BY LOGON * 00582100
* * 00582200
********************************************************************** 00582300
DMKLNKSB RELOC "LINK SUBROUTINE" ENTRY POINT @VA14144 00582400
STM R0,R3,SAVEWRK2 USERID TO SAVEWRK2/SAVEWRK3, @VA14144 00582500
* LINK-TO AND LINK-AS DEVS TO SAVEWRK4 & SAVEWRK5 00582600
STH R5,LINKHALF STORE MAGIC INDEXER OF 0 ... 24 @VA14144 00582700
MVI LINKFLAG,LINKSUBR+JGOTPASS+JLNKPRV FLAGBITS @VA14144 00582800
LA R6,LEVLIMIT+1 LINK-LIMIT = 3 FOR DMKLNKSB, @VA14144 00582900
********************************************************************** 00583000
* * 00583100
* NOTE - * 00583200
* THIS CODE IS COMMON TO BOTH ENTRY POINTS. * 00583300
* THE DMKLNKIN ENTRY JOINS AT THIS LOCATION. * 00583400
* * 00583500
********************************************************************** 00583600
USING UDEVBLOK,R4 @VA14144 00583700
LINK09A EQU * R6 SET TO 2 OR 3 FOR LINK LIMIT @VA14144 00583800
MVC LINKMODE(1),UDEVMODE SAVE UDEVMODE FROM ORIG. @VA14144 00583900
* 00590000
LINK09B TM UDEVSTAT,UDEVLKDV IS THIS AN INDIRECT LINK? @VA14144 00591100
BO LINK09C YES - GO TO IT, MEN. 00592000
TM UDEVTYPC,CLASDASD NO - IT BETTER BE A DISK, THEN. 00593000
BZ ERROR109 BLUNDER IF NOT A DASD DEV @VA14144 00594100
TM UDEVSTAT,UDEVDED+UDEVTDSK DEDICATED OR (TEMP)? @VA14144 00594200
BNZ ERROR109 ERROR IF EITHER @VA14144 00594300
TM UDEVSTAT,UDEVLONG ALL THE INFO WE NEED THERE? @VA14144 00594400
BO LINK09D YES - WE'RE ALL READY TO GO @VA14144 00594500
B ERROR52 (ERROR IN CP DIRECTORY IF NOT) @VA14144 00594600
DROP R4 @VA14144 00594700
EJECT 00594800
********************************************************************** 00594900
* * 00595000
* CALL DMKUDR TO GET UDEVBLOK FOR AN INDIRECT LINK * 00595100
* * 00595200
********************************************************************** 00595300
USING UDBFBLOK,R4 00602000
LINK09C MVC UDBFVADD(8),ZEROES CLEAR DBL-WORD USED BY UDR @VA14144 00603100
DROP R4 @VA14144 00603200
USING UDEVBLOK,R4 00604000
LH R5,UDEVLINK DISK-TO-BE-LINKED-TO INTO R5, 00605000
ST R5,SAVEWRK4 REMEMBER FOR LATER USE 00606000
MVC SAVEWRK2(8),UDEVLKID ALSO REMEMBER USERID 00607000
LA R0,8 POINT TO USERID - OWNER OF DISK 00608000
LA R1,SAVEWRK2 ... 00609000
LR R2,R4 SET R2 00610000
CALL DMKUDRFU FIND THE USERID 00611000
BNZ ERROR53 IF NOT FOUND MUST BE A DIR ERROR @VA14144 00612100
LR R0,R5 DEVICE INTO R0, 00613000
LA R1,UDEVDISP POINT TO WHERE TO START LOOKING 00614000
CALL DMKUDRFD NOW FIND THE GIVEN DEVICE 00615000
BNZ ERROR107 BAD SHOW IF WE COULDN'T FIND IT @VA14144 00616100
CALL DMKUDRRV RELEASE PAGES USED BY DMKUDRFD 00617000
BCT R6,LINK09B REPEAT CHECKING UNTIL OK OR ERR @VA14144 00618100
B ERROR52 FOUND WITHIN A REASONABLE @VA14144 00618200
DROP R4 NUMBER OF LEVELS @VA14144 00618300
EJECT 00618400
********************************************************************** 00618500
* * 00618600
* THE FOLLOWING ENTRY POINT IS EXECUTED AFTER A REQUIRED * 00618700
* MSS VOLUME IS MOUNTED. THE ADDRESS OF DMKLNKSS IS * 00618800
* PLACED IN A CPEXBLOK BY DMKSSS. WHEN THE MOUNT * 00618900
* IS COMPLETE, DMKDSB STACKS THE CPEXBLOK SUCH THAT * 00619000
* DMKLNKSS GETS CONTROL. * 00619100
* * 00619200
********************************************************************** 00619300
DMKLNKSS RELOC ENTRY FROM THE DISPATCHER @VA14144 00619400
ST R3,SAVER0 SAVE THE ADDR OF THE MSSCOM BLK @VA14144 00619500
MVC SAVEWRK1(4),0(R1) RESET WORKAREA DATA @VA14144 00619600
MVC SAVEWRK2(32),4(R1) ....SAME FOR THE REST @VA14144 00619700
LA R4,36(R1) OUR BUFFER AREA NOW @VA14144 00619800
ST R1,SAVER1 SAVE FOR LATER DMKFRET @VA14144 00619900
OI LINKFLAG,SSENT INDICATE MSS RE-ENTRY @VA14144 00620000
EJECT 00620100
********************************************************************** 00620200
* * 00620300
* NOTE - * 00620400
* THIS CODE IS COMMON TO ALL THREE ENTRY POINTS. * 00620500
* THE DMKLNKIN AND DMKLNKSB FALL THROUGH TO THIS * 00620600
* POINT VIA THE BRANCH FROM ABOVE AT LINK09B. * 00620700
* * 00620800
********************************************************************** 00620900
USING UDEVBLOK,R4 @VA14144 00621000
LINK09D LA R1,UDEVVSER POINT TO VOLUME ID 00622000
LA R0,6 (6 BYTES, PLEASE) 00623000
CALL DMKSCNVS MAKE SURE IT IS MOUNTED 00624000
BZ VOLFND CONTINUE IF FOUND... @VA09303 00625000
* ELSE, SECOND LOOK AT RDEVBLOKS 00625050
USING RDEVBLOK,R1 FOR RDEVMOUT FLAG @VA09303 00625100
L R1,ARIODV POINT TO FIRST RDEVBLOK @VA09303 00625200
L R10,ARIODC GET THE COUNT OF --- @VA09845 00625255
LH R10,0(,R10) THE RDEVBLOKS @VA09845 00625305
LNKCHK TM RDEVSTAT,RDEVDISA+RDEVDED DED OR OFFLINE ? @VA09303 00625350
BNZ CHKNXT @VA09303 00625400
CLC RDEVSER(6),UDEVVSER ARE THE VOLIDS EQUAL? @VA09303 00625450
********************************************************************** 00625510
* * 00625520
* SINCE DMKSCNVS COULD NOT FIND THE RDEVBLOK,THE RDEVMOUT * 00625530
* FLAG IS ON INDICATING THAT THE VOLUME IS MOUNTED BUT NOT * 00625540
* ATTACHED TO THE SYSTEM. ISSUE THE MSG 108. * 00625550
* * 00625560
********************************************************************** 00625570
BZ ERROR108 @VA09303 00625700
CHKNXT LA R1,RDEVSIZE*8(R1) POINT TO NEXT RDEVBLOK @VA09303 00625750
BCT R10,LNKCHK CHECK FOR LAST RDEVBLOK @VA09845 00625810
B CHK3330V IF VOL NOT MOUNTED, CHECK FOR MSS@VA09303 00625850
DROP R1 @VA09303 00625900
VOLFND LR R9,R1 SAVE THE RDEVBLOK ADDRESS IN R9 @VA09303 00625950
USING RDEVBLOK,R9 00627000
TM RDEVFLAG,RDEVSYS Is device attached to system? HRC039DK 00627100
BZ ERROR108 Device not attached to system HRC039DK 00627200
CLC RDEVTYPC(2),UDEVTYPC DEV CLS & TYPE MUST MATCH @VA14144 00628100
BE LINK09B2 BRANCH IF EQ, ALL OK @V60B6B8 00630000
EJECT 00631100
CLI RDEVTYPE,TYP2314 IF NOT EQ THEN THE REAL DISK @VA14144 00631200
BNE ERROR117 MUST BE A 2314 AND THE MINI @VA14144 00631300
CLI UDEVTYPE,TYP2311 DISK MUST BE A 2311 TOP OR @VA14144 00631400
BNE ERROR117 2311 BOTTOM. IF NOT THEN @VA14144 00631500
TM UDEVFTR,FTR2311T+FTR2311B ISSUE ERRMSG LNK117 @VA14144 00631600
BZ ERROR117 -- "VOLID DSKLAB CONFLICT". @VA14144 00631700
LINK09B1 EQU * 00637000
CLC VMUSER,SAVEWRK2 DOES REAL DISK BELONG TO ME? @VA14144 00638100
BE LINK09E YES, SET MYSELF FLAG AGAIN. @VA14144 00638200
LA R0,8 IS THIS USER ACTIVE ? 00641000
LA R1,SAVEWRK2 ... 00642000
CALL DMKSCNAU ... 00643000
BC 8+4+2,LINK10 NO PROBLEM IF HE ISN'T. 00644000
TM VMRSTAT-VMBLOK(R1),VMLOGON LOGGING ON NOW? @VA14144 00645000
BO ERROR116 THAT'S A NO NO 00646000
B LINK10 BUT OK IF HE'S NOT. 00647000
LINK09B2 EQU * CHECK FOR MSS VOLUMES @V60B6B8 00647010
TM RDEVFTR,VIRTUAL+SYSVIRT IS RDEV A 3330 @V60B6B8 00647030
BZ LINK09B1 NO, CONTINUE @V60B6B8 00647040
CLI UDEVTYPC,CLASDASD DID USER WANT DASD @VA14144 00647050
BNE ERROR117 NO, BUT THAT IS WHAT WE FOUND @V60B6B8 00647070
CLI UDEVTYPE,TYP3330 DID USER WANT 3330 @V60B6B8 00647080
BNE ERROR117 USER DIDN'T WANT 3330 @V60B6B8 00647090
TM RDEVFLAG,RDEVSEL IS IT SELECTED FOR DEMOUNT? @VA11706 00647092
BO ERROR281 YES, CAN'T LINK NOW @VA11706 00647094
B LINK09B1 RESUME MAINLINE @V60B6B8 00647100
DROP R9 @V60B6B8 00647110
EJECT 00647120
********************************************************************** 00647125
* * 00647130
* THE VM SYSTEM VOLUME WHICH IS THE TARGET OF A LINK * 00647135
* IS NOT MOUNTED. IF THE USER WANTED A 3330, CALL * 00647140
* DMKSSSLN TO SEE IF A 3330V VOLUME WITH THE CORRECT * 00647145
* VOLSER CAN BE MOUNTED. * 00647150
* * 00647155
* DMKSSSLN WILL ALLOCATE A VUA AND ATTEMPT AN MSS * 00647160
* MOUNT. IF FOR ANY REASON DMKSSSLN FAILS (SUCH AS * 00647165
* NO VUA AVAILABLE, VOLUME NOT FOUND, MSS NOT * 00647170
* AVAILABLE, THEN ON RETURN GPR 15 WILL BE NONZERO * 00647175
* * 00647180
********************************************************************** 00647185
CHK3330V EQU * CHECK FOR 3330V REQUEST @V60B6B8 00647230
CLI UDEVTYPC,CLASDASD DID USER WANT DASD @V60B6B8 00647250
BNE ERROR108 3330V MUST BE DASD @V60B6B8 00647260
CLI UDEVTYPE,TYP3330 USER WANT A 3330 SYSTEM VOLUME @V60B6B8 00647270
BNE ERROR108 NO, CAN'T BE MSS VOLUME @V60B6B8 00647280
TM PSAMSS,MSSPRES IS THE MSS PRESENT @V60B6B8 00647290
BZ ERROR108 NO, VOLUME NOT AVAILABLE @V60B6B8 00647300
L R6,SAVEWRK5 TO PASS YYY ADDRESS TO DMKSSS. @VA11254 00647305
CALL DMKSSSLN TRY TO MOUNT THE SYSTEM VOLUME @V60B6B8 00647310
LTR R0,R0 WAS THERE AN ERROR @V60B6B8 00647320
BZ LINK09D ENTER MAINLINE LINK @VMI2004 00647330
LA R15,RC4 SET UP FOR RET CODE CHECK @V60B6B8 00647340
CR R15,R0 IS DMKSSS CODE 4 @V60B6B8 00647350
BNE ERROR108 PUT OUT ERROR MESSAGE @VA14144 00647400
MNTSETUP EQU * SAVE DATA FOR ASYNCH ENTRY @VA14144 00647425
TM MSSFLAG2-OSVSCOM(R1),MSGPROC HAS PCI OCCURRED @VA14144 00647450
BZ PCINOW YES, CAN COMPLETE NOW @VA14144 00647475
NI MSSFLAG2-OSVSCOM(R1),X'FF'-MSGPROC @VA14144 00647500
L R2,MSSTASK1-OSVSCOM(R1) CPEXBLOK FOR DMKLNKSS @VA14144 00647525
LA R0,SAVESIZE+UDBFSIZE+2 LEN OF AREA TO SAVE DATA @VA14144 00647550
CALL DMKFREE GET AREA FOR DYNAMIC DATA @VA14144 00647575
ST R1,CPEXR1-CPEXBLOK(R2) SAVE ADDR FOR DMKLNKSS @VA14144 00647600
MVC 0(4,R1),SAVEWRK1 PUT FLAGS INTO AREA @VA14144 00647625
MVC 4(32,R1),SAVEWRK2 REST OF NEEDED DATA @VA14144 00647650
MVC 36(80,R1),0(R4) SAVE DUMMY UDEVBLOK @VA14144 00647675
B LINKEXIT WAIT FOR DMKDSB TO GET PCI @VA14144 00647700
EJECT 00647725
********************************************************************** 00647750
* * 00647775
* HERE MEANS THAT THE PCI HAS NOW OCCURRED * 00647800
* AND THE SYSTEM VOLUME IS NOW MOUNTED. * 00647825
* * 00647850
********************************************************************** 00647875
PCINOW EQU * @VMI2018 00648150
L R14,=V(DMKSSSMQ) ADDR OF MSSCOM Q @VMI2018 00648200
L R15,0(R14) ACTUAL FIRST MSSCOM @VMI2018 00648250
CHEKIT EQU * @VMI2018 00648300
CR R1,R15 FIND THIS MSSCOM IN THE Q @VMI2018 00648350
BE DEQIT IF FOUND, REMOVE FROM Q @VMI2018 00648400
LTR R15,R15 VALIDITY CHECK: END OF Q? @VMI2018 00648450
BZ EXITGO YES, QUIT, Q INVALID @VMI2018 00648500
LA R14,MSSNEXT-OSVSCOM(R15) INCREMENT CHAIN PTR @VMI2018 00648550
L R15,MSSNEXT-OSVSCOM(R15) NEXT MSSCOM BLOCK @VMI2018 00648600
B CHEKIT CHECK FOR CORRECT MSSCOM @VMI2018 00648650
DEQIT EQU * REMOVE OUR ENTRY FROM Q @VMI2018 00648700
MVC 0(4,R14),MSSNEXT-OSVSCOM(R15) RESET CHAIN @VMI2018 00648750
LA R0,MSSSIZE MSSCOM SIZE @VMI2018 00648800
CALL DMKFRET DONE WITH MSSCOM @VMI2018 00648850
B LINK09D NOW COMPLETE THE LINK @VMI2018 00648900
EJECT 00649100
LINK09E OI LINKFLAG,JMYSELF SET MYSELF FLAG IF MY DISK. @VA14144 00649200
LINK10 L R1,SAVEWRK5 CHECK YYY DEV TO SEE IF ATTACHED @VA14144 00650100
CALL DMKSCNVU ... 00652000
AIF (NOT &DEDCH).NOTDED1 00653000
BC 4,LINK11 OK TO CONTINUE IF NO CHAN BLOCK @VA14144 00654100
BALR R15,0 PRESERVE COND CODE FROM SCNVU @VA14144 00654200
USING VCHBLOK,R6 ADDRESS VCHBLOK (TEMPORARILY) 00656000
TM VCHSTAT,VCHDED IS THE VIRTUAL CHAN DEDICATED? @VA14144 00657100
BO ERROR137 YES - CANNOT LINK DEVICES TO IT 00658000
DROP R6 FINISHED WITH VCHBLOK 00659000
SPM R15 RESTORE CONDITION CODE 00660000
BC 2+1,LINK11 OK TO CONTINUE IF NO CU OR DEVICE 00661000
AGO .DED1 00662000
.NOTDED1 BNZ LINK11 OK TO CONT IF DEV NOT ATTACHED 00663100
.DED1 ANOP 00664000
USING VDEVBLOK,R8 REFERENCE THE DEVICE WE FOUND 00665000
TM VDEVTYPC,CLASDASD IS IT A DASD DEVICE ? 00666000
BZ ERROR110 TRF IF NOT - CERTAINLY AN ERROR. 00667000
L R14,VDEVREAL GET POINTER TO REAL DEVICE BLOCK 00668000
LH R15,VDEVRELN AND RELOCATION FACTOR 00669000
CLR R14,R9 SAME DEVICE WE WANT TO LINK TO? @VA14144 00670100
BNE ERROR110 ERROR IF NOT - LEAVE ALONE @VA14144 00670200
CH R15,UDEVRELN ALSO CHECK RELOCATION FACTOR @VA14144 00670300
BNE ERROR110 ... 00673000
CLI VDEVTYPE,TYP2311 MIGHT THIS BE A PSEUDO-2311 ? 00674000
BNE LINK10A NO - IT REALLY IS THE SAME DISK @VA14144 00675100
IC R0,UDEVFTR FTR2311T,FTR2311B' BITS, IF ANY @VA14144 00675200
N R0,=A(FTR2311T+FTR2311B) ... AND ONLY THOSE @VA14144 00675300
BZ LINK10A IF 0 IT'S A REAL 2311 00678000
N R0,VDEVFLAG-3 SAME DEVICE IF THE FLAGS MATCH 00679000
BZ ERROR110 IF NO MATCH, A DIFFERENT DEVICE. 00680000
DROP R8 00681000
LINK10A OI LINKFLAG,DETOLD DETACH OLD LINK BEFORE SETTING NEW ONE 00682000
* 00683000
LINK11 DS 0H SEE IF A LINK IS FEASIBLE, AND IF SO WHAT KIND: 00684000
STH R1,UDEVADD STORE LINK-TO DEVICE ADDRESS IN UDEVBLOK 00685000
BAL R10,LINKSUB SUBROUTINE SETS UP R5 PER DECISION TABLE 00686000
* R5 NOW 'INDEXES' THE DECISION-TABLE 00687000
LA R0,3 SET TO OBTAIN 01, 02, OR 03 TO CHECK PSWD 00688000
IC R1,0(,R5) PICK UP FLAG-BYTE 00689000
NR R0,R1 ISOLATE THE 01, 02, OR 03 IN R0 00690000
LR R1,R0 NUMBER ALSO IN R1, 00691000
SLL R1,3 TIMES 8 PLEASE 00692000
LA R1,UDEVPASR-8(R1) POINT R1 TO UDEVPASR, -PASW, OR -PASM. 00693000
CLC =CL8'ALL',0(R1) IS THE PASSWORD ALL? @V60BBBB 00693200
BNE LINK13 BR IF NOT @V60BBBB 00693400
OI LINKFLAG,PASSALL INDICATE NOT TO BE JOURNALED @V60BBBB 00693600
LINK13 DS 0H @V60BBBB 00693800
TM LINKFLAG,JLNKPRV DO I HAVE LINK PRIVILEGE TO DISK ? 00694000
BZ LINK16 TRF IF NOT - WE NEED THE PASSWORD. 00695000
IC R15,LINKMODE GET USER ACCESS MODE FROM ORIG. UDEVBLOK 00696000
SRL R15,2 0, 4, ... 24 BECOMES 0, 1, ... 6 00697000
N R15,F7 NOW IT DOES, ANYWAY 00698000
IC R15,BYTABLE(R15) NOW PICK UP PROPER BITS TO EXAMINE 00699000
EX R15,XTMMODE DOES IT MATCH THE ACCESS MODE NEEDED ? 00700000
BO LINK20 TRF IF YES - NO PASSWORD NEEDED. 00701000
LINK16 TM LINKFLAG,LINKSUBR+JMYSELF MY DISK OR LINK SUBR @VA13015 00702100
BNZ LINK20 YES- TREAT AS IF GOOD PW @VA13015 00703100
TM VMFSTAT,VMFDLNKN LINK NO PASS OPTION IN DIRECT HRC011DK 00703400
BO LINK20 YES, LINK OK HRC011DK 00703700
CLI 0(R1),C' ' DOES OWNER ALLOW THIS CLASS LINK @VA13015 00704100
BE NOPSWRD NO, THEN GIVE ERROR MSG @VA13015 00705100
CLC =CL8'ALL',0(R1) IS THE PASSWORD = 'ALL' ? 00706000
BE LINK20 TRF IF YES - DON'T GO GET ONE. 00707000
TM LINKFLAG,JGOTPASS DID USER ALREADY ENTER THE PASSWORD? 00708000
BZ LINK18 TRF IF NOT - GO GET IT. 00709000
CLC SAVEWRK6(8),0(R1) DOES THE PASSWORD MATCH ? 00710000
BE LINK20 TRF IF YES - GOOD SHOW. 00711000
BAL R10,UNLOKSUB UNLOCK USERID(S), 00712000
B ERR114 INVALID PASSWORD 00713100
LINK18 LR R3,R1 SAVE R1 FOR PASSING TO DMKEPSWD 00717000
BAL R10,UNLOKSUB UNLOCK USERID(S) BEFORE GETTING PASSWORD 00718000
LR R1,R3 RESTORE R1 00719000
A R0,F4 BUMP R0 BY 4 INDICATING TO @V60BBBB 00719250
* DMKEPSWD THAT AN INVALID PASS- 00719500
* WORD SHOULD BE RETURNED IN R0/R1. 00719750
CALL DMKEPSWD OBTAIN AND CHECK LINK PASSWORD 00720000
BNZ PASSWRNG IF WRONG, HE'S JUST OUT OF LUCK. 00721000
EJECT 00722100
********************************************************************** 00722200
* * 00722300
* HERE MEANS THE PASSWORD WAS CORRECT (OR NOT NEEDED) * 00722400
* * 00722500
********************************************************************** 00722600
LINK20 EQU * @VA14144 00722700
TM LINKFLAG,DETOLD OLD LINK TO GET RID OF FIRST ? 00725000
BZ LINK21 NOPE - GO TO IT (USUAL CASE). 00726000
L R1,SAVEWRK5 GET VIRTUAL DEVICE AGAIN, 00728000
CALL DMKSCNVU FIND THE BLOCKS 00729000
USING VDEVBLOK,R8 @VA04747 00730200
CALL DMKCFPRD RESET OLD LINK @VA04747 00730400
NI LINKFLAG,255-DETOLD TURN OFF SIGNAL @VA04747 00730600
LH R0,UDEVNCYL GET LATEST MDISK EXTENT @VA04747 00730800
STH R0,VDEVBND REFLECT SAME IN NEW VDEVBLOK @VA04747 00731000
********************************************************************** 00731005
* TO GET CORRECT COUNT OF READ AND WRITE LINKS FROM DMKSCNLI * 00731006
* (TO EXCLUDE OUR OWN LINK): TEMPORARILY CHANGE OUR VDEVREAL * 00731007
* POINT TO ZEROES AND REMOVE OUR VDEVBLOK FROM THE CYCLIC * 00731008
* LINKOF SHARED DEVICES. * 00731009
********************************************************************** 00731010
MVC SAVEWRK7,VDEVREAL SAVE PTR TO VDEVREAL @VA13824 00731020
MVC VDEVREAL(4),ZEROES DMKSCN WON'T INCLUDE US @VA13824 00731025
LR R10,R8 SAVE OUR VDEVBLOK ADDR TO CHECK @VA14144 00731030
VDEVLIST EQU * @VA13824 00731045
LR R7,R8 SAVE LAST VDEVBLOK ADDR @VA13824 00731050
L R8,VDEVLINK LOAD R8 WITH NEXT VDEVBLOK @VA13824 00731055
C R10,VDEVLINK IS THE NEXT ONE US? @VA14144 00731060
BNE VDEVLIST NO -- GET NEXT VDEVBLOK ADDR @VA14144 00731062
EJECT 00731064
********************************************************************** 00731066
* * 00731068
* FIX POINTER TO EXCLUDE US FROM THE CYCLIC LIST * 00731070
* * 00731072
********************************************************************** 00731074
MVC VDEVLINK(4),VDEVLINK-VDEVBLOK(R10) @VA14144 00731076
LR R2,R4 UDEVBLOK TO R2 FOR DMKSCNLI @VA13824 00731085
LR R1,R9 POINTER TO RDEVBLOK IN R1 @VA13824 00731090
CALL DMKSCNLI GET UPDATED EXISTING LINKS @VA13824 00731095
********************************************************************** 00731100
* * 00731102
* RETURN OUR BLOCK TO THE LIST * 00731104
* * 00731106
********************************************************************** 00731108
ST R10,VDEVLINK @VA14144 00731110
LR R8,R10 HAVE R8 POINT TO US AGAIN @VA14144 00731112
MVC VDEVREAL(4),SAVEWRK7 RESTORE OUR VDEVREAL @VA13824 00731115
LR R6,R0 SAVE COUNT OF READ LINKS @VA13824 00731120
LR R7,R1 AND COUNT OF WRITE LINKS @VA13824 00731125
BZ NOLINKS IF CC=0, THEN NO LINKS @VA13824 00731130
ST R3,SAVEWRK8 SAVE VMBLOK ADDR OF R/O USER @VA13824 00731135
********************************************************************** 00731145
* * 00731150
* R2 POINTS TO VDEVBLOK OF R/W (OR R/O) USER. * 00731155
* SAVE HIS VMBLOK. * 00731160
* * 00731165
********************************************************************** 00731170
MVC SAVEWRK9(4),VDEVUSER-VDEVBLOK(R2) @VA14144 00731175
NOLINKS EQU * @VA14144 00731180
NI VDEVFLAG,255-VDEVRDO ASSUME R/W FOR NOW @VA04747 00731200
TM 0(R5),SWT SHOULD WE SET TO WRITE ?? @VA04747 00732000
BO LINK25 YES, GO INDICATE RESULTS @VA04747 00732200
OI VDEVFLAG,VDEVRDO NO, SET READ ONLY MODE @VA04747 00732400
B LINK25 LINK COMPLETE TRANSMIT RESPONSE @VA04747 00732600
DROP R8 @VA04747 00732800
EJECT 00732810
LINK21 LR R1,R9 SET R1 = ADDRESS OF RDEVBLOCK @VA04747 00733100
LR R3,R2 ADD OF VDEVBLOK FOR EXISTING LNK @VA14144 00733410
LR R2,R4 R2 = ADDRESS OF UDEVBLOK 00736000
MVI UDEVMODE,UDEVR TENTATIVELY SET MODE TO 'R' 00737000
TM 0(R5),SWT DID HE WANT 'SET TO WRITE' ? 00738000
BZ LINK24 IF NOT, 'R' IS CORRECT. 00739000
MVI UDEVMODE,UDEVW SET TO 'W' IF THAT'S THE RIGHT SCOOP. 00740000
LINK24 CALL DMKVDSLK ESTABLISH NEW LINK TO VIRTUAL DEVICE 00741000
CH R2,=H'124' EXCEEDED MAX DEVICES? @VA13217 00741045
BE ERR153 YES, SEND MSG 153 @VA13217 00741065
LTR R2,R2 ENOUGH STORAGE TO PERFORM LINK? @V407466 00741100
BNZ ERROR119 INSUFFICIENT STORAGE @V407466 00741200
LINK25 BAL R10,UNLOKSUB UNLOCK USERIDS POST HASTE @VA04747 00742200
TM 0(R5),NOL SUCCESSFUL LINK? @VA13284 00742210
BO LINK25F NO, THEN SKIP LOURNALING @VA13284 00742240
L R2,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00742350
USING JPSCBLOK,R2 TELL ASSEMBLER @V60BBBB 00742500
TM LINKJRL,L'LINKJRL SUCCESSFUL-LINK JOURNALING? @V60BBBB 00742650
BZ LINK25F BR IF NOT @V60BBBB 00742800
TM LINKFLAG,JMYSELF+PASSALL JOURNAL THIS LINK? @V60BBBB 00742950
BNZ LINK25F BR IF NOT @V60BBBB 00743100
LA R1,SAVEWRK2 POINT AT USERID FOR DMKJRLSL @V60BBBB 00743250
LA R2,SAVEWRK4 POINT AT 'XXX' FOR DMKJRLSL @V60BBBB 00743400
CALL DMKJRLSL JOURNAL SUCCESSFUL LINK @V60BBBB 00743550
DROP R2 @V60BBBB 00743700
LINK25F LH R15,2(,R5) NOW WHERE-TO-GO INTO R5 AND GO TO@V60BBBB 00743850
B 0(R12,R15) LNKSC, LNKRO, LNKRW, ERROR101, @VA14144 00744100
* ERROR102. 00744200
EJECT 00744300
********************************************************************** 00744400
* * 00744500
* ENTRY POINTS BRANCHED TO VIA THE DECISION TABLES. * 00744600
* APPROPIATE LINKAGE IS ATTEMPTED AND RESPONSE IS ISSUED. * 00744700
* * 00744800
********************************************************************** 00744900
LNKSC DS 0H SIMPLE CASE - SIMPLE MESSAGE: 00746000
LA R7,L'RESPON1 SET R7 = LENGTH OF SIMPLE MESSAGE 00747000
MVC 0(L'RESPON1,R4),RESPON1 SIMPLE MSG TO FREE STORAGE 00748000
B LINK30 FILL IN SIMPLE STUFF. 00749000
LNKRO DS 0H LINK GIVEN; OTHERS LINKED R/O: 00751000
LR R1,R6 NUMBER OF R/O USERS INTO R1 00752000
MVC 0(L'RESPON1+L'RESPON2,R4),RESPON1 MSG TO FREE STORAGE 00753000
B LINK26 CONTINUE BELOW. 00754000
LNKRW DS 0H LINK GIVEN; OTHERS LINKED R/W. 00756000
MVC 0(L'RESPON1+L'RESPON2,R4),RESPON1 MSG TO FREE STORAGE 00757000
MVI RESPON2A(R4),C'W' FILL IN 'W' WHERE NEEDED. 00758000
LR R1,R7 NO. OF OTHER R/W USERS INTO R1 00759000
LTR R6,R6 ANY OTHER R/O USERS ALSO ? 00760000
BNP LINK26 NOPE - NOT THIS TIME. 00761000
OI LINKFLAG,ADDROMSG IF YES, SIGNAL: ADD R/O MESSAGE 00762000
LINK26 LA R7,L'RESPON1+L'RESPON2 SET R7 = LENGTH OF WHOLE MSG 00764000
CL R1,F1 IS IT JUST ONE USER ? 00765000
BH LINK28 NOPE - MORE THAN ONE - PUT IN THE COUNT 00766000
L R14,SAVEWRK9 PUT THE USERID IN THE MESSAGE 00767000
MVC RESPON2B(8,R4),VMUSER-VMBLOK(R14) ... 00768000
MVI RESPON2C(R4),C' ' AND NEEDED BLANK 00769000
B LINK30 CONTINUE BELOW. 00770000
LINK28 CALL DMKCVTBD NNN TO DECIMAL, PLEASE, 00771000
STCM R1,7,RESPON2B(R4) STORE IN MESSAGE 00772000
LINK30 L R1,SAVEWRK5 GET DEVICE-ADDRESS LINKED AS 00774000
CALL DMKCVTBH TO HEX PLEASE 00775000
STCM R1,7,RESPON1A(R4) STORE IN MESSAGE 00776000
TM 0(R5),SWT WAS IT 'SET TO WRITE' ? 00777000
BZ LINK32 NOPE - WE'RE DONE. 00778000
MVI RESPON1B(R4),C'W' YES, FILL IN 'W' WHERE NEEDED. 00779000
LINK32 TM 0(R5),GMS MESSAGE WANTED REGARDLESS OF RETURN-CODE? 00781000
BO LINK33 TRF IF YES - GO TO IT. 00782000
TM VMOSTAT,VMVIRCF VIRTUAL CONSOLE-FUNCTION LINK ? 00783000
BO LINKEXIT IF YES, SKIP MSG FOR RETURN-CODE = 0. 00784000
TM LINKFLAG,LINKSUBR LINK SUBROUTINE ENTRY POINT INVOKED? 00785000
BO EXIT YES - EXIT FORTHWITH. 00786000
LINK33 LA R2,NORET SET 'NORET' OPTION FOR DMKQCNWT 00788000
* NOTE - LENGTH OF MSG IS IN R7 00789000
LINK34 DS 0H ADDRESS OF MESSAGE IS IN R4 00791000
LR R15,R7 COMPUTE END OF RESPONSE MESSAGE 00792000
ALR R15,R4 (ONE BEYOND THE LAST BYTE) 00793000
B LINK38 GO DELETE TRAILING BLANKS (IF ANY) 00794000
LINK36 BCTR R7,0 DECREMENT COUNT TO DELETE TRAILING BLANK 00795000
LINK38 BCTR R15,0 NOW LOOK AT "NEW" LAST-BYTE 00796000
CLI 0(R15),C' ' IS IT BLANK ? 00797000
BE LINK36 IF YES, DECREMENT COUNT. 00798000
TM LINKFLAG,ADDROMSG R/O BY NNN USERS TO BE ADDED TO MSG? 00799000
BZ LINK40 NOPE - NOT TODAY. 00800000
MVC 1(L'RESPON2,R15),RESPON2 SKELETON TO END OF MESSAGE 00801000
LA R3,10(,R15) WHERE TO PUT 'NNN' OR THE USERID 00802000
LA R7,L'RESPON2-1(,R7) ASSUME ONE USER 00803000
CL R6,F1 IS IT JUST ONE R/O USER ? 00804000
BH LINK39 NOPE - MORE THAN ONE - USE THE COUNT. 00805000
L R15,SAVEWRK8 REFERENCE VMBLOK ADDRESS OF THE ONE USER 00806000
MVC 0(8,R3),VMUSER-VMBLOK(R15) PUT IN THE 8-BYTE USERID 00807000
B LINK40 AND GO GIVE THE MESSAGE. 00808000
LINK39 LA R7,1(,R7) ONE MORE TO INCLUDE S IN 'USERS' 00809000
LR R1,R6 GET THE 'NNN' (STILL THERE IN R6) 00810000
CALL DMKCVTBD BINARY TO DECIMAL PLEASE 00811000
STCM R1,7,0(R3) STORE IN ADDED-ON MESSAGE 00812000
********************************************************************** 00812100
* * 00812200
* OUTPUT THE MESSAGE INTERNALLY WITH A CALL TO DMKQCNWT * 00812300
* * 00812400
********************************************************************** 00812500
LINK40 LR R0,R7 CORRECT COUNT INTO R0, 00813000
LR R1,R4 ADDRESS OF MESSAGE INTO R1 00814000
CALL DMKQCNWT TYPE RESPONSE OR ERROR MESSAGE TO USER 00815000
EJECT 00816100
********************************************************************** 00816200
* * 00816300
* EXIT ROUTINE * 00816400
* * 00816500
********************************************************************** 00816600
LINKEXIT TM LINKFLAG,LINKSUBR WAS LINK-SUBROUTINE ENTRY POINT USED ? 00817000
BO EXIT YES - EXIT FORTHWITH. 00818000
TM LINKFLAG,SSENT IS THIS AFTER AN MSS P.C.I. @VMI2004 00818300
BO EXIT YES, WE ARE RUNNING ASYNCH. @VMI2004 00818600
LA R0,UDBFSIZE+2 NO - RETURN THE FREE STORAGE USED FOR THE 00819000
LR R1,R4 USER DIRECTORY BLOCK 00820000
CALL DMKFRET AND USER DEVICE BLOCK 00821000
EXIT EQU * SEE IF MSS INVOLVED @V60B6B8 00821060
TM LINKFLAG,SSENT ENTRY FROM MSS MOUNT? @V60B6B8 00821120
BZ EXITGO NO, LINK COMPLETE @V60B6B8 00821180
L R3,SAVER0 MSSCOM BLOCK ADDR @V60B6B8 00821240
USING OSVSCOM,R3 ASSEMBLER ADDRESSABILITY @V60B6B8 00821300
L R1,MSSTASK3 IS THERE PENDING I/O @V60B6B8 00821360
LTR R1,R1 ...SCHEDULED BY DMKVSI OR DMKDGD @V60B6B8 00821420
BZ FREECOM NO @V60B6B8 00821480
CALL DMKSTKCP @V60B6B8 00821540
FREECOM EQU * FREE THE MSS COM BLOCK @V60B6B8 00821600
LA R0,MSSSIZE NO OF D-WORDS IN MSSCOM @V60B6B8 00821660
LR R1,R3 ADDR OF BLOCK @V60B6B8 00821720
CALL DMKFRET RETURN MEMORY TO SYSTEM @V60B6B8 00821780
LA R0,SAVESIZE+UDBFSIZE+2 LENGTH OF AREA FOR ASYNCH@VMI2004 00821840
L R1,SAVER1 ADDR OF AREA - SET AT DMKLNKSS @VMI2004 00821900
CALL DMKFRET RETURN MEMORY TO SYSTEM @VMI2004 00821960
DROP R3,R4 @VA14144 00822020
EXITGO EXIT AND REALLY EXIT. @V60B6B8 00822080
EJECT 00823000
********************************************************************** 00823100
* * 00823200
* INTERNAL SUBROUTINES * 00823300
* * 00823400
********************************************************************** 00823500
* LINKSUB- * 00823600
* INTERNAL SUBROUTINE TO ASCERTAIN IF A LINK IS FEASIBLE * 00823700
* (AND IF SO, WHAT KIND) * 00823800
* * 00823900
* R10 = RETURN REGISTER * 00824000
* INDEXER TO DECISION-TABLE IS IN R5 AT EXIT. * 00824100
********************************************************************** 00824200
LINKSUB LA R1,SAVEWRK2 POINT TO USERID, 00838000
CALL DMKLOCK LOCK HIM WHILE WE'RE DOING INTERNAL CODE 00839000
BNZ ERROR116 ERROR IF HE'S ALREADY LOCKED. 00840000
TM LINKFLAG,JMYSELF AM I LINKING TO ONE OF MY DISKS ? 00841000
BO LINKSUB1 TRF IF YES. 00842000
LA R1,VMUSER IF NOT, LOCK MYSELF ALSO 00843000
CALL DMKLOCK 00844000
BNZ ERR116UL UH-OH IF SOMEBODY ELSE HAS ME @VA14144 00845100
* LOCKED. 00845200
LINKSUB1 EQU * NOW DETERMINE WHAT LINK(S) THERE ARE: 00846000
LR R2,R4 UDEVBLOK TO R2 FOR 'DMKSCNLI' 00847000
LR R1,R9 POINTER TO RDEVBLOK INTO R1, 00848000
CALL DMKSCNLI FIND OUT IF THERE ARE ANY EXISTING LINKS 00849000
LR R6,R0 REMEMBER COUNT OF READ LINK(S) - IF ANY 00850000
LR R7,R1 AND NUMBER OF WRITE LINK(S) IN R7 00851000
BZ LINK12A CC 0 = NO LINKS (GOOD SHOW). 00852000
ST R3,SAVEWRK8 REMEMBER VMBLOK ADDR OF POSSIBLE R/O USER 00853000
USING VDEVBLOK,R2 (R2 POINTS TO VDEVBLOK OF SOME USER) 00854000
MVC SAVEWRK9(4),VDEVUSER REMEMBER VMBLOK ADDR FOR LATER USE 00855000
DROP R2 (NOTE - CC FROM DMKSCNLI STILL INTACT) 00856000
LA R5,TBLREAD SET R5 IN CASE THERE ARE READ LINK(S) 00857000
BC 4,LINK12D CC 1 = THERE ARE READ LINK(S). 00858000
LA R5,TBLWRITE MUST BE WRITE-LINK(S) THEN. 00859000
LINK12D TM LINKFLAG,DETOLD ANY OLD LINK OF OURS IN THERE? 00860000
BZ LINK12 TRF IF NOT - R5 AND COUNTS ARE CORRECT. 00861000
********************************************************************** 00862100
* * 00862200
* THE DEVICE WE WANT TO LINK-TO IS ALREADY LINKED TO BY 'MYSELF' * 00862300
* RECOMPUTE SITUATION BASED ON THE OLD LINK BEING REMOVED: * 00862400
* * 00862500
********************************************************************** 00862600
USING VDEVBLOK,R8 00864000
TM VDEVFLAG,VDEVRDO DO WE HAVE A READ OR WRITE-LINK NOW? 00865000
DROP R8 00866000
BO LINK12C IT'S A READ-LINK. 00867000
BCTR R1,0 IF WRITE, DECREMENT COUNT OF WRITE-LINKS 00868000
B LINK12B AND CHECK WHAT LINKS WE WOULD HAVE 00869000
LINK12C BCTR R0,0 IF READ, DECREMENT COUNT OF READ LINKS 00870000
LINK12B LA R5,TBLWRITE ASSUME SOME WRITE LINK(S) 00871000
LTR R1,R1 WOULD THERE BE ANY WITH MY OLD ONE GONE ? 00872000
BP LINK12 YES. 00873000
LA R5,TBLREAD ASSUME ONLY READ LINK(S), THEN: 00874000
LTR R0,R0 WOULD THERE BE ANY WITH MY OLD ONE GONE ? 00875000
BP LINK12 YES. 00876000
LINK12A LA R5,TBLNONE GOOD SHOW IF NO LINKS TO WORRY ABOUT. 00877000
LINK12 AH R5,LINKHALF ADD ADJUSTER (0, 4, ETC.) TO R5 00878000
TM 0(R5),NOL MAYBE NO LINK IS POSSIBLE ? 00879000
BCR 8,R10 NOPE - LINK LOOKS FEASIBLE - EXIT. 00880000
B LINK25 OR UNLOCK USERID & GOTO INDEXED ERR. CODE 00881000
EJECT 00882100
********************************************************************** 00882200
* * 00882300
* UNLOKSUB - * 00882400
* INTERNAL SUBROUTINE TO UNLOCK USERID(S): * 00882500
* R10 = RETURN REGISTER * 00882600
* * 00882700
********************************************************************** 00882800
UNLOKSUB TM LINKFLAG,JMYSELF WAS I LINKING TO ONE OF MY DISKS ? 00886000
BO UNLOKUSR YES - UNLOCK USERID = MYSELF. 00887000
LA R1,VMUSER NO, UNLOCK MYSELF FIRST 00888000
CALL DMKLOCKD AND THEN: 00889000
UNLOKUSR LA R1,SAVEWRK2 UNLOCK THE USERID 00891000
CALL DMKLOCKD 00892000
BR R10 AND RETURN TO CALLER. 00893000
********************************************************************** 00894100
* * 00894200
* LINKDEF - * 00894300
* INTERNAL SUBROUTINE TO SET DEFAULT-LINK MODE * 00894400
* R10 = RETURN-REGISTER * 00894500
* * 00894600
********************************************************************** 00894700
LINKDEF SLR R15,R15 SET R15=0 FOR DEFAULT-MODE OF 'R' 00898000
TM LINKFLAG,JMYSELF IS IT ME ? 00899000
BZ LINKDEF1 IF NOT, USE DEFAULT-MODE OF 'R ' 00900000
USING UDEVBLOK,R4 @VA14144 00900100
IC R15,UDEVMODE YES, PICK UP BYTE CONTAINING LINK-MODE 00901000
LA R3,LOW5BITS SET TO ISOLATE THE LOW-ORDER 5 @VA14144 00902200
* BITS 00902300
NR R15,R3 GET THE LINK-MODE (0, 4, 8, ETC.) 00903000
LINKDEF1 STH R15,LINKHALF STORE LINK-MODE INDEXER WHERE NEEDED 00904000
BR R10 AND EXIT. 00905000
EJECT 00906100
********************************************************************** 00906200
* * 00906300
* ERROR RETURNS: ALL ERROR MESSAGES ARE NOW ISSUED * 00906400
* BY A CALL TO DMKERMSG. ALL ERROR ENTRY POINTS FOLLOW * 00906500
* HERE AND ALL EVENTUALLY GO TO 'CALERMSG' WHERE THE CALL * 00906600
* TO ERMSG IS MADE. A PARAMETER LIST OF VARIBLES TO BE * 00906700
* INSERTED INTO THE MESSAGE IS BUILT, IF REQUIRED, IN * 00906800
* TEMPORARY SPACE (EXCEPT WHEN ONLY 1 PARAMETER). * 00906900
* * 00907000
********************************************************************** 00907100
ERROR20 LA R2,EMSG20 USERID MISSING OR INVALID @VA14144 00930100
B ERRNODAT NO DATA FOR ERR MESSAGE HANDLER @VA14144 00930200
ERROR22 LA R2,EMSG22 VADDR MISSING OR INVALID @VA14144 00930300
B ERRNODAT NO DATA FOR ERR MESSAGE HANDLER @VA14144 00930400
ERROR52 LA R2,EMSG52 ERROR IN CP DIRCTORY @VA14144 00930500
ERRNODAT SLR R1,R1 R1 = 0 MEANS NO DATA FOR ERMSG @VA14144 00930600
B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00930700
ERR153 DS 0H @VA13217 00930705
BAL R10,UNLOKSUB UNLOCK BOTH USER-IDS @VA13217 00930710
LA R2,EMSG153 MSG NUMBER @VA13217 00930715
LH R1,UDEVADD VIRTUAL DEVICE ADDRESS @VA13217 00930720
CALL DMKCVTBH CONVERT TO CHARS IN R1 @VA13217 00930725
SR R0,R0 LOW ORDER R0=0: DATA IN R1 @VA13217 00930730
ICM R0,B'1110',DMKLNK+3 MODULE ID IN HIGH ORDER @VA13217 00930735
ICM R1,B'1000',=X'40' HI-OR BLANK DEV ADDRESS @VA13217 00930740
ST R2,SAVER2 PASS RETURN CODE TO CALLER @VA13217 00930745
ICM R2,B'1000',HIGHX80 TELL DMKERM TO RETURN HERE @VA13217 00930750
CALL DMKERMSG SEND MSG AND COME BACK @VA13217 00930755
B LINKEXIT CLEANUP @VA13217 00930760
DROP R4 00930765
ERROR53 LA R2,EMSG53 USERID NOT IN CP DIRECTORY @VA14144 00930800
* (R0 AND R1 SET UP FROM DMKSCNFD) 00930900
B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00931000
ERROR101 LA R2,EMSG101 DASD FORCED R/O; R/O BY OTHERS @VA14144 00931100
MVC SAVEWRK4,SAVEWRK5 LINK-AS; NOT LINK-TO @VA14144 00931200
ST R6,SAVEWRK6 SAVE COUNT OF OTHER R/O USERS @VA14144 00931300
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00931400
ERROR102 LA R2,EMSG102 DASD FORCED R/O; R/W BY OTHERS @VA14144 00931500
MVC SAVEWRK4,SAVEWRK5 LINK-AS; NOT LINK-TO @VA14144 00931600
B GETPARM1 GET PARMS FOR DMKERMSG (SPECIAL) @VA14144 00931700
ERROR104 LA R2,EMSG104 XXX YYY NOT LINKED; R/O BY OTHER @VA14144 00931800
ST R6,SAVEWRK6 SAVE COUNT OF OTHER R/O USERS @VA14144 00931900
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00932000
ERROR105 LA R2,EMSG105 XXX YYY NOT LINKED; R/W BY OTHER @VA14144 00932100
B GETPARM1 GET PARMS FOR DMKERMSG (SPECIAL) @VA14144 00932200
ERROR107 CALL DMKUDRRV LET DMKUDR RELEASE HIS PAGES @VA14144 00932300
LA R2,EMSG107 XXX YYY NOT LINKED; NOT IN DIR @VA14144 00932400
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00932500
EJECT 00932600
ERROR108 LA R2,EMSG108 XXX YYY NOT LNKED; VOL NOT MNTED @VA14144 00932700
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00932800
********************************************************************** 00932900
* * 00933000
* ERRORS 108 AND 117 REQUIRE A VOLUME ID AS A PARM. * 00933100
* AFTER THE USERID AND VADDR ARE PROCURED, THIS SMALL * 00933200
* ROUTINE LOADS THE VOLID. * 00933300
* * 00933400
********************************************************************** 00933500
USING UDEVBLOK,R4 @VA14144 00933600
GETVOLID MVC 0(6,R6),UDEVVSER MOVE IN THE DISK LABEL @VA14144 00933700
DROP R4 @VA14144 00933800
LA R6,6(R6) ADVANCE THE POINTER @VA14144 00933900
B CALERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00934000
ERROR109 LA R2,EMSG109 XXX YYY NOT LINKED; BAD LINK DEV @VA14144 00934100
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00934200
ERROR110 LA R2,EMSG110 XXX YYY NOT LINKED; DEV DEFINED @VA14144 00934300
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00934400
********************************************************************** 00934500
* * 00934600
* ERROR 110 REQUIRES A DEVICE MNEMONIC AND VADDR AS WELL * 00934700
* AS THE USERID AND VADDR. THIS CODE GETS THEM. * 00934800
* * 00934900
********************************************************************** 00935000
PARMS110 CALL DMKSCNVN GET THE DEVICE MNEMONIC @VA14144 00935100
ST R1,0(R6) MOVE THE DEVICE INTO PARM LIST @VA14144 00935200
TM 3(R6),SPACE IS IT A 3 CHAR DEVICE NAME? @VA14144 00935300
BO PARM110A NO @VA14144 00935400
MVI 3(R6),BIN00 KILL THAT LAST SPACE @VA14144 00935500
PARM110A MVI 4(R6),BIN00 DELIMIT WITH ZERO @VA14144 00935600
L R1,SAVEWRK5 LOAD THE DEVICE NAME @VA14144 00935700
CALL DMKCVTBH CONVERT TO HEX PLEASE @VA14144 00935800
STCM R1,B'0111',5(R6) MOVE IT INTO THE PARM LIST @VA14144 00935900
LA R6,8(R6) ADVANCE THE POINTER @VA14144 00936000
B CALERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00936100
EJECT 00936200
********************************************************************** 00936300
* * 00936400
* ERRORS 111, 112, AND 113 ARE PASSWORD ERRORS. DEPENDING * 00936500
* ON THE ACCESS DESIRED, THE APPROPIATE MESSAGE IS CODED. * 00936600
* * 00936700
********************************************************************** 00936800
NOPSWRD EQU * NO PASS THERE FOR MODE DESIRED @VA14144 00936900
BAL R10,UNLOKSUB UNLOCK USERID(S) RIGHT NOW @VA14144 00937000
CL R0,F2 WHAT PSWD WOULD IT HAVE BEEN? @VA14144 00937100
LA R2,EMSG111 NO READ PASSWORD ? @VA14144 00937200
BL GETPARM2 CORRECT IF R0 < 2. @VA14144 00937300
LA R2,EMSG112 NO WRITE PASSWORD ? @VA14144 00937400
BE GETPARM2 CORRECT IF R0 = 2 @VA14144 00937500
LA R2,EMSG113 NO MULT PASSWORD IF R0 > 2 @VA14144 00937600
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00937700
********************************************************************** 00937800
* * 00937900
* ERRORS 114 AND 115 RESULT FROM AN INCORRECT OR AN * 00938000
* EXCESSIVE NUMBER OF INCORRECT PASSWORDS. * 00938100
* * 00938200
********************************************************************** 00938300
PASSWRNG BNO ERROR114 BEWARE OF DMKEPSWD COND-CODE 3 @VA14144 00938400
L R1,SAVERETN RETURN-ADDRESS + 8 FOR DMKCFM @VA14144 00938500
LA R1,8(,R1) THIS GUY ALREADY LOGGED OFF @VA14144 00938600
ST R1,SAVERETN DUE TO TERMINAL TURNED OFF. @VA14144 00938700
ST R11,SAVER11 BE SURE TO RETURN CORRECT R11 @VA14144 00938800
B LINKEXIT AND GO EXIT. @VA14144 00938900
ERROR114 STM R0,R1,SAVEWRK6 SAVE INVALID PASSWORD @VA14144 00939000
ERR114 EQU * 00939050
SLR R14,R14 CLEAR REG @VA14144 00939100
IC R14,VMPSWDCT PICK UP INVALID PASSWORD COUNT @VA14144 00939200
LA R15,LNKLIMIT GET THE LIMIT @VA14144 00939300
CR R14,R15 HAVE WE EXCEEDED? @VA14144 00939400
BNL ERROR115 TOO BAD... @VA14144 00939500
LA R14,1(,R14) INCREMENT BY 1 @VA14144 00939600
STC R14,VMPSWDCT STORE IT BACK @VA14144 00939700
LA R2,EMSG114 XXX YYY NOT LINKED; PSWD WRONG @VA14144 00939800
L R6,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @VA14144 00939900
USING JPSCBLOK,R6 @VA14144 00940000
TM LINKJRL,L'LINKJRLI INVALID-LINK JOURNALING ON? @VA14144 00940100
DROP R6 @VA14144 00940200
BZ GETPARM2 @VA14144 00940300
********************************************************************** 00940400
* * 00940500
* SET UP REGISTERS FOR CALL TO DMKJRLIL * 00940600
* * 00940700
********************************************************************** 00940800
LA R1,SAVEWRK2 POINT AT LINKEE'S USERID @VA14144 00940900
LA R2,SAVEWRK4 LINKEE'S MINI-DISK ADDRESS @VA14144 00941000
LA R6,SAVEWRK6 POINT AT INVALID PASSWORD @VA14144 00941100
CALL DMKJRLIL JOURNAL THE INVALID PASSWORD @VA14144 00941200
LA R2,EMSG114 XXX YYY NOT LINKED; PSWD WRONG @VA14144 00941300
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00941400
ERROR115 LA R2,EMSG115 EXCESSIVE INCORRECT PASSWORDS @VA14144 00941500
LA R0,4 LENGTH OF THE WORD 'LINK' @VA14144 00941600
LA R1,VMCOMND ADDRESS OF THE COMMAND @VA14144 00941700
B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00941800
EJECT 00941900
ERR116UL BAL R10,UNLOKUSR UNLOCK OTHER LOCK ON USER @VA14144 00942000
ERROR116 LA R2,EMSG116 XXX YYY NOT LINKED; DIR IN USE @VA14144 00942100
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00942200
ERROR117 LA R2,EMSG117 XXX YYY NOT LINKED; VOL CONFLICT @VA14144 00942300
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00942400
ERROR118 LA R2,EMSG118 XXX YYY NOT LINKED; CMD FMT BAD @VA14144 00942500
B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00942600
ERROR119 BAL R10,UNLOKSUB UNLOCK BOTH USERIDS @VA14144 00942700
LA R2,EMSG119 INSUFFICIENT STORAGE @VA14144 00942800
JUSTVADD LA R0,EMSGBFSZ SPACE FOR ERMSG BUFFER @VA14144 00942900
CALL DMKFREE SPACE TO BUILD ERROR MESSAGE @VA14144 00943000
ST R1,SAVER2 SAVE BUFFER POINTER @VA14144 00943100
LR R6,R1 SET UP R6 FOR PARAM LIST BUILD @VA14144 00943200
B GETVADDR JOIN REGULAR PARAM BUILD ROUTINE @VA14144 00943300
AIF (NOT &DEDCH).NOTDED2 01006000
ERROR137 LA R2,EMSG137 LINK TO DEDICATED CHANNEL BAD @VA14144 01007100
MVC SAVEWRK4,SAVEWRK5 LINK-AS; NOT LINK-TO @VA14144 01007200
B JUSTVADD GET THE VADDR IN MESSAGE BUFFER @VA14144 01007300
********************************************************************** 01007400
* * 01007500
* THIS IS THE SECOND PART OF ERROR137; GET THE CHANNEL * 01007600
* * 01007700
********************************************************************** 01007800
GETCHAN SLR R0,R0 ZERO R0 @VA14144 01007900
ST R0,SAVEWRK8 CLEAR OUT CHANNEL NUMBER FIELD 01013000
L R1,SAVEWRK5 GET (YYY) DEVICE ADDRESS 01014000
SRL R1,8 SAVE ONLY CHANNEL NUMBER 01015000
CALL DMKCVTBD CONVERT IT TO DECIMAL 01016000
STH R1,0(R6) SAVE IT. @VA14144 01017100
TM 0(R6),X'0F' IS CHANNEL NUMBER > 9? @VA14144 01017200
BNZ *+8 YES - LEAVE IT ALONE 01019000
MVI 0(R6),BIN00 NO - PRINT ONLY THE 1 CHARACTER @VA14144 01020100
LA R6,2(R6) ADD LENGTH OF CHANNEL NUMBER @VA14144 01020200
B CALERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 01020300
SPACE 01025000
.NOTDED2 ANOP 01026000
EJECT 01027100
ERROR281 LA R2,EMSG281 VOL NOT LINKED; DEMNT IN PROCESS @VA14144 01027200
ICM R2,B'0100',INFOMSG INDICATE INFO MESSAGE @VA14144 01027300
LA R0,6 LENGTH OF A VOL ID @VA14144 01027400
USING UDEVBLOK,R9 @VA14144 01027500
LA R6,UDEVVSER GET ADDRESS OF VOL ID @VA14144 01027600
DROP R9 @VA14144 01027700
B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 01027800
EJECT 01027900
********************************************************************** 01028000
* * 01028100
* THE FOLLOWING CODE BUILDS THE ERROR MESSAGE PARM LIST. * 01028200
* FIRST THE BASIC USERID AND VADDR PARMS ARE FETCHED, IF * 01028300
* REQUIRED. THEN COMPARISONS ARE MADE TO SEE IF ANY * 01028400
* OTHERS ARE NEEDED. IF SO, BRANCH TO THE CODE TO GET THEM. * 01028500
* * 01028600
********************************************************************** 01028700
GETPARM1 ST R7,SAVEWRK6 SAVE COUNT OF R/W USERS @VA14144 01028800
ST R6,SAVEWRK7 SAVE COUNT OF R/O USERS @VA14144 01028900
L R7,SAVEWRK9 R/W USER VMBLOK @VA14144 01029000
LTR R6,R6 ANY R/O USERS? @VA14144 01029100
BNP GETPARM3 NO--REGULAR ERROR 102 OR 105 @VA14144 01029200
LA R2,1(R2) BUMP TO ERMSG106 OR 7 @VA14144 01029300
OI LINKFLAG,ADDROMSG REMEMBER TO ADD R/O MESSAGE @VA14144 01029400
B GETPARM3 R7 ALREADY HAS VMBLOK @VA14144 01029500
GETPARM2 L R7,SAVEWRK8 R/O USER VMBLOK @VA14144 01029600
GETPARM3 LA R0,EMSGBFSZ SPACE FOR ERMSG BUFFER @VA14144 01029700
CALL DMKFREE SPACE TO BUILD ERROR MESSAGE @VA14144 01029800
ST R1,SAVER2 SAVE POINTER FOR LATER FRET @VA14144 01029900
LR R6,R1 R6 IS BUFFER WORK POINTER @VA14144 01030000
LA R0,EMSG104 DO NOT GET USERID FOR 101-3 @VA14144 01030100
CR R2,R0 COMPARE -- LESS THEN 104? @VA14144 01030200
BL GETVADDR SKIP USERID FETCH @VA14144 01030300
MVC 0(8,R6),SAVEWRK2 MOVE IN USERID @VA14144 01030400
CKIDLOOP CLI 7(R6),SPACE THIS QUICK LOOP BACKS UP @VA14144 01030500
* OVER BLANKS IN THE USERID 01030600
BNE CKIDDONE NOT A BLANK @VA14144 01030700
BCT R6,CKIDLOOP DECREMENT BUF PTR AND LOOP @VA14144 01030800
CKIDDONE MVI 8(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01030900
LA R6,9(R6) ADVANCE THE POINTER PAST ID @VA14144 01031000
GETVADDR L R1,SAVEWRK4 LOAD LINK-AS DEVICE ADDR @VA14144 01031100
CALL DMKCVTBH CONVERT TO HEX PLEASE @VA14144 01031200
STCM R1,B'0111',0(R6) PUT ADDR IN PARM LIST @VA14144 01031300
MVI 3(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01031400
LA R6,4(R6) ADVANCE THE POINTER @VA14144 01031500
GETUSER1 LA R0,EMSG106 LESS THAN 106 ARE SPECIAL @VA14144 01031600
CR R2,R0 COMPARE -- GREATER THAN 106? @VA14144 01031700
BH GETPARMS SKIP THE 'USERS' MESSAGE(S) @VA14144 01031800
LA R0,EMSG103 MESSAGES 101-3 ARE WARNINGS @VA14144 01031900
CR R2,R0 COMPARE -- GREATER THAN 103? @VA14144 01032000
BH SKIPWARN MUST BE 104-6 @VA14144 01032100
ICM R2,B'0100',WARNING INDICATE WARNING MESSAGE @VA14144 01032200
SKIPWARN L R1,SAVEWRK6 GET COUNT OF FIRST MSG USERS @VA14144 01032300
GETUSER2 CL R1,F1 SEE IF ONLY ONE @VA14144 01032400
BH GETUSER3 YES -- GENERAL MESSAGE @VA14144 01032500
MVC 0(8,R6),VMUSER-VMBLOK(R7) MOVE IN USERID @VA14144 01032600
CKIDLOP2 CLI 7(R6),SPACE THIS QUICK LOOP BACKS UP @VA14144 01032700
* OVER BLANKS IN THE USERID 01032800
BNE CKIDDON2 NOT A BLANK @VA14144 01032900
BCT R6,CKIDLOP2 DECREMENT BUF PTR AND LOOP @VA14144 01033000
CKIDDON2 MVI 8(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01033100
LA R6,9(R6) ADVANCE THE POINTER @VA14144 01033200
B GETUSER4 @VA14144 01033300
GETUSER3 CALL DMKCVTBD CONVERT TO DECIMAL PLEASE @VA14144 01033400
STCM R1,B'0111',0(R6) PUT ADD IN PARM LIST @VA14144 01033500
MVC 3(6,R6),=C' USERS' MOVE IN THE WORD USERS @VA14144 01033600
MVI 9(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01033700
LA R6,10(R6) ADVANCE THE POINTER @VA14144 01033800
GETUSER4 TM LINKFLAG,ADDROMSG EXTRA MESSAGE (103 AND 106) @VA14144 01033900
BZ GETPARMS NOT THIS TIME @VA14144 01034000
XI LINKFLAG,ADDROMSG TURN OFF FLAG SO NO REPEAT @VA14144 01034100
L R1,SAVEWRK7 GET THE SECOND (R/O) COUNT @VA14144 01034200
L R7,SAVEWRK8 R/O USER VMBLOK @VA14144 01034300
B GETUSER2 REPEAT WITH THE SECOND COUNT @VA14144 01034400
GETPARMS LA R0,EMSG110 SPECIAL -- DEVICE TYPE AND ADDR @VA14144 01034500
CR R2,R0 CHECK IF THIS CASE @VA14144 01034600
BE PARMS110 GO DO IT @VA14144 01034700
LA R0,EMSG108 SPECIAL -- VOLUME ID NEEDED @VA14144 01034800
CR R2,R0 CHECK IF THIS CASE @VA14144 01034900
BE GETVOLID GO DO IT @VA14144 01035000
LA R0,EMSG117 SPECIAL -- VOLUME ID NEEDED @VA14144 01035100
CR R2,R0 CHECK IF THIS CASE @VA14144 01035200
BE GETVOLID GO DO IT @VA14144 01035300
AIF (NOT &DEDCH).NOTDED3 @VA14144 01035400
LA R0,EMSG137 SPECIAL -- DEVICE CHANNEL NEEDED @VA14144 01035500
CR R2,R0 CHECK IF THIS CASE @VA14144 01035600
BE GETCHAN GO DO IT @VA14144 01035700
.NOTDED3 ANOP 01035800
B CALERMSG GO CALL ERROR MSG HANDLER @VA14144 01035900
EJECT 01036000
********************************************************************** 01036100
* * 01036200
* THE PARM LISTS ARE BUILT -- CALL DMKERMSG. * 01036300
* SAVER2 HAS THE ADDRESS OF THE BEGINNING OF THE BUFFER. * 01036400
* R6 HAS THE END POINTER AND R2 CONTAINS THE ERROR CODE. * 01036500
* * 01036600
********************************************************************** 01036700
CERMSG XC SAVER2,SAVER2 REMEMBER NO SPACE TO FRET @VA14144 01036800
B CERMSG2 R0 AND R1 ALREADY SET UP @VA14144 01036900
CALERMSG LR R0,R6 GET THE CURRENT POINTER @VA14144 01037000
L R1,SAVER2 GET START OF BUFFER @VA14144 01037100
SR R0,R1 CALCULATE LENGTH OF MESSAGE @VA14144 01037200
CERMSG2 ICM R0,B'1110',DMKLNK+3 'LNK' INTO R0 HIGH 3 BYTES @VA14144 01037300
ICM R2,B'1000',HIGHX80 SET R2 TO RETURN BACK @VA14144 01037400
CALL DMKERMSG LET ERR MSG HANDLER DO THE WORK @VA14144 01037500
L R1,SAVER2 GET ADDR OF BUFFER -- IF ANY @VA14144 01037600
XC SAVER2(2),SAVER2 CLEAR OUT FOR RETURN CODE @VA14144 01037700
STH R2,SAVER2+2 RETURN THE ERROR CODE @VA14144 01037800
LTR R1,R1 ANY SPACE TO FRET @VA14144 01037900
BZ LINKEXIT NO -- GO FINISH UP @VA14144 01038000
LA R0,EMSGBFSZ FRET THE BUFFER SPACE @VA14144 01038100
CALL DMKFRET FREE THE SPACE AGAIN @VA14144 01038200
B LINKEXIT NOW GO FINISH UP @VA14144 01038300
EJECT 01038400
********************************************************************** 01038500
* * 01038600
* TABLES, ERROR MESSAGES, EXECUTED INSTRUCTIONS, AND CONSTANTS * 01038700
* * 01038800
********************************************************************** 01038900
CLTO DC CL2'TO' OPTIONAL 'TO' @VA14144 01039000
CLAS DC CL2'AS' OPTIONAL 'AS' @VA14144 01039100
RC50 DC X'50' @VA14144 01039200
HIGHX80 DC X'80' SIGNAL DMKERMSG TO RETURN @VA14144 01039300
WARNING DC C'W' INDICATES WARNING MSG TO ERMSG @VA14144 01039400
INFOMSG DC C'I' INDICATES INFO MSG TO ERMSG @VA14144 01039500
RC32 EQU 32 RETURN CODE OF 32 FROM DMKVDSLK @VA14144 01039600
BIN00 EQU X'00' DELIMITER FOR ERROR PARMS @VA14144 01039700
LOW5BITS EQU 31 ISOLATE 5 LOW ORDER BITS @VA14144 01039800
SPACE EQU X'40' @VA14144 01039900
EMSGBFSZ EQU 5 NUMBER OF DWORDS FOR BUFFER @VA14144 01040000
LNKLIMIT EQU 10 HOW MANY WRONG PASSWORDS WE'LL @VA14144 01040100
* TOLERATE FROM V.M. 01040200
LEVLIMIT EQU 2 PRACTICAL LIMIT (+1) FOR LEVEL @VA14144 01040300
* OF INDIRECT LINK(S) 01040400
********************************************************************** 01040500
* * 01040600
* EXECUTED INSTRUCTIONS * 01040700
* * 01040800
********************************************************************** 01040900
DS 0F @VA14144 01041000
MODECLC CLC 0(*-*,R1),0(R3) TO CHECK COMMAND-LINE MODE VS @VA14144 01041100
* TABLE 01041200
SAVEID MVC SAVEWRK2(*-*),0(R1) TO SAVE USERID @VA14144 01041300
SAVEPASS MVC SAVEWRK6(*-*),0(R1) TO SAVE THE PASSWORD @VA14144 01041400
XTMMODE TM 1(R5),*-* TO CHECK FOR LEGITIMATE ACCESS @VA14144 01041500
* MODE 01041600
********************************************************************** 01041700
* * 01041800
* TABLE OF LEGITIMATE ONE- OR TWO-BYTE ACCESS MODES: * 01041900
* 1ST HALFWORD = ACCESS MODE * 01042000
* 2ND HALFWORD = INDEXER FOR DECISION TABLE FOR THAT MODE: * 01042100
* * 01042200
********************************************************************** 01042300
MODER DC CL2'R ',H'0' THE FIRST ONE @VA14144 01042400
DC CL2'RR',H'4' @VA14144 01042500
MODEW DC CL2'W ',H'8' @VA14144 01042600
DC CL2'WR',H'12' @VA14144 01042700
MODEM DC CL2'M ',H'16' @VA14144 01042800
DC CL2'MR',H'20' @VA14144 01042900
MODEMW DC CL2'MW',H'24' THE LAST ONE @VA14144 01043000
EJECT 01043100
DROP R0,R12 01139000
USING DMKLNK,R0 (FOR USE BY S-CONSTANTS) 01141000
********************************************************************** 01142100
* * 01142200
* FLAG-BIT DEFINITIONS FOR FIRST BYTE OF "DTBL" DECISION-TABLE WORD: * 01142300
* * 01142400
********************************************************************** 01142500
NOL EQU X'80' NO LINK CAN BE GIVEN 01145000
SRO EQU X'40' SET TO READ/ONLY 01146000
FRO EQU X'20' FORCED TO READ/ONLY 01147000
SWT EQU X'10' SET TO WRITE 01148000
GMS EQU X'08' GIVE A MESSAGE 01149000
********************************************************************** 01150100
* * 01150200
* (KEEP THE NEXT THREE "AS IS" - 1, 2, AND 3): * 01150300
* * 01150400
********************************************************************** 01150500
RPS EQU X'01' CHECK READ PASSWORD 01152000
WPS EQU X'02' CHECK WRITE PASSWORD 01153000
MPS EQU X'03' CHECK MULT PASSWORD 01154000
********************************************************************** 01155100
* * 01155200
* THE NEXT BYTE CORRESPONDS TO UDEVMODE BYTE OF UDEVBLOK 01156000
* * 01157100
* THE NEXT HALFWORD IS AN S-CONSTANT "JUMP ADDRESS" TO THE CORRECT CODE 01158000
* * 01159100
********************************************************************** 01159200
DS 0F DECISION TABLES FOR DETERMINING LINKING LOGIC: 01160000
********************************************************************** 01161100
* * 01161200
* EXISTING MODE 01162000
* DESIRED LOGIC: LINKS REQUESTED 01163000
* ---------------------------- -------- --------- 01164000
* * 01164100
********************************************************************** 01164200
TBLNONE DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC NONE R 01165000
DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC NONE RR 01166000
DTBL WPS+SWT,UDEVLW+UDEVLM,LNKSC NONE W 01167000
DTBL WPS+SWT,UDEVLW+UDEVLM,LNKSC NONE WR 01168000
DTBL MPS+SWT,UDEVLM,LNKSC NONE M 01169200
DTBL MPS+SWT,UDEVLM,LNKSC NONE MR 01170200
DTBL MPS+SWT,UDEVLM,LNKSC NONE MW 01171200
TBLREAD DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC READ R 01172000
DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC READ RR 01173000
DTBL NOL,UDEVLW+UDEVLM,ERROR104 READ W @VA14144 01174100
DTBL WPS+FRO+GMS,UDEVLW+UDEVLM,ERROR101 READ WR @VA14144 01174200
DTBL MPS+SWT+GMS,UDEVLM,LNKRO READ M 01176200
DTBL MPS+SWT+GMS,UDEVLM,LNKRO READ MR 01177200
DTBL MPS+SWT+GMS,UDEVLM,LNKRO READ MW 01178200
TBLWRITE DTBL NOL,UDEVLR+UDEVLW+UDEVLM,ERROR105 WRITE R @VA14144 01179100
DTBL RPS+SRO+GMS,UDEVLR+UDEVLW+UDEVLM,LNKRW WRITE RR 01180000
DTBL NOL,UDEVLW+UDEVLM,ERROR105 WRITE W @VA14144 01181100
DTBL WPS+FRO+GMS,UDEVLW+UDEVLM,ERROR102 WRITE WR @VA14144 01181200
DTBL NOL,UDEVLM,ERROR105 WRITE M @VA14144 01181300
DTBL MPS+FRO+GMS,UDEVLM,ERROR102 WRITE MR 01181500
DTBL MPS+SWT+GMS,UDEVLM,LNKRW WRITE MW 01185000
********************************************************************** 01186100
* * 01186200
*------- END OF "LINK" DECISION-TABLE FOR VARIOUS POSSIBLE CASES ------ 01187000
* * 01188100
********************************************************************** 01188200
USING PSA,R0 RE-ESTABLISH NORMAL PSA USAGE IN R0, 01189000
USING DMKLNK,R12 AND NORMAL REGULAR ADDRESSABILITY 01190000
********************************************************************** 01191100
* * 01191200
* INDEXING TABLE FOR DETERMINING IF A LINK IS FEASIBLE * 01192100
* WITHOUT A PASSWORD - I.E. IF THE ORIGINAL USER ACCESS * 01192200
* MODE IS ADEQUATE FOR THE LINK MODE DESIRED WITHOUT * 01192300
* REQUIRING THE ENTERING OF A PASSWORD: * 01192400
* * 01192500
********************************************************************** 01192600
BYTABLE DC 2AL1(UDEVLR) 0-1: FOR 'R' & 'RR' 01197000
DC 2AL1(UDEVLW) 2-3: FOR 'W' & 'WR' 01198000
DC 3AL1(UDEVLM) 4-6: FOR 'M' & 'MR' & 'MW' @VA15032 01199300
EJECT 01200000
********************************************************************** 01200100
* * 01200200
* NON-ERROR RESPONSES TO USER. ISSUED INTERNALLY. * 01200300
* * 01200400
********************************************************************** 01200500
********************************************************************** 01201100
* * 01201200
* "RESPONSES": 01205000
* 01206000
* NOTE - IN THE FOLLOWING, FIELDS INCLUDING $ DENOTE 01207000
* THAT THEY ARE "FILLED IN" FIELDS. 01208000
* 01209000
* KEEP THE NEXT TWO IN ORDER: 01210000
* * 01210100
********************************************************************** 01210200
RESPON1 DC C'DASD $Y$ LINKED R/O' 01211000
RESPON2 DC C'; R/O BY N$N USERS' 01212000
* 01213000
RESPON1A EQU 5 DISP. OF YYY FROM RESPON1 01214000
RESPON1B EQU 18 DISP. OF 'O' OR 'W' FROM RESPON1 01215000
* 01216000
RESPON2A EQU L'RESPON1+4 DISP. OF 'O' OR 'W' FROM RESPON1 01217000
RESPON2B EQU L'RESPON1+9 DISP. OF NNN OR USERID FROM RESPON1 01218000
RESPON2C EQU RESPON2B+8 DISP. OF NEEDED BLANK AFTER USERID 01219000
********************************************************************** 01220100
* * 01220200
* DEFINE THE ERROR MESSAGE CODES * 01220300
* * 01220400
********************************************************************** 01220500
EMSG153 EQU 153 EXCEEDED MAX NUM OF VIRT DEV @VA13217 01222500
EMSG20 EQU 20 @VA14144 01225000
EMSG22 EQU 22 @VA14144 01226000
EMSG52 EQU 52 @VA14144 01227000
EMSG53 EQU 53 @VA14144 01228000
EMSG101 EQU 101 @VA14144 01229000
EMSG102 EQU 102 @VA14144 01230000
EMSG103 EQU 103 @VA14144 01231000
EMSG104 EQU 104 @VA14144 01232000
EMSG105 EQU 105 @VA14144 01233000
EMSG106 EQU 106 @VA14144 01234000
EMSG107 EQU 107 @VA14144 01235000
EMSG108 EQU 108 @VA14144 01236000
EMSG109 EQU 109 @VA14144 01237000
EMSG110 EQU 110 @VA14144 01238000
EMSG111 EQU 111 @VA14144 01239000
EMSG112 EQU 112 @VA14144 01240000
EMSG113 EQU 113 @VA14144 01241000
EMSG114 EQU 114 @VA14144 01242000
EMSG115 EQU 115 @VA14144 01243000
EMSG116 EQU 116 @VA14144 01244000
EMSG117 EQU 117 @VA14144 01245000
EMSG118 EQU 118 @VA14144 01246000
EMSG119 EQU 119 @VA14144 01247000
EMSG137 EQU 137 @VA14144 01248000
EMSG199 EQU 199 @VA14144 01249000
EMSG281 EQU 281 @VA14144 01250000
EJECT 01251000
LTORG 01478000
EJECT 01479000
COPY SAVE (R13) 01480000
********************************************************************** 01481100
* * 01481200
* SCRATCH-STORAGE IN 'SAVEAREA' USED BY LINK: 01482000
* 01483000
* SAVEWRK2-3 CONTAIN USERID 01484000
* SAVEWRK4 CONTAINS XXX (DISK TO BE LINKED TO) 01485000
* SAVEWRK5 CONTAINS YYY (DISK TO BE LINKED AS) 01486000
* SAVEWRK6-7 CONTAIN PASSWORD IF INCLUDED WITH LINK COMMAND 01487000
* SAVEWRK8-9 HOLDS USERID OF ANY USER FOUND LINKED TO DEVICE 01488000
* 01489000
* SAVEWRK1 (CLEARED AT THE BEGINNING) IS USED AS FOLLOWS: 01490000
* * 01491100
********************************************************************** 01491200
LINKFLAG EQU SAVEWRK1 ONE BYTE: 01492000
JMYSELF EQU X'80' IT'S ME (USERID = MYSELF OR '* ') 01494000
JGOTPASS EQU X'40' WE'VE ALREADY GOT THE PASSWORD 01495000
DETOLD EQU X'20' DETACH OLD LINK BEFORE DOING NEW ONE: 01496000
LINKSUBR EQU X'10' INDICATES "LINK SUBROUTINE" INVOKED 01497000
ADDROMSG EQU X'08' "R/O BY NNN USERS" SUFFIX TO BE ADDED 01498000
JLNKPRV EQU X'04' LINK PRIVILEGE - ORIGINAL UDEVBLOK MINE 01499000
SSENT EQU X'02' ENTRY AT DMKLNKSS AFTER MSS MOUNT@V60B6B8 01499150
PASSALL EQU X'01' PASSWORD WAS 'ALL' - DON'T @V60BBBB 01499300
* JOURNAL THIS LINK. 01499450
RC4 EQU 4 @V60B6B8 01499600
* 01500000
LINKMODE EQU SAVEWRK1+1 COPY OF UDEVMODE FROM ORIGINAL @VA14144 01501100
* UDEVBLOK 01501200
LINKHALF EQU SAVEWRK1+2 HALFWORD "INDEXER" TO DECISION @VA14144 01503100
* TABLE 01503200
EJECT 01504000
OSVSCOM MSSCOM @V60B6B8 01504300
DMKLNK CSECT @V60B6B8 01504600
PSA (R0) @VA14144 01505100
JPSCBLOK @V60BBBB 01505500
COPY VMBLOK (R11) 01506000
COPY RBLOKS 01507000
COPY VBLOKS 01508000
COPY UDIRECT (R4) 01509000
COPY EQU 01510000
COPY DEVTYPES 01511000
COPY CONBUF 01512000
END 01513000