Table of Contents

DMKUDU Source

References

Source Listing

DMKUDU.ASSEMBLE.txt
  1. UDU TITLE 'DMKUDU (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME 00004000
  5. * 00005000
  6. * DMKUDU USER DIRECTORY UPDATE MODULE 00006000
  7. * ...NEW MODULE TO SUPPORT DIRECTORY UPDATE- 00007000
  8. * IN-PLACE FUNCTION. 00008000
  9. * 00009000
  10. * FUNCTION 00010000
  11. * 00011000
  12. * UPDATE THE CP DIRECTORY DIRECTLY IN PLACE ON THE 00012000
  13. * OBJECT DASD PAGE AND THE VIRTUAL SYSTEM PAGE (IF USED) 00013000
  14. * ON THE PAGING DEVICE. 00014000
  15. * 00015000
  16. * ATTRIBUTES 00016000
  17. * 00017000
  18. * REENTRANT, PAGEABLE 00018000
  19. * 00019000
  20. * ENTRY POINTS 00020000
  21. * 00021000
  22. * DMKUDUMN UPDATE DIRECTORY 00022000
  23. * 00023000
  24. * ENTRY CONDITIONS 00024000
  25. * 00025000
  26. * R1 CONTAINS THE REAL ADDRESS OF THE PARAMETER LIST 00026000
  27. * 00027000
  28. * EXIT CONDITIONS 00028000
  29. * 00029000
  30. * CC = 0 UPDATE WAS SUCCESSFUL 00030000
  31. * CC = 2 ERROR, R2 CONTAINS ERROR CODE 00031000
  32. * 00032000
  33. * CALLS TO OTHER ROUTINES 00033000
  34. * 00034000
  35. * DMKCPVAC TO CALL 'ACNT' CMD PROCESSOR 00035000
  36. * DMKFREE TO OBTAIN FREE STORAGE 00036000
  37. * DMKFRET TO RETURN FREE STORAGE 00037000
  38. * DMKLOCKQ TO LOCK THE CP DIRECTORY 00038000
  39. * DMKLOCKD TO UNLOCK THE CP DIRECTORY 00039000
  40. * DMKPGTVG TO OBTAIN A VIRTUAL SYSTEM PAGE 00040000
  41. * DMKPGTVR TO RETURN A VIRTUAL SYSTEM PAGE 00041000
  42. * DMKRPAGT TO READ A PAGE FROM DASD 00042000
  43. * DMKRPAPT TO WRITE A PAGE TO DASD 00043000
  44. * DMKSCNAU TO LOCATE A USER'S VMBLOK 00044000
  45. * DMKLOKSW TO SWITCH TO ANOTHER VMBLOK 00044100
  46. * 00045000
  47. * EXTERNAL REFERENCES 00046000
  48. * 00047000
  49. * DMKSYSPL POINTER TO START OF DIRECTORY ON SYSRES 00048000
  50. * DMKSYSUD DASD ADDRESS (0CCCPPDD) OF DIRECTORY 00049000
  51. * 00050000
  52. * 00051000
  53. * TABLES / WORK AREAS 00052000
  54. * 00053000
  55. * UNCNTRL A CONTROL BLOCK BUILT IN FREE STORAGE 00054000
  56. * UIPARMS A CONTROL BLOCK, CONTIGUOUS WITH UCNTRL, 00055000
  57. * CONTAINING THE PARAMETERS OF THE OPERATION 00056000
  58. * 00057000
  59. * 00058000
  60. * OPERATION (SPECIFIC DETAILS OF EACH OPERATION ARE GIVEN 00059000
  61. * IN ROUTINE PREFACES) 00060000
  62. * 00061000
  63. * THE FOLLOWING IS COMMON FUNCTION TO ALL OPERATIONS: 00062000
  64. * 00063000
  65. * 1. OBTAIN FREE STORAGE (VIA DMKFREE) FOR CONTROL BLOCKS 00064000
  66. * UCNTRL AND UIPARMS AND MOVE PARAMETERS INTO THIS 00065000
  67. * STORAGE. 00066000
  68. * 00067000
  69. * 2. LOCK THE CP DIRECTORY 00068000
  70. * 00069000
  71. * 3. READ UDIRBLOKS AND LOCATE DATA FOR SPECIFIED USERID. 00070000
  72. * 00071000
  73. * 4. IDENTIFY THE OPERATIONS AND BRANCH TO PROCESSOR FOR 00072000
  74. * REQUESTED FUNCTION. 00073000
  75. * 00074000
  76. * 5. ON RETURN, IF THERE WAS NO ERROR, TEST WHETHER 00075000
  77. * OPERATION INVOLVES UPDATING UDIRBLOCK. IF NOT, GO TO 00076000
  78. * STEP 7. 00077000
  79. * 00078000
  80. * 6. LOCATE THE SWPTABLE FOR THE VIRTUAL SYSTEM PAGE 00079000
  81. * CONTAINING THE UDIRBLOK AND SAVE THE 'SWPCYL', 00080000
  82. * 'SWPDPAGE', AND 'SWPCODE' FOR LATER USE. 00081000
  83. * 00082000
  84. * 7. WRITE THE UPDATED PAGE TO THE OBJECT DASD. 00083000
  85. * 00084000
  86. * 8. IF THE OPERATION DOES NOT INVOLVE A UDIRBLOK, GO TO 00085000
  87. * STEP 10. 00086000
  88. * 00087000
  89. * 9. WRITE THE PAGE CONTAINING THE UPDATED UDIRBLOK TO 00088000
  90. * PAGING DASD. 00089000
  91. * 00090000
  92. * 10. UNLOCK THE DIRECTORY. 00091000
  93. * 00092000
  94. * 11. RETURN FREE STORAGE OBTAINED FOR CONTROL BLOCKS. 00093000
  95. * 00094000
  96. * 12. RETURN SYSTEM VIRTUAL PAGE OBTAINED FOR HOLDING 00095000
  97. * UMAC AND UDEV BLOCKS (IF NECESSARY). 00096000
  98. * 00097000
  99. * 13. RETURN TO CALLER WITH CC SET AND RETCODE IN R2 00098000
  100. * 00099000
  101. * 00100000
  102. * REGISTER USAGE 00101000
  103. * 00102000
  104. * R0 = DASD PTR 00103000
  105. * R1 = REAL ADDRESS OF PAGE IN STORAGE AND PARMETER 00104000
  106. * REGISTER 00105000
  107. * R2 = UDIRBLOK POINTER AND OPTIONS REGISTER 00106000
  108. * R3 = UNCTRL REGISTER 00107000
  109. * R4 = POINTER TO LIST OF DIRECTORY PAGES, 00108000
  110. * POINTER TO UPDATED VIRTUAL PAGE 00109000
  111. * R5 = CONTAINS ADDRESS OF END OF PAGE 00110000
  112. * ...SAVE SWPCYL DATA 00111000
  113. * R6 = CONTAINS REAL ADDRESS OF PAGE 00112000
  114. * R7 = WORK REGISTER, SWAPTABLE POINTER 00113000
  115. * R8 = WORK REGISTER 00114000
  116. * R9 = WORK REGISTER AND INTERNAL LINKS 00115000
  117. * R10 = POINTER TO SYSLOCS 00116000
  118. * R11 = VMBLOK 00117000
  119. * R12 = BASE 00118000
  120. * R13 = SAVE 00119000
  121. * R14 = SYSTEM USE 00120000
  122. * R15 = SYSTEM USE 00121000
  123. * 00122000
  124. * 00123000
  125. * MESSAGES 00124000
  126. * 00125000
  127. * NONE 00126000
  128. * 00127000
  129. * 00128000
  130. * 00129000
  131. *. 00130000
  132. EJECT 00131000
  133. COPY OPTIONS @VA10286 00131500
  134. SPACE 3 00131600
  135. DMKUDU CSECT @V60C1BD 00132000
  136. USING PSA,R0 @V60C1BD 00133000
  137. USING SYSLOCS,R10 @V60C1BD 00134000
  138. USING VMBLOK,R11 @V60C1BD 00135000
  139. USING DMKUDU,R12 @V60C1BD 00136000
  140. USING SAVEAREA,R13 @V60C1BD 00137000
  141. SPACE 3 00138000
  142. EXTRN DMKPGTVG,DMKPGTVR @V60C1BD 00139000
  143. EXTRN DMKRPAPT,DMKRPAGT @V60C1BD 00140000
  144. EXTRN DMKSYSOW,DMKSYSOC @V60C1BD 00141000
  145. EXTRN DMKLOCKQ,DMKLOCKD @V60C1BD 00142000
  146. EXTRN DMKSCNAU,DMKCPVAC @V60C1BD 00143000
  147. SPACE 2 00144000
  148. DC CL8'DMKUDU' @V60C1BD 00145000
  149. EJECT 00146000
  150. DMKUDUMN RELOC @V60C1BD 00147000
  151. SPACE 1 00148000
  152. LR R7,R1 SAVE R1 OVER CALL @V60C1BD 00149000
  153. L R10,ASYSLC POINT TO SYSLOCS @V60C1BD 00150000
  154. SPACE 1 00151000
  155. * GET FREE STORAGE FOR UCNTRL CONTROL BLOCK 00152000
  156. LA R0,UCNTRLSZ+UIPARMSZ SPECIFY SIZE TO GET @V60C1BD 00153000
  157. CALL DMKFREE @V60C1BD 00154000
  158. LR R3,R1 USE R3 FOR UCNTRL ADDRESSABILITY @V60C1BD 00155000
  159. USING UCNTRL,R3 @V60C1BD 00156000
  160. SPACE 1 00157000
  161. * CLEAR CONTROL BLOCK AND SET UP PARAMETERS 00158000
  162. XC UCNTRL(UCNTRLSZ*8+UIPARMSZ*8),UCNTRL CLR UCNTRL@V60C1BD 00159000
  163. MVC UIPARMS(UIPARMSZ*8),0(R7) MOVE PARMS TO CTL BLK@V60C1BD 00160000
  164. SPACE 1 00161000
  165. * ALTER USERID AND PASSWORDS IN PARAMETER LIST WITH MASK 00162000
  166. XC UUSERID(L'UUSERID+L'UCURPASS),MASK MASK 2 FLDS @V60C1BD 00163000
  167. MVC UDEVCODE(1),DMKSYSUD+3 SAVE DASD DEVICE CODE @V60C1BD 00164000
  168. SPACE 1 00165000
  169. * LOCATE THE UDIRBLOK FOR THE USERID 00166000
  170. * LOCK THE DIRECTORY FIRST 00167000
  171. LOCKDIR LA R1,=CL8' DIRCT' @V60C1BD 00168000
  172. CALL DMKLOCKQ LOCK DIRECTORY @V60C1BD 00169000
  173. SPACE 1 00170000
  174. BAL R9,READUDIR LOCATE UDIRBLOK FOR USER @V60C1BD 00171000
  175. BNZ PREXIT BR IF ERROR @V60C1BD 00172000
  176. EJECT 00173000
  177. *-------------------------------------------------------------- 00174000
  178. * IDENTIFY OPERATION AND BRANCH TO THE ROUTINE TO PROCESS IT 00175000
  179. *-------------------------------------------------------------- 00176000
  180. LA R14,OPTABLE @V60C1BD 00177000
  181. USING OPRSECT,R14 @V60C1BD 00178000
  182. COP CLC OPERATN(L'UOP),UOP IS THIS THE OPERATION? @V60C1BD 00179000
  183. BE OPFOUND BR IF YES @V60C1BD 00180000
  184. CLI OPERATN,X'FF' END OF TABLE? @V60C1BD 00181000
  185. LA R14,LOPTABLE(,R14) INCREMENT TO NEXT ENTRY @V60C1BD 00182000
  186. BNE COP BR IF NOT END OF TABLE, CONTINUE @V60C1BD 00183000
  187. SPACE 1 00184000
  188. * NO OPERATION MATCH FOUND... ERROR! 00185000
  189. LA R15,ERROP GET ERROR CODE @V60C1BD 00186000
  190. STH R15,URETCODE STORE IN CONTROL @V60C1BD 00187000
  191. B PREXIT @V60C1BD 00188000
  192. SPACE 1 00189000
  193. * THE OPERATION HAS BEEN IDENTIFIED 00190000
  194. OPFOUND LH R14,OPADDR GET ROUTINE ADDRESS (DISPLACEMENT) @V60C1BD 00191000
  195. LA R14,0(R12,R14) ADD IN BASE REG. VALUE @V60C1BD 00192000
  196. DROP R14 @V60C1BD 00193000
  197. SPACE 1 00194000
  198. *-------------------------------------------------------------- 00195000
  199. BR R14 GO TO ROUTINE @V60C1BD 00196000
  200. *-------------------------------------------------------------- 00197000
  201. EJECT 00198000
  202. *-------------------------------------------------------------- 00199000
  203. * COMMON ERROR EXIT | 00200000
  204. *------------------------ 00201000
  205. EXITCC1 STH R15,URETCODE @V60C1BD 00202000
  206. B PREXIT GO TO ERROR EXIT DIRECTLY @V60C1BD 00203000
  207. SPACE 5 00204000
  208. *-------------------------------------------------------------- 00205000
  209. * COMMON EXIT FOR UDEV FUNCTIONS, CC = 0 | 00206000
  210. *--------------------------------------------- 00207000
  211. DEVXCC0 L R6,URPAGDEV SET UP UDEV REAL PAGE ADDRESS @V60C1BD 00208000
  212. L R4,UVPAGBUF SET UP UDEV VIRTUAL PAGE ADDRESS @V60C1BD 00209000
  213. L R0,UDASDDEV SET UP OBJECT DASD ADDRESS @V60C1BD 00210000
  214. OI UFLAGS,UDEVF INDICATE A UDEV UPDATE @V60C1BD 00211000
  215. B EXITCC0 @V60C1BD 00212000
  216. SPACE 2 00213000
  217. *-------------------------------------------------------------- 00214000
  218. * COMMON EXIT FOR UMAC FUNCTIONS, CC = 0 | 00215000
  219. *--------------------------------------------- 00216000
  220. MACXCC0 L R6,URPAGMAC SET UP UMAC REAL PAGE ADDRESS @V60C1BD 00217000
  221. L R4,UVPAGBUF SET UP UMAC VIRTUAL PAGE ADDRESS @V60C1BD 00218000
  222. L R0,UDASDMAC SET UP OBJECT DASD ADDRESS @V60C1BD 00219000
  223. OI UFLAGS,UMACF INDICATE A UMAC UPDATE @V60C1BD 00220000
  224. B EXITCC0 @V60C1BD 00221000
  225. SPACE 2 00222000
  226. *-------------------------------------------------------------- 00223000
  227. * COMMON EXIT FOR UDIR FUNCTIONS, CC = 0 | 00224000
  228. *--------------------------------------------- 00225000
  229. DIRXCC0 L R6,URPAGDIR SET UP UDIR REAL PAGE ADDRESS @V60C1BD 00226000
  230. L R4,UVPAGDIR SET UP UPDATED VIRTUAL PAGE ADDR @V60C1BD 00227000
  231. L R0,UDASDDIR SET UP OBJECT DASD ADDRESS @V60C1BD 00228000
  232. OI UFLAGS,UDIRF INDICATE A UDIR UPDATE @V60C1BD 00229000
  233. SPACE 2 00230000
  234. *-------------------------------------------------------------- 00231000
  235. * COMMON EXIT, CC = 0 | 00232000
  236. *------------------------ 00233000
  237. EXITCC0 SR R15,R15 SET CC = 0 @V60C1BD 00234000
  238. STH R15,URETCODE SET RETCODE TO 0 @V60C1BD 00235000
  239. * FALL THROUGH TO "OPRET" 00236000
  240. SPACE 5 00237000
  241. *-------------------------------------------------------------- 00238000
  242. * RETURN POINT FROM INDIVIDUAL ROUTINES 00239000
  243. *-------------------------------------------------------------- 00240000
  244. OPRET BNE PREXIT BR IF THERE WAS AN ERROR @V60C1BD 00241000
  245. SPACE 1 00242000
  246. TM UFLAGS,UNOUPF+UTESTMD UPDATE/TEST SUPPRESSION? @V60C1BD 00243000
  247. BNZ PREXIT BR IF YES @V60C1BD 00244000
  248. EJECT 00245000
  249. *-------------------------------------------------------------- 00246000
  250. * IF THE UPDATE WAS CONCERNED WITH A UMAC OR UDEV BLOCK, THE 00247000
  251. * ONLY UPDATING NEEDED IS TO THE OBJECT DASD. IN THIS CASE, 00248000
  252. * THE DATA IN THE SWPTABLE DOES NOT NEED TO BE OF CONCERN. 00249000
  253. * 00250000
  254. * IF THE UPDATE WAS TO A UDIR BLOCK, THEN THE OBJECT AND THE 00251000
  255. * PAGING DASD NEED TO BE UPDATED. IN THIS CASE, THE SWPTABLE 00252000
  256. * DATA DASD ADDRESS IS SAVED OVER THE UPDATE TO THE OBJECT 00253000
  257. * DASD SO THAT THE SAME PAGE SLOT CAN BE REUSED WHEN UPDATING 00254000
  258. * THE PAGING DASD. THE SETTING OF THE 'SWPRECMP' FLAG IS ALSO 00255000
  259. * SAVED SO THAT IT CAN BE RESTORED FOLLOWING THE WRITING OF 00256000
  260. * THE PAGE TO THE OBJECT DASD. (NOTE: THE 'SWPRCMP' FLAG IS 00257000
  261. * SET TO B'1' BEFORE WRITING TO OBJECT DASD TO INDICATE THAT 00258000
  262. * THE OBJECT DASD PAGE IS NOT TO BE RELEASED BY DMKRPAPT). 00259000
  263. * 00260000
  264. * SAVE THE CURRENT SWPTABLE 'SWPCYL/SWPDPAGE/SWPCODE': 00261000
  265. * 1. REAL PAGE ADDR/256) + A(CORETBL) = CORETABLE FOR PAGE 00262000
  266. * 2. GET SWPTABLE ADDRESS FROM CORETABLE 00263000
  267. * 3. GET 0CCCPPDD FROM SWPTABLE 00264000
  268. * 00265000
  269. * NECESSARY REGISTER CONDITION: 00266000
  270. * R6 = REAL ADDRESS OF PAGE BEING UPDATED 00267000
  271. *-------------------------------------------------------------- 00268000
  272. TM UFLAGS,UDIRF IS UDIR TO BE UPDATED? @V60C1BD 00269000
  273. BNO WROBJ BR IF NOT @V60C1BD 00270000
  274. SRL R6,8 CALC. CORTABLE INDEX (PG ADR/256)@V60C1BD 00271000
  275. A R6,ACORETBL SET R5 = ADDR OF CORTABLE ENTRY @V60C1BD 00272000
  276. USING CORTABLE,R6 @V60C1BD 00273000
  277. L R7,CORSWPNT SET R7 = SWAPTABLE ENTRY ADDRESS @V60C1BD 00274000
  278. USING SWPFLAG,R7 @V60C1BD 00275000
  279. DROP R6 @V60C1BD 00276000
  280. L R5,SWPCYL GET 0CCCPPDD FROM SWPTABLE @V60C1BD 00277000
  281. ST R5,USVDASD SAVE PAGING DASD ADDRESS @V60C1BD 00278000
  282. SR R8,R8 ZERO R8 @V60C1BD 00279000
  283. ST R8,SWPCYL ZERO SWPTABLE DASD @V60C1BD 00280000
  284. OI UFLAGS,URECMP ASSUME SWPRECMP IS B'1' @V60C1BD 00281000
  285. TM SWPFLAG,SWPRECMP IS SWPRECMP FLAG B'1'? @V60C1BD 00282000
  286. BO WROBJ BR IF YES @V60C1BD 00283000
  287. NI UFLAGS,255-URECMP INDICATE SWPRECMP WAS B'0' @V60C1BD 00284000
  288. OI SWPFLAG,SWPRECMP SET RECOMP BIT FOR OBJECT DASD@V60C1BD 00285000
  289. * WRITE SO THAT DASD PAGE, IF ON DRUM, WILL 00286000
  290. * NOT BE RELEASED...PLAN TO REUSE IT. 00287000
  291. SPACE 1 00288000
  292. *-------------------------------------------------------------- 00289000
  293. * WRITE THE UPDATED PAGE BACK TO THE OBJECT DASD 00290000
  294. * 00291000
  295. * CURRENT NECESSARY REGISTER STATUS: 00292000
  296. * R0 = ADDRESS OF OBJECT DASD 00293000
  297. * R4 = VIRTUAL ADDRESS OF UPDATED PAGE 00294000
  298. * R6 = REAL ADDRESS OF UPDATED PAGE 00295000
  299. *-------------------------------------------------------------- 00296000
  300. * WRITE THE PAGE TO OBJECT DASD 00297000
  301. WROBJ CLC 0(8,R6),ZEROES CHECK TO SEE IF DASD DATA IS ZERO@V60C1BD 00298000
  302. BE PGZ BR IF SO, THIS IS NOT GOOD... @V60C1BD 00299000
  303. IC R0,DMKSYSUD+3 GET DEVICE CODE FROM SYSTEM @V60C1BD 00300000
  304. LR R1,R4 SET UP VIRTUAL PAGE ADDRESS @V60C1BD 00301000
  305. LA R2,SYSTEM SPECIFY SYSTEM OPTION @V60C1BD 00302000
  306. CALL DMKRPAPT WRITE UPDATED PAGE TO OBJECT DASD@V60C1BD 00303000
  307. BZ WPAGING BR IF WRITE WAS OK @V60C1BD 00304000
  308. SPACE 1 00305000
  309. LA R1,ERRWRIT1 SETUP RETCODE FOR WRITE ERROR @V60C1BD 00306000
  310. STH R1,URETCODE STORE IN CONTROL BLOCK @V60C1BD 00307000
  311. TM UFLAGS,UDIRF IS OPERATION UPDATING UDIR BLK? @V60C1BD 00308000
  312. BNO PREXIT BR IF NOT @V60C1BD 00309000
  313. B REFLAG FIX UP SWPTABLE FLAG BEFORE EXIT @V60C1BD 00310000
  314. SPACE 1 00311000
  315. *-------------------------------------------------------------- 00312000
  316. * UPDATE THE PAGE ON PAGING DASD 00313000
  317. * 00314000
  318. *-------------------------------------------------------------- 00315000
  319. WPAGING TM UFLAGS,UDIRF IS OPERATION UPDATING UDIR BLOCK?@V60C1BD 00316000
  320. BNO PREXIT BR IF NOT, DON'T UPDTE PAG'G DASD@V60C1BD 00317000
  321. SPACE 1 00318000
  322. * CHECK IF THE OBJECT AND PAGING DASD ADDRESS ARE SAME, I.E., 00319000
  323. * THE PAGE HAS NEVER BEEN WRITTEN OUT TO PAGING DASD. 00320000
  324. C R0,USVDASD ARE DASD ADDRESSES EQUAL? @V60C1BD 00321000
  325. BE REFLAG BR IF YES, DON'T WRITE TWICE @V60C1BD 00322000
  326. SPACE 1 00323000
  327. L R0,USVDASD GET DASD ADDR SAVED FROM SWPTABLE@V60C1BD 00324000
  328. L R1,UVPAGDIR GET UDIR VIRTUAL PAGE ADDRESS @V60C1BD 00325000
  329. LA R2,SYSTEM SPECIFY SYSTEM OPTION @V60C1BD 00326000
  330. CALL DMKRPAPT WRITE UPDATED PAGE TO PAGING DASD@V60C1BD 00327000
  331. BNZ WPERR BR IF WRITE ERROR @V60C1BD 00328000
  332. SPACE 1 00329000
  333. * SET SWPRECMP FLAG IN SWPTABLE TO ITS ORIGINAL VALUE SO THAT 00330000
  334. * PAGE CAN BE RELEASED WHEN NECESSARY. R7 POINTS TO SWPTABLE 00331000
  335. REFLAG NI SWPFLAG,255-SWPRECMP SET SWPRECMP TO B'0' @V60C1BD 00332000
  336. TM UFLAGS,URECMP WAS SWPRECMP B'1'? @V60C1BD 00333000
  337. BNO PREXIT BR IF NOT, LEAVE IT SET TO B'0' @V60C1BD 00334000
  338. OI SWPFLAG,SWPRECMP SET BIT TO THE WAY IT WAS @V60C1BD 00335000
  339. DROP R7 @V60C1BD 00336000
  340. SPACE 2 00337000
  341. *-------------------------------------------------------------- 00338000
  342. * PREPARE TO EXIT... 00339000
  343. * UNLOCK THE DIRECTORY (ALL CASES) AND EXIT 00340000
  344. *-------------------------------------------------------------- 00341000
  345. PREXIT LA R1,=CL8' DIRCT' SPECIFY DIRECTORY LOCK NAME @V60C1BD 00342000
  346. CALL DMKLOCKD UNLOCK THE DIRECTORY @V60C1BD 00343000
  347. EJECT 00344000
  348. * FREE SYSTEM VIRTUAL PAGE IF PRESENT 00345000
  349. L R1,UVPAGBUF GET ADDR. OF SYSTEM VIRTUAL PAGE @V60C1BD 00346000
  350. LTR R1,R1 IS THERE ONE? @V60C1BD 00347000
  351. BZ SVURET BR IF NOT @V60C1BD 00348000
  352. CALL DMKPGTVR FREE SYSTEM PAGE @V60C1BD 00349000
  353. SPACE 1 00350000
  354. SVURET LH R2,URETCODE SAVE RETCODE FROM CONTROL BLOCK @V60C1BD 00351000
  355. SPACE 1 00352000
  356. * FREE UCNTRL BLOCK 00353000
  357. LA R0,UCNTRLSZ+UIPARMSZ SPECIFY SIZE TO FRET @V60C1BD 00354000
  358. LR R1,R3 POINT TO STORAGE TO FRET @V60C1BD 00355000
  359. CALL DMKFRET FRET UCNTRL BLOCK @V60C1BD 00356000
  360. SPACE 1 00357000
  361. ST R2,SAVEREGS+R2*4 PASS RETCODE BACK TO CALLER @V60C1BD 00358000
  362. LTR R2,R2 SET CC, 0 = NO ERROR, ¬0 = ERROR @V60C1BD 00359000
  363. SPACE 1 00360000
  364. *-------------------------------------------------------------- 00361000
  365. * EXIT CONDITIONS: 00362000
  366. * 00363000
  367. * R2 CONTAINS RETURN CODE WHICH IS PASSED BACK TO THE CALLER 00364000
  368. * 00365000
  369. * CC = 0 INDICATES THAT OPERATION IS SUCCESSFUL (R2 = 0) 00366000
  370. * CC = 2 INDICATES THAT AN ERROR HAS OCCURRED AND THAT R2 00367000
  371. * CONTAINS AN ERROR CODE IDENTIFYING THE ERROR 00368000
  372. * 00369000
  373. *-------------------------------------------------------------- 00370000
  374. UDUEXIT EXIT RETURN TO CALLER @V60C1BD 00371000
  375. SPACE 3 00372000
  376. *-------------------------------------------------------------- 00373000
  377. * IF THE DASD DISPL. & POINTER IN A BLOCK TO BE WRITTEN TO 00374000
  378. * THE OBJECT DASD ARE 0, THERE IS A PROBLEM... RETURN ERROR. 00375000
  379. *-------------------------------------------------------------- 00376000
  380. PGZ LA R1,ERRPGZ SETUP RETCODE FOR ERROR @V60C1BD 00377000
  381. STH R1,URETCODE STORE IN CONTROL BLOCK @V60C1BD 00378000
  382. B REFLAG @V60C1BD 00379000
  383. SPACE 3 00380000
  384. WPERR LA R1,ERRWRIT2 SETUP RETCODE FOR WRITE ERROR @V60C1BD 00381000
  385. STH R1,URETCODE STORE IN CONTROL BLOCK @V60C1BD 00382000
  386. B REFLAG @V60C1BD 00383000
  387. EJECT 00384000
  388. *-------------------------------------------------------------- 00385000
  389. * LOGPASS | 00386000
  390. *---------- 00387000
  391. * THE UDIRBLOK FOR THE USERID HAS BEEN FOUND AND THE CURRENT 00388000
  392. * LOGON PASSWORDS MATCH. 00389000
  393. * 00390000
  394. * OPERATION: 00391000
  395. * 1. OBSCURE NEW PASSWORD 00392000
  396. * 2. MOVE NEW PASSWORD TO UDIRBLOK 00393000
  397. * 00394000
  398. *-------------------------------------------------------------- 00395000
  399. LOGPASS DS 0H @V60C1BD 00396000
  400. L R5,UDIRAD GET REAL ADDRESS OF UDIR @V60C1BD 00397000
  401. USING UDIRBLOK,R5 @V60C1BD 00398000
  402. XC UNEWPASS(L'UNEWPASS),MASK OBSCURE NEW PASSWD @V60C1BD 00399000
  403. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00400000
  404. BO TMBY1 BR IF YES @V60C1BD 00401000
  405. MVC UDIRPASS(L'UDIRPASS),UNEWPASS EST. NEW PASSWD @V60C1BD 00402000
  406. TMBY1 DS 0H @V60C1BD 00403000
  407. B DIRXCC0 NORMAL EXIT @V60C1BD 00404000
  408. SPACE 1 00405000
  409. DROP R5 @V60C1BD 00406000
  410. EJECT 00407000
  411. *-------------------------------------------------------------- 00408000
  412. * MDISK | ROUTINE TO UPDATE MDISK DATA 00409000
  413. *---------- 00410000
  414. * THE UDIRBLOK FOR THE USERID HAS BEEN FOUND AND THE CURRENT 00411000
  415. * LOGON PASSWORDS MATCH 00412000
  416. * 00413000
  417. * OPERATION: 00414000
  418. * 1. READ UMACBLOK FOR USERID 00415000
  419. * 2. CONVERT DEVICE ADDRESS FROM EBCDIC TO HEX 00416000
  420. * 3. LOCATE AND READ THE UDEVBLOK CORRESPONDING TO THE DEVICE 00417000
  421. * 4. VALIDATE THE LINK MODE AND CALCULATE THE VALUE FOR THE 00418000
  422. * LINK MODE 00419000
  423. * 5. CHECK RELATION BETWEEN GIVEN LINK PASSWORDS AND SIZE 00420000
  424. * OF UDEVBLOK. IF PASSWORDS ARE GIVEN AND UDEVBLOK IS 00421000
  425. * SHORT, OR IF BLANK PASSWORDS GIVEN AND UDEVBLOK IS 00422000
  426. * LONG, REJECT THE TRANSACTION 00423000
  427. * 6. ESTABLISH NEW PASSWORDS AND/OR LINK MODE IN UDEVBLOK 00424000
  428. * 00425000
  429. *-------------------------------------------------------------- 00426000
  430. MDISK DS 0H @V60C1BD 00427000
  431. SPACE 1 00428000
  432. * GET THE UMACBLOK (NEED IN ORDER TO REFERENCE UDEV) 00429000
  433. BAL R9,READUMAC @V60C1BD 00430000
  434. BNZ OPRET BR IF ERROR READING UMAC @V60C1BD 00431000
  435. SPACE 1 00432000
  436. * CONVERT THE ADDRESS OF THE DEVICE TO BE FOUND TO HEX SO IT 00433000
  437. * CAN BE USED AS A SEARCH ARGUMENT 00434000
  438. LA R1,UMDISKAD POINT TO MDISK ADDRESS (3 BYTES) @V60C1BD 00435000
  439. LA R2,L'UMDISKAD SET UP LENGTH OF FIELD @V60C1BD 00436000
  440. BAL R9,BCDTOHEX CONVERT ADDRESS TO HEX @V60C1BD 00437000
  441. BNZ MDSKERR1 BR IF CONVERSION ERROR @V60C1BD 00438000
  442. STH R2,ULOCDVAD SAVE ADDRESS IN UCNTRL @V60C1BD 00439000
  443. SPACE 1 00440000
  444. * GET THE UDEVBLOK 00441000
  445. BAL R9,READUDEV @V60C1BD 00442000
  446. BNZ OPRET BR IF ERROR READING UDEV @V60C1BD 00443000
  447. SPACE 1 00444000
  448. L R5,UDEVAD GET REAL ADDRESS OF UDEV @V60C1BD 00445000
  449. USING UDEVBLOK,R5 @V60C1BD 00446000
  450. SPACE 1 00447000
  451. * VALIDATE THE LINK MODE AND CALC. VALUE FOR UDEVMODE 00448000
  452. LA R9,MAXLNKMD SET UP LIMIT OF SEARCH @V60C1BD 00449000
  453. LA R7,LINKMDTB POINT TO START OF LINK MODE TABLE@V60C1BD 00450000
  454. USING LNKMSECT,R7 @V60C1BD 00451000
  455. LNKLOOP CLC UMDISKMD(L'UMDISKMD),LNKMD DO LINK MODES MATCH?@V60C1BD 00452000
  456. BE MDMATCH BR IF YES @V60C1BD 00453000
  457. LA R7,LNKMDLN(,R7) STEP TO NEXT TABLE ENTRY @V60C1BD 00454000
  458. BCT R9,LNKLOOP KEEP LOOKING @V60C1BD 00455000
  459. B MDSKERR2 ERROR, INVALID LINK MODE @V60C1BD 00456000
  460. SPACE 1 00457000
  461. MDMATCH SR R8,R8 CLEAR REG. @VMI0024 00458000
  462. IC R8,LNKMVALU GET MODE VALUE FOR UDEVMODE @VMI0024 00459000
  463. MVC UWORK(L'UDEVSTAT),UDEVSTAT ISOLATE UDEVSTAT @V60C1BD 00460000
  464. XC UWORK(L'UDEVSTAT),MASK UNMASK UDEVSTAT @V60C1BD 00461000
  465. C R7,=A(VRRSEP) IS MATCH A VRR MODE? @VMI0024 00462000
  466. BL MSKSTAT BR IF NOT VRR MODE @VMI0024 00463000
  467. OI UWORK,UDEVVRR INDICATE VIRT. RES/REL @VMI0024 00464000
  468. MSKSTAT CLC UMDISKRP(L'UMDISKRP),BLANKS PASSWORD GIVEN? @VMI0044 00465000
  469. BE BLPW BR IF NOT @V60C1BD 00466000
  470. TM UWORK,UDEVLONG LONG UDEVBLOK? @V60C1BD 00467000
  471. BNO MDSKERR3 BR IF NOT, ERROR @V60C1BD 00468000
  472. CLI UMDISKRP,C' ' IS THERE A READ PASSWORD? @V60C1BD 00469000
  473. BE MDB1 BR IF NOT @V60C1BD 00470000
  474. O R8,=A(UDEVLR) SIGNAL THAT READ LINKS ALLOWED @V60C1BD 00471000
  475. MDB1 CLI UMDISKWP,C' ' IS THERE A WRITE PASSWORD? @V60C1BD 00472000
  476. BE MDB2 BR IF NOT @V60C1BD 00473000
  477. O R8,=A(UDEVLW) SIGNAL THAT WRITE LINKS ALLOWED @V60C1BD 00474000
  478. MDB2 CLI UMDISKMP,C' ' IS THERE A MULTIPLE PASSWORD? @V60C1BD 00475000
  479. BE MDB3 BR IF NOT @V60C1BD 00476000
  480. O R8,=A(UDEVLM) SIGNAL THAT MULT. LINKS ALLOWED @V60C1BD 00477000
  481. MDB3 X R8,MASK OBSCURE NEW LINK MODE @V60C1BD 00478000
  482. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00479000
  483. BO TMBY2 BR IF YES @V60C1BD 00480000
  484. STC R8,UDEVMODE ESTABLISH NEW LINK MODE @V60C1BD 00481000
  485. MVC UDEVPASR(L'UDEVPASR*3),UMDISKRP EST. NEW PASSWD@V60C1BD 00482000
  486. XC UDEVPASR(L'UDEVPASR*3),MASK OBSCURE NEW PASSWD@V60C1BD 00483000
  487. MVC UDEVSTAT(L'UDEVSTAT),UWORK SET NEW UDEVSTAT @VMI0024 00484000
  488. XC UDEVSTAT(L'UDEVSTAT),MASK MASK UDEVSTAT @VMI0044 00485000
  489. TMBY2 DS 0H @V60C1BD 00486000
  490. B DEVXCC0 NORMAL RETURN @V60C1BD 00487000
  491. SPACE 1 00488000
  492. BLPW DS 0H @V60C1BD 00489000
  493. TM UWORK,UDEVLONG LONG UDEVBLOK? @V60C1BD 00490000
  494. BO MDSKERR4 BR IF YES, ERROR @V60C1BD 00491000
  495. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00492000
  496. BO TMBY2 BR IF YES @V60C1BD 00493000
  497. X R8,MASK OBSCURE NEW LINK MODE @V60C1BD 00494000
  498. STC R8,UDEVMODE ESTABLISH NEW LINK MODE @V60C1BD 00495000
  499. MVC UDEVSTAT(L'UDEVSTAT),UWORK SET NEW UDEVSTAT @VMI0024 00496000
  500. XC UDEVSTAT(L'UDEVSTAT),MASK MASK UDEVSTAT @VMI0044 00497000
  501. B DEVXCC0 NORMAL RETURN @V60C1BD 00498000
  502. SPACE 1 00499000
  503. MDSKERR1 LA R15,ERRMDSK1 INVALID MDISK IN PLIST @V60C1BD 00500000
  504. B EXITCC1 ERROR RETURN @V60C1BD 00501000
  505. SPACE 1 00502000
  506. MDSKERR2 LA R15,ERRMDSK2 INVALID LINK MODE @V60C1BD 00503000
  507. B EXITCC1 ERROR RETURN @V60C1BD 00504000
  508. SPACE 1 00505000
  509. MDSKERR3 LA R15,ERRMDSK3 INVALID PASSWORDS...SHORT UDEV. @V60C1BD 00506000
  510. B EXITCC1 ERROR RETURN @V60C1BD 00507000
  511. SPACE 1 00508000
  512. MDSKERR4 LA R15,ERRMDSK4 BLANK PASSWORDS WITH LONG UDEV. @V60C1BD 00509000
  513. B EXITCC1 ERROR RETURN @V60C1BD 00510000
  514. SPACE 1 00511000
  515. DROP R5,R7 @V60C1BD 00512000
  516. EJECT 00513000
  517. *-------------------------------------------------------------- 00514000
  518. * STORAGE | 00515000
  519. *---------- 00516000
  520. * THE UDIRBLOK FOR THE USERID HAS BEEN FOUND AND THE CURRENT 00517000
  521. * LOGON PASSWORDS MATCH. 00518000
  522. * 00519000
  523. * OPERATION: 00520000
  524. * 1. READ THE UMACBLOK FOR THE USERID 00521000
  525. * 2. FIND THE LENGTH OF THE STORAGE ARGUMENT 00522000
  526. * 3. CHECK THAT LAST BYTE IS A K AND CONVERT "K" TO BYTES 00523000
  527. * 4. IF OPERATION IS "STORAGE", THEN CHECK THAT NEW SIZE DOES 00524000
  528. * NOT EXCEED THE USER'S MAXIMUM STORAGE 00525000
  529. * 5. IF OPERATION IS "MAXSTOR", THEN CHECK THAT NEW SIZE DOES 00526000
  530. * NOT EXCEED 16M 00527000
  531. * 6. ESTABLISH NEW STORAGE SIZE IN UMACBLOK 00528000
  532. * 00529000
  533. *-------------------------------------------------------------- 00530000
  534. STORAGE DS 0H @V60C1BD 00531000
  535. SPACE 1 00532000
  536. * GET THE UMACBLOK 00533000
  537. BAL R9,READUMAC @V60C1BD 00534000
  538. BNZ OPRET BR IF ERROR READING UMAC @V60C1BD 00535000
  539. SPACE 1 00536000
  540. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00537000
  541. USING UMACBLOK,R5 @V60C1BD 00538000
  542. * CONVERT STORAGE FROM EBCDIC TO BINARY VALUE 00539000
  543. LA R1,USTORAGE SET FIELD ADDRESS IN REG @V60C1BD 00540000
  544. LA R2,L'USTORAGE SET MAX. FIELD LENGTH @V60C1BD 00541000
  545. BAL R9,FINDLA TO ROUTINE TO FIND FIELD LENGTH @V60C1BD 00542000
  546. BNZ STORERR4 BR IF ERROR IN DATA @V60C1BD 00543000
  547. LTR R2,R2 IS LENGTH VALID? @V60C1BD 00544000
  548. BNP STORERR4 BR IF NOT @V60C1BD 00545000
  549. BCTR R2,0 DECREMENT FIELD LENGTH @V60C1BD 00546000
  550. LA R8,0(R2,R1) POINT TO LAST BYTE OF FIELD @V60C1BD 00547000
  551. CLI 0(R8),C'K' IS LAST BYTE A 'K'? @V60C1BD 00548000
  552. BNE STORERR4 BR IF NOT @V60C1BD 00549000
  553. SPACE 1 00550000
  554. * CHECK FIELD FOR NUMERICS, R2 = LENGTH OF NUMERIC PORTION 00551000
  555. BAL R9,FINDLN CHECK NUMERIC PORTION @V60C1BD 00552000
  556. BNE STORERR4 BR IF ERROR IN DATA @V60C1BD 00553000
  557. BCTR R2,0 DECREMENT LENGTH FOR EXECUTE @V60C1BD 00554000
  558. LA R8,USTORAGE SET FIELD ADDRESS IN REG @V60C1BD 00555000
  559. EX R2,PACKINST EXECUTE A PACK INSTRUCTION @V60C1BD 00556000
  560. TM UWORK+7,X'0C' CHECK FOR A HEX C-F IN SIGN POS. @V60C1BD 00557000
  561. BNO STORERR3 BR IF NOT PROPER SIGN @V60C1BD 00558000
  562. CVB R8,UWORK CONVERT TO BINARY @V60C1BD 00559000
  563. SPACE 1 00560000
  564. * STORAGE VALUE IS NOW IN 'K'. CALCULATE BYTES. 00561000
  565. SLL R8,10 CALCULATE BYTES FROM 'K' @V60C1BD 00562000
  566. CLC UOP(L'UOP),KSTORAGE FOR NORMAL STORAGE? @V60C1BD 00563000
  567. BE NORMSTOR BR IF YES @V60C1BD 00564000
  568. C R8,=F'16777216' OVER MAX.? @V60C1BD 00565000
  569. BH STORERR2 BR IF YES @V60C1BD 00566000
  570. X R8,MASK OBSCURE STORAGE SIZE @V60C1BD 00567000
  571. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00568000
  572. BO TMBY3 BR IF YES @V60C1BD 00569000
  573. ST R8,UMACMCOR SET NEW MAX. STORAGE SIZE @V60C1BD 00570000
  574. TMBY3 DS 0H @V60C1BD 00571000
  575. B MACXCC0 TO NORMAL EXIT @V60C1BD 00572000
  576. SPACE 1 00573000
  577. NORMSTOR L R7,UMACMCOR GET MAXIMUM STORAGE SIZE @V60C1BD 00574000
  578. X R7,MASK UNMASK MAXIMUM STORAGE SIZE @V60C1BD 00575000
  579. CR R8,R7 DOES NEW STORAGE EXCEED MAX.? @V60C1BD 00576000
  580. BH STORERR1 BR IF YES, ERROR @V60C1BD 00577000
  581. X R8,MASK OBSCURE NEW STORAGE SIZE @V60C1BD 00578000
  582. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00579000
  583. BO TMBY4 BR IF YES @V60C1BD 00580000
  584. ST R8,UMACCORE ESTABLISH NEW STORAGE SIZE @V60C1BD 00581000
  585. TMBY4 DS 0H @V60C1BD 00582000
  586. B MACXCC0 BR TO NORMAL EXIT @V60C1BD 00583000
  587. SPACE 1 00584000
  588. STORERR1 LA R15,ERRSTOR1 @V60C1BD 00585000
  589. B EXITCC1 ERROR RETURN @V60C1BD 00586000
  590. SPACE 1 00587000
  591. STORERR2 LA R15,ERRSTOR2 @V60C1BD 00588000
  592. B EXITCC1 ERROR RETURN @V60C1BD 00589000
  593. SPACE 1 00590000
  594. STORERR3 LA R15,ERRSTOR3 @V60C1BD 00591000
  595. B EXITCC1 ERROR RETURN @V60C1BD 00592000
  596. SPACE 1 00593000
  597. STORERR4 LA R15,ERRSTOR4 @V60C1BD 00594000
  598. B EXITCC1 ERROR RETURN @V60C1BD 00595000
  599. DROP R5 @V60C1BD 00596000
  600. EJECT 00597000
  601. *-------------------------------------------------------------- 00598000
  602. * PRIVLEGE | 00599000
  603. *----------- 00600000
  604. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00601000
  605. * 00602000
  606. * OPERATION: 00603000
  607. * 1. READ THE UMACBLOK FOR THE USERID 00604000
  608. * 2. CHECK FOR BLANK PRIVILEGE ARGUMENT 00605000
  609. * 3. USE "TRT" INSTRUCTION TO DEVELOP A CODED VALUE 00606000
  610. * REPRESENTING THE PRIVILEGE CLASSES 00607000
  611. * 4. WHEN ALL ARGUMENT BYTES HAVE BEEN EXAMINED, CHECK THAT 00608000
  612. * DEVELOPED CODED VALUE IS VALID 00609000
  613. * 5. ESTABLISH NEW PRIVILEGE VALUE 00610000
  614. * 00611000
  615. *-------------------------------------------------------------- 00612000
  616. PRIVLEGE DS 0H @V60C1BD 00613000
  617. SPACE 1 00614000
  618. * GET THE UMACBLOK 00615000
  619. BAL R9,READUMAC @V60C1BD 00616000
  620. BNZ OPRET BR IF ERROR READING UAMC @V60C1BD 00617000
  621. SPACE 1 00618000
  622. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00619000
  623. USING UMACBLOK,R5 NORMALLY R2, (CAN'T DUE TO TRT) @V60C1BD 00620000
  624. SPACE 1 00621000
  625. * SOME INITIAL CHECKING OF PRIVILEGE FIELD 00622000
  626. CLC UPRIV(L'UPRIV),BLANKS IS FIELD ALL BLANKS? @V60C1BD 00623000
  627. BE PRIVERR1 BR IF YES @V60C1BD 00624000
  628. LA R8,X'FF' SETUP TO TEST FOR BLANKS FROM TRT@V60C1BD 00625000
  629. LA R4,X'BD' SETUP TO INDICATE ERROR FROM TRT @V60C1BD 00626000
  630. SR R2,R2 ZERO FUNCTION REGISTER @V60C1BD 00627000
  631. SR R9,R9 ZERO ACCUMULATION REGISTER @V60C1BD 00628000
  632. LA R1,UPRIV POINT TO START OF PRIV. CLASSES @V60C1BD 00629000
  633. SPACE 1 00630000
  634. PRIVLP LA R7,UPRIV+8 SET UP A(END OF OPERAND +1) @V60C1BD 00631000
  635. SR R7,R1 CALC. LENGTH OF TRT @V60C1BD 00632000
  636. BNP PRIVEND BR IF END OF OPERAND REACHED @V60C1BD 00633000
  637. BCTR R7,0 DECREMENT LENGTH FOR EXECUTED TRT@V60C1BD 00634000
  638. EX R7,TRTINST EXECUTE TRT @V60C1BD 00635000
  639. BZ PRIVERR2 BR IF NO VALID ARGUMENTS @V60C1BD 00636000
  640. CR R2,R8 A BLANK (END OF FIELD)? @V60C1BD 00637000
  641. BE PRIVEND BR IF YES @V60C1BD 00638000
  642. CR R2,R4 IS FUNCTION VALID? @V60C1BD 00639000
  643. BE PRIVERR4 BR IF NOT @V60C1BD 00640000
  644. SPACE 1 00641000
  645. * A VALID OPERAND BYTE HAS BEEN FOUND AND IS IN R2. ADD THIS 00642000
  646. * INTO CUMULATIVE PRIVILEGE CLASS FIELD IN R9. 00643000
  647. * R1 POINTS TO LIST BYTE CORRESPONDING TO FUNCTION 00644000
  648. OR R9,R2 ACCUMULATE PRIVILEGE CLASS VALUE @V60C1BD 00645000
  649. LA R1,1(,R1) STEP TO NEXT OPERAND BYTE @V60C1BD 00646000
  650. B PRIVLP CYCLE @V60C1BD 00647000
  651. SPACE 1 00648000
  652. PRIVEND LTR R9,R9 ANYTHING ACCUMULATED? @V60C1BD 00649000
  653. BNP PRIVERR3 BR IF NOT @V60C1BD 00650000
  654. CR R9,R8 IS ACCUM. CLASS OVER X'FF' ? @V60C1BD 00651000
  655. BH PRIVERR3 BR IF YES @V60C1BD 00652000
  656. X R9,MASK OBSCURE PRIVILEGE CLASS @V60C1BD 00653000
  657. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00654000
  658. BO TMBY5 BR IF YES @V60C1BD 00655000
  659. STC R9,UMACCLEV ESTABLISH NEW PRIVILEGE CLASS @V60C1BD 00656000
  660. TMBY5 DS 0H @V60C1BD 00657000
  661. B MACXCC0 NORMAL EXIT @V60C1BD 00658000
  662. SPACE 1 00659000
  663. PRIVERR1 LA R15,ERRPRIV1 @V60C1BD 00660000
  664. B EXITCC1 ERROR RETURN @V60C1BD 00661000
  665. SPACE 1 00662000
  666. PRIVERR2 LA R15,ERRPRIV2 @V60C1BD 00663000
  667. B EXITCC1 ERROR RETURN @V60C1BD 00664000
  668. SPACE 1 00665000
  669. PRIVERR3 LA R15,ERRPRIV3 @V60C1BD 00666000
  670. B EXITCC1 ERROR RETURN @V60C1BD 00667000
  671. SPACE 1 00668000
  672. PRIVERR4 LA R15,ERRPRIV4 @V60C1BD 00669000
  673. B EXITCC1 ERROR RETURN @V60C1BD 00670000
  674. SPACE 2 00671000
  675. * EXECUTED TRT INSTRUCTION 00672000
  676. TRTINST TRT 0(*-*,R1),TRPRVTBL TRANSLATE VALID BYTE @V60C1BD 00673000
  677. SPACE 1 00674000
  678. DROP R5 DROP UMACBLOK REFERENCE @V60C1BD 00675000
  679. EJECT 00676000
  680. *-------------------------------------------------------------- 00677000
  681. * PRIORTY | 00678000
  682. *----------- 00679000
  683. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00680000
  684. * 00681000
  685. * OPERATION: 00682000
  686. * 1. READ THE UMACBLOK FOR THE USERID 00683000
  687. * 2. CHECK PRIORITY ARGUMENT PRIOR TO CONVERSION TO BINARY 00684000
  688. * 3. CHECK THAT CONVERTED VALUE FALLS BETWEEN 0 AND 99 00685000
  689. * 4. ESTABLISH NEW PRIORITY 00686000
  690. * 00687000
  691. *-------------------------------------------------------------- 00688000
  692. PRIORTY DS 0H @V60C1BD 00689000
  693. SPACE 1 00690000
  694. * GET THE UMACBLOK 00691000
  695. BAL R9,READUMAC @V60C1BD 00692000
  696. BNE OPRET BR IF ERROR READING UMAC @V60C1BD 00693000
  697. SPACE 1 00694000
  698. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00695000
  699. USING UMACBLOK,R5 @V60C1BD 00696000
  700. SPACE 1 00697000
  701. * FIND LENGTH OF PRIORITY FIELD 00698000
  702. LA R1,UPRIOR SET UP ADDRESS OF PRIORITY FIELD @V60C1BD 00699000
  703. LA R2,L'UPRIOR SET UP LENGTH OF UPRIOR FIELD @VMI0025 00700000
  704. BAL R9,FINDLN FIND LENGTH (NUMERIC ONLY) @V60C1BD 00701000
  705. BNZ PRIERR1 BR IF ERROR @V60C1BD 00702000
  706. LTR R2,R2 IS LENGTH VALID? @V60C1BD 00703000
  707. BNP PRIERR2 BR IF NOT @V60C1BD 00704000
  708. C R2,F2 IS LENGTH OVER 2 BYTES? @V60C1BD 00705000
  709. BH PRIERR4 BR IF YES @V60C1BD 00706000
  710. LA R8,UPRIOR SET UP ADDRESS OF PRIORITY FIELD @V60C1BD 00707000
  711. BCTR R2,0 DECREMENT LEN. FOR EXECUTED PACK @V60C1BD 00708000
  712. EX R2,PACKINST EXECUTE A PACK INSTRUCTION @V60C1BD 00709000
  713. TM UWORK+7,X'0C' CHECK FOR HEX C-F IN SIGN @V60C1BD 00710000
  714. BNO PRIERR3 BR IF NOT PROPER SIGN @V60C1BD 00711000
  715. CVB R8,UWORK CONVERT TO BINARY @V60C1BD 00712000
  716. C R8,=F'99' CHECK FOR VALID RANGE @V60C1BD 00713000
  717. BH PRIERR4 BR IF > 99 @V60C1BD 00714000
  718. X R8,MASK OBSCURE PRIORITY @V60C1BD 00715000
  719. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00716000
  720. BO TMBY6 BR IF YES @V60C1BD 00717000
  721. STC R8,UMACPRIR ESTABLISH NEW PRIORITY @V60C1BD 00718000
  722. TMBY6 DS 0H @V60C1BD 00719000
  723. B MACXCC0 @V60C1BD 00720000
  724. SPACE 1 00721000
  725. PRIERR1 LA R15,ERRPRI1 @V60C1BD 00722000
  726. B EXITCC1 ERROR RETURN @V60C1BD 00723000
  727. SPACE 1 00724000
  728. PRIERR2 LA R15,ERRPRI2 @V60C1BD 00725000
  729. B EXITCC1 ERROR RETURN @V60C1BD 00726000
  730. SPACE 1 00727000
  731. PRIERR3 LA R15,ERRPRI3 @V60C1BD 00728000
  732. B EXITCC1 ERROR RETURN @V60C1BD 00729000
  733. SPACE 1 00730000
  734. PRIERR4 LA R15,ERRPRI4 @V60C1BD 00731000
  735. B EXITCC1 ERROR RETURN @V60C1BD 00732000
  736. SPACE 1 00733000
  737. DROP R5 @V60C1BD 00734000
  738. EJECT 00735000
  739. *-------------------------------------------------------------- 00736000
  740. * EDITCHAR | 00737000
  741. *----------- 00738000
  742. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00739000
  743. * 00740000
  744. * 1. READ THE UMACBLOK FOR THE USERID 00741000
  745. * 2. ESTABLISH THE NEW EDIT CHARACTERS 00742000
  746. * 00743000
  747. *-------------------------------------------------------------- 00744000
  748. EDITCHAR DS 0H @V60C1BD 00745000
  749. SPACE 1 00746000
  750. * GET THE UMACBLOK 00747000
  751. BAL R9,READUMAC @V60C1BD 00748000
  752. BNE OPRET BR IF ERROR READING UMAC @V60C1BD 00749000
  753. SPACE 1 00750000
  754. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00751000
  755. USING UMACBLOK,R5 @V60C1BD 00752000
  756. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00753000
  757. BO TMBY7 BR IF YES @V60C1BD 00754000
  758. MVC UMACLEND(L'UEDITCH),UEDITCH EST. NEW EDIT CHAR.@V60C1BD 00755000
  759. XC UMACLEND(L'UEDITCH),MASK OBSCURE EDIT CHAR. @V60C1BD 00756000
  760. TMBY7 DS 0H @V60C1BD 00757000
  761. B MACXCC0 NORMAL RETURN @V60C1BD 00758000
  762. SPACE 1 00759000
  763. DROP R5 @V60C1BD 00760000
  764. EJECT 00761000
  765. *-------------------------------------------------------------- 00762000
  766. * OPTIONS | 00763000
  767. *---------- 00764000
  768. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00765000
  769. * 00766000
  770. * OPERATION: 00767000
  771. * 1. READ THE UMACBLOK FOR THE USERID 00768000
  772. * 2. SCAN FOR ARGUMENTS. VALIDATE EACH ARGUMENT AND DEVELOP 00769000
  773. * A CODED VALUE. 00770000
  774. * 3. FOR OPTIONS "CPUID" AND "AFFINITY", SCAN FOR OPTION 00771000
  775. * ARGUMENT FOLLOWING OPTION. CONVERT OPTION ARGUEMENTS TO 00772000
  776. * PROPER FORMAT FOR DIRECTORY. 00773000
  777. * 4. ESTABLISH NEW CODED OPTION VALUE AND CPUID/AFFINITY 00774000
  778. * VALUES IF PRESENT. 00775000
  779. * 00776000
  780. *-------------------------------------------------------------- 00777000
  781. OPTIONS DS 0H @V60C1BD 00778000
  782. SPACE 1 00779000
  783. * GET THE UMACBLOK 00780000
  784. BAL R9,READUMAC @V60C1BD 00781000
  785. BNE OPRET BR IF ERROR READING UMAC @V60C1BD 00782000
  786. SPACE 1 00783000
  787. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00784000
  788. USING UMACBLOK,R5 @V60C1BD 00785000
  789. SR R0,R0 ZERO REG. USED FOR OPTION VALUE @V60C1BD 00786000
  790. LA R4,MAXOPTNS SET UP MAX. NO. OF OPTIONS @V60C1BD 00787000
  791. LA R1,UOPTIONS POINT TO FIRST ARGUMENT @V60C1BD 00788000
  792. ** 00789000
  793. MVC UWORK(L'UMACPUID),UMACPUID SAVE CURRENT CPUID @V60C1BD 00790000
  794. MVC UWORK+3(L'UMACAFF),UMACAFF SAVE CURRENT AFFIN. @V60C1BD 00791000
  795. ** 00792000
  796. SPACE 1 00793000
  797. * FIND OPTION LENGTH 00794000
  798. OPTNLP1 LA R2,L'OPTNAME SET MAX LENGTH OF OPTION NAME @V60C1BD 00795000
  799. BAL R9,FINDLA FIND LENGTH OF OPTION @V60C1BD 00796000
  800. BNZ OPTNERR1 BR IF ERROR IN LENGTH @V60C1BD 00797000
  801. LTR R2,R2 IS SIZE ZERO? @V60C1BD 00798000
  802. BZ OPTNSET BR IF YES, ASSUME END OF ARGS @V60C1BD 00799000
  803. BCTR R2,0 DECREMENT LENGTH FOR EXECUTE @V60C1BD 00800000
  804. LA R7,OPTIONTB POINT TO START OF OPTION TABLE @V60C1BD 00801000
  805. USING OPTNSECT,R7 @V60C1BD 00802000
  806. OPTNLP2 EX R2,CLCOPTN IS THERE A MATCH? @V60C1BD 00803000
  807. BE OPMATCH BR IF YES @V60C1BD 00804000
  808. LA R7,OPTNLN(,R7) STEP TO NEXT OPTION IN TABLE @V60C1BD 00805000
  809. CLI OPTNAME,X'FF' AT END OF OPTION TABLE? @V60C1BD 00806000
  810. BNE OPTNLP2 BR IF NOT, CYCLE @V60C1BD 00807000
  811. B OPTNERR1 ERROR, INVALID OPTION @V60C1BD 00808000
  812. SPACE 1 00809000
  813. OPMATCH SR R9,R9 CLEAR REGISTER @V60C1BD 00810000
  814. ICM R9,B'0011',OPTNVALU GET OPTION VALUE @V60C1BD 00811000
  815. OR R0,R9 ACCUMULATE OPTION VALUE @V60C1BD 00812000
  816. LA R1,1(R1,R2) ADD OPTION LENGTH TO START ADDR. @V60C1BD 00813000
  817. * AND COMPENSATE FOR BCTR 00814000
  818. CLI 0(R1),X'FF' AT END OF ARG. LIST? @V60C1BD 00815000
  819. BE OPTNSET BR IF YES @V60C1BD 00816000
  820. CLI 0(R1),C' ' A BLANK? (SHOULD BE) @V60C1BD 00817000
  821. BNE OPTNERR1 BR IF NOT A BLANK @V60C1BD 00818000
  822. LA R1,1(,R1) POINT TO START OF NEXT OPTION @V60C1BD 00819000
  823. CLI OPTNFLG,X'FF' DO ARGUMENTS FOLLOW OPTION? @V60C1BD 00820000
  824. BE OPTNARG BR IF YES @V60C1BD 00821000
  825. OPTNBCT BCT R4,OPTNLP1 BR IF WITHIN MAX. NO. OF OPTIONS @V60C1BD 00822000
  826. B OPTNERR2 @V60C1BD 00823000
  827. SPACE 1 00824000
  828. OPTNSET C R0,=A(OPTNMAXV) IS OPTION VALUE WITHIN BOUNDS? @V60C1BD 00825000
  829. BH OPTNERR3 BR IF NOT @V60C1BD 00826000
  830. X R0,MASK OBSCURE OPTION BYTE @V60C1BD 00827000
  831. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00828000
  832. BO TMBY8 BR IF YES @V60C1BD 00829000
  833. STH R0,UMACOPT ESTABLISH NEW OPTION BYTE @V60C1BD 00830000
  834. ** 00831000
  835. MVC UMACPUID(L'UMACPUID),UWORK ESTABLISH CPUID @V60C1BD 00832000
  836. MVC UMACAFF(L'UMACAFF),UWORK+3 ESTABLISH AFFINITY@V60C1BD 00833000
  837. ** 00834000
  838. TMBY8 DS 0H @V60C1BD 00835000
  839. B MACXCC0 NORMAL RETURN @V60C1BD 00836000
  840. SPACE 1 00837000
  841. * CHECK OPTION ARGUMENTS 00838000
  842. OPTNARG C R9,=A(VCPUID) CPUID OPTION? @V60C1BD 00839000
  843. BNE OPTNAFF BR IF NOT @V60C1BD 00840000
  844. LA R2,LVCPUID SET UP MAX LENGTH OF CPUID ARG. @V60C1BD 00841000
  845. BAL R9,FINDLA FIND LENGTH OF CPUID ARGUMENT @V60C1BD 00842000
  846. BNZ OPTNERR1 BR IF ERROR @V60C1BD 00843000
  847. BAL R9,BCDTOHEX CONVERT TO HEX @V60C1BD 00844000
  848. BNZ OPTNERR1 BR IF ERROR @V60C1BD 00845000
  849. ** 00846000
  850. STCM R2,B'0111',UWORK SAVE NEW CPUID @V60C1BD 00847000
  851. XC UWORK(L'UMACPUID),MASK OBSCURE CPUID @V60C1BD 00848000
  852. ** 00849000
  853. B OPTNBCT @V60C1BD 00850000
  854. SPACE 1 00851000
  855. OPTNAFF C R9,=A(VAFFIN) AFFINITY OPTION? @V60C1BD 00852000
  856. BNE OPTNERR1 BR IF NOT, ERROR @V60C1BD 00853000
  857. LA R2,LVAFFIN SET UP MAX LENGTH OF AFFIN. ARG. @V60C1BD 00854000
  858. BAL R9,FINDLN FIND LENGTH OF AFFINITY ARGUMENT @V60C1BD 00855000
  859. BNZ OPTNERR1 BR IF ERROR @V60C1BD 00856000
  860. BAL R9,BCDTOBIN CONVERT TO BINARY @V60C1BD 00857000
  861. BNZ OPTNERR1 BR IF ERROR @V60C1BD 00858000
  862. ** 00859000
  863. STC R2,UWORK+3 SAVE AFFINITY @V60C1BD 00860000
  864. OI UWORK+3,UMACFFON SPECIFY AFFINITY @V60C1BD 00861000
  865. XC UWORK+3(L'UMACFFON),MASK OBSCURE AFFINITY @V60C1BD 00862000
  866. ** 00863000
  867. B OPTNBCT @V60C1BD 00864000
  868. SPACE 1 00865000
  869. OPTNERR1 LA R15,ERROPTN1 INVALID OPTION @V60C1BD 00866000
  870. B EXITCC1 ERROR RETURN @V60C1BD 00867000
  871. SPACE 1 00868000
  872. OPTNERR2 LA R15,ERROPTN2 NO FENCE AT END OF PLIST @V60C1BD 00869000
  873. B EXITCC1 ERROR RETURN @V60C1BD 00870000
  874. SPACE 1 00871000
  875. OPTNERR3 LA R15,ERROPTN3 INVALID ACCUM. OPTION VALUE @V60C1BD 00872000
  876. B EXITCC1 ERROR RETURN @V60C1BD 00873000
  877. SPACE 1 00874000
  878. * EXECUTED INSTRUCTION 00875000
  879. CLCOPTN CLC 0(*-*,R1),OPTNAME LOOK FOR OPTION MATCH @V60C1BD 00876000
  880. SPACE 1 00877000
  881. DROP R5,R7 @V60C1BD 00878000
  882. EJECT 00879000
  883. *-------------------------------------------------------------- 00880000
  884. * IPL | 00881000
  885. *---------- 00882000
  886. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00883000
  887. * 00884000
  888. * OPERATION: 00885000
  889. * 1. READ THE UMACBLOK FOR THE USERID 00886000
  890. * 2. ESTABLISH THE NEW IPL DATA 00887000
  891. * 00888000
  892. *-------------------------------------------------------------- 00889000
  893. IPL DS 0H @V60C1BD 00890000
  894. SPACE 1 00891000
  895. * GET THE UMACBLOK 00892000
  896. BAL R9,READUMAC @V60C1BD 00893000
  897. BNE OPRET BR IF ERROR READING UMAC @V60C1BD 00894000
  898. SPACE 1 00895000
  899. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00896000
  900. USING UMACBLOK,R5 @V60C1BD 00897000
  901. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00898000
  902. BO TMBY9 BR IF YES @V60C1BD 00899000
  903. MVC UMACIPL(L'UMACIPL),UIPL ESTABLISH NEW IPL NAME @V60C1BD 00900000
  904. XC UMACIPL(L'UMACIPL),MASK OBSCURE IPL NAME @V60C1BD 00901000
  905. TMBY9 DS 0H @V60C1BD 00902000
  906. B MACXCC0 @V60C1BD 00903000
  907. SPACE 1 00904000
  908. DROP R5 @V60C1BD 00905000
  909. EJECT 00906000
  910. *-------------------------------------------------------------- 00907000
  911. * DISTRIB | 00908000
  912. *---------- 00909000
  913. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00910000
  914. * 00911000
  915. * OPERATION: 00912000
  916. * 1. READ THE UMACBLOK 00913000
  917. * 2. ESTABLISH THE NEW DISTRIBUTION DATA 00914000
  918. * 00915000
  919. *-------------------------------------------------------------- 00916000
  920. DISTRIB DS 0H @V60C1BD 00917000
  921. SPACE 1 00918000
  922. * GET THE UMACBLOK 00919000
  923. BAL R9,READUMAC @V60C1BD 00920000
  924. BNE OPRET BR IF ERROR READING UMAC @V60C1BD 00921000
  925. SPACE 1 00922000
  926. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00923000
  927. USING UMACBLOK,R5 @V60C1BD 00924000
  928. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 00925000
  929. BO TMBY10 BR IF YES @V60C1BD 00926000
  930. MVC UMACDIST(L'UMACDIST),UDISTRIB EST. NEW DIST. @V60C1BD 00927000
  931. XC UMACDIST(L'UMACDIST),MASK OBSCURE DISTRIBUTION @V60C1BD 00928000
  932. TMBY10 DS 0H @V60C1BD 00929000
  933. B MACXCC0 @V60C1BD 00930000
  934. SPACE 1 00931000
  935. DROP R5 @V60C1BD 00932000
  936. EJECT 00933000
  937. *-------------------------------------------------------------- 00934000
  938. * ACCOUNT | 00935000
  939. *---------- 00936000
  940. * THE UDIRBLOK HAS BEEN READ AND THE LOGON PASSWORDS MATCH 00937000
  941. * 00938000
  942. * OPERATION: 00939000
  943. * 1. IF THE OPERATION IS TEMPORARY, BYPASS READING THE UMACBLOK 00940000
  944. * AND SET A FLAG TO SUPPRESS UPDATING THE OBJECT DIRECTORY 00941000
  945. * AND GO TO STEP 4. 00942000
  946. * 2. ELSE, READ THE UMACBLOK 00943000
  947. * 3. IF THE OPERATION IS NORMAL, GO TO STEP 10 TO ESTABLISH NEW 00944000
  948. * ACCOUNT DATA. 00945000
  949. * 4. ELSE, CHECK IF OBJECT USER IS ACTIVE. IF NOT, GO TO STEP 10 00946000
  950. * TO ESTABLISH NEW ACCOUNT DATA. 00947000
  951. * 5. GET FREE STORAGE FOR A COMMAND BUFFER. 00948000
  952. * 6. CALL DMKCPVAC (ACNT COMMAND) TO CREATE AN ACCOUNTING RECORD 00949000
  953. * BASED ON THE CURRENT ACCOUNT DATA. 00950000
  954. * 7. RETURN COMMAND BUFFER FREE STORAGE. 00951000
  955. * 8. UPDATE ACCOUNTING FIELD IN OBJECT USERID'S VMBLOK. 00952000
  956. * 9. IF OPERATION IS TEMPORARY, RETURN TO MAIN LINE. 00953000
  957. * 10. ESTABLISH NEW ACCOUNT DATA IN OBJECT DIRECTORY AND RETURN. 00954000
  958. * 00955000
  959. *-------------------------------------------------------------- 00956000
  960. ACCOUNT DS 0H @V60C1BD 00957000
  961. SPACE 1 00958000
  962. * CHECK WHETHER OPERATION IS TEMPORARY. IF SO, DO NOT GET 00959000
  963. * THE UMACBLOK, AND SET NO-UPDATE FLAG. 00960000
  964. CLC UOP(L'UOP),KTACCT IS OPERATION TEMPORARY? @V60C1BD 00961000
  965. BNE ACCRDMAC BR IF NOT @V60C1BD 00962000
  966. SPACE 1 00963000
  967. OI UFLAGS,UNOUPF SET NO-UPDATE FLAG @V60C1BD 00964000
  968. B ACHKACT GO CHECK FOR ACTIVE OBJECT USER @V60C1BD 00965000
  969. SPACE 1 00966000
  970. * GET THE UMACBLOK 00967000
  971. ACCRDMAC BAL R9,READUMAC @V60C1BD 00968000
  972. BNE OPRET BR IF ERROR READING UMAC @V60C1BD 00969000
  973. SPACE 1 00970000
  974. L R5,UMACAD GET REAL ADDRESS OF UMAC @V60C1BD 00971000
  975. USING UMACBLOK,R5 @V60C1BD 00972000
  976. SPACE 1 00973000
  977. * IF OPERATION IS NORMAL ACCOUNT, JUST UPDATE THE OBJECT 00974000
  978. * DIRECTORY. IF OPERATION IS IMMEDIATE, UPDATE THE 00975000
  979. * VMBLOK AS WELL, BUT BEFOREHAND, CAUSE AN ACCOUNTING RECORD 00976000
  980. * TO BE CREATED. 00977000
  981. CLC UOP(L'UOP),KACCOUNT NORMAL ACCOUNT? @V60C1BD 00978000
  982. BE NACCT BR IF YES @V60C1BD 00979000
  983. SPACE 1 00980000
  984. * CHECK WHETHER USER IS ACTIVE 00981000
  985. ACHKACT BAL R9,FINDVMBK @V60C1BD 00982000
  986. BNZ TMBY12 BR IF VMBLOK NOT FOUND @VA11229 00983010
  987. ST R1,UOBJVMBK SAVE OBJECT VMBLOK @V60C1BD 00984000
  988. SPACE 1 00985000
  989. * CREATE ACCOUNTING RECORD VIA ACNT COMMAND 00986000
  990. ST R11,UVMBLOK SAVE CALLER'S VMBLOK ADDRESS @V60C1BD 00987000
  991. L R1,ASYSOP GET SYSTME OP'S ADDRESS @VA10286 00988010
  992. SWTCHVM @VA10286 00988020
  993. LA R0,BUFSIZE GET CONSOLE BUFFER SIZE @V60C1BD 00989000
  994. CALL DMKFREE GET COMMAND BUFFER @V60C1BD 00990000
  995. LR R9,R1 ACNT NEEDS BUFFER ADDRESS IN R9 @V60C1BD 00991000
  996. USING BUFFER,R9 @V60C1BD 00992000
  997. MVC 0(8,R1),BLANKS BLANK BUFFER @V60C1BD 00993000
  998. MVC 8((BUFSIZE-1)*8,R1),0(R1) @V60C1BD 00994000
  999. MVC 0(5,R1),=CL5'ACNT ' SET COMMAND NAME @V60C1BD 00995000
  1000. MVC 5(L'UWORK,R1),UWORK SET READABLE USERID IN CMD @V60C1BD 00996000
  1001. LA R0,13 SET MAX. LENGTH OF 'ACNT'+USERID @V60C1BD 00997000
  1002. ST R0,BUFCNT SET UP START OF CMD AT END OF BUF@V60C1BD 00998000
  1003. LA R1,5(,R1) POINT TO USERID @V60C1BD 00999000
  1004. ST R1,BUFNXT PUT INTO BUFFER CNTRL FIELD @V60C1BD 01000000
  1005. DROP R9 @V60C1BD 01001000
  1006. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 01002000
  1007. BO TMBY11 BR IF YES @V60C1BD 01003000
  1008. CALL DMKCPVAC CALL ACNT PROCESSOR @V60C1BD 01004000
  1009. TMBY11 DS 0H @V60C1BD 01005000
  1010. SPACE 1 01006000
  1011. * FREE BUFFER 01007000
  1012. LA R0,BUFSIZE GET BUFFER SIZE @V60C1BD 01008000
  1013. LR R1,R9 POINT TO BUFFER @V60C1BD 01009000
  1014. CALL DMKFRET FREE BUFFER @V60C1BD 01010000
  1015. L R1,UVMBLOK RESTORE CALLER'S VMBLOK @VA10286 01011010
  1016. SWTCHVM @VA10286 01011020
  1017. SPACE 1 01012000
  1018. * UPDATE ACCOUNT FIELD IN OBJECT VMBLOK 01013000
  1019. L R1,UOBJVMBK GET OBJECT VMBLOK @V60C1BD 01014000
  1020. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 01015000
  1021. BO TMBY12 BR IF YES @V60C1BD 01016000
  1022. MVC VMACNT-VMBLOK(L'UACCOUNT,R1),UACCOUNT @V60C1BD 01017000
  1023. TMBY12 DS 0H @V60C1BD 01018000
  1024. SPACE 1 01019000
  1025. * CHECK FOR TEMPORARY UPDATE AGAIN 01020000
  1026. CLC UOP(L'UOP),KTACCT TEMPORARY? @V60C1BD 01021000
  1027. BE MACXCC0 BR IF YES @V60C1BD 01022000
  1028. SPACE 1 01023000
  1029. NACCT DS 0H @V60C1BD 01024000
  1030. TM UFLAGS,UTESTMD TEST MODE? @V60C1BD 01025000
  1031. BO TMBY13 BR IF YES @V60C1BD 01026000
  1032. MVC UMACACCT(L'UMACACCT),UACCOUNT EST. NEW ACCT. @V60C1BD 01027000
  1033. XC UMACACCT(L'UMACACCT),MASK OBSCURE ACCOUNT DATA @V60C1BD 01028000
  1034. TMBY13 DS 0H @V60C1BD 01029000
  1035. B MACXCC0 @V60C1BD 01030000
  1036. SPACE 1 01031000
  1037. DROP R5 @V60C1BD 01032000
  1038. EJECT 01033000
  1039. *-------------------------------------------------------------- 01034000
  1040. * SUBROUTINE TO READ UDIRBLOK PAGES AND LOCATE A SPECIFIED 01035000
  1041. * USERID'S UDIRBLOK. 01036000
  1042. *-------------------------------------------------------------- 01037000
  1043. * 01038000
  1044. * ENTRY CONDITIONS: 01039000
  1045. * R3: ADDRESS OF UCNTRL 01040000
  1046. * R9: RETURN ADDRESS 01041000
  1047. * 01042000
  1048. * EXIT CONDITIONS: 01043000
  1049. * R3: ADDRESS OF UCNTRL (WITH DATA FILLED IN UCNTRL) 01044000
  1050. * CC0: OPERATION WAS SUCCESSFUL 01045000
  1051. * CC1: ERROR, 'URETCODE' IN UCNTRL CONTAINS DETAILS 01046000
  1052. * 01047000
  1053. * OPERATION: 01048000
  1054. * THE OBJECTIVE IS TO READ UDIRBLOK PAGES AND LOCATE THE UDIRBLOK 01049000
  1055. * OF THE USERID. THE UCNTRL BLOCK IS UPDATED WITH PERTINENT 01050000
  1056. * DATA ABOUT AND FROM THE UDIRBLOK NEEDED IN PROCESSING THE 01051000
  1057. * REQUEST. THE DATA FIELDS NEEDED ARE: 1) THE OBJECT DASD ADDRESS 01052000
  1058. * OF THE UDIRBLOK, 2) THE VIRTUAL SYSTEM PAGE ADDRESS OF THE 01053000
  1059. * UDIRBLOK, 3) THE REAL PAGE ADDRESS OF THE UDIRBLOK, 4) THE 01054000
  1060. * READ ADDRESS OF THE USER'S ENTRY IN THE UDIRBLOK, 5) THE 01055000
  1061. * ADDRESS OF THE USER'S UMACBLOK, AND 6) THE DISPLACEMENT OF THE 01056000
  1062. * THE USER'S UMACBLOK ENTRY. 01057000
  1063. * THE 'TRANS' MACRO IS USED TO READ UDIRBLOK PAGES USING THE 01058000
  1064. * VIRTUAL PAGE ADDRESSES FROM THE DMKSYSPL LIST. CONCURRENTLY, 01059000
  1065. * THE OBJECT DASD ADDRESS OF EACH PAGE CORRESPONDING TO A PAGE IN 01060000
  1066. * THE LIST IS EXTRACTED, INITIALLY FROM DMKSYSUD AND THEN FROM 01061000
  1067. * EACH UDIRBLOK, AND SAVED. 01062000
  1068. * 01063000
  1069. * 1. GET THE DASD ADDRESS OF THE FIRST UDIRBLOK PAGE ON OBJECT 01064000
  1070. * DASD AND POINTER TO LIST OF SYSTEM VIRTUAL PAGES OF 01065000
  1071. * UDIRBLOKS. 01066000
  1072. * 2. PAGE IN A UDIRBLOK PAGE USING THE 'TRANS' MACRO. 01067000
  1073. * 3. SAVE THE REAL ADDRESS OF THE UDIRBLOK PAGE AND SEARCH FOR THE 01068000
  1074. * USER'S UDIRBLOK ENTRY. IF NOT FOUND IN A PAGE, SAVE THE 01069000
  1075. * OBJECT DASD ADDRESS OF THE NEXT PAGE AND TRANS IN THE NEXT 01070000
  1076. * PAGE USING THE VIRTUAL ADDRESS IN THE LIST. CONTINUE THIS 01071000
  1077. * PROCESS UNTIL THE USER IS FOUND OR THE END OF THE LIST IS 01072000
  1078. * REACHED (SIGNALLED BY THE LAST ENTRY BEING NEGATIVE). THERE 01073000
  1079. * IS A CHECK TO MAKE SURE THAT FOR EACH VIRTUAL PAGE IN 01074000
  1080. * THE LIST THERE IS A CORRESPONDING OBJECT DASD ADDRESS. 01075000
  1081. * 4. IF THE USER'S ENTRY IS FOUND, THE PLIST CURRENT PASSWORD IS 01076000
  1082. * COMPARE WITH THE DIRECTORY CURRENT PASSWORD. A MISMATCH IS 01077000
  1083. * AN ERROR UNLESS THE PLIST PASSWORD IS BLANK IN WHICH CASE 01078000
  1084. * THE TEST MODE IS INDICATED. (NO UPDATING IS DONE IN THE 01079000
  1085. * TEST MODE). 01080000
  1086. * 5. IF THE USER'S ENTRY IS FOUND, THE DATA DESCRIBED ABOVE IS 01081000
  1087. * SAVED AND CONTROL IS RETURNED TO THE CALLER WITH CC=0 AND 01082000
  1088. * 'URETCODE' IN THE UCNTRL SET TO 0. 01083000
  1089. * 6. IF ANY ERRORS ARE ENCOUNTERED, AN ERROR CODE IS PLACED IN 01084000
  1090. * 'URETCODE' AND THE CC IS SET TO 1 BEFORE RETURNING TO THE 01085000
  1091. * CALLER. 01086000
  1092. * 01087000
  1093. * NOTES: 01088000
  1094. * 1) THE FIRST UDIRBLOK IN A PAGE IS USED FOR CONTROL, IT DOES 01089000
  1095. * NOT CONTAIN DATA FOR A USERID. THE 'UDIRDISP' FIELD CONTAINS 01090000
  1096. * THE DISPLACEMENT TO THE LAST UDIRBLOK IN THE PAGE, AND THE 01091000
  1097. * 'UDIRDASD' FIELD CONTAINS THE ADDRESS OF THE NEXT UDIR PAGE. 01092000
  1098. * 01093000
  1099. *-------------------------------------------------------------- 01094000
  1100. * INITIALIZATION... 01095000
  1101. READUDIR DS 0H @V60C1BD 01096000
  1102. L R0,DMKSYSUD GET POINTER TO FIRST DASD PAGE @V60C1BD 01097000
  1103. L R4,DMKSYSPL GET ADDRESS OF LIST OF POINTERS @V60C1BD 01098000
  1104. L R1,0(,R4) GET ADDRESS FROM LIST @V60C1BD 01099000
  1105. B CALLRU @V60C1BD 01100000
  1106. SPACE 1 01101000
  1107. * ...WHEN NEW PAGE IS NEEDED: 01102000
  1108. USING UDIRBLOK,R2 @V60C1BD 01103000
  1109. NEWPAGE L R2,URPAGDIR GET ADDRESS OF FIRST UDIR IN PAGE@V60C1BD 01104000
  1110. L R0,UDIRDASD GET NEXT DASD PTR @V60C1BD 01105000
  1111. LA R4,4(,R4) INCREMENT LIST PTR. TO NEXT ENTRY@V60C1BD 01106000
  1112. L R1,0(,R4) GET NEXT VIRTUAL PAGE ADDRESS @V60C1BD 01107000
  1113. LTR R1,R1 END OF LIST? @V60C1BD 01108000
  1114. BM LISTEND BR IF YES @V60C1BD 01109000
  1115. SPACE 1 01110000
  1116. * CHECK IF THERE IS A VALID DASD PTR. THERE SHOULD BE, AND IF NOT, 01111000
  1117. * THERE IS AN ERROR. 01112000
  1118. CALLRU LTR R0,R0 IS THERE A VALID DASD PTR? @V60C1BD 01113000
  1119. BM SYNCHERR BR IF NOT @V60C1BD 01114000
  1120. IC R0,DMKSYSUD+3 GET DEVICE CODE FROM SYSTEM @V60C1BD 01115000
  1121. BNZ RUREAD BR IF YES @V60C1BD 01116000
  1122. SPACE 1 01117000
  1123. * START FROM BEGINNING, USING PTR IN DMKSYSUD 01118000
  1124. L R0,DMKSYSUD GET POINTER TO START OF UDIRBLOKS@V60C1BD 01119000
  1125. RUREAD TRANS R2,R1,OPT=(BRING+SYSTEM+DEFER),IOER=RDERROR @V60C1BD 01120000
  1126. SPACE 1 01121000
  1127. *-------------------------------------------------------------- 01122000
  1128. * UDIRBLOK PAGE NOW IN REAL STORAGE AND REGISTERS ARE: 01123000
  1129. * R0 = DASD POINTER (0CCCPPDD) 01124000
  1130. * R1 = VIRTUAL PAGE STORAGE ADDRESS 01125000
  1131. * R2 = REAL PAGE STORAGE ADDRESS 01126000
  1132. * R3 = UCNTRL ADDRESS 01127000
  1133. * 01128000
  1134. * SEARCH FOR USERID PASSED IN PLIST (IN UIPARMS CONTROL BLK) 01129000
  1135. * (UDIRBLOKS ARE PACKED SEQUENTIALLY IN THE PAGE) 01130000
  1136. *-------------------------------------------------------------- 01131000
  1137. LH R5,UDIRDISP GET DISPL TO END OF UDIRBLOK PAGE@V60C1BD 01132000
  1138. AR R5,R2 SET R5 TO REAL ADDR. OF PAGE END @V60C1BD 01133000
  1139. ST R2,URPAGDIR PUT REAL PAGE ADDR. IN CTL. BLOCK@V60C1BD 01134000
  1140. FINDUSER LA R2,UDIRSIZE*8(,R2) POINT TO 1ST (NEXT) UDIRBLOK@V60C1BD 01135000
  1141. CLR R2,R5 HAS END OF PAGE BEEN REACHED? @V60C1BD 01136000
  1142. BH NEWPAGE BR IF YES... GET NEW PAGE @V60C1BD 01137000
  1143. CLC UUSERID(L'UUSERID),UDIRUSER USERID MATCH? @V60C1BD 01138000
  1144. BNE FINDUSER BR IF NOT @V60C1BD 01139000
  1145. SPACE 1 01140000
  1146. * FOR SAFETY, CHECK THAT THE LOGON PASSWORDS MATCH 01141000
  1147. CLC UCURPASS(L'UCURPASS),UDIRPASS LOG PASSWD MATCH?@V60C1BD 01142000
  1148. BE UF BR IF YES @V60C1BD 01143000
  1149. * IF THE CURRENT PASSWORD PASSED IN THE PLIST IS BLANK, THIS 01144000
  1150. * INDICATES THAT THE TEST MODE IS REQUESTED. NO UPDATING IS 01145000
  1151. * PERFORMED. 01146000
  1152. CLC UCURPASS(L'UCURPASS),MBLANKS BLANK PASSWORD? @VMI0009 01147000
  1153. BNE MATCHERR BR IF NOT @V60C1BD 01148000
  1154. OI UFLAGS,UTESTMD SET TEST MODE FLAG @V60C1BD 01149000
  1155. UF DS 0H @V60C1BD 01150000
  1156. SPACE 1 01151000
  1157. * THE USERID HAS BEEN LOCATED. RETURN DATA TO CALLER 01152000
  1158. ST R0,UDASDDIR PUT DASD ADDR. INTO CONTROL BLOCK@V60C1BD 01153000
  1159. ST R1,UVPAGDIR VIRT. PAGE ADDR. TO CTL. BLOCK @V60C1BD 01154000
  1160. ST R2,UDIRAD REAL UDIRBLOK ADDR. TO CTL BLK @V60C1BD 01155000
  1161. MVC UDISPMAC(L'UDISPMAC+L'UDASDMAC),UDIRDISP SAVE @V60C1BD 01156000
  1162. * DISPLACEMENT OF UMAC IN UCNTRL. 01157000
  1163. SPACE 1 01158000
  1164. RDRETCC0 SR R15,R15 ZERO R15 FOR RETCODE AND CC @V60C1BD 01159000
  1165. STH R15,URETCODE SET RETURN CODE AND CC TO 0 @V60C1BD 01160000
  1166. BR R9 RETURN TO CALLER @V60C1BD 01161000
  1167. SPACE 1 01162000
  1168. MATCHERR LA R15,ERRMATCH INDICATE A PASSWORD MISMATCH @V60C1BD 01163000
  1169. B RDRETCC1 @V60C1BD 01164000
  1170. SPACE 1 01165000
  1171. LISTEND LTR R0,R0 IS THERE A DASD PTR? @V60C1BD 01166000
  1172. LA R15,ERRUID SET UP FOR NO USERID ERROR @V60C1BD 01167000
  1173. BZ RDRETCC1 BR IF NOT, THERE SHOULDN'T BE @V60C1BD 01168000
  1174. SPACE 1 01169000
  1175. * THERE IS A SYNCHRONISM ERROR. THE END OF THE VIRTUAL PAGE 01170000
  1176. * LIST DOESN'T CORRESPOND TO THE END OF THE DASD PTRS. 01171000
  1177. SYNCHERR LA R15,ERRSYNC INDICATE A SYNCH ERROR @V60C1BD 01172000
  1178. B RDRETCC1 RETURN CC = 1 @V60C1BD 01173000
  1179. SPACE 1 01174000
  1180. RDERROR LA R15,ERREAD SET RETURN CODE FOR READ ERROR @V60C1BD 01175000
  1181. SPACE 1 01176000
  1182. RDRETCC1 STH R15,URETCODE STORE IN CONTROL BLOCK @V60C1BD 01177000
  1183. TM *+1,X'F0' SET CC = 1 @V60C1BD 01178000
  1184. BR R9 RETURN TO CALLER @V60C1BD 01179000
  1185. SPACE 1 01180000
  1186. DROP R2 @V60C1BD 01181000
  1187. EJECT 01182000
  1188. *-------------------------------------------------------------- 01183000
  1189. * SUBROUTINE TO LOCATE AND READ UMACBLOKS | 01184000
  1190. *---------------------------------------------- 01185000
  1191. * 01186000
  1192. * ON ENTRY: 01187000
  1193. * R3 = ADDRESS OF UCNTRL BLOCK 01188000
  1194. * R9 = RETURN ADDRESS 01189000
  1195. * 01190000
  1196. * ON EXIT: 01191000
  1197. * R3 = ADDRESS OF UCNTRL BLOCK (FILLED IN) 01192000
  1198. * CC0: OPERATION WAS SUCCESSFUL 01193000
  1199. * CC1: ERROR, 'URETCODE' CONTAINS DETAILS 01194000
  1200. * 01195000
  1201. * OPERATION: 01196000
  1202. * 1. DETERMINE IF A VIRTUAL PAGE BUFFER FOR UMAC AND UDEV BLOCKS 01197000
  1203. * IS AVAILABLE. IF NOT, GET ONE VIA 'DMKPGTVG' AND PUT ITS 01198000
  1204. * ADDRESS IN UCNTRL. 01199000
  1205. * 2. GET DASD ADDRESS OF 'UMACBLOK' FROM UCNTRL BLOCK 01200000
  1206. * 3. READ THE 'UMACBLOK' VIA 'DMKRPAGT' 01201000
  1207. * 4. SAVE THE DASD ADDRESS IF THE FIRST 'UDEVBLOK' IN UCNTRL 01202000
  1208. * 5. RETURN TO THE CALLER WITH UCNTRL FILLED IN AND THE CC SET. 01203000
  1209. * 01204000
  1210. *---------------------------------------------------------------------- 01205000
  1211. READUMAC DS 0H @V60C1BD 01206000
  1212. L R1,UVPAGBUF GET BUFFER ADDRESS @V60C1BD 01207000
  1213. LTR R1,R1 IS THERE A BUFFER? @V60C1BD 01208000
  1214. BNZ GMACAD BR IF YES @V60C1BD 01209000
  1215. SPACE 1 01210000
  1216. * GET A BUFFER FOR UMAC AND UDEV PAGES 01211000
  1217. CALL DMKPGTVG GET A VIRTUAL PAGE BUFFER @V60C1BD 01212000
  1218. ST R1,UVPAGBUF SAVE ADDRESS IN UCNTRL @V60C1BD 01213000
  1219. GMACAD L R0,UDASDMAC GET DASD ADDR OF UMAC FROM UCNTRL@V60C1BD 01214000
  1220. LTR R0,R0 IS THERE A UMAC DASD ADDRESS? @V60C1BD 01215000
  1221. BZ MACERR1 BR IF NONE, ERROR @V60C1BD 01216000
  1222. SPACE 1 01217000
  1223. * READ UMAC DASD PAGE INTO VIRTUAL STORAGE 01218000
  1224. IC R0,DMKSYSUD+3 POINT TO DEVICE IN OWNED LIST @V60C1BD 01219000
  1225. LA R2,SYSTEM SPECIFY SYSTEM OPTION @V60C1BD 01220000
  1226. CALL DMKRPAGT @V60C1BD 01221000
  1227. TRANS R2,R1,OPT=(BRING,DEFER,SYSTEM),IOER=MACERR2 @V60C1BD 01222000
  1228. ST R2,URPAGMAC SAVE REAL UMAC PG. ADDR IN UCNTRL@V60C1BD 01223000
  1229. AH R2,UDISPMAC ADD DISPL. TO UMAC PAGE ADDRESS @V60C1BD 01224000
  1230. USING UMACBLOK,R2 @V60C1BD 01225000
  1231. ST R2,UMACAD SAVE 'UMACBLOK' ADDRESS IN UCNTRL@V60C1BD 01226000
  1232. MVC UDISPDEV(L'UDISPDEV+L'UDASDDEV),UMACDISP SAVE @V60C1BD 01227000
  1233. * UDEV DISP/DASD FROM UMAC 01228000
  1234. SPACE 1 01229000
  1235. * RETURN TO CALLER 01230000
  1236. SR R15,R15 ...FOR CC = 0 @V60C1BD 01231000
  1237. STH R15,URETCODE NO ERROR @V60C1BD 01232000
  1238. BR R9 RETURN @V60C1BD 01233000
  1239. SPACE 1 01234000
  1240. MACERR1 DS 0H @V60C1BD 01235000
  1241. LA R15,ERRMAC1 @V60C1BD 01236000
  1242. B RDMRTCC1 ERROR RETURN @V60C1BD 01237000
  1243. MACERR2 DS 0H @V60C1BD 01238000
  1244. LA R15,ERRMAC2 @V60C1BD 01239000
  1245. B RDMRTCC1 ERROR RETURN @V60C1BD 01240000
  1246. SPACE 1 01241000
  1247. RDMRTCC1 STH R15,URETCODE SAVE IN UCNTRL @V60C1BD 01242000
  1248. TM *+1,X'F0' SET CC = 1 @V60C1BD 01243000
  1249. BR R9 RETURN @V60C1BD 01244000
  1250. SPACE 1 01245000
  1251. DROP R2 @V60C1BD 01246000
  1252. EJECT 01247000
  1253. *-------------------------------------------------------------- 01248000
  1254. * SUBROUTINE TO LOCATE AND READ UDEVBLOKS | 01249000
  1255. *-------------------------------------------- 01250000
  1256. * 01251000
  1257. * ON ENTRY: 01252000
  1258. * R3 = ADDRESS OF UCNTRL 01253000
  1259. * R9 = RETURN ADDRESS 01254000
  1260. * 01255000
  1261. * ON EXIT: 01256000
  1262. * R3 = ADDRESS OF UCNTRL 01257000
  1263. * CC0: OPERATION WAS SUCCESSFUL 01258000
  1264. * CC1: ERROR, 'URETCODE' CONTAINS DETAILS 01259000
  1265. * 01260000
  1266. * OPERATION: 01261000
  1267. * 1. DETERMINE IF A VIRTUAL PAGE BUFFER FOR UMAC AND UDEV BLOCKS 01262000
  1268. * IS AVAILABLE. IF NOT, GET ONE VIA 'DMKPGTVG' AND PUT ITS 01263000
  1269. * ADDRESS IN UCNTRL. 01264000
  1270. * 2. GET DASD ADDRESS OF FIRST 'UDEVBLOK' FROM UCNTRL BLOCK 01265000
  1271. * 3. READ THE FIRST 'UDEVBLOK' VIA 'DMKRPAGT' 01266000
  1272. * 4. KEEP READING UDEVBLOK'S UNTIL THE SPECIFIED DEVICE IS FOUND. 01267000
  1273. * 5. SAVE THE DATA RELATED TO THE UDEVBLOK. 01268000
  1274. * 6. RETURN TO THE CALLER WITH UCNTRL FILLED IN AND THE CC SET. 01269000
  1275. * 01270000
  1276. *-------------------------------------------------------------- 01271000
  1277. READUDEV DS 0H @V60C1BD 01272000
  1278. L R1,UVPAGBUF GET BUFFER ADDRESS @V60C1BD 01273000
  1279. LTR R1,R1 IS THERE A BUFFER? @V60C1BD 01274000
  1280. BNZ GDEVAD BR IF YES @V60C1BD 01275000
  1281. SPACE 1 01276000
  1282. * GET A UMAC/UDEV BUFFER 01277000
  1283. CALL DMKPGTVG GET A VIRTUAL PAGE BUFFER @V60C1BD 01278000
  1284. ST R1,UVPAGBUF SAVE ADDRESS IN UCNTRL @V60C1BD 01279000
  1285. GDEVAD L R0,UDASDDEV GET DASD ADDR OF UDEV FROM UCNTRL@V60C1BD 01280000
  1286. LTR R0,R0 IS THERE A UDEV DASD ADDRESS? @V60C1BD 01281000
  1287. BZ DEVERR1 BR IF NONE, ERROR @V60C1BD 01282000
  1288. SPACE 1 01283000
  1289. * READ UDEV DASD PAGE INTO VIRTUAL STORAGE 01284000
  1290. GNEXTDVP IC R0,DMKSYSUD+3 POINT TO DEVICE IN OWNED LIST @V60C1BD 01285000
  1291. LA R2,SYSTEM SPECIFY SYSTEM OPTION @V60C1BD 01286000
  1292. CALL DMKRPAGT @V60C1BD 01287000
  1293. TRANS R2,R1,OPT=(BRING,DEFER,SYSTEM),IOER=DEVERR2 @V60C1BD 01288000
  1294. ST R2,URPAGDEV SAVE REAL UDEV PG. ADDR IN UCNTRL@V60C1BD 01289000
  1295. AH R2,UDISPDEV ADD DISPL. TO UDEV PAGE ADDRESS @V60C1BD 01290000
  1296. USING UDEVBLOK,R2 @V60C1BD 01291000
  1297. SVDEVAD ST R2,UDEVAD SAVE 'UDEVBLOK' ADDRESS IN UCNTRL@V60C1BD 01292000
  1298. SPACE 1 01293000
  1299. * FIND THE UDEVBLOK 01294000
  1300. CLC UDEVADD(L'UDEVADD),ULOCDVAD THE DEVICE? @V60C1BD 01295000
  1301. BE DEVRET BR IF YES @V60C1BD 01296000
  1302. SPACE 1 01297000
  1303. * DEVICE NOT THIS ONE, CONTINUE TO LOOK 01298000
  1304. L R0,UDEVDASD GET DASD ADDRESS OF NEXT UDEV @V60C1BD 01299000
  1305. LTR R0,R0 ANY MORE? @V60C1BD 01300000
  1306. BZ DEVERR3 BR IF NOT, DEVICE NOT FOUND @V60C1BD 01301000
  1307. LH R2,UDEVDISP GET DISPLACEMENT OF NEXT UDEV @V60C1BD 01302000
  1308. STH R2,UDISPDEV SAVE DISPLACEMENT IN UCNTRL @V60C1BD 01303000
  1309. C R0,UDASDDEV SAME AS CURRENT DASD ADDRESS? @V60C1BD 01304000
  1310. ST R0,UDASDDEV SAVE NEXT DASD ADDRESS IN UCNTRL @V60C1BD 01305000
  1311. BNE GNEXTDVP BR IF NOT, GET NEXT PAGE @V60C1BD 01306000
  1312. A R2,URPAGDEV CALC. REAL ADDRESS OF NEXT UDEV @V60C1BD 01307000
  1313. B SVDEVAD @V60C1BD 01308000
  1314. SPACE 1 01309000
  1315. * RETURN TO CALLER 01310000
  1316. DEVRET SR R15,R15 ...FOR CC = 0 @V60C1BD 01311000
  1317. STH R15,URETCODE NO ERROR @V60C1BD 01312000
  1318. BR R9 RETURN @V60C1BD 01313000
  1319. SPACE 1 01314000
  1320. DEVERR1 DS 0H @V60C1BD 01315000
  1321. LA R15,ERRDEV1 @V60C1BD 01316000
  1322. B RDVRTCC1 ERROR RETURN @V60C1BD 01317000
  1323. SPACE 1 01318000
  1324. DEVERR2 DS 0H @V60C1BD 01319000
  1325. LA R15,ERRDEV2 @V60C1BD 01320000
  1326. B RDVRTCC1 ERROR RETURN @V60C1BD 01321000
  1327. SPACE 1 01322000
  1328. DEVERR3 DS 0H DEVICE NOT FOUND ERROR @V60C1BD 01323000
  1329. LA R15,ERRDEV3 @V60C1BD 01324000
  1330. B RDVRTCC1 ERROR RETURN @V60C1BD 01325000
  1331. SPACE 1 01326000
  1332. RDVRTCC1 STH R15,URETCODE SAVE IN UCNTRL @V60C1BD 01327000
  1333. TM *+1,X'F0' SET CC = 1 @V60C1BD 01328000
  1334. BR R9 RETURN @V60C1BD 01329000
  1335. SPACE 1 01330000
  1336. DROP R2 @V60C1BD 01331000
  1337. EJECT 01332000
  1338. *-------------------------------------------------------------- 01333000
  1339. * SUBROUTINE TO FIND THE VMBLOK OF THE USER BEING UPDATED | 01334000
  1340. *------------------------------------------------------------- 01335000
  1341. * 01336000
  1342. * ON ENTRY: 01337000
  1343. * R9 = RETURN REGISTER 01338000
  1344. * 01339000
  1345. * ON EXIT: 01340000
  1346. * CC = 0 THEN, 01341000
  1347. * R1 = ADDRESS OF VMBLOK 01342000
  1348. * 01343000
  1349. * CC ¬= 0 THEN VMBLOK NOT FOUND 01344000
  1350. * 01345000
  1351. * REGISTER USAGE: R0-R2,R14,R15 ( AND R6-R8 IN FINDLA ) 01346000
  1352. * REGISTER TRANSPARENCY: R3-R5,R9-R13 01347000
  1353. * 01348000
  1354. *-------------------------------------------------------------- 01349000
  1355. FINDVMBK DS 0H @V60C1BD 01350000
  1356. LR R0,R9 SAVE RETURN REGISTER @V60C1BD 01351000
  1357. MVC UWORK(L'UUSERID),UUSERID MOVE USERID TO WORK @V60C1BD 01352000
  1358. XC UWORK(L'UWORK),MASK CONVERT TO READABLE USERID@V60C1BD 01353000
  1359. LA R1,UWORK POINT TO USERID IN WORK AREA @V60C1BD 01354000
  1360. LA R2,8 SET MAX. LENGTH OF USERID @V60C1BD 01355000
  1361. BAL R9,FINDLA GET LENGTH OF USERID @V60C1BD 01356000
  1362. LR R9,R0 RESTORE RETURN REGISTER @V60C1BD 01357000
  1363. SPACE 1 01358000
  1364. * R1 = ADDRESS OF USERID FIELD, R2 = LENGTH OF USERID 01359000
  1365. LR R0,R2 DMKSCNAU NEEDS LENGTH IN R0 @V60C1BD 01360000
  1366. CALL DMKSCNAU LOCATE VMBLOK @V60C1BD 01361000
  1367. BR R9 RETURN WITH CC SET @V60C1BD 01362000
  1368. EJECT 01363000
  1369. *-------------------------------------------------------------- 01364000
  1370. * SUBROUTINE TO LOCATE THE LENGTH OF A DATA FIELD | 01365000
  1371. *----------------------------------------------------- 01366000
  1372. * 01367000
  1373. * ENTRY POINTS: 01368000
  1374. * FINDLA: ALLOW ALPHA BYTES 01369000
  1375. * FINDLN: DO NOT ALLOW ALPHA BYTES 01370000
  1376. * 01371000
  1377. * ON ENTRY: 01372000
  1378. * R1 = ADDRESS OF BEGINNING OF FIELD 01373000
  1379. * R2 = MAXIMUM LENGTH OF FIELD 01374000
  1380. * R9 = RETURN REGISTER 01375000
  1381. * 01376000
  1382. * ON EXIT: 01377000
  1383. * CC = 0, THEN 01378000
  1384. * R1 = ADDRESS OF BEGINNING OF FIELD 01379000
  1385. * R2 = LENGTH OF FIELD IN BYTES (OR ZERO IF ERROR) 01380000
  1386. * 01381000
  1387. * CC ¬= 0, THEN 01382000
  1388. * R1 = ADDRESS OF BEGINNING OF FIELD 01383000
  1389. * R2 = LENGTH OF FIELD UP TO AND INCLUDING OFFENDING BYTES 01384000
  1390. * 01385000
  1391. * OPERATION: 01386000
  1392. * 1. SET REGISTER TO INDICATE WHETHER ALPHA BYTES ARE ALLOWED 01387000
  1393. * 2. SCAN DATA UNTIL EITHER A BLANK IS FOUND OR UNTIL THE END OF 01388000
  1394. * THE DATA IS REACHED. RETURN CC = 0 IF NO ERRORS FOUND 01389000
  1395. * 3. TEST EACH BYTE FOR NUMERIC. IF ALPHA, CHECK IF ALPHA ALLOWED. 01390000
  1396. * IF NOT, RETURN CC ¬= 0 01391000
  1397. * 01392000
  1398. * REGISTER USAGE: R2,R6-R8 01393000
  1399. * REGISTER TRANSPARENCY: R0,R1,R3-R5,R9-R15 01394000
  1400. * 01395000
  1401. *-------------------------------------------------------------- 01396000
  1402. FINDLA DS 0H FIND LENGTH, ALLOW ALPHA @V60C1BD 01397000
  1403. SR R6,R6 INDICATE ALPHA ALLOWED @V60C1BD 01398000
  1404. B FINDCM TO COMMON CODE @V60C1BD 01399000
  1405. SPACE 1 01400000
  1406. FINDLN DS 0H FIND LENGTH, ALLOW ONLY NUMERIC @V60C1BD 01401000
  1407. LA R6,1 INDICATE ALPHA NOT ALLOWED @V60C1BD 01402000
  1408. SPACE 1 01403000
  1409. FINDCM LR R7,R2 SAVE MAX. LENGTH @V60C1BD 01404000
  1410. SR R2,R2 CLEAR REG. AND USE FOR COUNT @V60C1BD 01405000
  1411. LR R8,R1 SAVE START ADDRESS @V60C1BD 01406000
  1412. SPACE 1 01407000
  1413. BLOOP CLI 0(R8),C' ' IS CHARACTER A BLANK? @V60C1BD 01408000
  1414. BER R9 BR IF YES, EXIT (RETURN CC = 0) @V60C1BD 01409000
  1415. LA R2,1(,R2) INCREMENT COUNT @V60C1BD 01410000
  1416. CLI 0(R8),C'0' IS CHARACTER < THAN 0? @V60C1BD 01411000
  1417. BL ALPHA BR IF YES @V60C1BD 01412000
  1418. CLI 0(R8),C'9' IS CHARACTER > 9? @V60C1BD 01413000
  1419. BHR R9 BR IF YES, ERROR (RETURN CC = 2) @V60C1BD 01414000
  1420. ALPHARET CR R7,R2 HAS MAX. BEEN REACHED? @V60C1BD 01415000
  1421. BER R9 BR IF YES, EXIT (RETURN CC = 0) @V60C1BD 01416000
  1422. LA R8,1(,R8) INCREMENT ADDRESS @V60C1BD 01417000
  1423. B BLOOP @V60C1BD 01418000
  1424. SPACE 1 01419000
  1425. ALPHA LTR R6,R6 ARE ALPHA BYTES ALLOWED? @V60C1BD 01420000
  1426. BNZR R9 RETURN IF NOT (CC = 2) @V60C1BD 01421000
  1427. B ALPHARET @V60C1BD 01422000
  1428. EJECT 01423000
  1429. *-------------------------------------------------------------- 01424000
  1430. * SUBROUTINE TO CONVERT EBCDIC VALUE IN THE RANGE 0-9 AND 01425000
  1431. * A-O TO HEX VALUE. 01426000
  1432. *-------------------------------------------------------------- 01427000
  1433. * 01428000
  1434. * ON ENTRY: 01429000
  1435. * R1 = ADDRESS OF FIRST BYTE OF FIELD TO BE CONVERTED 01430000
  1436. * R2 = LENGTH OF FIELD 01431000
  1437. * R9 = RETURN ADDRESS 01432000
  1438. * 01433000
  1439. * ON RETURN: 01434000
  1440. * CC = 0, 01435000
  1441. * R2 = THE CONVERTED VALUE, RIGHT JUSTIFIED 01436000
  1442. * 01437000
  1443. * CC ¬= 0, ERROR 01438000
  1444. * R2 = 0 01439000
  1445. * 01440000
  1446. * REGISTER USAGE: R1,R2,R6-R8 01441000
  1447. * REGISTER TRANSPARENCY: R1,R3-R5,R9-R15 01442000
  1448. * 01443000
  1449. *-------------------------------------------------------------- 01444000
  1450. BCDTOHEX DS 0H @V60C1BD 01445000
  1451. LR R7,R2 SAVE FIELD LENGTH @V60C1BD 01446000
  1452. SR R6,R6 CLEAR REG @V60C1BD 01447000
  1453. LR R8,R6 ... @V60C1BD 01448000
  1454. L1 IC R6,0(,R1) GET DIGIT @V60C1BD 01449000
  1455. CLI 0(R1),C'0' GREATER THAN ZERO? @V60C1BD 01450000
  1456. BL L3 NO TRY A-F @V60C1BD 01451000
  1457. CLI 0(R1),C'9' GREATER THAN NINE? @V60C1BD 01452000
  1458. BH BCDERR1 YES ERROR @V60C1BD 01453000
  1459. S R6,F240 MAKE DIGIT A HEX NO.(X'00'-X'09')@V60C1BD 01454000
  1460. B L2 CONTINUE @V60C1BD 01455000
  1461. L3 CLI 0(R1),C'A' LESS THAN "A"? @V60C1BD 01456000
  1462. BL BCDERR1 YES ERROR @V60C1BD 01457000
  1463. CLI 0(R1),C'F' GREATER THAN "F"? @V60C1BD 01458000
  1464. BH BCDERR1 YES ERROR @V60C1BD 01459000
  1465. SH R6,=AL2(C'A'-10) MAKE CHAR HEX NO.(X'0A'-X'0F')@V60C1BD 01460000
  1466. L2 SLL R8,4 ASSEMBLE NEXT DIGIT @V60C1BD 01461000
  1467. AR R8,R6 ... @V60C1BD 01462000
  1468. LA R1,1(,R1) BUMP PTR @V60C1BD 01463000
  1469. BCT R7,L1 LOOP THROUGH ENTIRE FIELD @V60C1BD 01464000
  1470. LR R2,R8 RETURN RESULT IN R1 @V60C1BD 01465000
  1471. SR R8,R8 SET CC=0 @V60C1BD 01466000
  1472. BR R9 RETURN @V60C1BD 01467000
  1473. SPACE 1 01468000
  1474. BCDERR1 DS 0H @V60C1BD 01469000
  1475. LA R2,0 RETURN ZERO WITHOUT DISTURBING CC@V60C1BD 01470000
  1476. BR R9 @V60C1BD 01471000
  1477. EJECT 01472000
  1478. *-------------------------------------------------------------- 01473000
  1479. * SUBROUTINE TO CONVERT EBCDIC NUMERIC VALUE TO BINARY | 01474000
  1480. *----------------------------------------------------------- 01475000
  1481. * 01476000
  1482. * ON ENTRY: 01477000
  1483. * R1 = ADDRESS OF FIRST BYTE OF FIELD TO BE CONVERTED 01478000
  1484. * R2 = LENGTH OF FIELD 01479000
  1485. * R9 = RETURN ADDRESS 01480000
  1486. * 01481000
  1487. * ON EXIT: 01482000
  1488. * CC = 0, 01483000
  1489. * R1 = UNCHANGED 01484000
  1490. * R2 = THE CONVERTED VALUE 01485000
  1491. * 01486000
  1492. * CC ¬= 0, ERROR 01487000
  1493. * R1 = UNCHANGED 01488000
  1494. * 01489000
  1495. * REGISTER USAGE: R1,R2,R7,R8,R9 01490000
  1496. * REGISTER TRANSPARENCY: R1,R3-R6,R9-R15 01491000
  1497. * 01492000
  1498. *-------------------------------------------------------------- 01493000
  1499. BCDTOBIN LR R8,R1 SAVE STARTING ADDRESS @V60C1BD 01494000
  1500. LR R7,R2 SAVE LENGTH @V60C1BD 01495000
  1501. BCDBINLP TM 0(R1),X'F0' IS BYTE NUMERIC? @V60C1BD 01496000
  1502. BNO BCDBINER BR IF NOT, ERROR @V60C1BD 01497000
  1503. LA R1,1(,R1) POINT TO THE NEXT BYTE @V60C1BD 01498000
  1504. BCT R2,BCDBINLP DO IT TO ALL INPUT @V60C1BD 01499000
  1505. LR R1,R8 RESTORE STARTING ADDRESS @V60C1BD 01500000
  1506. LR R2,R7 RESTORE ORIGINAL LENGTH @V60C1BD 01501000
  1507. BCTR R2,0 DECREMENT LENGTH @V60C1BD 01502000
  1508. EX R2,BCDPACK PACK DATA INTO WORK AREA @V60C1BD 01503000
  1509. CVB R2,UWORK SET UP DATA IN R2 @V60C1BD 01504000
  1510. CR R9,R9 SET CC = 0 @V60C1BD 01505000
  1511. BR R9 RETURN WITH CC = 0 @V60C1BD 01506000
  1512. SPACE 1 01507000
  1513. BCDBINER CR R9,R1 FORCE NON ZERO CC @V60C1BD 01508000
  1514. BR R9 RETURN WITH CC ¬= 0 @V60C1BD 01509000
  1515. SPACE 1 01510000
  1516. * EXECUTED INSTRUCTION 01511000
  1517. BCDPACK PACK UWORK,0(*-*,R1) @V60C1BD 01512000
  1518. EJECT 01513000
  1519. *-------------------------------------------------------------- 01514000
  1520. * TABLE OF UPDATE-IN-PLACE OPERATIONS 01515000
  1521. *-------------------------------------------------------------- 01516000
  1522. OPTABLE DS 0F @V60C1BD 01517000
  1523. DC CL8'LOGPASS',AL2(LOGPASS-DMKUDU) @V60C1BD 01518000
  1524. DC CL8'MDISK',AL2(MDISK-DMKUDU) @V60C1BD 01519000
  1525. KSTORAGE DC CL8'STORAGE',AL2(STORAGE-DMKUDU) @V60C1BD 01520000
  1526. DC CL8'EDITCHAR',AL2(EDITCHAR-DMKUDU) @V60C1BD 01521000
  1527. DC CL8'OPTIONS',AL2(OPTIONS-DMKUDU) @V60C1BD 01522000
  1528. DC CL8'IPL',AL2(IPL-DMKUDU) @V60C1BD 01523000
  1529. DC CL8'DISTRIB',AL2(DISTRIB-DMKUDU) @V60C1BD 01524000
  1530. DC CL8'MAXSTOR',AL2(STORAGE-DMKUDU) @V60C1BD 01525000
  1531. DC CL8'PRIVLEGE',AL2(PRIVLEGE-DMKUDU) @V60C1BD 01526000
  1532. DC CL8'PRIORITY',AL2(PRIORTY-DMKUDU) @V60C1BD 01527000
  1533. KACCOUNT DC CL8'ACCOUNT',AL2(ACCOUNT-DMKUDU) NORMAL ACCT @V60C1BD 01528000
  1534. KIACCT DC CL8'IACCOUNT',AL2(ACCOUNT-DMKUDU) IMMED ACCT @V60C1BD 01529000
  1535. KTACCT DC CL8'TACCOUNT',AL2(ACCOUNT-DMKUDU) TEMP ACCT @V60C1BD 01530000
  1536. DC 8X'FF' FENCE AT END OF TABLE @V60C1BD 01531000
  1537. SPACE 2 01532000
  1538. *-------------------------------------------------------------- 01533000
  1539. * TABLE OF VALID OPTIONS FOR OPTION OPERATION 01534000
  1540. * 01535000
  1541. * THE NAME OF THE OPTION IS FOLLOWED BY ON BYTE INDICATING 01536000
  1542. * IF THE OPTION IS FOLLOWED BY A VALUE (X'00'=NO VALUE, 01537000
  1543. * X'FF'=VALUE) AND A SECOND 2-BYTE VALUE AS DEFINED IN 01538000
  1544. * 'UMACOPT' AND 'UMACOPT2'. 01539000
  1545. * 01540000
  1546. *-------------------------------------------------------------- 01541000
  1547. OPTIONTB DS 0F @V60C1BD 01542000
  1548. DC CL9'ISAM',X'00',AL2(VISAM) ISAM @V60C1BD 01543000
  1549. OPTIONEL EQU (*-OPTIONTB) ELEMENT LENGTH @V60C1BD 01544000
  1550. DC CL9'ECMODE',X'00',AL2(VECMODE) ECMODE @V60C1BD 01545000
  1551. DC CL9'REALTIMER',X'00',AL2(VREALTM) REALTIMER @V60C1BD 01546000
  1552. DC CL9'VIRT=REAL',X'00',AL2(VIRTREAL) VIRT=REAL @V60C1BD 01547000
  1553. DC CL9'ACCT',X'00',AL2(VACCT) ACCT @V60C1BD 01548000
  1554. DC CL9'SVCOFF',X'00',AL2(VSVCOFF) SVCOFF @V60C1BD 01549000
  1555. DC CL9'BMX',X'00',AL2(VBMX) BMX @V60C1BD 01550000
  1556. DC CL9'CPUID',X'FF',AL2(VCPUID) CPUID @V60C1BD 01551000
  1557. DC CL9'AFFINITY',X'FF',AL2(VAFFIN) AFFINITY @V60C1BD 01552000
  1558. MAXOPTNS EQU (*-OPTIONTB)/OPTIONEL MAX. NO. OF OPTIONS @V60C1BD 01553000
  1559. DC 9X'FF',X'FF',X'FFFF' FENCE AT END OF TABLE @V60C1BD 01554000
  1560. SPACE 1 01555000
  1561. * THE FOLLOWING VALUES ARE THOSE DEFINED IN UMACBLOK FOR 01556000
  1562. * 'UMACOPT' AND 'UMACOPT2', TWO CONTIGUOUS BYTES, THAT 01557000
  1563. * CONTAIN CODED DATA DEFINING THE VIRTUAL MACHINE OPTIONS. 01558000
  1564. VISAM EQU X'8000' ISAM VALUE @V60C1BD 01559000
  1565. VECMODE EQU X'4000' ECMODE VALUE @V60C1BD 01560000
  1566. VREALTM EQU X'2000' REALTIMER @V60C1BD 01561000
  1567. VIRTREAL EQU X'1000' VIRT= REAL VALUE @V60C1BD 01562000
  1568. VACCT EQU X'0800' ACCT VALUE @V60C1BD 01563000
  1569. VSVCOFF EQU X'0200' SVCOFF VALUE @V60C1BD 01564000
  1570. VBMX EQU X'0100' BMX VALUE @V60C1BD 01565000
  1571. VCPUID EQU X'0080' CPUID VALUE @V60C1BD 01566000
  1572. VAFFIN EQU X'0000' AFFINITY VALUE (NONE) @V60C1BD 01567000
  1573. SPACE 1 01568000
  1574. LVCPUID EQU 6 MAX. LENGTH OF CPUID VALUE @V60C1BD 01569000
  1575. LVAFFIN EQU 2 MAX. LENGTH OF AFFINITY VALUE @V60C1BD 01570000
  1576. SPACE 1 01571000
  1577. OPTNMAXV EQU VISAM+VECMODE+VREALTM+VIRTREAL+VACCT+VSVCOFF+VBMX+VCPUIDX01572000
  1578. +VAFFIN @V60C1BD 01573000
  1579. SPACE 2 01574000
  1580. *-------------------------------------------------------------- 01575000
  1581. * TABLE OF VALID LINK MODES FOR MDISK OPERATIONS 01576000
  1582. *-------------------------------------------------------------- 01577000
  1583. LINKMDTB DS 0F @V60C1BD 01578000
  1584. DC CL3'R ',AL1(UDEVR) @VMI0024 01579000
  1585. LINKMDEL EQU (*-LINKMDTB) ELEMENT LENGTH @VMI0024 01580000
  1586. DC CL3'RR ',AL1(UDEVRR) @VMI0024 01581000
  1587. DC CL3'W ',AL1(UDEVW) @VMI0024 01582000
  1588. DC CL3'WR ',AL1(UDEVWR) @VMI0024 01583000
  1589. DC CL3'M ',AL1(UDEVM) @VMI0024 01584000
  1590. DC CL3'MR ',AL1(UDEVMR) @VMI0024 01585000
  1591. DC CL3'MW ',AL1(UDEVMW) @VMI0024 01586000
  1592. VRRSEP EQU * VIRTUAL RESERVE/RELEASE SEPARATE @VMI0024 01587000
  1593. DC CL3'RV ',AL1(UDEVR) @VMI0024 01588000
  1594. DC CL3'RRV',AL1(UDEVRR) @VMI0024 01589000
  1595. DC CL3'WV ',AL1(UDEVW) @VMI0024 01590000
  1596. DC CL3'WRV',AL1(UDEVWR) @VMI0024 01591000
  1597. DC CL3'MV ',AL1(UDEVM) @VMI0024 01592000
  1598. DC CL3'MRV',AL1(UDEVMR) @VMI0024 01593000
  1599. DC CL3'MWV',AL1(UDEVMW) @VMI0024 01594000
  1600. MAXLNKMD EQU (*-LINKMDTB)/LINKMDEL NO. OF VALID LINK MODES @V60C1BD 01595000
  1601. EJECT 01596000
  1602. *-------------------------------------------------------------- 01597000
  1603. * EXECUTED INSTRUCTIONS 01598000
  1604. *-------------------------------------------------------------- 01599000
  1605. SPACE 1 01600000
  1606. PACKINST PACK UWORK+3(5),0(0,R8) @V60C1BD 01601000
  1607. SPACE 5 01602000
  1608. * ------------------------------------------------------------- 01603000
  1609. * CONSTANTS AND MISCELLANY... 01604000
  1610. * ------------------------------------------------------------- 01605000
  1611. DS 0F @V60C1BD 01606000
  1612. MASK DC 24X'AA' @V60C1BD 01607000
  1613. MBLANKS DC 8X'EA' MASKED BLANKS FOR TEST MODE CHECK@VMI0009 01608000
  1614. SPACE 2 01609000
  1615. *-------------------------------------------------------------- 01610000
  1616. * TRANSLATE AND TEST TABLE FOR PRIVILEGE OPERATION 01611000
  1617. * VALID PRIVILEGE CLASSES ARE A THROUGH H 01612000
  1618. * 01613000
  1619. * USE X'FF' AS FUNCTION FOR BLANK TO SIGNAL END OF FIELD 01614000
  1620. * AND X'BD' TO SIGNAL AN ERROR INPUT VALUE 01615000
  1621. *-------------------------------------------------------------- 01616000
  1622. TRPRVTBL DS 0D @V60C1BD 01617000
  1623. SPACE 1 01618000
  1624. DC (X'40'-X'00')X'BD' INVALID VALUES @V60C1BD 01619000
  1625. SPACE 1 01620000
  1626. DC X'FF' VALUE FOR X'40' (TO SIGNAL END OF FIELD) @V60C1BD 01621000
  1627. SPACE 1 01622000
  1628. DC (X'C1'-X'41')X'BD' INVALID VALUES @V60C1BD 01623000
  1629. SPACE 1 01624000
  1630. * CLASS= A B C D E F G H 01625000
  1631. DC X'80',X'40',X'20',X'10',X'08',X'04',X'02',X'01' @V60C1BD 01626000
  1632. SPACE 1 01627000
  1633. DC (X'100'-X'C9')X'BD' INVALID VALUES @V60C1BD 01628000
  1634. EJECT 01629000
  1635. *-------------------------------------------------------------- 01630000
  1636. * ERROR CODE EQUATES 01631000
  1637. *-------------------------------------------------------------- 01632000
  1638. ERRWRIT1 EQU 10 ERROR IN DMKRPAPT WRITING OBJECT DASD @V60C1BD 01633000
  1639. ERRWRIT2 EQU 11 ERROR IN DMKRPAPT WRITING PAGING DASD @V60C1BD 01634000
  1640. SPACE 1 01635000
  1641. ERREAD EQU 20 ERROR DURING 'TRANS' OF UDIR PAGE @V60C1BD 01636000
  1642. ERRMAC1 EQU 21 NO UMAC ADDRESS IN UCNTRL @V60C1BD 01637000
  1643. ERRMAC2 EQU 22 ERROR DURING 'TRANS' OF UMAC PAGE @V60C1BD 01638000
  1644. ERRDEV1 EQU 24 NO UDEV ADDRESS IN UCNTRL @V60C1BD 01639000
  1645. ERRDEV2 EQU 25 ERROR DURING 'TRANS' OF UDEV PAGE @V60C1BD 01640000
  1646. ERRDEV3 EQU 26 UDEV BLOCK NOT FOUND @V60C1BD 01641000
  1647. ERRSYNC EQU 27 OBJ. DASD NOT IN SYNCH. WITH DMKSYSPL @V60C1BD 01642000
  1648. ERROP EQU 28 OPERATION INVALID @V60C1BD 01643000
  1649. SPACE 1 01644000
  1650. ERRUID EQU 30 USERID NOT FOUND @V60C1BD 01645000
  1651. ERRMATCH EQU 31 LOGON PASSWORD MISMATCH @V60C1BD 01646000
  1652. SPACE 1 01647000
  1653. ERRSTOR1 EQU 40 STORAGE EXCEEDS MAXIMUM @V60C1BD 01648000
  1654. ERRSTOR2 EQU 41 MAX. STORAGE > 16M @V60C1BD 01649000
  1655. ERRSTOR3 EQU 42 NO SIGN AFTER PACKING NEW SIZE @V60C1BD 01650000
  1656. ERRSTOR4 EQU 43 BAD BYTES IN STORAGE DATA @V60C1BD 01651000
  1657. SPACE 1 01652000
  1658. ERRPRIV1 EQU 50 PRIVILEGE OPERAND ALL BLANKS @V60C1BD 01653000
  1659. ERRPRIV2 EQU 51 NO VALID PRIVILEGE CLASSES IN OPERAND @V60C1BD 01654000
  1660. ERRPRIV3 EQU 52 ERROR IN ACCUMULATED PRIVILEGE VALUE @V60C1BD 01655000
  1661. ERRPRIV4 EQU 53 INVAILD DATA IN PRIVILEGE FIELD @V60C1BD 01656000
  1662. SPACE 1 01657000
  1663. ERRPRI1 EQU 60 BAD BYTE IN PRIORITY FIELD @V60C1BD 01658000
  1664. ERRPRI2 EQU 61 PRIORITY FIELD ALL BLANKS @V60C1BD 01659000
  1665. ERRPRI3 EQU 62 NO SIGN AFTER PACKING NEW PRIORITY @V60C1BD 01660000
  1666. ERRPRI4 EQU 63 PRIORITY > 99 @V60C1BD 01661000
  1667. SPACE 1 01662000
  1668. ERROPTN1 EQU 70 INVALID OPTION @V60C1BD 01663000
  1669. ERROPTN2 EQU 71 NO FENCE AT END OF PLIST @V60C1BD 01664000
  1670. ERROPTN3 EQU 72 INVALID ACCUM. OPTION VALUE @V60C1BD 01665000
  1671. SPACE 1 01666000
  1672. ERRMDSK1 EQU 80 INVALID MDISK ADDRESS IN PLIST @V60C1BD 01667000
  1673. ERRMDSK2 EQU 81 INVALID LINK MODE @V60C1BD 01668000
  1674. ERRMDSK3 EQU 82 LINK PASSWORDS GIVEN AND SHORT UDEV. @V60C1BD 01669000
  1675. ERRMDSK4 EQU 83 BLANK LINK PASSWORDS WITH LONG UDEV. @V60C1BD 01670000
  1676. SPACE 1 01671000
  1677. ERRPGZ EQU 90 FIRST 8 BYTES OF UPDATED PAGE ARE 0 @V60C1BD 01672000
  1678. EJECT 01673000
  1679. *-------------------------------------------------------------- 01674000
  1680. * DSECTS 01675000
  1681. *-------------------------------------------------------------- 01676000
  1682. SPACE 1 01677000
  1683. * THE DSECT 'OPRSECT' IS USED TO REFERENCE THE TABLE (OPTABLE) 01678000
  1684. * OF VALID UPDATE-IN-PLACE OPERATIONS 01679000
  1685. OPRSECT DSECT @V60C1BD 01680000
  1686. DS 0F @V60C1BD 01681000
  1687. OPERATN DS CL8 @V60C1BD 01682000
  1688. OPADDR DS AL2 @V60C1BD 01683000
  1689. LOPTABLE EQU *-OPERATN @V60C1BD 01684000
  1690. SPACE 3 01685000
  1691. *-------------------------------------------------------------- 01686000
  1692. * THE DSECT 'OPTNSECT' IS USED TO REFERENCE THE TABLE 01687000
  1693. * (OPTIONTB) OF VALID OPTIONS FOR THE OPTION OPERATION 01688000
  1694. OPTNSECT DSECT @V60C1BD 01689000
  1695. DS 0F @V60C1BD 01690000
  1696. OPTNAME DS CL9 OPTION NAME @V60C1BD 01691000
  1697. OPTNFLG DS X FLAG INDICATING OPTION ARGS. PRESENT @V60C1BD 01692000
  1698. OPTNVALU DS 2X VALUE FOR 'UMACOPT' AND 'UMACOPT2' @V60C1BD 01693000
  1699. OPTNLN EQU *-OPTNAME LENGTH OF OPTION TABLE ENTRY @V60C1BD 01694000
  1700. SPACE 3 @V60C1BD 01695000
  1701. *-------------------------------------------------------------- 01696000
  1702. * THE DSECT 'LINKMSECT' IS USED TO REFERENCE THE TABLE 01697000
  1703. * (LINKMDTB) OF VALID LINK MODES FOR THE MDISK OPERATION 01698000
  1704. LNKMSECT DSECT @V60C1BD 01699000
  1705. DS 0F @V60C1BD 01700000
  1706. LNKMD DS CL3 LINK MODE (E.G., RR) @VMI0024 01701000
  1707. LNKMVALU DS C LINK MODE VALUE IN 'UDEVMODE' @VMI0024 01702000
  1708. LNKMDLN EQU *-LNKMD LENGTH OF LINK TABLE ENTRY @V60C1BD 01703000
  1709. SPACE 3 @V60C1BD 01704000
  1710. DMKUDU CSECT @V60C1BD 01705000
  1711. EJECT 01706000
  1712. *-------------------------------------------------------------- 01707000
  1713. * THE FOLLOWING TWO COPY STATEMENTS MUST BE LOGICALLY AND 01708000
  1714. * PHYSICALLY CONTIGUOUS 01709000
  1715. *-------------------------------------------------------------- 01710000
  1716. SPACE 1 01711000
  1717. COPY UCNTRL @V60C1BD 01712000
  1718. SPACE 1 01713000
  1719. COPY UIPARMS @V60C1BD 01714000
  1720. SPACE 1 01715000
  1721. *-------------------------------------------------------------- 01716000
  1722. * KEEP THE ABOVE TWO COPY STATEMENTS LOGICALLY AND 01717000
  1723. * PHYSICALLY CONTIGUOUS 01718000
  1724. *-------------------------------------------------------------- 01719000
  1725. EJECT 01720000
  1726. COPY CORE @V60C1BD 01721000
  1727. COPY EQU @V60C1BD 01722000
  1728. COPY SAVE @V60C1BD 01723000
  1729. COPY VMBLOK @V60C1BD 01724000
  1730. COPY UDIRECT @V60C1BD 01725000
  1731. SYSLOCS @V60C1BD 01726000
  1732. PSA @V60C1BD 01727000
  1733. COPY ALLOC @V60C1BD 01728000
  1734. COPY IOBLOKS @V60C1BD 01729000
  1735. COPY CONBUF @V60C1BD 01730000
  1736. EJECT 01731000
  1737. DMKUDU CSECT @V60C1BD 01732000
  1738. SPACE 5 01733000
  1739. END DMKUDU @V60C1BD 01734000