Table of Contents

DMKLNK Source

References

Source Listing

DMKLNK.ASSEMBLE.txt
  1. LNK TITLE 'DMKLNK (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
  3. * 00003100
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKLNK 00006000
  7. * 00007000
  8. * FUNCTION - 00018000
  9. * 00019000
  10. * TO LINK TO A VIRTUAL DASD DEVICE (IF FEASIBLE) 00020000
  11. * 00021000
  12. * COMMAND LINE FORMAT - 00022000
  13. * 00023000
  14. * +--------+-------------------------------------------------------+ 00024000
  15. * | LINK | <TO> USERID | * XXX <AS> YYY <MODE> <PASSWORD> | 00025000
  16. * +--------+-------------------------------------------------------+ 00026000
  17. * 00027000
  18. * SEE "NOTES" FOR FURTHER INFORMATION ON COMMAND LINE FORMAT. 00028000
  19. * 00029000
  20. * ATTRIBUTES - 00030000
  21. * 00031000
  22. * REENTRANT, PAGEABLE, CALLED VIA SVC 00032000
  23. * 00033000
  24. * ENTRY POINTS - 00034000
  25. * 00035000
  26. * DMKLNKIN - COMMAND TO LINK TO A VIRTUAL DEVICE 00036000
  27. * DMKLNKSB - LINK SUBROUTINE ENTRY POINT FROM LOGON 00037100
  28. * DMKLNKSS - ENTRY FROM THE DISPATCHER AFTER MOUNT 00037200
  29. * 00038000
  30. * ENTRY CONDITIONS - 00039000
  31. * 00040000
  32. * DMKLNKIN ENTRY POINT: 00041000
  33. * GPR 9 CONTAINS ADDRESS OF COMMAND BUFFER 00042000
  34. * 00043000
  35. * DMKLNKSB ENTRY POINT: 00044000
  36. * GPR0-1 HOLD USERID TO WHOM DASD DEVICE BELONGS 00045000
  37. * GPR 2 HOLDS LINK-TO DEVICE (IN BINARY) 00046000
  38. * GPR 3 HOLDS LINK-AS DEVICE (IN BINARY) 00047000
  39. * GPR 4 = ADDRESS OF UDEVBLOK (AT LEAST 9 DBL-WORDS) 00048000
  40. * GPR 5 = INDEXER FOR DESIRED LINK-MODE (0, ..., 24) 00049000
  41. * 00050000
  42. * DMKLNKSS ENTRY POINT: 00051100
  43. * GPR 1 = ADDRESS OF WORK AREA 00051200
  44. * GPR 3 = ADDRESS OF MSSCOM BLOCK 00051300
  45. * GPR 4 = ADDRESS OF UDEVBLOK 00051400
  46. * 00051500
  47. * ALL ENTRY POINTS: 00051600
  48. * GPR 11 = ADDRESS OF USER'S VMBLOK 00052000
  49. * GPR 12 = ADDRESS OF DMKLNKIN 00053000
  50. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00054000
  51. * 00055000
  52. * EXIT CONDITIONS - 00056000
  53. * 00057000
  54. * GPR2 = 0 IF LINK WAS MADE AS REQUESTED 00058000
  55. * GPR2 = 101 TO 103 IF A "FORCED R/O" LINK WAS GIVEN 00059000
  56. * GPR2 = OTHER ERROR CODES IF NO LINK WAS GIVEN 00060000
  57. * (SEE ERROR MESSAGES) 00061000
  58. * 00062000
  59. * NOTE: GPR 2 = 115 (WITH ERROR MESSAGE) IF A LINK COMMAND 00063000
  60. * HAS BEEN ISSUED AN EXCESSIVE NUMBER OF TIMES IN ONE 00064000
  61. * TERMINAL SESSION FROM A VIRTUAL MACHINE WITH AN 00065000
  62. * INCORRECT PASSWORD INCLUDED IN THE COMMAND LINE. 00066000
  63. * IF SECURITY JOURNALING IS ON, GPR 2 = 115 IF A 00066200
  64. * LINK COMMAND HAS BEEN ISSUED AN EXCESSIVE 00066400
  65. * NUMBER OF TIMES IN ONE TERMINAL SESSION WITH 00066600
  66. * AN INCORRECT PASSWORD. 00066800
  67. * (SEE DMKLNK115E ERROR MESSAGE) 00067000
  68. EJECT 00068000
  69. * CALLS TO OTHER ROUTINES - 00069000
  70. * 00070000
  71. * DMKSCNFD - GET NEXT FIELD FROM COMMAND LINE 00072000
  72. * DMKUDRFU - FIND USER IN CP DIRECTORY 00073000
  73. * DMKUDRFD FIND USERID XXX DEVICE 00074000
  74. * DMKLOCK - LOCK USERID BRIEFLY 00075000
  75. * DMKLOCKD - UNLOCK USERID 00076000
  76. * DMKUDRRV - RELEASE VIRTUAL PAGES USED BY DMKUDR ROUTINES 00077000
  77. * DMKCVTHB - CONVERT INPUT FIELD FROM HEX TO BINARY 00078000
  78. * DMKCVTBH - XXX OR YYY DEVICE FROM BINARY TO HEX 00079000
  79. * DMKCVTBD - NNN USERS FROM BINARY TO DECIMAL 00080000
  80. * DMKSCNVS - FIND VOLUME SERIAL NUMBER 00081000
  81. * DMKSCNAU - FIND VMBLOK OF ACTIVE USER 00082000
  82. * DMKSCNVU - FIND BLOCKS FOR VIRTUAL DEVICE 00083000
  83. * DMKVDREL - RELEASE A VIRTUAL DEVICE 00084000
  84. * DMKSCNLI - FIND ALL LINKS TO A GIVEN MINIDISK 00085000
  85. * DMKEPSWD - ENTER PASSWORD 00086000
  86. * DMKQCNWT - SEND MESSAGE TO USER TERMINAL 00087000
  87. * DMKFREE - OBTAIN FREE STORAGE 00087100
  88. * DMKFRET - RETURN FREE STORAGE 00088000
  89. * DMKVDSLK - ESTABLISH READ OR WRITE LINK TO GIVEN DISK 00089000
  90. * DMKERMSG - CONSTRUCT & SEND ERROR MESSAGE TO USER 00090000
  91. * DMKSCNVN - TO GET MNEMONIC NAME OF VIRTUAL DEVICE 00091000
  92. * 00092000
  93. * EXTERNAL REFERENCES - 00093000
  94. * 00094000
  95. * NONE 00095000
  96. * 00096000
  97. * TABLES / WORK AREAS - 00097000
  98. * 00098000
  99. * DECISION TABLES (INTERNAL TO DMKLNK). 00099000
  100. * 00100000
  101. * REGISTER USAGE - 00101000
  102. * 00102000
  103. * GPR 4 = POINTER TO USER DIRECTORY BLOCK / DEVICE BLOCK 00103000
  104. * GPR 5 = ADDRESS OF DECISION-TABLE ENTRY 00104000
  105. * GPR 8 = ADDRESS OF VDEVBLOK / WORK REGISTER 00105000
  106. * GPR 9 = ADDRESS OF COMMAND BUFFER / ADDRESS OF RDEVBLOK 00106000
  107. * GPR 10 = RETURN-REGISTER FOR INTERNAL SUBROUTINE 00107000
  108. * GPR 11 = VMBLOK ADDRESS 00108000
  109. * GPR 12 = BASE REGISTER 00109000
  110. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00110000
  111. * 00111000
  112. * GPRS 0-3, 6-7, AND 14-15 ARE WORK REGISTERS. 00112000
  113. EJECT 00113000
  114. * NOTES - 00114000
  115. * 00115000
  116. * USERID SPECIFIES THE NAME OF THE USER WHOSE DIRECTORY IS TO 00116000
  117. * BE SEARCHED FOR DEVICE XXX. AN '*' MAY BE USED TO 00117000
  118. * SPECIFY THAT A USER IS LINKING TO ONE OF HIS OWN DISKS. 00118000
  119. * 00119000
  120. * XXX SPECIFIES THE VIRTUAL DEVICE ADDRESS TO BE LINKED TO 00120000
  121. * 00121000
  122. * YYY SPECIFIES THE VIRTUAL ADDRESS TO WHICH THE DEVICE IS 00122000
  123. * TO BE ASSIGNED. 00123000
  124. * 00124000
  125. * MODE SPECIFIES THE PRIMARY ACCESS REQUESTED (READ/ONLY, 00125000
  126. * WRITE, OR MULTIPLE), AND THE ALTERNATE ACCESS 00126000
  127. * (READ/ONLY OR WRITE) DESIRED (IF ANY), AS FOLLOWS: 00127000
  128. * 00128000
  129. * R SPECIFIES THAT READ/ONLY (R/O) ACCESS IS REQUESTED. 00129000
  130. * THE LINK WILL NOT BE GIVEN IF ANY OTHER USER HAS THE 00130000
  131. * DISK IN WRITE STATUS. "R" IS THE DEFAULT MODE IF THE 00131000
  132. * LINK IS TO ANOTHER USERID. 00132000
  133. * 00133000
  134. * RR SPECIFIES THAT READ/ONLY ACCESS IS REQUESTED, EVEN IF 00134000
  135. * ANOTHER USER HAS THE DISK IN WRITE STATUS. 00135000
  136. * 00136000
  137. * W SPECIFIES THAT WRITE ACCESS IS REQUESTED. THE LINK WILL 00137000
  138. * NOT BE GIVEN IF ANY OTHER USER HAS THE DISK IN READ OR 00138000
  139. * WRITE STATUS. 00139000
  140. * 00140000
  141. * WR SPECIFIES THAT WRITE ACCESS IS REQUESTED IF NO OTHER 00141000
  142. * USER HAS THE DISK IN READ OR WRITE STATUS, BUT THAT AN 00142000
  143. * ALTERNATE ACCESS OF READ/ONLY IS ACCEPTABLE IF OTHER(S) 00143000
  144. * DO HAVE A LINK TO THE DISK; IN THIS EVENT, A READ/ONLY 00144000
  145. * LINK IS TO BE GIVEN; THIS IS ACCOMPANIED BY AN ERROR 1 00145000
  146. * OR 2, AND THE 'DEV XXX FORCED R/O' MESSAGE. 00146000
  147. * 00147000
  148. * M SPECIFIES THAT "MULTIPLE" ACCESS IS REQUESTED. THIS 00148000
  149. * MEANS THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00149000
  150. * UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT, 00150000
  151. * IN WHICH EVENT NO LINK IS TO BE GIVEN. 00151000
  152. * 00152000
  153. * MR SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00153000
  154. * UNLESS ANOTHER USER ALREADY HAS WRITE ACCESS TO IT; 00154000
  155. * IN THIS EVENT, A READ-LINK IS TO BE GIVEN, WITH AN 00155000
  156. * ERROR 1 OR 2, AND THE 'DEV XXX FORCED R/O' MESSAGE. 00156000
  157. * 00157000
  158. * MW SPECIFIES THAT A WRITE LINK IS TO BE GIVEN TO THE DISK 00158000
  159. * IN ANY EVENT. 00159000
  160. * 00160000
  161. * IF THE MODE IS OMITTED FROM THE COMMAND LINE, THE 00161000
  162. * DEFAULT IS TO "R" IF THE USERID IS ANOTHER USER; 00162000
  163. * IF THE USER IS LINKING TO ONE OF HIS OWN DISKS, 00163000
  164. * THE DEFAULT IS THE "USER ACCESS MODE" OF EITHER 00164000
  165. * 'R', 'W', OR 'M' IN THE CP DIRECTORY FOR HIS DISKS. 00165000
  166. EJECT 00166000
  167. * NOTES (CONTINUED) - 00167000
  168. * 00168000
  169. * PASSWORD SPECIFIES A ONE TO EIGHT CHARACTER STRING WHICH MUST 00169000
  170. * MATCH THAT FOR THE SPECIFIED ACCESS MODE FOR DEVICE 00170000
  171. * "XXX" IN THE DIRECTORY FOR USER "USERID". THE PASSWORD 00171000
  172. * (IF PRESENT) IS THE LAST OPERAND ON THE COMMAND LINE, 00172000
  173. * AND MUST NOT BE ANY OF THE SPECIFIED MODE OPTIONS 00173000
  174. * (R, RR, W, WR, M, MR, OR MW) 00174000
  175. * 00175000
  176. * THE PASSWORD (IF INCLUDED ON THE COMMAND LINE) MAY BE PRECEDED 00176000
  177. * BY THE STRING "PASS= " IF DESIRED, BUT THIS IS NOT NECESSARY. 00177000
  178. * NOTE: THE PASSWORD MAY NOT BE INCLUDED ON THE COMMAND 00177150
  179. * LINE IF THE PASSWORD SUPPRESSION FACILITY HAS BEEN 00177300
  180. * SYSGENED AND THE COMMAND CAME FROM CP OR FROM A VM 00177450
  181. * WHICH REQUESTED PASSWORD SUPPRESSION (VMNPWOCL BIT 00177600
  182. * IN VMBLOK VMFSTAT). 00177750
  183. * 00178000
  184. * 00179000
  185. * 00180000
  186. * OPERATION - 00181000
  187. * 00182000
  188. * 1. IF THE "LINK" WAS EXECUTED AS A VIRTUAL CONSOLE FUNCTION, 00183000
  189. * CHECKS TO SEE IF TOO MANY WRONG PASSWORDS HAVE BEEN ENTERED; 00184000
  190. * IF YES, EXITS IMMEDIATELY WITH RETURN CODE 115 AND A MESSAGE 00185000
  191. * INDICATING THAT THE CP LINK COMMAND IS INVALID BECAUSE AN 00186000
  192. * EXCESSIVE NUMBER OF INCORRECT PASSWORDS HAVE BEEN ENTERED. 00187000
  193. * IF NO PROBLEM, CALLS DMKFREE TO OBTAIN FREE STORAGE FOR USE 00188000
  194. * FOR USER DIRECTORY/DEVICE BLOCKS, AND FOR FILLED-IN MESSAGES. 00189000
  195. * THEN CALLS DMKSCNFD TO GET USERID FIELD (ERROR IF MORE 00190000
  196. * THAN 8 CHARACTERS, OR IF OMITTED.) IF USERID FIELD IS '* ', 00191000
  197. * SETS FLAG INDICATING THAT THE USERID IS "MYSELF", AND 00192000
  198. * OBTAINS THE 8-BYTE USERID FROM THE USER'S VMBLOK. 00193000
  199. * 00194000
  200. * 2. CALLS DMKUDRFU TO FIND THE USERID IN THE CP DIRECTORY 00195000
  201. * (ERROR IF NOT FOUND), AND TO OBTAIN A COPY OF THE USER 00196000
  202. * DIRECTORY BLOCK. CALLS DMKSCNFD TO GET THE XXX DEVICE 00197000
  203. * (ERROR IF OMITTED), AND DMKCVTHB TO CONVERT TO BINARY (ERROR 00198000
  204. * IF NOT A HEX NUMBER OR IF GREATER THAN X'FFF'). ALSO CALLS 00199000
  205. * DMKSCNFD AND DMKCVTHB TO OBTAIN AND CONVERT YYY FIELD (ERROR 00200000
  206. * IF OMITTED, OR NOT A VALID HEX NUMBER, OR GREATER THAN 00201000
  207. * X'5FF' FOR BC MODE VIRTUAL MACHINE, OR GREATER THAN X'FFF' 00202000
  208. * FOR EC MODE VIRTUAL MACHINE). THEN DMKUDRFD IS 00203000
  209. * CALLED TO FIND THE USER DEVICE BLOCK FOR THE GIVEN DEVICE 00204000
  210. * (AN ERROR MESSAGE AND CODE BEING RETURNED IF NOT FOUND). 00205000
  211. * 00206000
  212. * 3. CALLS DMKSCNFD TO SEE IF THERE ARE ANY MORE FIELDS ON THE 00207000
  213. * INPUT LINE. IF NOT, DEFAULTS THE ACCESS REQUESTED TO 'R' IF 00208000
  214. * THE USERID WAS NOT "MYSELF". (IF THE USERID WERE "MYSELF", 00209000
  215. * THE ACCESS REQUESTED DEFAULTS TO THE "USER ACCESS MODE" 00210000
  216. * IN THE USER DEVICE BLOCK.) NOW GOES TO STEP 7 BELOW. 00211000
  217. * 00212000
  218. * 4. IF ANOTHER FIELD IS PRESENT, CHECKS FOR ONE BYTE IN 00213000
  219. * LENGTH, WITH A VALUE OF 'R', 'W', OR 'M'; OR TWO BYTES 00214000
  220. * IN LENGTH, WITH A VALUE OF 'RR', 'WR', 'MR', OR 'MW'. 00215000
  221. * IF IT IS NONE OF THE ABOVE, IT USES THE DEFAULT ACCESS 00216000
  222. * MODE AS IN STEP 3, AND GOES TO STEP 5. IF IT IS ONE OF 00217000
  223. * THESE REQUESTED ACCESS MODES, SETS AN INDICATOR AS NEEDED 00218000
  224. * FOR LATER USE, AND CALLS DMKSCNFD TO CHECK FOR ANOTHER 00219000
  225. * FIELD PRESENT; IF YES, GO TO STEP 5; IF NOT, TO STEP 7. 00220000
  226. * 00221000
  227. * 5. IF AN ADDITIONAL FIELD IS PRESENT, IT IS CONSIDERED 00222000
  228. * TO BE A PASSWORD PROVIDED BY THE CALLER. 00223000
  229. * 00224100
  230. * 6. IN THIS CASE, THE PRESENCE AND VALUE OF THE PASSWORD 00225000
  231. * ARE REMEMBERED FOR FUTURE HANDLING. 00226000
  232. * 00227000
  233. * 7. IF ALL OF THE ABOVE HAVE BEEN SUCCESSFUL, THE DEVICE FOUND 00228000
  234. * IS CHECKED. IF THE DEVICE IS NOT A DISK, OR IF IT IS A T-DISK 00229000
  235. * OR DEDICATED, AN ERROR MESSAGE AND ERROR CODE ARE RETURNED. 00230000
  236. * IF OK, CALLS DMKSCNVS TO MAKE SURE THE REQUIRED VOLUME IS 00231000
  237. * ONLINE (ERROR IF NOT). IF THE USER IS NOT "MYSELF", CHECKS 00232000
  238. * FOR THE USERID ACTIVE (VIA DMKSCNAU), AND IF SO WHETHER HE 00233000
  239. * IS IN THE "LOGON" PROCESS - ERROR RETURN IF YES. 00234000
  240. * 00235000
  241. * 8. DMKSCNVU IS NOW CALLED TO SEE IF ANY DEVICE WITH THE 00236000
  242. * YYY ADDRESS IS CURRENTLY ONLINE FOR THE USER. IF NOT, GOES 00237000
  243. * DIRECTLY TO STEP 9. IF YES, CHECKS THE POINTER TO THE REAL 00238000
  244. * DEVICE BLOCK AND THE RELOCATION FACTOR TO SEE IF IT IS THE 00239000
  245. * SAME DEVICE AS THAT FOR WHICH THE LINK IS DESIRED. 00240000
  246. * IF NOT THE SAME, AN ERROR RETURN AND MESSAGE ARE GIVEN. 00241000
  247. * IF IT IS THE SAME DEVICE (PRESUMABLY WITH A DIFFERENT LINK- 00242000
  248. * MODE DESIRED), THEN DMKVDBRL IS CALLED TO RELEASE THE OLD 00243000
  249. * VIRTUAL DEVICE BEFORE PROCEEDING TO STEP 9. 00244000
  250. * 00245000
  251. * 9. AN INTERNAL SUBROUTINE IS NOW CALLED TO DETERMINE WHETHER 00246000
  252. * A READ- OR WRITE-LINK TO THE DESIRED DISK IS FEASIBLE. FIRST 00247000
  253. * DMKUDRLK IS CALLED TO BRIEFLY LOCK THE GIVEN USERID; THEN 00248500
  254. * DMKSCNLI IS CALLED TO DETERMINE HOW MANY READ- AND WRITE LINKS 00249000
  255. * (IF ANY) TO THE GIVEN DISK CURRENTLY EXIST. THEN A DECISION 00249500
  256. * TABLE (READILY REVISED PER INSTALLATION REQUIREMENTS) IS USED 00250000
  257. * TO DETERMINE THE FEASIBILTY OF ESTABLISHING A LINK, BASED ON 00250500
  258. * THE FOLLOWING INPUT CONDITIONS. 00251000
  259. * WRITE LINK(S), READ LINK(S), OR NO LINKS CURRENTLY EXIST 00255000
  260. * 00256000
  261. * ACCESS REQUESTED (EITHER DEFAULT VALUE OR SPECIFIED) 00257000
  262. * WAS 'R', 'RR', 'W', 'WR', 'M', 'MR', OR 'MW'. 00258000
  263. * 00259000
  264. * THE USER ACCESS MODE (IF USER = MYSELF), OR THE 00260000
  265. * AVAILABLE PASSWORD(S) IN USER DEVICE BLOCK. 00261000
  266. * 00262000
  267. * IF THE DECISION IS THAT A LINK IS IMPOSSIBLE, EXIT IS MADE TO 00263000
  268. * TO THE CALLER (VIA STEP 13), WITH A SUITABLE ERROR MESSAGE 00264000
  269. * AND ERROR CODE (FOR EXAMPLE, IF THE OWNER OF THE DISK PROVIDED 00265000
  270. * NO LINK PRIVILEGES AT ALL). OTHERWISE, CONTINUE TO NEXT STEP. 00266000
  271. * 00267000
  272. * 10. ON RETURN FROM THE INTERNAL SUBROUTINE, A CHECK IS NOW 00268000
  273. * MADE AS TO WHETHER A PASSWORD IS REQUIRED TO BE ENTERED, 00269000
  274. * AND IF SO WHETHER A READ-, WRITE-, OR MULT-PASSWORD. IF 00270000
  275. * NO PASSWORD IS REQUIRED, PROCEEDS IMMEDIATELY TO STEP 12. 00271000
  276. * IF THE PASSWORD WAS REQUIRED BUT WAS PROVIDED ON THE COMMAND 00272000
  277. * LINE, IT IS NOW CHECKED; IF CORRECT GO TO STEP 12; IF WRONG, 00273000
  278. * GIVE ERROR MESSAGE AND CODE, AND IF THE PASSWORD WAS INCLUDED 00274000
  279. * ON THE COMMAND LINE OF A LINK ISSUED AS A VIRTUAL CONSOLE 00275000
  280. * FUNCTION, INCREMENTS THE COUNT OF INCORRECT PASSWORDS IN THE 00276000
  281. * VMBLOK. (IF A LINK IS SUBSEQUENTLY ISSUED FROM A VIRTUAL 00277000
  282. * MACHINE DURING THE SAME TERMINAL SESSION, IT WILL BE REJECTED 00278000
  283. * AS AN INVALID COMMAND AS INDICATED ABOVE IN STEP 1.) 00279000
  284. * 00280100
  285. * 11. IF A PASSWORD IS REQUIRED AND IS NOT AVAILABLE, 00281000
  286. * DMKUDRUL IS CALLED TO UNLOCK THE USERID (LEFT FROM STEP 9), 00282110
  287. * AND DMKEPSWD IS THEN CALLED TO HAVE THE USER ENTER THE 00283000
  288. * READ-, WRITE-, OR MULT-PASSWORD, AND CHECK IT. IF 00284000
  289. * INCORRECT, EXITS WITH MESSAGE AND ERROR-CODE. IF 00285000
  290. * CORRECT, CALLS INTERNAL SUBROUTINE AGAIN AS IN STEP 9, 00286000
  291. * AND UPON SUCCESSFUL RETURN CONTINUES TO STEP 12, 00287000
  292. * OR IF UNSUCCESSFUL, GOES TO STEP 13. 00288000
  293. * 00288100
  294. * 12. IF ALL ABOVE STEPS HAVE SUCCEEDED, CALL DMKVDSLK TO 00289500
  295. * ESTABLISH A READ- OR WRITE-LINK (AS DETERMINED BY THE 00290000
  296. * DECISION TABLE) TO THE GIVEN DISK, AND IMMEDIATELY 00290500
  297. * CALLS DMKLOCKD TO UNLOCK THE DIRECTORY. 00291000
  298. * IF DMKVDS RETURNS AN ERROR CODE 32 IN REGISTER 2, 00291100
  299. * DMKLNK WILL FIRST UNLOCK ANY LOCKED USERID(S) AND 00291200
  300. * THEN ISSUE ERROR MESSAGE DMKLNK119E. 00291300
  301. * 00291310
  302. * 13. FINALLY, TYPES ANY RESPONSE OR ERROR MESSAGE WHICH IS TO 00295000
  303. * BE SENT TO THE CALLER, CALLS DMKFRET TO RETURN THE FREE 00296000
  304. * STORAGE WHICH WAS USED (UNLESS THE LINK SUBROUTINE WAS INVOKED 00297000
  305. * VIA THE DMKLNKSB ENTRY POINT), AND RETURNS THE ERROR-CODE TO 00298000
  306. * THE CALLER IN GPR 2. ALL PROCESSING IS NOW COMPLETE. 00299000
  307. * 00300000
  308. * 14. FOR THE LINK SUBROUTINE ENTRY POINT (DMKLNKSB) - CALLED 00301000
  309. * BY "LOGON" TO ESTABLISH A LINK TO A DASD DEVICE IN THE USER'S 00302000
  310. * DIRECTORY - THE INPUT CONDITIONS ARE STORED FOR USE BY THE 00303000
  311. * GENERAL LINK LOGIC, A FLAG IS SET TO INDICATE THAT THE LINK 00304000
  312. * SUBROUTINE WAS INVOKED (USED WHEREVER NECESSARY IN THE ABOVE- 00305000
  313. * DESCRIBED LOGIC), AND THE NORMAL LINK LOGIC ENTERED AT STEP 7. 00306000
  314. EJECT 00307000
  315. * MESSAGES - 00308000
  316. * 00309000
  317. * NOTES: "USERID" GENERALLY DENOTES A SPECIFIC FILLED-IN USERID 00310000
  318. * (E.G. "JONES") 00311000
  319. * 00312000
  320. * "XXX" OR "YYY" IS THE HEX VALUE (FILLED IN IF VALID) OF 00313000
  321. * THE "XXX" OR "YYY" DEVICE SPECIFIED IN THE COMMAND LINE. 00314000
  322. * 00315000
  323. * "NNN" DENOTES A FILLED-IN DECIMAL NUMBER. 00316000
  324. * 00317000
  325. * IN THE RESPONSES AND ERROR MESSAGES WHERE "R/W BY NNN USERS" 00318000
  326. * IS NORMALLY SPECIFIED, IF THE "NNN" IS SPECIFICALLY 001, 00319000
  327. * THE USERID OF THE ONE USER IS GIVEN INSTEAD OF "NNN USERS". 00320000
  328. * 00321000
  329. * RESPONSES: 00322100
  330. * 00329000
  331. * MESSAGES GIVEN IF LINK WAS ESTABLISHED AS 00330000
  332. * REQUESTED, AND IF LINK WAS ISSUED IN CP MODE 00331000
  333. * (OMITTED IF LINK WAS ISSUED FROM VIRTUAL MACHINE): 00332000
  334. * 00333000
  335. * 'DASD YYY LINKED R/O' 00334000
  336. * 00335000
  337. * 'DASD YYY LINKED R/W' 00336000
  338. * 00337000
  339. * MESSAGES GIVEN IF THE LINK WAS ESTABLISHED AS REQUESTED, 00338000
  340. * BUT OTHER USER(S) ARE ALSO LINKED TO THE SAME DEVICE: 00339000
  341. * 00340000
  342. * 'DASD YYY LINKED R/O; R/W BY NNN USERS' 00341000
  343. * 00342000
  344. * 'DASD YYY LINKED R/O; R/W BY NNN USERS; R/O BY NNN USERS' 00343000
  345. * 00344000
  346. * 'DASD YYY LINKED R/W; R/O BY NNN USERS' 00345000
  347. * 00346000
  348. * 'DASD YYY LINKED R/W; R/W BY NNN USERS' 00347000
  349. * 00348000
  350. * 'DASD YYY LINKED R/W; R/W BY NNN USERS; R/O BY NNN USERS' 00349000
  351. EJECT 00350000
  352. * MESSAGES (CONTINUED): 00351000
  353. * 00352000
  354. * ERROR MESSAGES: 00353000
  355. * --------------------------------------------------------- 00354000
  356. * DMKLNK020E USERID MISSING OR INVALID 00355000
  357. * 00356000
  358. * DMKLNK022E VADDR MISSING OR INVALID 00357000
  359. * 00358000
  360. * DMKLNK052E ERROR IN CP DIRECTORY 00359000
  361. * 00360000
  362. * DMKLNK053E USERID NOT IN CP DIRECTORY 00361000
  363. * 00362000
  364. * DMKLNK101W DASD YYY FORCED R/O; R/O BY NNN USERS 00363000
  365. * 00364000
  366. * DMKLNK102W DASD YYY FORCED R/O; R/W BY NNN USERS 00365000
  367. * 00366000
  368. * DMKLNK103W DASD YYY FORCED R/O; R/W BY NNN USERS; R/O BY NNN USERS 00367000
  369. * 00368000
  370. * DMKLNK104E USERID XXX NOT LINKED; R/O BY NNN USERS 00369000
  371. * 00370000
  372. * DMKLNK105E USERID XXX NOT LINKED; R/W BY NNN USERS 00371000
  373. * 00372000
  374. * DMKLNK106E USERID XXX NOT LINKED; R/W BY NNN USERS; R/O BY NNN USERS 00373000
  375. * 00374000
  376. * DMKLNK107E USERID XXX NOT LINKED; NOT IN CP DIRECTORY 00375000
  377. * 00376000
  378. * DMKLNK108E USERID XXX NOT LINKED; VOLID DSKLAB NOT MOUNTED 00377000
  379. * 00378000
  380. * DMKLNK109E USERID XXX NOT LINKED; INVALID LINK DEVICE 00379000
  381. * 00380000
  382. * DMKLNK110E USERID XXX NOT LINKED; DEV YYY ALREADY DEFINED 00381000
  383. * 00382000
  384. * DMKLNK111E USERID XXX NOT LINKED; NO READ PASSWORD 00383000
  385. * 00384000
  386. * DMKLNK112E USERID XXX NOT LINKED; NO WRITE PASSWORD 00385000
  387. * 00386000
  388. * DMKLNK113E USERID XXX NOT LINKED; NO MULT PASSWORD 00387000
  389. * 00388000
  390. * DMKLNK114E USERID XXX NOT LINKED; PASSWORD INCORRECT 00389000
  391. * 00390000
  392. * DMKLNK115E LINK INVALID; EXCESSIVE INCORRECT PASSWORDS 00391000
  393. * 00392000
  394. * DMKLNK116E USERID XXX NOT LINKED; CP DIRECTORY IN USE 00393000
  395. * 00394000
  396. * DMKLNK117E USERID XXX NOT LINKED; VOLID DSKLAB CONFLICT 00395000
  397. * 00395030
  398. * DMKLNK118E USERID XXX NOT LINKED; COMMAND FORMAT NOT VALID 00395060
  399. * 00395100
  400. * DMKLNK119E USERID XXX NOT LINKED; INSUFFICIENT FREE STORAGE 00395200
  401. * 00396000
  402. * DMKLNK137E DASD YYY NOT LINKED; CHAN XX DEDICATED 00397000
  403. * 00397300
  404. * DMKLNK153E DEVICE YYY EXCEEDS MAX NUM OF VIRTUAL DEVICES 00397600
  405. * 00398100
  406. * DMKLNK281I MSS VOL DSKLAB NOT LINKED; DEMNT IN PROCESS, RETRY 00398200
  407. EJECT 00403000
  408. *********************************************************************** 00404000
  409. * 00405000
  410. * LINK USERID | * XXX YYY < MODE > < PASSWORD > 00406000
  411. * 00407000
  412. * OR 00408000
  413. * 00409000
  414. * LINK USERID | * XXX YYY < MODE > < PASS= PASSWORD > 00410000
  415. * 00411000
  416. *********************************************************************** 00412000
  417. * 00413100
  418. * "DTBL" = DECISION-TABLE MACRO: 00414000
  419. * &OPTIONS = FLAG-BITS USED FOR DECISION-TABLE LOGIC 00415000
  420. * &LNKMODE = ACCESS PERMITTED PER UDEVMODE OF UDEVBLOK 00416000
  421. * &JUMPADD = S-CONSTANT "JUMP-ADDRESS" TO CORRECT CODE 00417000
  422. MACRO 00418000
  423. &LABEL DTBL &OPTIONS,&LNKMODE,&JUMPADD 00419000
  424. &LABEL DC AL1(&OPTIONS) - 0 00420000
  425. DC AL1(&LNKMODE) - 1 00421000
  426. DC S(&JUMPADD) - 2 00422000
  427. SPACE 00423000
  428. MEND 00424000
  429. EJECT 00432000
  430. COPY OPTIONS 00433000
  431. COPY LOCAL 00434000
  432. EJECT 00435000
  433. DMKLNK CSECT 00436000
  434. SPACE 00437000
  435. DC CL8'DMKLNK' MODULE IDENTIFIER 00438000
  436. SPACE 00439000
  437. SPACE 00440000
  438. EXTRN DMKEPSWD PASSWORD ROUTINE NOW EXTERNAL @VA14144 00440100
  439. EXTRN DMKLOCK USERID LOCK 00441000
  440. EXTRN DMKLOCKD USERID UNLOCK 00442000
  441. EXTRN DMKUDRFU FIND USER 00443000
  442. EXTRN DMKUDRFD FIND DEVICE 00444000
  443. EXTRN DMKUDRRV RETURN VIRTUAL PAGE 00445000
  444. EXTRN DMKCFPRD @VA04747 00445500
  445. SPACE 00446000
  446. EXTRN DMKCVTHB,DMKCVTBH,DMKCVTBD 00447000
  447. EXTRN DMKQCNRD 00448000
  448. EXTRN DMKSCNAU,DMKSCNFD,DMKSCNLI,DMKSCNVS,DMKSCNVU 00449000
  449. EXTRN DMKVDSLK 00451000
  450. EXTRN DMKERMSG 00452000
  451. EXTRN DMKSCNVN 00453000
  452. EXTRN DMKSTKCP,DMKSSSLN @VA14144 00453310
  453. EXTRN DMKSYSJR,DMKJRLSL,DMKJRLIL @V60BBBB 00453600
  454. EXTRN DMKFREE,DMKFRET @VA14144 00453610
  455. SPACE 00454000
  456. USING PSA,R0 00455000
  457. USING VMBLOK,R11 00456000
  458. USING SAVEAREA,R13 00458000
  459. ********************************************************************** 00458100
  460. * * 00458200
  461. * MAIN ENTRY POINT: THE LINK COMMAND * 00458300
  462. * * 00458400
  463. ********************************************************************** 00458500
  464. EJECT 00459000
  465. DMKLNKIN RELOC "LINK" ENTRY 00460000
  466. SR R5,R5 R5=0 MEANS NO DEC TBLS IN USE @VA14144 00461100
  467. ST R5,SAVEWRK1 CLEAR SAVEWRK1 TO USE AS FLAGS @VA14144 00461200
  468. ST R5,SAVER2 CLEAR R2-REG RETURNED AT EXIT @VA14144 00461300
  469. LA R0,UDBFSIZE+2 GET FREE STOR FOR USER DIRECT @VA14144 00461400
  470. CALL DMKFREE BLOCK, DEV BLOCK, & ERR MSG @VA14144 00461500
  471. LR R4,R1 AND KEEP ITS ADDRESS IN R4 00466000
  472. L R2,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00466200
  473. USING JPSCBLOK,R2 TELL ASSEMBLER @V60BBBB 00466400
  474. TM LINKJRL,L'LINKJRL+L'LINKJRLI JOURNALING? @V60BBBB 00466600
  475. BZ LINK0A BR IF NOT @V60BBBB 00466800
  476. CLC VMPSWDCT,JPSLNKDS SHALL WE LET HIM CONTINUE? @V60BBBB 00467000
  477. B LINK0F CONTINUE @V60BBBB 00467200
  478. DROP R2 @V60BBBB 00467400
  479. LINK0A TM VMOSTAT,VMVIRCF WAS 'LINK' FROM VIRT. MACHINE? @V60BBBB 00467600
  480. BZ LINK00 TRF IF NOT (NO PROBLEM) 00468000
  481. IC R14,VMPSWDCT GET THE BAD PASSWORD COUNT @VM03198 00469000
  482. N R14,F15 ISOLATE LOWER DIGIT @VM03198 00470000
  483. LA R15,LNKLIMIT GET THE LIMIT @VM03198 00471000
  484. CR R14,R15 SHALL WE LET HIM CONTINUE? @VM03198 00472000
  485. LINK0F BNL ERROR115 NOPE, TOO BAD JACK... @V60BBBB 00473000
  486. LINK00 DS 0H OK FOR USER TO ISSUE LINK, CONT @VA14144 00474100
  487. USING UDBFBLOK,R4 REFERENCE UDBFBLOK BRIEFLY 00475000
  488. MVC UDBFVADD(8),ZEROES CLEAR THE LAST DOUBLE-WORD 00476000
  489. DROP R4 THAT'S ALL FOR NOW. 00477000
  490. USING UDIRBLOK,R4 AND REFERENCE THE DIRECT BLOCK @VA14144 00478100
  491. CALL DMKSCNFD GET 'TO' OR USERID 00479000
  492. BNZ ERROR20 ERROR IF USERID MISSING @VA14144 00480100
  493. CL R0,F2 MORE THAN 2 BYTES INPUTTED ? 00481000
  494. BH LINK01A IF YES, IT CAN'T BE 'TO' OR '* ' 00482000
  495. LR R15,R0 COUNT INTO R15, 00483000
  496. BCTR R15,0 LESS 1, 00484000
  497. LA R3,CLTO POINT AT 'TO' 00485000
  498. EX R15,MODECLC SEE IF IT IS 'T' OR 'TO' 00486000
  499. BNE LINK01 NOPE - ASSUME IT'S A USERID. 00487000
  500. CALL DMKSCNFD SKIP 'TO' - NOW GET THE USERID 00488000
  501. BNZ ERROR20 NOW WHY DID HE LEAVE IT OUT ? 00489000
  502. LINK01 CLC =CL2'* ',0(R1) IS HE LINKING TO HIMSELF ? 00490000
  503. BNE LINK01A TRF IF NOT THIS TIME. 00491000
  504. MVC SAVEWRK2(8),VMUSER SAVE USERID 00492000
  505. LA R0,8 CALL IT 8 BYTES 00493000
  506. LA R1,SAVEWRK2 POINT TO USERID 00494000
  507. B LINK02 GO SET FLAG MEANING "IT'S ME". @VA14144 00495100
  508. * 00496000
  509. LINK01A MVC SAVEWRK2(8),BLANKS 00497000
  510. LR R15,R0 CHECK BYTE-COUNT 00498000
  511. C R15,F8 ... 00499000
  512. BH ERROR20 ERROR IF USERID > 8 CHARS @VA14144 00500100
  513. BCTR R15,0 00501000
  514. EX R15,SAVEID SAVE USERID (BLANK-FILLED) 00502000
  515. CLC VMUSER,SAVEWRK2 IS THE USER = MYSELF ? 00503000
  516. BNE LINK03 NOT THIS TIME. 00504000
  517. * 00505000
  518. LINK02 OI LINKFLAG,JMYSELF+JLNKPRV SET FLAGS FOR MYSELF @VA14144 00506100
  519. * 00507000
  520. LINK03 LR R2,R4 R2 = COPY OF USER DIRECT BLOCK @VA14144 00508100
  521. CALL DMKUDRFU FIND THE USERID IN THE CP DIRECT @VA14144 00508200
  522. BNZ ERROR53 ERROR IF USERID WAS NOT FOUND 00510000
  523. CALL DMKSCNFD GET 'XXX' DISK-ADDRESS 00511000
  524. BNZ ERROR22 CALLER BAD IF NOT THERE AT ALL. @VA14144 00512100
  525. CALL DMKCVTHB CONVERT TO BINARY 00513000
  526. BNZ ERROR22 JUST HEX NUMBERS, PLEASE. 00514000
  527. CL R1,F4095 ADDR > X'FFF'? @VA01138 00515000
  528. BH ERROR22 HASN'T BEEN INVENTED YET @VA01138 00516000
  529. ST R1,SAVEWRK4 SAVE THE XXX DISK-ADDRESS. 00517000
  530. CALL DMKSCNFD GET 'AS' OR 'YYY' DISK-ADDRESS 00518000
  531. BNZ ERROR22 CALLER GOOFED IF HE LEFT IT OUT @VA14144 00519100
  532. CL R0,F2 MORE THAN 2 BYTES INPUTTED ? 00520000
  533. BH LINK03A IF YES, IT MUST BE THE YYY DEV @VA14144 00521100
  534. LR R15,R0 COUNT INTO R15, 00522000
  535. BCTR R15,0 LESS 1, 00523000
  536. LA R3,CLAS POINT AT 'AS' 00524000
  537. EX R15,MODECLC SEE IF IT IS 'A' OR 'AS' 00525000
  538. BNE LINK03A NOPE - ASSUME IT'S THE YYY DEV @VA14144 00526100
  539. CALL DMKSCNFD SKIP 'AS' - NOW GET THE YYY DEV @VA14144 00526200
  540. BNZ ERROR22 JUST WHEN I HAD MY HOPES UP @VA14144 00526300
  541. LINK03A CALL DMKCVTHB CONVERT YYY DEVICE TO BINARY 00529000
  542. BNZ ERROR22 THAT'S 0-9 AND A-F. @VA14144 00530100
  543. MAXDV R10 GET HIGHEST ALLOWABLE ADDR @VA01138 00531000
  544. CLR R1,R10 LEGITIMATE 370 VIRTUAL DEV? @VA14144 00532100
  545. BH ERROR22 ERR IF > MAX (X'5FF' OR X'FFF') @VA14144 00532200
  546. ST R1,SAVEWRK5 SAVE THE YYY DISK-ADDRESS 00534000
  547. L R0,SAVEWRK4 XXX DEVICE INTO R0, 00535000
  548. LA R1,UDIRDISP R1 MUST POINT TO UDIRDISP & ON @VA14144 00536100
  549. LR R2,R4 R2 MUST POINT TO UDIRBLOK 00537000
  550. DROP R4 (THRU WITH UDIRBLOK NOW) 00538000
  551. CALL DMKUDRFD FIND THE SPECIFIC DEVICE 00539000
  552. BNZ ERROR107 ERROR IF NOT FOUND 00540000
  553. CALL DMKUDRRV LET DMKUDR RELEASE HIS PAGES @VA14144 00541100
  554. USING UDEVBLOK,R4 SWITCH TO UDEVBLOK DSECT NOW. 00542000
  555. CALL DMKSCNFD ANYTHING LEFT ON INPUT LINE ? 00543000
  556. BNZ LINK08 TRF IF NOT - GET DEFAULT LNK-MD @VA14144 00544100
  557. CL R0,F2 MORE THAN 2 BYTES ? 00545000
  558. BH LINK05 LOOK FOR 'PASS= ' OR PSWRD @VA14144 00546100
  559. LR R6,R0 BYTE-COUNT INTO R6 00547000
  560. BCTR R6,0 LESS 1 FOR EX-CLC 00548000
  561. LA R3,MODER POINT TO 1ST MODE TO LOOK FOR @VA14144 00549100
  562. LA R14,4 INCREMENTER FOR BXLE, 00550000
  563. LA R15,MODEMW LAST MODE WE'LL LOOK FOR 00551000
  564. LINK03B EX R6,MODECLC IS IT 'R ', 'RR', ETC. 00552000
  565. BE LINK04 GOOD SHOW IF YES. 00553000
  566. BXLE R3,R14,LINK03B ITERATE THRU VARIOUS MODES @VA14144 00554100
  567. BAL R10,LINKDEF NOT FOUND - SET TO DEFAULT @VA14144 00554200
  568. B LINK07 AND TREAT AS A PASSWORD. 00556000
  569. * 00557000
  570. LINK04 DS 0H ACCESS MODE WAS FOUND: 00558000
  571. LH R15,2(,R3) PICK UP DECISION-TABLE INDEXER 00559000
  572. STH R15,LINKHALF STORE WHERE NEEDED. 00560000
  573. CALL DMKSCNFD ANYTHING MORE ON THE LINE ? 00562000
  574. BNZ LINK09 TRF IF NOT - GO DO THE LINK NOW. 00563000
  575. B LINK06 IF YES, CHECK FOR PASSWORD. 00564000
  576. * 00565000
  577. LINK05 BAL R10,LINKDEF SET DEFAULTIF NO LINK-MODE GIVEN @VA14144 00566100
  578. * 00567000
  579. LINK06 DS 0H @VA10715 00567610
  580. CLC =C'PASS= ',0(R1) PERHAPS IS 'PASS= ' ? @V60BBBB 00568200
  581. BNE LINK07 IF NOT, ASSUME IT'S THE PASSWORD @VA14144 00569100
  582. CALL DMKSCNFD IF PASS=, THE PSWD MUST BE NEXT @VA14144 00569200
  583. BZ LINK07 00569350
  584. MVC SAVEWRK6(8),BLANKS TREAT MISSING PASSWORD 00569400
  585. B ERR114 AS BAD 00569450
  586. LINK07 L R2,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00572200
  587. USING JPSCBLOK,R2 TELL ASSEMBLER @V60BBBB 00572400
  588. TM MASKLINK,L'MASKLINK LINK PSWD SUPPRESSION ON? @V60BBBB 00572600
  589. BZ LINK07F BR IF NOT @V60BBBB 00572800
  590. DROP R2 @V60BBBB 00573000
  591. TM VMOSTAT,VMCF CONSOLE FUNCTION? @V60BBBB 00573200
  592. BZ LINK07F BR IF NOT @V60BBBB 00573400
  593. TM VMOSTAT,VMVIRCF VIRTUAL CONSOLE FUNCTION @V60BBBB 00573600
  594. BZ ERROR118 BR IF NOT @VA14144 00573810
  595. TM VMFSTAT,VMNPWOCL VM WANT PASSWORD SUPPRESSION? @V60BBBB 00574000
  596. BO ERROR118 BR IF YES @VA14144 00574210
  597. LINK07F DS 0H @V60BBBB 00574400
  598. MVC SAVEWRK6(8),BLANKS BLANK WHERE PASSWORD GOES @VA10715 00574410
  599. LR R15,R0 PREPARE FOR EXECUTE @V60BBBB 00574600
  600. BCTR R15,0 @V60BBBB 00574800
  601. N R15,F7 MOVE NO MORE THAN 8 CHARACTERS @V60BBBB 00575000
  602. EX R15,SAVEPASS SAVE THE PASSWORD @V60BBBB 00575200
  603. C R0,F8 WAS IT LONGER THAN 8 CHARACTERS? @V60BBBB 00575400
  604. BNH LINK07H 00576110
  605. MVC SAVEWRK6(8),=C'TOO LONG' TREAT PASSOWRD > 8 00576120
  606. B ERR114 CHARS AS BAD 00576130
  607. LINK07H EQU * 00576140
  608. OI LINKFLAG,JGOTPASS FLAG THAT WE HAVE THE PSWRD @VA14144 00576200
  609. B LINK09 CONTINUE. 00580000
  610. DROP R4 (THRU WITH COMMAND LINE & R9) @VA14144 00581100
  611. * 00581200
  612. * 00581300
  613. LINK08 BAL R10,LINKDEF DEFAULT, IF NO LINK-MODE GIVEN @VA14144 00581400
  614. LINK09 NI LINKFLAG,255-JMYSELF DON'T ASSUME MY OWN DISK @VA14144 00581500
  615. LA R6,LEVLIMIT LINK-LIMIT = 2 FOR LINK COMMAND @VA14144 00581600
  616. B LINK09A GO JOIN THE COMMON CODE @VA14144 00581700
  617. EJECT 00581800
  618. ********************************************************************** 00581900
  619. * * 00582000
  620. * SUBROUTINE ENTRY POINT: LINK CALLED BY LOGON * 00582100
  621. * * 00582200
  622. ********************************************************************** 00582300
  623. DMKLNKSB RELOC "LINK SUBROUTINE" ENTRY POINT @VA14144 00582400
  624. STM R0,R3,SAVEWRK2 USERID TO SAVEWRK2/SAVEWRK3, @VA14144 00582500
  625. * LINK-TO AND LINK-AS DEVS TO SAVEWRK4 & SAVEWRK5 00582600
  626. STH R5,LINKHALF STORE MAGIC INDEXER OF 0 ... 24 @VA14144 00582700
  627. MVI LINKFLAG,LINKSUBR+JGOTPASS+JLNKPRV FLAGBITS @VA14144 00582800
  628. LA R6,LEVLIMIT+1 LINK-LIMIT = 3 FOR DMKLNKSB, @VA14144 00582900
  629. ********************************************************************** 00583000
  630. * * 00583100
  631. * NOTE - * 00583200
  632. * THIS CODE IS COMMON TO BOTH ENTRY POINTS. * 00583300
  633. * THE DMKLNKIN ENTRY JOINS AT THIS LOCATION. * 00583400
  634. * * 00583500
  635. ********************************************************************** 00583600
  636. USING UDEVBLOK,R4 @VA14144 00583700
  637. LINK09A EQU * R6 SET TO 2 OR 3 FOR LINK LIMIT @VA14144 00583800
  638. MVC LINKMODE(1),UDEVMODE SAVE UDEVMODE FROM ORIG. @VA14144 00583900
  639. * 00590000
  640. LINK09B TM UDEVSTAT,UDEVLKDV IS THIS AN INDIRECT LINK? @VA14144 00591100
  641. BO LINK09C YES - GO TO IT, MEN. 00592000
  642. TM UDEVTYPC,CLASDASD NO - IT BETTER BE A DISK, THEN. 00593000
  643. BZ ERROR109 BLUNDER IF NOT A DASD DEV @VA14144 00594100
  644. TM UDEVSTAT,UDEVDED+UDEVTDSK DEDICATED OR (TEMP)? @VA14144 00594200
  645. BNZ ERROR109 ERROR IF EITHER @VA14144 00594300
  646. TM UDEVSTAT,UDEVLONG ALL THE INFO WE NEED THERE? @VA14144 00594400
  647. BO LINK09D YES - WE'RE ALL READY TO GO @VA14144 00594500
  648. B ERROR52 (ERROR IN CP DIRECTORY IF NOT) @VA14144 00594600
  649. DROP R4 @VA14144 00594700
  650. EJECT 00594800
  651. ********************************************************************** 00594900
  652. * * 00595000
  653. * CALL DMKUDR TO GET UDEVBLOK FOR AN INDIRECT LINK * 00595100
  654. * * 00595200
  655. ********************************************************************** 00595300
  656. USING UDBFBLOK,R4 00602000
  657. LINK09C MVC UDBFVADD(8),ZEROES CLEAR DBL-WORD USED BY UDR @VA14144 00603100
  658. DROP R4 @VA14144 00603200
  659. USING UDEVBLOK,R4 00604000
  660. LH R5,UDEVLINK DISK-TO-BE-LINKED-TO INTO R5, 00605000
  661. ST R5,SAVEWRK4 REMEMBER FOR LATER USE 00606000
  662. MVC SAVEWRK2(8),UDEVLKID ALSO REMEMBER USERID 00607000
  663. LA R0,8 POINT TO USERID - OWNER OF DISK 00608000
  664. LA R1,SAVEWRK2 ... 00609000
  665. LR R2,R4 SET R2 00610000
  666. CALL DMKUDRFU FIND THE USERID 00611000
  667. BNZ ERROR53 IF NOT FOUND MUST BE A DIR ERROR @VA14144 00612100
  668. LR R0,R5 DEVICE INTO R0, 00613000
  669. LA R1,UDEVDISP POINT TO WHERE TO START LOOKING 00614000
  670. CALL DMKUDRFD NOW FIND THE GIVEN DEVICE 00615000
  671. BNZ ERROR107 BAD SHOW IF WE COULDN'T FIND IT @VA14144 00616100
  672. CALL DMKUDRRV RELEASE PAGES USED BY DMKUDRFD 00617000
  673. BCT R6,LINK09B REPEAT CHECKING UNTIL OK OR ERR @VA14144 00618100
  674. B ERROR52 FOUND WITHIN A REASONABLE @VA14144 00618200
  675. DROP R4 NUMBER OF LEVELS @VA14144 00618300
  676. EJECT 00618400
  677. ********************************************************************** 00618500
  678. * * 00618600
  679. * THE FOLLOWING ENTRY POINT IS EXECUTED AFTER A REQUIRED * 00618700
  680. * MSS VOLUME IS MOUNTED. THE ADDRESS OF DMKLNKSS IS * 00618800
  681. * PLACED IN A CPEXBLOK BY DMKSSS. WHEN THE MOUNT * 00618900
  682. * IS COMPLETE, DMKDSB STACKS THE CPEXBLOK SUCH THAT * 00619000
  683. * DMKLNKSS GETS CONTROL. * 00619100
  684. * * 00619200
  685. ********************************************************************** 00619300
  686. DMKLNKSS RELOC ENTRY FROM THE DISPATCHER @VA14144 00619400
  687. ST R3,SAVER0 SAVE THE ADDR OF THE MSSCOM BLK @VA14144 00619500
  688. MVC SAVEWRK1(4),0(R1) RESET WORKAREA DATA @VA14144 00619600
  689. MVC SAVEWRK2(32),4(R1) ....SAME FOR THE REST @VA14144 00619700
  690. LA R4,36(R1) OUR BUFFER AREA NOW @VA14144 00619800
  691. ST R1,SAVER1 SAVE FOR LATER DMKFRET @VA14144 00619900
  692. OI LINKFLAG,SSENT INDICATE MSS RE-ENTRY @VA14144 00620000
  693. EJECT 00620100
  694. ********************************************************************** 00620200
  695. * * 00620300
  696. * NOTE - * 00620400
  697. * THIS CODE IS COMMON TO ALL THREE ENTRY POINTS. * 00620500
  698. * THE DMKLNKIN AND DMKLNKSB FALL THROUGH TO THIS * 00620600
  699. * POINT VIA THE BRANCH FROM ABOVE AT LINK09B. * 00620700
  700. * * 00620800
  701. ********************************************************************** 00620900
  702. USING UDEVBLOK,R4 @VA14144 00621000
  703. LINK09D LA R1,UDEVVSER POINT TO VOLUME ID 00622000
  704. LA R0,6 (6 BYTES, PLEASE) 00623000
  705. CALL DMKSCNVS MAKE SURE IT IS MOUNTED 00624000
  706. BZ VOLFND CONTINUE IF FOUND... @VA09303 00625000
  707. * ELSE, SECOND LOOK AT RDEVBLOKS 00625050
  708. USING RDEVBLOK,R1 FOR RDEVMOUT FLAG @VA09303 00625100
  709. L R1,ARIODV POINT TO FIRST RDEVBLOK @VA09303 00625200
  710. L R10,ARIODC GET THE COUNT OF --- @VA09845 00625255
  711. LH R10,0(,R10) THE RDEVBLOKS @VA09845 00625305
  712. LNKCHK TM RDEVSTAT,RDEVDISA+RDEVDED DED OR OFFLINE ? @VA09303 00625350
  713. BNZ CHKNXT @VA09303 00625400
  714. CLC RDEVSER(6),UDEVVSER ARE THE VOLIDS EQUAL? @VA09303 00625450
  715. ********************************************************************** 00625510
  716. * * 00625520
  717. * SINCE DMKSCNVS COULD NOT FIND THE RDEVBLOK,THE RDEVMOUT * 00625530
  718. * FLAG IS ON INDICATING THAT THE VOLUME IS MOUNTED BUT NOT * 00625540
  719. * ATTACHED TO THE SYSTEM. ISSUE THE MSG 108. * 00625550
  720. * * 00625560
  721. ********************************************************************** 00625570
  722. BZ ERROR108 @VA09303 00625700
  723. CHKNXT LA R1,RDEVSIZE*8(R1) POINT TO NEXT RDEVBLOK @VA09303 00625750
  724. BCT R10,LNKCHK CHECK FOR LAST RDEVBLOK @VA09845 00625810
  725. B CHK3330V IF VOL NOT MOUNTED, CHECK FOR MSS@VA09303 00625850
  726. DROP R1 @VA09303 00625900
  727. VOLFND LR R9,R1 SAVE THE RDEVBLOK ADDRESS IN R9 @VA09303 00625950
  728. USING RDEVBLOK,R9 00627000
  729. TM RDEVFLAG,RDEVSYS Is device attached to system? HRC039DK 00627100
  730. BZ ERROR108 Device not attached to system HRC039DK 00627200
  731. CLC RDEVTYPC(2),UDEVTYPC DEV CLS & TYPE MUST MATCH @VA14144 00628100
  732. BE LINK09B2 BRANCH IF EQ, ALL OK @V60B6B8 00630000
  733. EJECT 00631100
  734. CLI RDEVTYPE,TYP2314 IF NOT EQ THEN THE REAL DISK @VA14144 00631200
  735. BNE ERROR117 MUST BE A 2314 AND THE MINI @VA14144 00631300
  736. CLI UDEVTYPE,TYP2311 DISK MUST BE A 2311 TOP OR @VA14144 00631400
  737. BNE ERROR117 2311 BOTTOM. IF NOT THEN @VA14144 00631500
  738. TM UDEVFTR,FTR2311T+FTR2311B ISSUE ERRMSG LNK117 @VA14144 00631600
  739. BZ ERROR117 -- "VOLID DSKLAB CONFLICT". @VA14144 00631700
  740. LINK09B1 EQU * 00637000
  741. CLC VMUSER,SAVEWRK2 DOES REAL DISK BELONG TO ME? @VA14144 00638100
  742. BE LINK09E YES, SET MYSELF FLAG AGAIN. @VA14144 00638200
  743. LA R0,8 IS THIS USER ACTIVE ? 00641000
  744. LA R1,SAVEWRK2 ... 00642000
  745. CALL DMKSCNAU ... 00643000
  746. BC 8+4+2,LINK10 NO PROBLEM IF HE ISN'T. 00644000
  747. TM VMRSTAT-VMBLOK(R1),VMLOGON LOGGING ON NOW? @VA14144 00645000
  748. BO ERROR116 THAT'S A NO NO 00646000
  749. B LINK10 BUT OK IF HE'S NOT. 00647000
  750. LINK09B2 EQU * CHECK FOR MSS VOLUMES @V60B6B8 00647010
  751. TM RDEVFTR,VIRTUAL+SYSVIRT IS RDEV A 3330 @V60B6B8 00647030
  752. BZ LINK09B1 NO, CONTINUE @V60B6B8 00647040
  753. CLI UDEVTYPC,CLASDASD DID USER WANT DASD @VA14144 00647050
  754. BNE ERROR117 NO, BUT THAT IS WHAT WE FOUND @V60B6B8 00647070
  755. CLI UDEVTYPE,TYP3330 DID USER WANT 3330 @V60B6B8 00647080
  756. BNE ERROR117 USER DIDN'T WANT 3330 @V60B6B8 00647090
  757. TM RDEVFLAG,RDEVSEL IS IT SELECTED FOR DEMOUNT? @VA11706 00647092
  758. BO ERROR281 YES, CAN'T LINK NOW @VA11706 00647094
  759. B LINK09B1 RESUME MAINLINE @V60B6B8 00647100
  760. DROP R9 @V60B6B8 00647110
  761. EJECT 00647120
  762. ********************************************************************** 00647125
  763. * * 00647130
  764. * THE VM SYSTEM VOLUME WHICH IS THE TARGET OF A LINK * 00647135
  765. * IS NOT MOUNTED. IF THE USER WANTED A 3330, CALL * 00647140
  766. * DMKSSSLN TO SEE IF A 3330V VOLUME WITH THE CORRECT * 00647145
  767. * VOLSER CAN BE MOUNTED. * 00647150
  768. * * 00647155
  769. * DMKSSSLN WILL ALLOCATE A VUA AND ATTEMPT AN MSS * 00647160
  770. * MOUNT. IF FOR ANY REASON DMKSSSLN FAILS (SUCH AS * 00647165
  771. * NO VUA AVAILABLE, VOLUME NOT FOUND, MSS NOT * 00647170
  772. * AVAILABLE, THEN ON RETURN GPR 15 WILL BE NONZERO * 00647175
  773. * * 00647180
  774. ********************************************************************** 00647185
  775. CHK3330V EQU * CHECK FOR 3330V REQUEST @V60B6B8 00647230
  776. CLI UDEVTYPC,CLASDASD DID USER WANT DASD @V60B6B8 00647250
  777. BNE ERROR108 3330V MUST BE DASD @V60B6B8 00647260
  778. CLI UDEVTYPE,TYP3330 USER WANT A 3330 SYSTEM VOLUME @V60B6B8 00647270
  779. BNE ERROR108 NO, CAN'T BE MSS VOLUME @V60B6B8 00647280
  780. TM PSAMSS,MSSPRES IS THE MSS PRESENT @V60B6B8 00647290
  781. BZ ERROR108 NO, VOLUME NOT AVAILABLE @V60B6B8 00647300
  782. L R6,SAVEWRK5 TO PASS YYY ADDRESS TO DMKSSS. @VA11254 00647305
  783. CALL DMKSSSLN TRY TO MOUNT THE SYSTEM VOLUME @V60B6B8 00647310
  784. LTR R0,R0 WAS THERE AN ERROR @V60B6B8 00647320
  785. BZ LINK09D ENTER MAINLINE LINK @VMI2004 00647330
  786. LA R15,RC4 SET UP FOR RET CODE CHECK @V60B6B8 00647340
  787. CR R15,R0 IS DMKSSS CODE 4 @V60B6B8 00647350
  788. BNE ERROR108 PUT OUT ERROR MESSAGE @VA14144 00647400
  789. MNTSETUP EQU * SAVE DATA FOR ASYNCH ENTRY @VA14144 00647425
  790. TM MSSFLAG2-OSVSCOM(R1),MSGPROC HAS PCI OCCURRED @VA14144 00647450
  791. BZ PCINOW YES, CAN COMPLETE NOW @VA14144 00647475
  792. NI MSSFLAG2-OSVSCOM(R1),X'FF'-MSGPROC @VA14144 00647500
  793. L R2,MSSTASK1-OSVSCOM(R1) CPEXBLOK FOR DMKLNKSS @VA14144 00647525
  794. LA R0,SAVESIZE+UDBFSIZE+2 LEN OF AREA TO SAVE DATA @VA14144 00647550
  795. CALL DMKFREE GET AREA FOR DYNAMIC DATA @VA14144 00647575
  796. ST R1,CPEXR1-CPEXBLOK(R2) SAVE ADDR FOR DMKLNKSS @VA14144 00647600
  797. MVC 0(4,R1),SAVEWRK1 PUT FLAGS INTO AREA @VA14144 00647625
  798. MVC 4(32,R1),SAVEWRK2 REST OF NEEDED DATA @VA14144 00647650
  799. MVC 36(80,R1),0(R4) SAVE DUMMY UDEVBLOK @VA14144 00647675
  800. B LINKEXIT WAIT FOR DMKDSB TO GET PCI @VA14144 00647700
  801. EJECT 00647725
  802. ********************************************************************** 00647750
  803. * * 00647775
  804. * HERE MEANS THAT THE PCI HAS NOW OCCURRED * 00647800
  805. * AND THE SYSTEM VOLUME IS NOW MOUNTED. * 00647825
  806. * * 00647850
  807. ********************************************************************** 00647875
  808. PCINOW EQU * @VMI2018 00648150
  809. L R14,=V(DMKSSSMQ) ADDR OF MSSCOM Q @VMI2018 00648200
  810. L R15,0(R14) ACTUAL FIRST MSSCOM @VMI2018 00648250
  811. CHEKIT EQU * @VMI2018 00648300
  812. CR R1,R15 FIND THIS MSSCOM IN THE Q @VMI2018 00648350
  813. BE DEQIT IF FOUND, REMOVE FROM Q @VMI2018 00648400
  814. LTR R15,R15 VALIDITY CHECK: END OF Q? @VMI2018 00648450
  815. BZ EXITGO YES, QUIT, Q INVALID @VMI2018 00648500
  816. LA R14,MSSNEXT-OSVSCOM(R15) INCREMENT CHAIN PTR @VMI2018 00648550
  817. L R15,MSSNEXT-OSVSCOM(R15) NEXT MSSCOM BLOCK @VMI2018 00648600
  818. B CHEKIT CHECK FOR CORRECT MSSCOM @VMI2018 00648650
  819. DEQIT EQU * REMOVE OUR ENTRY FROM Q @VMI2018 00648700
  820. MVC 0(4,R14),MSSNEXT-OSVSCOM(R15) RESET CHAIN @VMI2018 00648750
  821. LA R0,MSSSIZE MSSCOM SIZE @VMI2018 00648800
  822. CALL DMKFRET DONE WITH MSSCOM @VMI2018 00648850
  823. B LINK09D NOW COMPLETE THE LINK @VMI2018 00648900
  824. EJECT 00649100
  825. LINK09E OI LINKFLAG,JMYSELF SET MYSELF FLAG IF MY DISK. @VA14144 00649200
  826. LINK10 L R1,SAVEWRK5 CHECK YYY DEV TO SEE IF ATTACHED @VA14144 00650100
  827. CALL DMKSCNVU ... 00652000
  828. AIF (NOT &DEDCH).NOTDED1 00653000
  829. BC 4,LINK11 OK TO CONTINUE IF NO CHAN BLOCK @VA14144 00654100
  830. BALR R15,0 PRESERVE COND CODE FROM SCNVU @VA14144 00654200
  831. USING VCHBLOK,R6 ADDRESS VCHBLOK (TEMPORARILY) 00656000
  832. TM VCHSTAT,VCHDED IS THE VIRTUAL CHAN DEDICATED? @VA14144 00657100
  833. BO ERROR137 YES - CANNOT LINK DEVICES TO IT 00658000
  834. DROP R6 FINISHED WITH VCHBLOK 00659000
  835. SPM R15 RESTORE CONDITION CODE 00660000
  836. BC 2+1,LINK11 OK TO CONTINUE IF NO CU OR DEVICE 00661000
  837. AGO .DED1 00662000
  838. .NOTDED1 BNZ LINK11 OK TO CONT IF DEV NOT ATTACHED 00663100
  839. .DED1 ANOP 00664000
  840. USING VDEVBLOK,R8 REFERENCE THE DEVICE WE FOUND 00665000
  841. TM VDEVTYPC,CLASDASD IS IT A DASD DEVICE ? 00666000
  842. BZ ERROR110 TRF IF NOT - CERTAINLY AN ERROR. 00667000
  843. L R14,VDEVREAL GET POINTER TO REAL DEVICE BLOCK 00668000
  844. LH R15,VDEVRELN AND RELOCATION FACTOR 00669000
  845. CLR R14,R9 SAME DEVICE WE WANT TO LINK TO? @VA14144 00670100
  846. BNE ERROR110 ERROR IF NOT - LEAVE ALONE @VA14144 00670200
  847. CH R15,UDEVRELN ALSO CHECK RELOCATION FACTOR @VA14144 00670300
  848. BNE ERROR110 ... 00673000
  849. CLI VDEVTYPE,TYP2311 MIGHT THIS BE A PSEUDO-2311 ? 00674000
  850. BNE LINK10A NO - IT REALLY IS THE SAME DISK @VA14144 00675100
  851. IC R0,UDEVFTR FTR2311T,FTR2311B' BITS, IF ANY @VA14144 00675200
  852. N R0,=A(FTR2311T+FTR2311B) ... AND ONLY THOSE @VA14144 00675300
  853. BZ LINK10A IF 0 IT'S A REAL 2311 00678000
  854. N R0,VDEVFLAG-3 SAME DEVICE IF THE FLAGS MATCH 00679000
  855. BZ ERROR110 IF NO MATCH, A DIFFERENT DEVICE. 00680000
  856. DROP R8 00681000
  857. LINK10A OI LINKFLAG,DETOLD DETACH OLD LINK BEFORE SETTING NEW ONE 00682000
  858. * 00683000
  859. LINK11 DS 0H SEE IF A LINK IS FEASIBLE, AND IF SO WHAT KIND: 00684000
  860. STH R1,UDEVADD STORE LINK-TO DEVICE ADDRESS IN UDEVBLOK 00685000
  861. BAL R10,LINKSUB SUBROUTINE SETS UP R5 PER DECISION TABLE 00686000
  862. * R5 NOW 'INDEXES' THE DECISION-TABLE 00687000
  863. LA R0,3 SET TO OBTAIN 01, 02, OR 03 TO CHECK PSWD 00688000
  864. IC R1,0(,R5) PICK UP FLAG-BYTE 00689000
  865. NR R0,R1 ISOLATE THE 01, 02, OR 03 IN R0 00690000
  866. LR R1,R0 NUMBER ALSO IN R1, 00691000
  867. SLL R1,3 TIMES 8 PLEASE 00692000
  868. LA R1,UDEVPASR-8(R1) POINT R1 TO UDEVPASR, -PASW, OR -PASM. 00693000
  869. CLC =CL8'ALL',0(R1) IS THE PASSWORD ALL? @V60BBBB 00693200
  870. BNE LINK13 BR IF NOT @V60BBBB 00693400
  871. OI LINKFLAG,PASSALL INDICATE NOT TO BE JOURNALED @V60BBBB 00693600
  872. LINK13 DS 0H @V60BBBB 00693800
  873. TM LINKFLAG,JLNKPRV DO I HAVE LINK PRIVILEGE TO DISK ? 00694000
  874. BZ LINK16 TRF IF NOT - WE NEED THE PASSWORD. 00695000
  875. IC R15,LINKMODE GET USER ACCESS MODE FROM ORIG. UDEVBLOK 00696000
  876. SRL R15,2 0, 4, ... 24 BECOMES 0, 1, ... 6 00697000
  877. N R15,F7 NOW IT DOES, ANYWAY 00698000
  878. IC R15,BYTABLE(R15) NOW PICK UP PROPER BITS TO EXAMINE 00699000
  879. EX R15,XTMMODE DOES IT MATCH THE ACCESS MODE NEEDED ? 00700000
  880. BO LINK20 TRF IF YES - NO PASSWORD NEEDED. 00701000
  881. LINK16 TM LINKFLAG,LINKSUBR+JMYSELF MY DISK OR LINK SUBR @VA13015 00702100
  882. BNZ LINK20 YES- TREAT AS IF GOOD PW @VA13015 00703100
  883. TM VMFSTAT,VMFDLNKN LINK NO PASS OPTION IN DIRECT HRC011DK 00703400
  884. BO LINK20 YES, LINK OK HRC011DK 00703700
  885. CLI 0(R1),C' ' DOES OWNER ALLOW THIS CLASS LINK @VA13015 00704100
  886. BE NOPSWRD NO, THEN GIVE ERROR MSG @VA13015 00705100
  887. CLC =CL8'ALL',0(R1) IS THE PASSWORD = 'ALL' ? 00706000
  888. BE LINK20 TRF IF YES - DON'T GO GET ONE. 00707000
  889. TM LINKFLAG,JGOTPASS DID USER ALREADY ENTER THE PASSWORD? 00708000
  890. BZ LINK18 TRF IF NOT - GO GET IT. 00709000
  891. CLC SAVEWRK6(8),0(R1) DOES THE PASSWORD MATCH ? 00710000
  892. BE LINK20 TRF IF YES - GOOD SHOW. 00711000
  893. BAL R10,UNLOKSUB UNLOCK USERID(S), 00712000
  894. B ERR114 INVALID PASSWORD 00713100
  895. LINK18 LR R3,R1 SAVE R1 FOR PASSING TO DMKEPSWD 00717000
  896. BAL R10,UNLOKSUB UNLOCK USERID(S) BEFORE GETTING PASSWORD 00718000
  897. LR R1,R3 RESTORE R1 00719000
  898. A R0,F4 BUMP R0 BY 4 INDICATING TO @V60BBBB 00719250
  899. * DMKEPSWD THAT AN INVALID PASS- 00719500
  900. * WORD SHOULD BE RETURNED IN R0/R1. 00719750
  901. CALL DMKEPSWD OBTAIN AND CHECK LINK PASSWORD 00720000
  902. BNZ PASSWRNG IF WRONG, HE'S JUST OUT OF LUCK. 00721000
  903. EJECT 00722100
  904. ********************************************************************** 00722200
  905. * * 00722300
  906. * HERE MEANS THE PASSWORD WAS CORRECT (OR NOT NEEDED) * 00722400
  907. * * 00722500
  908. ********************************************************************** 00722600
  909. LINK20 EQU * @VA14144 00722700
  910. TM LINKFLAG,DETOLD OLD LINK TO GET RID OF FIRST ? 00725000
  911. BZ LINK21 NOPE - GO TO IT (USUAL CASE). 00726000
  912. L R1,SAVEWRK5 GET VIRTUAL DEVICE AGAIN, 00728000
  913. CALL DMKSCNVU FIND THE BLOCKS 00729000
  914. USING VDEVBLOK,R8 @VA04747 00730200
  915. CALL DMKCFPRD RESET OLD LINK @VA04747 00730400
  916. NI LINKFLAG,255-DETOLD TURN OFF SIGNAL @VA04747 00730600
  917. LH R0,UDEVNCYL GET LATEST MDISK EXTENT @VA04747 00730800
  918. STH R0,VDEVBND REFLECT SAME IN NEW VDEVBLOK @VA04747 00731000
  919. ********************************************************************** 00731005
  920. * TO GET CORRECT COUNT OF READ AND WRITE LINKS FROM DMKSCNLI * 00731006
  921. * (TO EXCLUDE OUR OWN LINK): TEMPORARILY CHANGE OUR VDEVREAL * 00731007
  922. * POINT TO ZEROES AND REMOVE OUR VDEVBLOK FROM THE CYCLIC * 00731008
  923. * LINKOF SHARED DEVICES. * 00731009
  924. ********************************************************************** 00731010
  925. MVC SAVEWRK7,VDEVREAL SAVE PTR TO VDEVREAL @VA13824 00731020
  926. MVC VDEVREAL(4),ZEROES DMKSCN WON'T INCLUDE US @VA13824 00731025
  927. LR R10,R8 SAVE OUR VDEVBLOK ADDR TO CHECK @VA14144 00731030
  928. VDEVLIST EQU * @VA13824 00731045
  929. LR R7,R8 SAVE LAST VDEVBLOK ADDR @VA13824 00731050
  930. L R8,VDEVLINK LOAD R8 WITH NEXT VDEVBLOK @VA13824 00731055
  931. C R10,VDEVLINK IS THE NEXT ONE US? @VA14144 00731060
  932. BNE VDEVLIST NO -- GET NEXT VDEVBLOK ADDR @VA14144 00731062
  933. EJECT 00731064
  934. ********************************************************************** 00731066
  935. * * 00731068
  936. * FIX POINTER TO EXCLUDE US FROM THE CYCLIC LIST * 00731070
  937. * * 00731072
  938. ********************************************************************** 00731074
  939. MVC VDEVLINK(4),VDEVLINK-VDEVBLOK(R10) @VA14144 00731076
  940. LR R2,R4 UDEVBLOK TO R2 FOR DMKSCNLI @VA13824 00731085
  941. LR R1,R9 POINTER TO RDEVBLOK IN R1 @VA13824 00731090
  942. CALL DMKSCNLI GET UPDATED EXISTING LINKS @VA13824 00731095
  943. ********************************************************************** 00731100
  944. * * 00731102
  945. * RETURN OUR BLOCK TO THE LIST * 00731104
  946. * * 00731106
  947. ********************************************************************** 00731108
  948. ST R10,VDEVLINK @VA14144 00731110
  949. LR R8,R10 HAVE R8 POINT TO US AGAIN @VA14144 00731112
  950. MVC VDEVREAL(4),SAVEWRK7 RESTORE OUR VDEVREAL @VA13824 00731115
  951. LR R6,R0 SAVE COUNT OF READ LINKS @VA13824 00731120
  952. LR R7,R1 AND COUNT OF WRITE LINKS @VA13824 00731125
  953. BZ NOLINKS IF CC=0, THEN NO LINKS @VA13824 00731130
  954. ST R3,SAVEWRK8 SAVE VMBLOK ADDR OF R/O USER @VA13824 00731135
  955. ********************************************************************** 00731145
  956. * * 00731150
  957. * R2 POINTS TO VDEVBLOK OF R/W (OR R/O) USER. * 00731155
  958. * SAVE HIS VMBLOK. * 00731160
  959. * * 00731165
  960. ********************************************************************** 00731170
  961. MVC SAVEWRK9(4),VDEVUSER-VDEVBLOK(R2) @VA14144 00731175
  962. NOLINKS EQU * @VA14144 00731180
  963. NI VDEVFLAG,255-VDEVRDO ASSUME R/W FOR NOW @VA04747 00731200
  964. TM 0(R5),SWT SHOULD WE SET TO WRITE ?? @VA04747 00732000
  965. BO LINK25 YES, GO INDICATE RESULTS @VA04747 00732200
  966. OI VDEVFLAG,VDEVRDO NO, SET READ ONLY MODE @VA04747 00732400
  967. B LINK25 LINK COMPLETE TRANSMIT RESPONSE @VA04747 00732600
  968. DROP R8 @VA04747 00732800
  969. EJECT 00732810
  970. LINK21 LR R1,R9 SET R1 = ADDRESS OF RDEVBLOCK @VA04747 00733100
  971. LR R3,R2 ADD OF VDEVBLOK FOR EXISTING LNK @VA14144 00733410
  972. LR R2,R4 R2 = ADDRESS OF UDEVBLOK 00736000
  973. MVI UDEVMODE,UDEVR TENTATIVELY SET MODE TO 'R' 00737000
  974. TM 0(R5),SWT DID HE WANT 'SET TO WRITE' ? 00738000
  975. BZ LINK24 IF NOT, 'R' IS CORRECT. 00739000
  976. MVI UDEVMODE,UDEVW SET TO 'W' IF THAT'S THE RIGHT SCOOP. 00740000
  977. LINK24 CALL DMKVDSLK ESTABLISH NEW LINK TO VIRTUAL DEVICE 00741000
  978. CH R2,=H'124' EXCEEDED MAX DEVICES? @VA13217 00741045
  979. BE ERR153 YES, SEND MSG 153 @VA13217 00741065
  980. LTR R2,R2 ENOUGH STORAGE TO PERFORM LINK? @V407466 00741100
  981. BNZ ERROR119 INSUFFICIENT STORAGE @V407466 00741200
  982. LINK25 BAL R10,UNLOKSUB UNLOCK USERIDS POST HASTE @VA04747 00742200
  983. TM 0(R5),NOL SUCCESSFUL LINK? @VA13284 00742210
  984. BO LINK25F NO, THEN SKIP LOURNALING @VA13284 00742240
  985. L R2,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @V60BBBB 00742350
  986. USING JPSCBLOK,R2 TELL ASSEMBLER @V60BBBB 00742500
  987. TM LINKJRL,L'LINKJRL SUCCESSFUL-LINK JOURNALING? @V60BBBB 00742650
  988. BZ LINK25F BR IF NOT @V60BBBB 00742800
  989. TM LINKFLAG,JMYSELF+PASSALL JOURNAL THIS LINK? @V60BBBB 00742950
  990. BNZ LINK25F BR IF NOT @V60BBBB 00743100
  991. LA R1,SAVEWRK2 POINT AT USERID FOR DMKJRLSL @V60BBBB 00743250
  992. LA R2,SAVEWRK4 POINT AT 'XXX' FOR DMKJRLSL @V60BBBB 00743400
  993. CALL DMKJRLSL JOURNAL SUCCESSFUL LINK @V60BBBB 00743550
  994. DROP R2 @V60BBBB 00743700
  995. LINK25F LH R15,2(,R5) NOW WHERE-TO-GO INTO R5 AND GO TO@V60BBBB 00743850
  996. B 0(R12,R15) LNKSC, LNKRO, LNKRW, ERROR101, @VA14144 00744100
  997. * ERROR102. 00744200
  998. EJECT 00744300
  999. ********************************************************************** 00744400
  1000. * * 00744500
  1001. * ENTRY POINTS BRANCHED TO VIA THE DECISION TABLES. * 00744600
  1002. * APPROPIATE LINKAGE IS ATTEMPTED AND RESPONSE IS ISSUED. * 00744700
  1003. * * 00744800
  1004. ********************************************************************** 00744900
  1005. LNKSC DS 0H SIMPLE CASE - SIMPLE MESSAGE: 00746000
  1006. LA R7,L'RESPON1 SET R7 = LENGTH OF SIMPLE MESSAGE 00747000
  1007. MVC 0(L'RESPON1,R4),RESPON1 SIMPLE MSG TO FREE STORAGE 00748000
  1008. B LINK30 FILL IN SIMPLE STUFF. 00749000
  1009. LNKRO DS 0H LINK GIVEN; OTHERS LINKED R/O: 00751000
  1010. LR R1,R6 NUMBER OF R/O USERS INTO R1 00752000
  1011. MVC 0(L'RESPON1+L'RESPON2,R4),RESPON1 MSG TO FREE STORAGE 00753000
  1012. B LINK26 CONTINUE BELOW. 00754000
  1013. LNKRW DS 0H LINK GIVEN; OTHERS LINKED R/W. 00756000
  1014. MVC 0(L'RESPON1+L'RESPON2,R4),RESPON1 MSG TO FREE STORAGE 00757000
  1015. MVI RESPON2A(R4),C'W' FILL IN 'W' WHERE NEEDED. 00758000
  1016. LR R1,R7 NO. OF OTHER R/W USERS INTO R1 00759000
  1017. LTR R6,R6 ANY OTHER R/O USERS ALSO ? 00760000
  1018. BNP LINK26 NOPE - NOT THIS TIME. 00761000
  1019. OI LINKFLAG,ADDROMSG IF YES, SIGNAL: ADD R/O MESSAGE 00762000
  1020. LINK26 LA R7,L'RESPON1+L'RESPON2 SET R7 = LENGTH OF WHOLE MSG 00764000
  1021. CL R1,F1 IS IT JUST ONE USER ? 00765000
  1022. BH LINK28 NOPE - MORE THAN ONE - PUT IN THE COUNT 00766000
  1023. L R14,SAVEWRK9 PUT THE USERID IN THE MESSAGE 00767000
  1024. MVC RESPON2B(8,R4),VMUSER-VMBLOK(R14) ... 00768000
  1025. MVI RESPON2C(R4),C' ' AND NEEDED BLANK 00769000
  1026. B LINK30 CONTINUE BELOW. 00770000
  1027. LINK28 CALL DMKCVTBD NNN TO DECIMAL, PLEASE, 00771000
  1028. STCM R1,7,RESPON2B(R4) STORE IN MESSAGE 00772000
  1029. LINK30 L R1,SAVEWRK5 GET DEVICE-ADDRESS LINKED AS 00774000
  1030. CALL DMKCVTBH TO HEX PLEASE 00775000
  1031. STCM R1,7,RESPON1A(R4) STORE IN MESSAGE 00776000
  1032. TM 0(R5),SWT WAS IT 'SET TO WRITE' ? 00777000
  1033. BZ LINK32 NOPE - WE'RE DONE. 00778000
  1034. MVI RESPON1B(R4),C'W' YES, FILL IN 'W' WHERE NEEDED. 00779000
  1035. LINK32 TM 0(R5),GMS MESSAGE WANTED REGARDLESS OF RETURN-CODE? 00781000
  1036. BO LINK33 TRF IF YES - GO TO IT. 00782000
  1037. TM VMOSTAT,VMVIRCF VIRTUAL CONSOLE-FUNCTION LINK ? 00783000
  1038. BO LINKEXIT IF YES, SKIP MSG FOR RETURN-CODE = 0. 00784000
  1039. TM LINKFLAG,LINKSUBR LINK SUBROUTINE ENTRY POINT INVOKED? 00785000
  1040. BO EXIT YES - EXIT FORTHWITH. 00786000
  1041. LINK33 LA R2,NORET SET 'NORET' OPTION FOR DMKQCNWT 00788000
  1042. * NOTE - LENGTH OF MSG IS IN R7 00789000
  1043. LINK34 DS 0H ADDRESS OF MESSAGE IS IN R4 00791000
  1044. LR R15,R7 COMPUTE END OF RESPONSE MESSAGE 00792000
  1045. ALR R15,R4 (ONE BEYOND THE LAST BYTE) 00793000
  1046. B LINK38 GO DELETE TRAILING BLANKS (IF ANY) 00794000
  1047. LINK36 BCTR R7,0 DECREMENT COUNT TO DELETE TRAILING BLANK 00795000
  1048. LINK38 BCTR R15,0 NOW LOOK AT "NEW" LAST-BYTE 00796000
  1049. CLI 0(R15),C' ' IS IT BLANK ? 00797000
  1050. BE LINK36 IF YES, DECREMENT COUNT. 00798000
  1051. TM LINKFLAG,ADDROMSG R/O BY NNN USERS TO BE ADDED TO MSG? 00799000
  1052. BZ LINK40 NOPE - NOT TODAY. 00800000
  1053. MVC 1(L'RESPON2,R15),RESPON2 SKELETON TO END OF MESSAGE 00801000
  1054. LA R3,10(,R15) WHERE TO PUT 'NNN' OR THE USERID 00802000
  1055. LA R7,L'RESPON2-1(,R7) ASSUME ONE USER 00803000
  1056. CL R6,F1 IS IT JUST ONE R/O USER ? 00804000
  1057. BH LINK39 NOPE - MORE THAN ONE - USE THE COUNT. 00805000
  1058. L R15,SAVEWRK8 REFERENCE VMBLOK ADDRESS OF THE ONE USER 00806000
  1059. MVC 0(8,R3),VMUSER-VMBLOK(R15) PUT IN THE 8-BYTE USERID 00807000
  1060. B LINK40 AND GO GIVE THE MESSAGE. 00808000
  1061. LINK39 LA R7,1(,R7) ONE MORE TO INCLUDE S IN 'USERS' 00809000
  1062. LR R1,R6 GET THE 'NNN' (STILL THERE IN R6) 00810000
  1063. CALL DMKCVTBD BINARY TO DECIMAL PLEASE 00811000
  1064. STCM R1,7,0(R3) STORE IN ADDED-ON MESSAGE 00812000
  1065. ********************************************************************** 00812100
  1066. * * 00812200
  1067. * OUTPUT THE MESSAGE INTERNALLY WITH A CALL TO DMKQCNWT * 00812300
  1068. * * 00812400
  1069. ********************************************************************** 00812500
  1070. LINK40 LR R0,R7 CORRECT COUNT INTO R0, 00813000
  1071. LR R1,R4 ADDRESS OF MESSAGE INTO R1 00814000
  1072. CALL DMKQCNWT TYPE RESPONSE OR ERROR MESSAGE TO USER 00815000
  1073. EJECT 00816100
  1074. ********************************************************************** 00816200
  1075. * * 00816300
  1076. * EXIT ROUTINE * 00816400
  1077. * * 00816500
  1078. ********************************************************************** 00816600
  1079. LINKEXIT TM LINKFLAG,LINKSUBR WAS LINK-SUBROUTINE ENTRY POINT USED ? 00817000
  1080. BO EXIT YES - EXIT FORTHWITH. 00818000
  1081. TM LINKFLAG,SSENT IS THIS AFTER AN MSS P.C.I. @VMI2004 00818300
  1082. BO EXIT YES, WE ARE RUNNING ASYNCH. @VMI2004 00818600
  1083. LA R0,UDBFSIZE+2 NO - RETURN THE FREE STORAGE USED FOR THE 00819000
  1084. LR R1,R4 USER DIRECTORY BLOCK 00820000
  1085. CALL DMKFRET AND USER DEVICE BLOCK 00821000
  1086. EXIT EQU * SEE IF MSS INVOLVED @V60B6B8 00821060
  1087. TM LINKFLAG,SSENT ENTRY FROM MSS MOUNT? @V60B6B8 00821120
  1088. BZ EXITGO NO, LINK COMPLETE @V60B6B8 00821180
  1089. L R3,SAVER0 MSSCOM BLOCK ADDR @V60B6B8 00821240
  1090. USING OSVSCOM,R3 ASSEMBLER ADDRESSABILITY @V60B6B8 00821300
  1091. L R1,MSSTASK3 IS THERE PENDING I/O @V60B6B8 00821360
  1092. LTR R1,R1 ...SCHEDULED BY DMKVSI OR DMKDGD @V60B6B8 00821420
  1093. BZ FREECOM NO @V60B6B8 00821480
  1094. CALL DMKSTKCP @V60B6B8 00821540
  1095. FREECOM EQU * FREE THE MSS COM BLOCK @V60B6B8 00821600
  1096. LA R0,MSSSIZE NO OF D-WORDS IN MSSCOM @V60B6B8 00821660
  1097. LR R1,R3 ADDR OF BLOCK @V60B6B8 00821720
  1098. CALL DMKFRET RETURN MEMORY TO SYSTEM @V60B6B8 00821780
  1099. LA R0,SAVESIZE+UDBFSIZE+2 LENGTH OF AREA FOR ASYNCH@VMI2004 00821840
  1100. L R1,SAVER1 ADDR OF AREA - SET AT DMKLNKSS @VMI2004 00821900
  1101. CALL DMKFRET RETURN MEMORY TO SYSTEM @VMI2004 00821960
  1102. DROP R3,R4 @VA14144 00822020
  1103. EXITGO EXIT AND REALLY EXIT. @V60B6B8 00822080
  1104. EJECT 00823000
  1105. ********************************************************************** 00823100
  1106. * * 00823200
  1107. * INTERNAL SUBROUTINES * 00823300
  1108. * * 00823400
  1109. ********************************************************************** 00823500
  1110. * LINKSUB- * 00823600
  1111. * INTERNAL SUBROUTINE TO ASCERTAIN IF A LINK IS FEASIBLE * 00823700
  1112. * (AND IF SO, WHAT KIND) * 00823800
  1113. * * 00823900
  1114. * R10 = RETURN REGISTER * 00824000
  1115. * INDEXER TO DECISION-TABLE IS IN R5 AT EXIT. * 00824100
  1116. ********************************************************************** 00824200
  1117. LINKSUB LA R1,SAVEWRK2 POINT TO USERID, 00838000
  1118. CALL DMKLOCK LOCK HIM WHILE WE'RE DOING INTERNAL CODE 00839000
  1119. BNZ ERROR116 ERROR IF HE'S ALREADY LOCKED. 00840000
  1120. TM LINKFLAG,JMYSELF AM I LINKING TO ONE OF MY DISKS ? 00841000
  1121. BO LINKSUB1 TRF IF YES. 00842000
  1122. LA R1,VMUSER IF NOT, LOCK MYSELF ALSO 00843000
  1123. CALL DMKLOCK 00844000
  1124. BNZ ERR116UL UH-OH IF SOMEBODY ELSE HAS ME @VA14144 00845100
  1125. * LOCKED. 00845200
  1126. LINKSUB1 EQU * NOW DETERMINE WHAT LINK(S) THERE ARE: 00846000
  1127. LR R2,R4 UDEVBLOK TO R2 FOR 'DMKSCNLI' 00847000
  1128. LR R1,R9 POINTER TO RDEVBLOK INTO R1, 00848000
  1129. CALL DMKSCNLI FIND OUT IF THERE ARE ANY EXISTING LINKS 00849000
  1130. LR R6,R0 REMEMBER COUNT OF READ LINK(S) - IF ANY 00850000
  1131. LR R7,R1 AND NUMBER OF WRITE LINK(S) IN R7 00851000
  1132. BZ LINK12A CC 0 = NO LINKS (GOOD SHOW). 00852000
  1133. ST R3,SAVEWRK8 REMEMBER VMBLOK ADDR OF POSSIBLE R/O USER 00853000
  1134. USING VDEVBLOK,R2 (R2 POINTS TO VDEVBLOK OF SOME USER) 00854000
  1135. MVC SAVEWRK9(4),VDEVUSER REMEMBER VMBLOK ADDR FOR LATER USE 00855000
  1136. DROP R2 (NOTE - CC FROM DMKSCNLI STILL INTACT) 00856000
  1137. LA R5,TBLREAD SET R5 IN CASE THERE ARE READ LINK(S) 00857000
  1138. BC 4,LINK12D CC 1 = THERE ARE READ LINK(S). 00858000
  1139. LA R5,TBLWRITE MUST BE WRITE-LINK(S) THEN. 00859000
  1140. LINK12D TM LINKFLAG,DETOLD ANY OLD LINK OF OURS IN THERE? 00860000
  1141. BZ LINK12 TRF IF NOT - R5 AND COUNTS ARE CORRECT. 00861000
  1142. ********************************************************************** 00862100
  1143. * * 00862200
  1144. * THE DEVICE WE WANT TO LINK-TO IS ALREADY LINKED TO BY 'MYSELF' * 00862300
  1145. * RECOMPUTE SITUATION BASED ON THE OLD LINK BEING REMOVED: * 00862400
  1146. * * 00862500
  1147. ********************************************************************** 00862600
  1148. USING VDEVBLOK,R8 00864000
  1149. TM VDEVFLAG,VDEVRDO DO WE HAVE A READ OR WRITE-LINK NOW? 00865000
  1150. DROP R8 00866000
  1151. BO LINK12C IT'S A READ-LINK. 00867000
  1152. BCTR R1,0 IF WRITE, DECREMENT COUNT OF WRITE-LINKS 00868000
  1153. B LINK12B AND CHECK WHAT LINKS WE WOULD HAVE 00869000
  1154. LINK12C BCTR R0,0 IF READ, DECREMENT COUNT OF READ LINKS 00870000
  1155. LINK12B LA R5,TBLWRITE ASSUME SOME WRITE LINK(S) 00871000
  1156. LTR R1,R1 WOULD THERE BE ANY WITH MY OLD ONE GONE ? 00872000
  1157. BP LINK12 YES. 00873000
  1158. LA R5,TBLREAD ASSUME ONLY READ LINK(S), THEN: 00874000
  1159. LTR R0,R0 WOULD THERE BE ANY WITH MY OLD ONE GONE ? 00875000
  1160. BP LINK12 YES. 00876000
  1161. LINK12A LA R5,TBLNONE GOOD SHOW IF NO LINKS TO WORRY ABOUT. 00877000
  1162. LINK12 AH R5,LINKHALF ADD ADJUSTER (0, 4, ETC.) TO R5 00878000
  1163. TM 0(R5),NOL MAYBE NO LINK IS POSSIBLE ? 00879000
  1164. BCR 8,R10 NOPE - LINK LOOKS FEASIBLE - EXIT. 00880000
  1165. B LINK25 OR UNLOCK USERID & GOTO INDEXED ERR. CODE 00881000
  1166. EJECT 00882100
  1167. ********************************************************************** 00882200
  1168. * * 00882300
  1169. * UNLOKSUB - * 00882400
  1170. * INTERNAL SUBROUTINE TO UNLOCK USERID(S): * 00882500
  1171. * R10 = RETURN REGISTER * 00882600
  1172. * * 00882700
  1173. ********************************************************************** 00882800
  1174. UNLOKSUB TM LINKFLAG,JMYSELF WAS I LINKING TO ONE OF MY DISKS ? 00886000
  1175. BO UNLOKUSR YES - UNLOCK USERID = MYSELF. 00887000
  1176. LA R1,VMUSER NO, UNLOCK MYSELF FIRST 00888000
  1177. CALL DMKLOCKD AND THEN: 00889000
  1178. UNLOKUSR LA R1,SAVEWRK2 UNLOCK THE USERID 00891000
  1179. CALL DMKLOCKD 00892000
  1180. BR R10 AND RETURN TO CALLER. 00893000
  1181. ********************************************************************** 00894100
  1182. * * 00894200
  1183. * LINKDEF - * 00894300
  1184. * INTERNAL SUBROUTINE TO SET DEFAULT-LINK MODE * 00894400
  1185. * R10 = RETURN-REGISTER * 00894500
  1186. * * 00894600
  1187. ********************************************************************** 00894700
  1188. LINKDEF SLR R15,R15 SET R15=0 FOR DEFAULT-MODE OF 'R' 00898000
  1189. TM LINKFLAG,JMYSELF IS IT ME ? 00899000
  1190. BZ LINKDEF1 IF NOT, USE DEFAULT-MODE OF 'R ' 00900000
  1191. USING UDEVBLOK,R4 @VA14144 00900100
  1192. IC R15,UDEVMODE YES, PICK UP BYTE CONTAINING LINK-MODE 00901000
  1193. LA R3,LOW5BITS SET TO ISOLATE THE LOW-ORDER 5 @VA14144 00902200
  1194. * BITS 00902300
  1195. NR R15,R3 GET THE LINK-MODE (0, 4, 8, ETC.) 00903000
  1196. LINKDEF1 STH R15,LINKHALF STORE LINK-MODE INDEXER WHERE NEEDED 00904000
  1197. BR R10 AND EXIT. 00905000
  1198. EJECT 00906100
  1199. ********************************************************************** 00906200
  1200. * * 00906300
  1201. * ERROR RETURNS: ALL ERROR MESSAGES ARE NOW ISSUED * 00906400
  1202. * BY A CALL TO DMKERMSG. ALL ERROR ENTRY POINTS FOLLOW * 00906500
  1203. * HERE AND ALL EVENTUALLY GO TO 'CALERMSG' WHERE THE CALL * 00906600
  1204. * TO ERMSG IS MADE. A PARAMETER LIST OF VARIBLES TO BE * 00906700
  1205. * INSERTED INTO THE MESSAGE IS BUILT, IF REQUIRED, IN * 00906800
  1206. * TEMPORARY SPACE (EXCEPT WHEN ONLY 1 PARAMETER). * 00906900
  1207. * * 00907000
  1208. ********************************************************************** 00907100
  1209. ERROR20 LA R2,EMSG20 USERID MISSING OR INVALID @VA14144 00930100
  1210. B ERRNODAT NO DATA FOR ERR MESSAGE HANDLER @VA14144 00930200
  1211. ERROR22 LA R2,EMSG22 VADDR MISSING OR INVALID @VA14144 00930300
  1212. B ERRNODAT NO DATA FOR ERR MESSAGE HANDLER @VA14144 00930400
  1213. ERROR52 LA R2,EMSG52 ERROR IN CP DIRCTORY @VA14144 00930500
  1214. ERRNODAT SLR R1,R1 R1 = 0 MEANS NO DATA FOR ERMSG @VA14144 00930600
  1215. B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00930700
  1216. ERR153 DS 0H @VA13217 00930705
  1217. BAL R10,UNLOKSUB UNLOCK BOTH USER-IDS @VA13217 00930710
  1218. LA R2,EMSG153 MSG NUMBER @VA13217 00930715
  1219. LH R1,UDEVADD VIRTUAL DEVICE ADDRESS @VA13217 00930720
  1220. CALL DMKCVTBH CONVERT TO CHARS IN R1 @VA13217 00930725
  1221. SR R0,R0 LOW ORDER R0=0: DATA IN R1 @VA13217 00930730
  1222. ICM R0,B'1110',DMKLNK+3 MODULE ID IN HIGH ORDER @VA13217 00930735
  1223. ICM R1,B'1000',=X'40' HI-OR BLANK DEV ADDRESS @VA13217 00930740
  1224. ST R2,SAVER2 PASS RETURN CODE TO CALLER @VA13217 00930745
  1225. ICM R2,B'1000',HIGHX80 TELL DMKERM TO RETURN HERE @VA13217 00930750
  1226. CALL DMKERMSG SEND MSG AND COME BACK @VA13217 00930755
  1227. B LINKEXIT CLEANUP @VA13217 00930760
  1228. DROP R4 00930765
  1229. ERROR53 LA R2,EMSG53 USERID NOT IN CP DIRECTORY @VA14144 00930800
  1230. * (R0 AND R1 SET UP FROM DMKSCNFD) 00930900
  1231. B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00931000
  1232. ERROR101 LA R2,EMSG101 DASD FORCED R/O; R/O BY OTHERS @VA14144 00931100
  1233. MVC SAVEWRK4,SAVEWRK5 LINK-AS; NOT LINK-TO @VA14144 00931200
  1234. ST R6,SAVEWRK6 SAVE COUNT OF OTHER R/O USERS @VA14144 00931300
  1235. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00931400
  1236. ERROR102 LA R2,EMSG102 DASD FORCED R/O; R/W BY OTHERS @VA14144 00931500
  1237. MVC SAVEWRK4,SAVEWRK5 LINK-AS; NOT LINK-TO @VA14144 00931600
  1238. B GETPARM1 GET PARMS FOR DMKERMSG (SPECIAL) @VA14144 00931700
  1239. ERROR104 LA R2,EMSG104 XXX YYY NOT LINKED; R/O BY OTHER @VA14144 00931800
  1240. ST R6,SAVEWRK6 SAVE COUNT OF OTHER R/O USERS @VA14144 00931900
  1241. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00932000
  1242. ERROR105 LA R2,EMSG105 XXX YYY NOT LINKED; R/W BY OTHER @VA14144 00932100
  1243. B GETPARM1 GET PARMS FOR DMKERMSG (SPECIAL) @VA14144 00932200
  1244. ERROR107 CALL DMKUDRRV LET DMKUDR RELEASE HIS PAGES @VA14144 00932300
  1245. LA R2,EMSG107 XXX YYY NOT LINKED; NOT IN DIR @VA14144 00932400
  1246. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00932500
  1247. EJECT 00932600
  1248. ERROR108 LA R2,EMSG108 XXX YYY NOT LNKED; VOL NOT MNTED @VA14144 00932700
  1249. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00932800
  1250. ********************************************************************** 00932900
  1251. * * 00933000
  1252. * ERRORS 108 AND 117 REQUIRE A VOLUME ID AS A PARM. * 00933100
  1253. * AFTER THE USERID AND VADDR ARE PROCURED, THIS SMALL * 00933200
  1254. * ROUTINE LOADS THE VOLID. * 00933300
  1255. * * 00933400
  1256. ********************************************************************** 00933500
  1257. USING UDEVBLOK,R4 @VA14144 00933600
  1258. GETVOLID MVC 0(6,R6),UDEVVSER MOVE IN THE DISK LABEL @VA14144 00933700
  1259. DROP R4 @VA14144 00933800
  1260. LA R6,6(R6) ADVANCE THE POINTER @VA14144 00933900
  1261. B CALERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00934000
  1262. ERROR109 LA R2,EMSG109 XXX YYY NOT LINKED; BAD LINK DEV @VA14144 00934100
  1263. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00934200
  1264. ERROR110 LA R2,EMSG110 XXX YYY NOT LINKED; DEV DEFINED @VA14144 00934300
  1265. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00934400
  1266. ********************************************************************** 00934500
  1267. * * 00934600
  1268. * ERROR 110 REQUIRES A DEVICE MNEMONIC AND VADDR AS WELL * 00934700
  1269. * AS THE USERID AND VADDR. THIS CODE GETS THEM. * 00934800
  1270. * * 00934900
  1271. ********************************************************************** 00935000
  1272. PARMS110 CALL DMKSCNVN GET THE DEVICE MNEMONIC @VA14144 00935100
  1273. ST R1,0(R6) MOVE THE DEVICE INTO PARM LIST @VA14144 00935200
  1274. TM 3(R6),SPACE IS IT A 3 CHAR DEVICE NAME? @VA14144 00935300
  1275. BO PARM110A NO @VA14144 00935400
  1276. MVI 3(R6),BIN00 KILL THAT LAST SPACE @VA14144 00935500
  1277. PARM110A MVI 4(R6),BIN00 DELIMIT WITH ZERO @VA14144 00935600
  1278. L R1,SAVEWRK5 LOAD THE DEVICE NAME @VA14144 00935700
  1279. CALL DMKCVTBH CONVERT TO HEX PLEASE @VA14144 00935800
  1280. STCM R1,B'0111',5(R6) MOVE IT INTO THE PARM LIST @VA14144 00935900
  1281. LA R6,8(R6) ADVANCE THE POINTER @VA14144 00936000
  1282. B CALERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00936100
  1283. EJECT 00936200
  1284. ********************************************************************** 00936300
  1285. * * 00936400
  1286. * ERRORS 111, 112, AND 113 ARE PASSWORD ERRORS. DEPENDING * 00936500
  1287. * ON THE ACCESS DESIRED, THE APPROPIATE MESSAGE IS CODED. * 00936600
  1288. * * 00936700
  1289. ********************************************************************** 00936800
  1290. NOPSWRD EQU * NO PASS THERE FOR MODE DESIRED @VA14144 00936900
  1291. BAL R10,UNLOKSUB UNLOCK USERID(S) RIGHT NOW @VA14144 00937000
  1292. CL R0,F2 WHAT PSWD WOULD IT HAVE BEEN? @VA14144 00937100
  1293. LA R2,EMSG111 NO READ PASSWORD ? @VA14144 00937200
  1294. BL GETPARM2 CORRECT IF R0 < 2. @VA14144 00937300
  1295. LA R2,EMSG112 NO WRITE PASSWORD ? @VA14144 00937400
  1296. BE GETPARM2 CORRECT IF R0 = 2 @VA14144 00937500
  1297. LA R2,EMSG113 NO MULT PASSWORD IF R0 > 2 @VA14144 00937600
  1298. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00937700
  1299. ********************************************************************** 00937800
  1300. * * 00937900
  1301. * ERRORS 114 AND 115 RESULT FROM AN INCORRECT OR AN * 00938000
  1302. * EXCESSIVE NUMBER OF INCORRECT PASSWORDS. * 00938100
  1303. * * 00938200
  1304. ********************************************************************** 00938300
  1305. PASSWRNG BNO ERROR114 BEWARE OF DMKEPSWD COND-CODE 3 @VA14144 00938400
  1306. L R1,SAVERETN RETURN-ADDRESS + 8 FOR DMKCFM @VA14144 00938500
  1307. LA R1,8(,R1) THIS GUY ALREADY LOGGED OFF @VA14144 00938600
  1308. ST R1,SAVERETN DUE TO TERMINAL TURNED OFF. @VA14144 00938700
  1309. ST R11,SAVER11 BE SURE TO RETURN CORRECT R11 @VA14144 00938800
  1310. B LINKEXIT AND GO EXIT. @VA14144 00938900
  1311. ERROR114 STM R0,R1,SAVEWRK6 SAVE INVALID PASSWORD @VA14144 00939000
  1312. ERR114 EQU * 00939050
  1313. SLR R14,R14 CLEAR REG @VA14144 00939100
  1314. IC R14,VMPSWDCT PICK UP INVALID PASSWORD COUNT @VA14144 00939200
  1315. LA R15,LNKLIMIT GET THE LIMIT @VA14144 00939300
  1316. CR R14,R15 HAVE WE EXCEEDED? @VA14144 00939400
  1317. BNL ERROR115 TOO BAD... @VA14144 00939500
  1318. LA R14,1(,R14) INCREMENT BY 1 @VA14144 00939600
  1319. STC R14,VMPSWDCT STORE IT BACK @VA14144 00939700
  1320. LA R2,EMSG114 XXX YYY NOT LINKED; PSWD WRONG @VA14144 00939800
  1321. L R6,=A(DMKSYSJR) GET ADDRESS OF JPSCBLOK @VA14144 00939900
  1322. USING JPSCBLOK,R6 @VA14144 00940000
  1323. TM LINKJRL,L'LINKJRLI INVALID-LINK JOURNALING ON? @VA14144 00940100
  1324. DROP R6 @VA14144 00940200
  1325. BZ GETPARM2 @VA14144 00940300
  1326. ********************************************************************** 00940400
  1327. * * 00940500
  1328. * SET UP REGISTERS FOR CALL TO DMKJRLIL * 00940600
  1329. * * 00940700
  1330. ********************************************************************** 00940800
  1331. LA R1,SAVEWRK2 POINT AT LINKEE'S USERID @VA14144 00940900
  1332. LA R2,SAVEWRK4 LINKEE'S MINI-DISK ADDRESS @VA14144 00941000
  1333. LA R6,SAVEWRK6 POINT AT INVALID PASSWORD @VA14144 00941100
  1334. CALL DMKJRLIL JOURNAL THE INVALID PASSWORD @VA14144 00941200
  1335. LA R2,EMSG114 XXX YYY NOT LINKED; PSWD WRONG @VA14144 00941300
  1336. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00941400
  1337. ERROR115 LA R2,EMSG115 EXCESSIVE INCORRECT PASSWORDS @VA14144 00941500
  1338. LA R0,4 LENGTH OF THE WORD 'LINK' @VA14144 00941600
  1339. LA R1,VMCOMND ADDRESS OF THE COMMAND @VA14144 00941700
  1340. B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 00941800
  1341. EJECT 00941900
  1342. ERR116UL BAL R10,UNLOKUSR UNLOCK OTHER LOCK ON USER @VA14144 00942000
  1343. ERROR116 LA R2,EMSG116 XXX YYY NOT LINKED; DIR IN USE @VA14144 00942100
  1344. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00942200
  1345. ERROR117 LA R2,EMSG117 XXX YYY NOT LINKED; VOL CONFLICT @VA14144 00942300
  1346. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00942400
  1347. ERROR118 LA R2,EMSG118 XXX YYY NOT LINKED; CMD FMT BAD @VA14144 00942500
  1348. B GETPARM2 GET PARMS FOR DMKERMSG @VA14144 00942600
  1349. ERROR119 BAL R10,UNLOKSUB UNLOCK BOTH USERIDS @VA14144 00942700
  1350. LA R2,EMSG119 INSUFFICIENT STORAGE @VA14144 00942800
  1351. JUSTVADD LA R0,EMSGBFSZ SPACE FOR ERMSG BUFFER @VA14144 00942900
  1352. CALL DMKFREE SPACE TO BUILD ERROR MESSAGE @VA14144 00943000
  1353. ST R1,SAVER2 SAVE BUFFER POINTER @VA14144 00943100
  1354. LR R6,R1 SET UP R6 FOR PARAM LIST BUILD @VA14144 00943200
  1355. B GETVADDR JOIN REGULAR PARAM BUILD ROUTINE @VA14144 00943300
  1356. AIF (NOT &DEDCH).NOTDED2 01006000
  1357. ERROR137 LA R2,EMSG137 LINK TO DEDICATED CHANNEL BAD @VA14144 01007100
  1358. MVC SAVEWRK4,SAVEWRK5 LINK-AS; NOT LINK-TO @VA14144 01007200
  1359. B JUSTVADD GET THE VADDR IN MESSAGE BUFFER @VA14144 01007300
  1360. ********************************************************************** 01007400
  1361. * * 01007500
  1362. * THIS IS THE SECOND PART OF ERROR137; GET THE CHANNEL * 01007600
  1363. * * 01007700
  1364. ********************************************************************** 01007800
  1365. GETCHAN SLR R0,R0 ZERO R0 @VA14144 01007900
  1366. ST R0,SAVEWRK8 CLEAR OUT CHANNEL NUMBER FIELD 01013000
  1367. L R1,SAVEWRK5 GET (YYY) DEVICE ADDRESS 01014000
  1368. SRL R1,8 SAVE ONLY CHANNEL NUMBER 01015000
  1369. CALL DMKCVTBD CONVERT IT TO DECIMAL 01016000
  1370. STH R1,0(R6) SAVE IT. @VA14144 01017100
  1371. TM 0(R6),X'0F' IS CHANNEL NUMBER > 9? @VA14144 01017200
  1372. BNZ *+8 YES - LEAVE IT ALONE 01019000
  1373. MVI 0(R6),BIN00 NO - PRINT ONLY THE 1 CHARACTER @VA14144 01020100
  1374. LA R6,2(R6) ADD LENGTH OF CHANNEL NUMBER @VA14144 01020200
  1375. B CALERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 01020300
  1376. SPACE 01025000
  1377. .NOTDED2 ANOP 01026000
  1378. EJECT 01027100
  1379. ERROR281 LA R2,EMSG281 VOL NOT LINKED; DEMNT IN PROCESS @VA14144 01027200
  1380. ICM R2,B'0100',INFOMSG INDICATE INFO MESSAGE @VA14144 01027300
  1381. LA R0,6 LENGTH OF A VOL ID @VA14144 01027400
  1382. USING UDEVBLOK,R9 @VA14144 01027500
  1383. LA R6,UDEVVSER GET ADDRESS OF VOL ID @VA14144 01027600
  1384. DROP R9 @VA14144 01027700
  1385. B CERMSG GO CALL ERROR MESSAGE HANDLER @VA14144 01027800
  1386. EJECT 01027900
  1387. ********************************************************************** 01028000
  1388. * * 01028100
  1389. * THE FOLLOWING CODE BUILDS THE ERROR MESSAGE PARM LIST. * 01028200
  1390. * FIRST THE BASIC USERID AND VADDR PARMS ARE FETCHED, IF * 01028300
  1391. * REQUIRED. THEN COMPARISONS ARE MADE TO SEE IF ANY * 01028400
  1392. * OTHERS ARE NEEDED. IF SO, BRANCH TO THE CODE TO GET THEM. * 01028500
  1393. * * 01028600
  1394. ********************************************************************** 01028700
  1395. GETPARM1 ST R7,SAVEWRK6 SAVE COUNT OF R/W USERS @VA14144 01028800
  1396. ST R6,SAVEWRK7 SAVE COUNT OF R/O USERS @VA14144 01028900
  1397. L R7,SAVEWRK9 R/W USER VMBLOK @VA14144 01029000
  1398. LTR R6,R6 ANY R/O USERS? @VA14144 01029100
  1399. BNP GETPARM3 NO--REGULAR ERROR 102 OR 105 @VA14144 01029200
  1400. LA R2,1(R2) BUMP TO ERMSG106 OR 7 @VA14144 01029300
  1401. OI LINKFLAG,ADDROMSG REMEMBER TO ADD R/O MESSAGE @VA14144 01029400
  1402. B GETPARM3 R7 ALREADY HAS VMBLOK @VA14144 01029500
  1403. GETPARM2 L R7,SAVEWRK8 R/O USER VMBLOK @VA14144 01029600
  1404. GETPARM3 LA R0,EMSGBFSZ SPACE FOR ERMSG BUFFER @VA14144 01029700
  1405. CALL DMKFREE SPACE TO BUILD ERROR MESSAGE @VA14144 01029800
  1406. ST R1,SAVER2 SAVE POINTER FOR LATER FRET @VA14144 01029900
  1407. LR R6,R1 R6 IS BUFFER WORK POINTER @VA14144 01030000
  1408. LA R0,EMSG104 DO NOT GET USERID FOR 101-3 @VA14144 01030100
  1409. CR R2,R0 COMPARE -- LESS THEN 104? @VA14144 01030200
  1410. BL GETVADDR SKIP USERID FETCH @VA14144 01030300
  1411. MVC 0(8,R6),SAVEWRK2 MOVE IN USERID @VA14144 01030400
  1412. CKIDLOOP CLI 7(R6),SPACE THIS QUICK LOOP BACKS UP @VA14144 01030500
  1413. * OVER BLANKS IN THE USERID 01030600
  1414. BNE CKIDDONE NOT A BLANK @VA14144 01030700
  1415. BCT R6,CKIDLOOP DECREMENT BUF PTR AND LOOP @VA14144 01030800
  1416. CKIDDONE MVI 8(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01030900
  1417. LA R6,9(R6) ADVANCE THE POINTER PAST ID @VA14144 01031000
  1418. GETVADDR L R1,SAVEWRK4 LOAD LINK-AS DEVICE ADDR @VA14144 01031100
  1419. CALL DMKCVTBH CONVERT TO HEX PLEASE @VA14144 01031200
  1420. STCM R1,B'0111',0(R6) PUT ADDR IN PARM LIST @VA14144 01031300
  1421. MVI 3(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01031400
  1422. LA R6,4(R6) ADVANCE THE POINTER @VA14144 01031500
  1423. GETUSER1 LA R0,EMSG106 LESS THAN 106 ARE SPECIAL @VA14144 01031600
  1424. CR R2,R0 COMPARE -- GREATER THAN 106? @VA14144 01031700
  1425. BH GETPARMS SKIP THE 'USERS' MESSAGE(S) @VA14144 01031800
  1426. LA R0,EMSG103 MESSAGES 101-3 ARE WARNINGS @VA14144 01031900
  1427. CR R2,R0 COMPARE -- GREATER THAN 103? @VA14144 01032000
  1428. BH SKIPWARN MUST BE 104-6 @VA14144 01032100
  1429. ICM R2,B'0100',WARNING INDICATE WARNING MESSAGE @VA14144 01032200
  1430. SKIPWARN L R1,SAVEWRK6 GET COUNT OF FIRST MSG USERS @VA14144 01032300
  1431. GETUSER2 CL R1,F1 SEE IF ONLY ONE @VA14144 01032400
  1432. BH GETUSER3 YES -- GENERAL MESSAGE @VA14144 01032500
  1433. MVC 0(8,R6),VMUSER-VMBLOK(R7) MOVE IN USERID @VA14144 01032600
  1434. CKIDLOP2 CLI 7(R6),SPACE THIS QUICK LOOP BACKS UP @VA14144 01032700
  1435. * OVER BLANKS IN THE USERID 01032800
  1436. BNE CKIDDON2 NOT A BLANK @VA14144 01032900
  1437. BCT R6,CKIDLOP2 DECREMENT BUF PTR AND LOOP @VA14144 01033000
  1438. CKIDDON2 MVI 8(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01033100
  1439. LA R6,9(R6) ADVANCE THE POINTER @VA14144 01033200
  1440. B GETUSER4 @VA14144 01033300
  1441. GETUSER3 CALL DMKCVTBD CONVERT TO DECIMAL PLEASE @VA14144 01033400
  1442. STCM R1,B'0111',0(R6) PUT ADD IN PARM LIST @VA14144 01033500
  1443. MVC 3(6,R6),=C' USERS' MOVE IN THE WORD USERS @VA14144 01033600
  1444. MVI 9(R6),BIN00 DELIMIT WITH BINARY ZEROES @VA14144 01033700
  1445. LA R6,10(R6) ADVANCE THE POINTER @VA14144 01033800
  1446. GETUSER4 TM LINKFLAG,ADDROMSG EXTRA MESSAGE (103 AND 106) @VA14144 01033900
  1447. BZ GETPARMS NOT THIS TIME @VA14144 01034000
  1448. XI LINKFLAG,ADDROMSG TURN OFF FLAG SO NO REPEAT @VA14144 01034100
  1449. L R1,SAVEWRK7 GET THE SECOND (R/O) COUNT @VA14144 01034200
  1450. L R7,SAVEWRK8 R/O USER VMBLOK @VA14144 01034300
  1451. B GETUSER2 REPEAT WITH THE SECOND COUNT @VA14144 01034400
  1452. GETPARMS LA R0,EMSG110 SPECIAL -- DEVICE TYPE AND ADDR @VA14144 01034500
  1453. CR R2,R0 CHECK IF THIS CASE @VA14144 01034600
  1454. BE PARMS110 GO DO IT @VA14144 01034700
  1455. LA R0,EMSG108 SPECIAL -- VOLUME ID NEEDED @VA14144 01034800
  1456. CR R2,R0 CHECK IF THIS CASE @VA14144 01034900
  1457. BE GETVOLID GO DO IT @VA14144 01035000
  1458. LA R0,EMSG117 SPECIAL -- VOLUME ID NEEDED @VA14144 01035100
  1459. CR R2,R0 CHECK IF THIS CASE @VA14144 01035200
  1460. BE GETVOLID GO DO IT @VA14144 01035300
  1461. AIF (NOT &DEDCH).NOTDED3 @VA14144 01035400
  1462. LA R0,EMSG137 SPECIAL -- DEVICE CHANNEL NEEDED @VA14144 01035500
  1463. CR R2,R0 CHECK IF THIS CASE @VA14144 01035600
  1464. BE GETCHAN GO DO IT @VA14144 01035700
  1465. .NOTDED3 ANOP 01035800
  1466. B CALERMSG GO CALL ERROR MSG HANDLER @VA14144 01035900
  1467. EJECT 01036000
  1468. ********************************************************************** 01036100
  1469. * * 01036200
  1470. * THE PARM LISTS ARE BUILT -- CALL DMKERMSG. * 01036300
  1471. * SAVER2 HAS THE ADDRESS OF THE BEGINNING OF THE BUFFER. * 01036400
  1472. * R6 HAS THE END POINTER AND R2 CONTAINS THE ERROR CODE. * 01036500
  1473. * * 01036600
  1474. ********************************************************************** 01036700
  1475. CERMSG XC SAVER2,SAVER2 REMEMBER NO SPACE TO FRET @VA14144 01036800
  1476. B CERMSG2 R0 AND R1 ALREADY SET UP @VA14144 01036900
  1477. CALERMSG LR R0,R6 GET THE CURRENT POINTER @VA14144 01037000
  1478. L R1,SAVER2 GET START OF BUFFER @VA14144 01037100
  1479. SR R0,R1 CALCULATE LENGTH OF MESSAGE @VA14144 01037200
  1480. CERMSG2 ICM R0,B'1110',DMKLNK+3 'LNK' INTO R0 HIGH 3 BYTES @VA14144 01037300
  1481. ICM R2,B'1000',HIGHX80 SET R2 TO RETURN BACK @VA14144 01037400
  1482. CALL DMKERMSG LET ERR MSG HANDLER DO THE WORK @VA14144 01037500
  1483. L R1,SAVER2 GET ADDR OF BUFFER -- IF ANY @VA14144 01037600
  1484. XC SAVER2(2),SAVER2 CLEAR OUT FOR RETURN CODE @VA14144 01037700
  1485. STH R2,SAVER2+2 RETURN THE ERROR CODE @VA14144 01037800
  1486. LTR R1,R1 ANY SPACE TO FRET @VA14144 01037900
  1487. BZ LINKEXIT NO -- GO FINISH UP @VA14144 01038000
  1488. LA R0,EMSGBFSZ FRET THE BUFFER SPACE @VA14144 01038100
  1489. CALL DMKFRET FREE THE SPACE AGAIN @VA14144 01038200
  1490. B LINKEXIT NOW GO FINISH UP @VA14144 01038300
  1491. EJECT 01038400
  1492. ********************************************************************** 01038500
  1493. * * 01038600
  1494. * TABLES, ERROR MESSAGES, EXECUTED INSTRUCTIONS, AND CONSTANTS * 01038700
  1495. * * 01038800
  1496. ********************************************************************** 01038900
  1497. CLTO DC CL2'TO' OPTIONAL 'TO' @VA14144 01039000
  1498. CLAS DC CL2'AS' OPTIONAL 'AS' @VA14144 01039100
  1499. RC50 DC X'50' @VA14144 01039200
  1500. HIGHX80 DC X'80' SIGNAL DMKERMSG TO RETURN @VA14144 01039300
  1501. WARNING DC C'W' INDICATES WARNING MSG TO ERMSG @VA14144 01039400
  1502. INFOMSG DC C'I' INDICATES INFO MSG TO ERMSG @VA14144 01039500
  1503. RC32 EQU 32 RETURN CODE OF 32 FROM DMKVDSLK @VA14144 01039600
  1504. BIN00 EQU X'00' DELIMITER FOR ERROR PARMS @VA14144 01039700
  1505. LOW5BITS EQU 31 ISOLATE 5 LOW ORDER BITS @VA14144 01039800
  1506. SPACE EQU X'40' @VA14144 01039900
  1507. EMSGBFSZ EQU 5 NUMBER OF DWORDS FOR BUFFER @VA14144 01040000
  1508. LNKLIMIT EQU 10 HOW MANY WRONG PASSWORDS WE'LL @VA14144 01040100
  1509. * TOLERATE FROM V.M. 01040200
  1510. LEVLIMIT EQU 2 PRACTICAL LIMIT (+1) FOR LEVEL @VA14144 01040300
  1511. * OF INDIRECT LINK(S) 01040400
  1512. ********************************************************************** 01040500
  1513. * * 01040600
  1514. * EXECUTED INSTRUCTIONS * 01040700
  1515. * * 01040800
  1516. ********************************************************************** 01040900
  1517. DS 0F @VA14144 01041000
  1518. MODECLC CLC 0(*-*,R1),0(R3) TO CHECK COMMAND-LINE MODE VS @VA14144 01041100
  1519. * TABLE 01041200
  1520. SAVEID MVC SAVEWRK2(*-*),0(R1) TO SAVE USERID @VA14144 01041300
  1521. SAVEPASS MVC SAVEWRK6(*-*),0(R1) TO SAVE THE PASSWORD @VA14144 01041400
  1522. XTMMODE TM 1(R5),*-* TO CHECK FOR LEGITIMATE ACCESS @VA14144 01041500
  1523. * MODE 01041600
  1524. ********************************************************************** 01041700
  1525. * * 01041800
  1526. * TABLE OF LEGITIMATE ONE- OR TWO-BYTE ACCESS MODES: * 01041900
  1527. * 1ST HALFWORD = ACCESS MODE * 01042000
  1528. * 2ND HALFWORD = INDEXER FOR DECISION TABLE FOR THAT MODE: * 01042100
  1529. * * 01042200
  1530. ********************************************************************** 01042300
  1531. MODER DC CL2'R ',H'0' THE FIRST ONE @VA14144 01042400
  1532. DC CL2'RR',H'4' @VA14144 01042500
  1533. MODEW DC CL2'W ',H'8' @VA14144 01042600
  1534. DC CL2'WR',H'12' @VA14144 01042700
  1535. MODEM DC CL2'M ',H'16' @VA14144 01042800
  1536. DC CL2'MR',H'20' @VA14144 01042900
  1537. MODEMW DC CL2'MW',H'24' THE LAST ONE @VA14144 01043000
  1538. EJECT 01043100
  1539. DROP R0,R12 01139000
  1540. USING DMKLNK,R0 (FOR USE BY S-CONSTANTS) 01141000
  1541. ********************************************************************** 01142100
  1542. * * 01142200
  1543. * FLAG-BIT DEFINITIONS FOR FIRST BYTE OF "DTBL" DECISION-TABLE WORD: * 01142300
  1544. * * 01142400
  1545. ********************************************************************** 01142500
  1546. NOL EQU X'80' NO LINK CAN BE GIVEN 01145000
  1547. SRO EQU X'40' SET TO READ/ONLY 01146000
  1548. FRO EQU X'20' FORCED TO READ/ONLY 01147000
  1549. SWT EQU X'10' SET TO WRITE 01148000
  1550. GMS EQU X'08' GIVE A MESSAGE 01149000
  1551. ********************************************************************** 01150100
  1552. * * 01150200
  1553. * (KEEP THE NEXT THREE "AS IS" - 1, 2, AND 3): * 01150300
  1554. * * 01150400
  1555. ********************************************************************** 01150500
  1556. RPS EQU X'01' CHECK READ PASSWORD 01152000
  1557. WPS EQU X'02' CHECK WRITE PASSWORD 01153000
  1558. MPS EQU X'03' CHECK MULT PASSWORD 01154000
  1559. ********************************************************************** 01155100
  1560. * * 01155200
  1561. * THE NEXT BYTE CORRESPONDS TO UDEVMODE BYTE OF UDEVBLOK 01156000
  1562. * * 01157100
  1563. * THE NEXT HALFWORD IS AN S-CONSTANT "JUMP ADDRESS" TO THE CORRECT CODE 01158000
  1564. * * 01159100
  1565. ********************************************************************** 01159200
  1566. DS 0F DECISION TABLES FOR DETERMINING LINKING LOGIC: 01160000
  1567. ********************************************************************** 01161100
  1568. * * 01161200
  1569. * EXISTING MODE 01162000
  1570. * DESIRED LOGIC: LINKS REQUESTED 01163000
  1571. * ---------------------------- -------- --------- 01164000
  1572. * * 01164100
  1573. ********************************************************************** 01164200
  1574. TBLNONE DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC NONE R 01165000
  1575. DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC NONE RR 01166000
  1576. DTBL WPS+SWT,UDEVLW+UDEVLM,LNKSC NONE W 01167000
  1577. DTBL WPS+SWT,UDEVLW+UDEVLM,LNKSC NONE WR 01168000
  1578. DTBL MPS+SWT,UDEVLM,LNKSC NONE M 01169200
  1579. DTBL MPS+SWT,UDEVLM,LNKSC NONE MR 01170200
  1580. DTBL MPS+SWT,UDEVLM,LNKSC NONE MW 01171200
  1581. TBLREAD DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC READ R 01172000
  1582. DTBL RPS+SRO,UDEVLR+UDEVLW+UDEVLM,LNKSC READ RR 01173000
  1583. DTBL NOL,UDEVLW+UDEVLM,ERROR104 READ W @VA14144 01174100
  1584. DTBL WPS+FRO+GMS,UDEVLW+UDEVLM,ERROR101 READ WR @VA14144 01174200
  1585. DTBL MPS+SWT+GMS,UDEVLM,LNKRO READ M 01176200
  1586. DTBL MPS+SWT+GMS,UDEVLM,LNKRO READ MR 01177200
  1587. DTBL MPS+SWT+GMS,UDEVLM,LNKRO READ MW 01178200
  1588. TBLWRITE DTBL NOL,UDEVLR+UDEVLW+UDEVLM,ERROR105 WRITE R @VA14144 01179100
  1589. DTBL RPS+SRO+GMS,UDEVLR+UDEVLW+UDEVLM,LNKRW WRITE RR 01180000
  1590. DTBL NOL,UDEVLW+UDEVLM,ERROR105 WRITE W @VA14144 01181100
  1591. DTBL WPS+FRO+GMS,UDEVLW+UDEVLM,ERROR102 WRITE WR @VA14144 01181200
  1592. DTBL NOL,UDEVLM,ERROR105 WRITE M @VA14144 01181300
  1593. DTBL MPS+FRO+GMS,UDEVLM,ERROR102 WRITE MR 01181500
  1594. DTBL MPS+SWT+GMS,UDEVLM,LNKRW WRITE MW 01185000
  1595. ********************************************************************** 01186100
  1596. * * 01186200
  1597. *------- END OF "LINK" DECISION-TABLE FOR VARIOUS POSSIBLE CASES ------ 01187000
  1598. * * 01188100
  1599. ********************************************************************** 01188200
  1600. USING PSA,R0 RE-ESTABLISH NORMAL PSA USAGE IN R0, 01189000
  1601. USING DMKLNK,R12 AND NORMAL REGULAR ADDRESSABILITY 01190000
  1602. ********************************************************************** 01191100
  1603. * * 01191200
  1604. * INDEXING TABLE FOR DETERMINING IF A LINK IS FEASIBLE * 01192100
  1605. * WITHOUT A PASSWORD - I.E. IF THE ORIGINAL USER ACCESS * 01192200
  1606. * MODE IS ADEQUATE FOR THE LINK MODE DESIRED WITHOUT * 01192300
  1607. * REQUIRING THE ENTERING OF A PASSWORD: * 01192400
  1608. * * 01192500
  1609. ********************************************************************** 01192600
  1610. BYTABLE DC 2AL1(UDEVLR) 0-1: FOR 'R' & 'RR' 01197000
  1611. DC 2AL1(UDEVLW) 2-3: FOR 'W' & 'WR' 01198000
  1612. DC 3AL1(UDEVLM) 4-6: FOR 'M' & 'MR' & 'MW' @VA15032 01199300
  1613. EJECT 01200000
  1614. ********************************************************************** 01200100
  1615. * * 01200200
  1616. * NON-ERROR RESPONSES TO USER. ISSUED INTERNALLY. * 01200300
  1617. * * 01200400
  1618. ********************************************************************** 01200500
  1619. ********************************************************************** 01201100
  1620. * * 01201200
  1621. * "RESPONSES": 01205000
  1622. * 01206000
  1623. * NOTE - IN THE FOLLOWING, FIELDS INCLUDING $ DENOTE 01207000
  1624. * THAT THEY ARE "FILLED IN" FIELDS. 01208000
  1625. * 01209000
  1626. * KEEP THE NEXT TWO IN ORDER: 01210000
  1627. * * 01210100
  1628. ********************************************************************** 01210200
  1629. RESPON1 DC C'DASD $Y$ LINKED R/O' 01211000
  1630. RESPON2 DC C'; R/O BY N$N USERS' 01212000
  1631. * 01213000
  1632. RESPON1A EQU 5 DISP. OF YYY FROM RESPON1 01214000
  1633. RESPON1B EQU 18 DISP. OF 'O' OR 'W' FROM RESPON1 01215000
  1634. * 01216000
  1635. RESPON2A EQU L'RESPON1+4 DISP. OF 'O' OR 'W' FROM RESPON1 01217000
  1636. RESPON2B EQU L'RESPON1+9 DISP. OF NNN OR USERID FROM RESPON1 01218000
  1637. RESPON2C EQU RESPON2B+8 DISP. OF NEEDED BLANK AFTER USERID 01219000
  1638. ********************************************************************** 01220100
  1639. * * 01220200
  1640. * DEFINE THE ERROR MESSAGE CODES * 01220300
  1641. * * 01220400
  1642. ********************************************************************** 01220500
  1643. EMSG153 EQU 153 EXCEEDED MAX NUM OF VIRT DEV @VA13217 01222500
  1644. EMSG20 EQU 20 @VA14144 01225000
  1645. EMSG22 EQU 22 @VA14144 01226000
  1646. EMSG52 EQU 52 @VA14144 01227000
  1647. EMSG53 EQU 53 @VA14144 01228000
  1648. EMSG101 EQU 101 @VA14144 01229000
  1649. EMSG102 EQU 102 @VA14144 01230000
  1650. EMSG103 EQU 103 @VA14144 01231000
  1651. EMSG104 EQU 104 @VA14144 01232000
  1652. EMSG105 EQU 105 @VA14144 01233000
  1653. EMSG106 EQU 106 @VA14144 01234000
  1654. EMSG107 EQU 107 @VA14144 01235000
  1655. EMSG108 EQU 108 @VA14144 01236000
  1656. EMSG109 EQU 109 @VA14144 01237000
  1657. EMSG110 EQU 110 @VA14144 01238000
  1658. EMSG111 EQU 111 @VA14144 01239000
  1659. EMSG112 EQU 112 @VA14144 01240000
  1660. EMSG113 EQU 113 @VA14144 01241000
  1661. EMSG114 EQU 114 @VA14144 01242000
  1662. EMSG115 EQU 115 @VA14144 01243000
  1663. EMSG116 EQU 116 @VA14144 01244000
  1664. EMSG117 EQU 117 @VA14144 01245000
  1665. EMSG118 EQU 118 @VA14144 01246000
  1666. EMSG119 EQU 119 @VA14144 01247000
  1667. EMSG137 EQU 137 @VA14144 01248000
  1668. EMSG199 EQU 199 @VA14144 01249000
  1669. EMSG281 EQU 281 @VA14144 01250000
  1670. EJECT 01251000
  1671. LTORG 01478000
  1672. EJECT 01479000
  1673. COPY SAVE (R13) 01480000
  1674. ********************************************************************** 01481100
  1675. * * 01481200
  1676. * SCRATCH-STORAGE IN 'SAVEAREA' USED BY LINK: 01482000
  1677. * 01483000
  1678. * SAVEWRK2-3 CONTAIN USERID 01484000
  1679. * SAVEWRK4 CONTAINS XXX (DISK TO BE LINKED TO) 01485000
  1680. * SAVEWRK5 CONTAINS YYY (DISK TO BE LINKED AS) 01486000
  1681. * SAVEWRK6-7 CONTAIN PASSWORD IF INCLUDED WITH LINK COMMAND 01487000
  1682. * SAVEWRK8-9 HOLDS USERID OF ANY USER FOUND LINKED TO DEVICE 01488000
  1683. * 01489000
  1684. * SAVEWRK1 (CLEARED AT THE BEGINNING) IS USED AS FOLLOWS: 01490000
  1685. * * 01491100
  1686. ********************************************************************** 01491200
  1687. LINKFLAG EQU SAVEWRK1 ONE BYTE: 01492000
  1688. JMYSELF EQU X'80' IT'S ME (USERID = MYSELF OR '* ') 01494000
  1689. JGOTPASS EQU X'40' WE'VE ALREADY GOT THE PASSWORD 01495000
  1690. DETOLD EQU X'20' DETACH OLD LINK BEFORE DOING NEW ONE: 01496000
  1691. LINKSUBR EQU X'10' INDICATES "LINK SUBROUTINE" INVOKED 01497000
  1692. ADDROMSG EQU X'08' "R/O BY NNN USERS" SUFFIX TO BE ADDED 01498000
  1693. JLNKPRV EQU X'04' LINK PRIVILEGE - ORIGINAL UDEVBLOK MINE 01499000
  1694. SSENT EQU X'02' ENTRY AT DMKLNKSS AFTER MSS MOUNT@V60B6B8 01499150
  1695. PASSALL EQU X'01' PASSWORD WAS 'ALL' - DON'T @V60BBBB 01499300
  1696. * JOURNAL THIS LINK. 01499450
  1697. RC4 EQU 4 @V60B6B8 01499600
  1698. * 01500000
  1699. LINKMODE EQU SAVEWRK1+1 COPY OF UDEVMODE FROM ORIGINAL @VA14144 01501100
  1700. * UDEVBLOK 01501200
  1701. LINKHALF EQU SAVEWRK1+2 HALFWORD "INDEXER" TO DECISION @VA14144 01503100
  1702. * TABLE 01503200
  1703. EJECT 01504000
  1704. OSVSCOM MSSCOM @V60B6B8 01504300
  1705. DMKLNK CSECT @V60B6B8 01504600
  1706. PSA (R0) @VA14144 01505100
  1707. JPSCBLOK @V60BBBB 01505500
  1708. COPY VMBLOK (R11) 01506000
  1709. COPY RBLOKS 01507000
  1710. COPY VBLOKS 01508000
  1711. COPY UDIRECT (R4) 01509000
  1712. COPY EQU 01510000
  1713. COPY DEVTYPES 01511000
  1714. COPY CONBUF 01512000
  1715. END 01513000