ibm:vm370-lib:cp:dmklnk.assemble_src
Table of Contents
DMKLNK Source
References
- Fixes Applied : 20
- This Source Date : Saturday, December 9, 1978
- Last Fix ID : [HRC039DK]
Source Listing
- DMKLNK.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmklnk.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator