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 | USERID | * XXX YYY | 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