Table of Contents

DMSVIP Source

References

Source Listing

DMSVIP.ASSEMBLE.txt
  1. VIP TITLE 'DMSVIP (CMS) VM/370 - RELEASE 6' 00001000
  2. *********************************************************************** 00002000
  3. * * 00003000
  4. * * 00004000
  5. * MODULE NAME: * 00005000
  6. * * 00006000
  7. * DMSVIP - CMS VSAM INTERFACE PROCESSOR * 00007000
  8. * * 00008000
  9. * * 00009000
  10. * FUNCTION: * 00010000
  11. * * 00011000
  12. * DMSVIP PERFORMS THE FOLLOWING: * 00012000
  13. * * 00013000
  14. * 1. LOADS THE DOS DCSS (VSAM OPTION SPECIFIED). * 00014000
  15. * * 00015000
  16. * 2. ISSUES ALL NECESSARY DOS ASSGN COMMANDS FOR THE OS * 00016000
  17. * USER. * 00017000
  18. * * 00018000
  19. * 3. MAPS ALL OS VSAM MACRO REQUESTS TO DOS SPECIFICATIONS * 00019000
  20. * (INCLUDING MODIFICATION OF VSAM CONTROL BLOCKS AND * 00020000
  21. * USER PARAMETER LISTS). * 00021000
  22. * * 00022000
  23. * 4. PERFORMS SIMULATION FOR OS ASYNCHRONOUS VSAM DATA * 00023000
  24. * MANAGEMENT REQUESTS. * 00024000
  25. * * 00025000
  26. * 5. MAPS DOS VSAM MACRO RETURN CODES AND ERROR CODES TO OS * 00026000
  27. * EQUIVALENTS WHERE NECESSARY. * 00027000
  28. * * 00028000
  29. * 6. TRAPS ALL TRANSFERS OF CONTROL BETWEEN VSAM AND THE OS * 00029000
  30. * USER AND SETS THE APPROPRIATE OPERATING ENVIRONMENT FLAGS.* 00030000
  31. * * 00031000
  32. * * 00032000
  33. * ATTRIBUTES: * 00033000
  34. * * 00034000
  35. * EXECUTES IN CMS VSAM DCSS, REENTRANT * 00035000
  36. * * 00036000
  37. * ENTRY POINTS: * 00037000
  38. * * 00038000
  39. * DMSVIP - OPEN, CLOSE, TCLOSE, GENCB, MODCB, SHOWCB, AND * 00039000
  40. * TESTCB MACROS * 00040000
  41. * * 00041000
  42. * CALLERS - DMSVIB (FIRST CALL) * 00042000
  43. * - DMSSOP (OPEN, CLOSE, TCLOSE) * 00043000
  44. * - USER PROGRAM (OTHER) * 00044000
  45. * * 00045000
  46. * * 00046000
  47. * DMSVIP2 - GET, PUT, POINT, ENDREQ, ERASE, CHECK MACROS * 00047000
  48. * * 00048000
  49. * DMSVIP3 - VSAM BRANCHES TO USER EXIT ROUTINES * 00049000
  50. * * 00050000
  51. * DMSVIP4 - VSAM BRANCHES TO USER ERET ROUTINES (TESTCB) * 00051000
  52. * * 00052000
  53. * * 00053000
  54. * ENTRY CONDITIONS: * 00054000
  55. * * 00055000
  56. * ENTERED VIA BALR R14,R15. * 00056000
  57. * * 00057000
  58. * DEPENDING ON THE TYPE OF REQUEST, R0 AND R1 CONTAIN BOTH * 00058000
  59. * CODES AND/OR POINTERS TO PARAMETER LISTS. SEE THE OPEN * 00059000
  60. * PROCESSING ROUTINE FOR SPECIAL LINKAGE WITH DMSSOP. * 00060000
  61. * * 00061000
  62. * DOS VSAM ENTERS THE INTERFACE EITHER ON RETURN FROM A * 00062000
  63. * DOS MACRO REQUEST OR ON A BRANCH TO A USER-SPECIFIED ERROR * 00063000
  64. * HANDLING (EXIT) ROUTINE. * 00064000
  65. * * 00065000
  66. * EXIT CONDITIONS: * 00066000
  67. * * 00067000
  68. * NORMAL: * 00068000
  69. * * 00069000
  70. * CONTROL IS RETURNED TO THE CALLER. ALL VSAM CONTROL * 00070000
  71. * BLOCKS, RETURN CODES, AND REGISTERS ARE SET TO REFLECT * 00071000
  72. * NORMAL VSAM PROCESSING. * 00072000
  73. * * 00073000
  74. * ERROR: * 00074000
  75. * * 00075000
  76. * DMSVIP ISSUES A CMS ABEND WHEN UNABLE TO CONTINUE. * 00076000
  77. * THE FOLLOWING ARE THE ABEND CODES AND THEIR MEANING: * 00077000
  78. * * 00078000
  79. * HEX CODE DESCRIPTION * 00079000
  80. * * 00080000
  81. * 34 ERROR DURING DATA MANAGEMENT MACRO- * 00081000
  82. * INTERNAL ERROR OCCURRED IN DOS VSAM * 00082000
  83. * ROUTINE * 00083000
  84. * * 00084000
  85. * 38 ERROR DURING DATA MANAGEMENT MACRO- * 00085000
  86. * I/O ERROR ENCOUNTERED DURING * 00086000
  87. * CATALOG ACCESS * 00087000
  88. * * 00088000
  89. * 177 DMSVIP UNABLE TO CONTINUE- * 00089000
  90. * SEE ADDITIONAL ERROR MESSAGE * 00090000
  91. * ACCOMPANYING ABEND MESSAGE: * 00091000
  92. * * 00092000
  93. * 109S - 'VIRTUAL STORAGE CAPACITY * 00093000
  94. * EXCEEDED' * 00094000
  95. * * 00095000
  96. * 230E - 'NO. OF VSAM EXIT ROUTINES * 00096000
  97. * HAS EXCEEDED MAX OF 128' * 00097000
  98. * * 00098000
  99. * IF CMS/DOS DETECTS AN ERROR DURING AN ASSGN FOR THE OS * 00099000
  100. * USER, OR DURING OPEN, CLOSE, OR TCLOSE REQUESTS, THE * 00100000
  101. * JOB IS TERMINATED AND CONTROL IS RETURNED TO CMS. * 00101000
  102. * * 00102000
  103. * * 00103000
  104. * FOR DOS OPEN ERROR CODE X'22' (VOL SER NOS * 00104000
  105. * SPECIFIED IN THE EXTENT STMNT DO NOT MATCH * 00105000
  106. * THOSE IN THE CATALOG) - THE JOB IS TERMINATED * 00106000
  107. * AND CONTROL IS RETURNED TO CMS WITH THE VSAM * 00107000
  108. * RETURN CODE OF X'08'. * 00108000
  109. * * 00109000
  110. * * 00110000
  111. * CALLS TO OTHER ROUTINES: * 00111000
  112. * * 00112000
  113. * IKQGEN, IKQVSM, IKQTMS, $$BOPEN, $$BCLOSE * 00113000
  114. * * 00114000
  115. * EXTERNAL REFERENCES: * 00115000
  116. * * 00116000
  117. * DMSKEY - FOR CORRECT PROTECT KEY (SEE NOTES) * 00117000
  118. * DMSERR - FOR CMS ERROR MESSAGES * 00118000
  119. * DMSFREE - FOR NUCLEUS FREE STORAGE * 00119000
  120. * DMSFRET - FOR RELEASE OF FREE STORAGE * 00120000
  121. * DMSABN - FOR ABNORMAL TERMINATION OF RUN * 00121000
  122. * REGEQU - FOR SYMBOLIC REGISTER NAMES * 00122000
  123. * NUCON - FOR NUCLEUS STORAGE AREA DSECT * 00123000
  124. * CMSAVE - FOR SYSTEM SAVE AREA DSECT * 00124000
  125. * DOSCB - FOR DOS SIMULATION CONTROL BLOCK DSECT * 00125000
  126. * IKQACB - FOR DOS VSAM ACB DSECT * 00126000
  127. * IKQRPL - FOR DOS VSAM RPL DSECT * 00127000
  128. * IKQEXLST - FOR DOS VSAM EXLST DSECT * 00128000
  129. * * 00129000
  130. * TABLES: * 00130000
  131. * * 00131000
  132. * LUT - LOGICAL UNIT TABLE * 00132000
  133. * FOR ISSUING DOS AGGN COMMANDS DURING INITIALIZATION * 00133000
  134. * * 00134000
  135. * OPTTAB - OS TO DOS OPTION BYTE TABLE * 00135000
  136. * FOR MAPPING OS RPL OPTION BYTES TO THE DOS RPL * 00136000
  137. * * 00137000
  138. * WORK AREAS: * 00138000
  139. * * 00139000
  140. * VIPWORK - WORK AREA OBTAINED BY DMSVIB (BOOTSTRAP) * 00140000
  141. * USED TO BUILD DOS VSAM CONTROL BLOCKS, SAVE * 00141000
  142. * REGISTERS, ETC. * 00142000
  143. * * 00143000
  144. * OEXLSA - OVERFLOW EXIT LIST SAVE BLOCK * 00144000
  145. * FOR SAVED EXIT ROUTINE ADDRESSES IF PRIMARY SPACE IN * 00145000
  146. * WORK AREA IS USED UP. OBTAINED VIA DMSFREE. * 00146000
  147. * * 00147000
  148. * * 00148000
  149. * REGISTER USAGE: * 00149000
  150. * * 00150000
  151. * R0 - NUCLEUS DSECT * 00151000
  152. * R1 - DOS RPL DSECT, WORK * 00152000
  153. * R2-4 - WORK * 00153000
  154. * R5 - DOS ACB DSECT, WORK * 00154000
  155. * R6 - DOS EXLST DSECT, WORK * 00155000
  156. * R7-9 - WORK * 00156000
  157. * R10 - OEXLSA DSECT, WORK * 00157000
  158. * R11 - WORK AREA DSECT (VIPWORK) * 00158000
  159. * R12 - DMSVIP ADDRESSABILITY * 00159000
  160. * R13 - SYSTEM SAVE AREA ADDRESSABILITY (ASGNERR, DOSEPRO RTNS)* 00160000
  161. * R14 - WORK * 00161000
  162. * R15 - TEMP ADDRESSABILITY UPON ENTRY * 00162000
  163. * * 00163000
  164. * * 00164000
  165. * NOTES: * 00165000
  166. * * 00166000
  167. * FOR DMSVIP TO GET CONTROL AFTER OS GENCB, TESTCB, * 00167000
  168. * MODCB, OR SHOWCB MACRO EXECUTION, THE VIP ADCON MUST BE * 00168000
  169. * AT RELATIVE LOCATION 12(C). * 00169000
  170. * * 00170000
  171. * THE FOLLOWING OS VSAM MACRO EXPANSION LOADS THE ENTRY POINT * 00171000
  172. * ADDRESS SET IN THE SIMULATED CVT AT INITIAL PROGRAM * 00172000
  173. * LOAD: * 00173000
  174. * * 00174000
  175. * + L 15,16 POINT TO CVT * 00175000
  176. * + L 15,256(,15) POINT TO AMCBS * 00176000
  177. * + L 15,12(,15) POINT TO CB MANIPULATION ROUTINE 00177000
  178. * XX REPRESENTS VARIOUS @VA12931 00178000
  179. * ENTRY POINTS 0 TO 80 @VA12931 00178300
  180. * + BAL 14,XX(,15) BRANCH TO ROUTINE @VA12931 00178600
  181. * * 00179000
  182. * THIS MODULE EXECUTES WITH A PSW KEY OF X'0' (NUCLEUS) WHICH * 00180000
  183. * IS SET VIA A DMSKEY MACRO. THE PSW KEY IS RESET PRIOR TO * 00181000
  184. * EACH RETURN OF CONTROL TO THE CALLING PROGRAM. * 00182000
  185. * * 00183000
  186. * * 00184000
  187. * OPERATION: * 00185000
  188. * * 00186000
  189. * INITIALIZATION- * 00187000
  190. * * 00188000
  191. * UPON FIRST CALL TO THE INTERFACE, A 'SET DOS ON (VSAM '* 00189000
  192. * COMMAND IS ISSUED TO LOAD THE DOS SEGMENT. THEN, THE * 00190000
  193. * CHAIN OF DOSCB'S IS SEARCHED AND DOS ASSGN COMMANDS * 00191000
  194. * ARE ISSUED FOR THE OS USER. * 00192000
  195. * * 00193000
  196. * OPEN (SVC19)- * 00194000
  197. * * 00195000
  198. * ALL OS ACB'S ARE REARRANGED TO DOS FORMAT PRIOR TO * 00196000
  199. * OPEN. IN ADDITION, ANY EXIT LISTS POINTED TO BY THE * 00197000
  200. * ACB'S ARE REARRANGED IF NECESSARY. THE ADDRESSES OF * 00198000
  201. * EXIT ROUTINES CONTAINED THEREIN ARE REPLACED BY THE * 00199000
  202. * ADDRESS OF DMSVIP3 TO ALLOW VIP TO GAIN CONTROL * 00200000
  203. * PRIOR TO THE USER EXIT (SEE BELOW). * 00201000
  204. * * 00202000
  205. * A DOS OPEN IS THEN ISSUED VIA DOS SVC 2 TO $$BOPEN. * 00203000
  206. * ANY DOS ERROR CODES THAT DO NOT EXIST IN OS ARE * 00204000
  207. * MAPPED TO OS EQUIVALENTS. THE A(DMSVIP2) (ACTION MACRO * 00205000
  208. * ENTRY POINT) IS STORED IN ALL SUCCESSFULLY OPENED * 00206000
  209. * ACB'S, AND CONTROL IS RETURNED TO THE CALLER (DMSSOP). * 00207000
  210. * * 00208000
  211. * CLOSE (SVC20), TCLOSE(SVC23)- * 00209000
  212. * * 00210000
  213. * THESE REQUESTS ARE MADE VIA DOS SVC 2 TO $$BCLOSE. * 00211000
  214. * FOR TCLOSE, A FLAG IS SET IN THE NUCLEUS TO DIRECT * 00212000
  215. * $$BCLOSE TO CALL $$BTCLOS AFTER PROCESSING THE SVC * 00213000
  216. * PLIST. * 00214000
  217. * * 00215000
  218. * THE A(IKQVSM) (VSAM DATA MGT REQUEST DRIVER) IS STORED * 00216000
  219. * IN ALL ACB'S PRIOR TO THE SUPERVISOR CALL. ON RETURN, * 00217000
  220. * THE A(DMSVIP2) IS RESTORED IN THE ACB UNCONDITIONALLY * 00218000
  221. * FOR TCLOSE REQUESTS, AND IN UNSUCCESSFULLY CLOSED ACB'S* 00219000
  222. * FOR CLOSE REQUESTS. CONTROL IS RETURNED TO THE CALLER. * 00220000
  223. * * 00221000
  224. * NOTE THAT FOR OPEN, CLOSE AND TCLOSE REQUESTS, AN ACB * 00222000
  225. * LIST IS BUILT IN FREE STORAGE FROM THE USER'S PLIST * 00223000
  226. * AND PASSED TO DOS. THE LIST IS DMSFRET'D UPON RETURN * 00224000
  227. * FROM VSAM. * 00225000
  228. * * 00226000
  229. * * 00227000
  230. * GET, PUT, POINT, ENDREQ, ERASE- * 00228000
  231. * * 00229000
  232. * THE REQUEST CODE IN REGISTER ZERO IS MAPPED TO THE * 00230000
  233. * EQUIVALENT DOS REQUEST CODE. NEXT, THE RPL (OR CHAIN * 00231000
  234. * OF RPL'S) IS REARRANGED TO DOS FORMAT IF NOT PREVIOUSLY* 00232000
  235. * DONE. IF THE USER HAS PROVIDED AN ECB ADDRESS IN THE * 00233000
  236. * OS RPL, A FLAG IS SET IN THE NEW DOS RPL AND THE ECB * 00234000
  237. * ADDRESS IS SAVED AT THE END OF THE BLOCK. ASYNCHRONOUS * 00235000
  238. * PROCESSING IS SIMULATED BY THE SETTING OF ANY ACTIVE * 00236000
  239. * EXIT RTNS INACTIVE WITHIN THE USER EXLST (WITH THE * 00237000
  240. * EXCEPTION OF A JRNAD EXIT WHICH IS NOT AN ERROR EXIT). * 00238000
  241. * THIS PREVENTS VSAM FROM TAKING AN ERROR EXIT AND ALLOWS* 00239000
  242. * SUCH AN EXIT TO BE DEFERRED UNTIL A CHECK IS ISSUED * 00240000
  243. * (SEE BELOW). * 00241000
  244. * * 00242000
  245. * THE DOS MACRO IS THEN ISSUED VIA A BALR TO IKQVSM. * 00243000
  246. * * 00244000
  247. * ALL DOS ERROR CODES IN THE RPL FDBK FIELD THAT DO NOT * 00245000
  248. * EXIST IN OS ARE MAPPED TO OS EQUIVALENTS. * 00246000
  249. * IF THE USER HAS SPECIFIED SYNCHRONOUS PROCESSING, THE * 00247000
  250. * RETURN CODE IS PASSED UNCHANGED IN REGISTER 15. * 00248000
  251. * * 00249000
  252. * FOR ASYNCHRONOUS PROCESSING, ANY RETURN CODE IS * 00250000
  253. * CLEARED BEFORE RETURN AND PREVIOUSLY SET INACTIVE * 00251000
  254. * EXIT ROUTINES ARE RESTORED TO ACTIVE STATUS IN THE * 00252000
  255. * EXLST. (SEE DESCRIPTION OF CHECK MACRO, BELOW, FOR * 00253000
  256. * FURTHER COMMENTS). ALL ECB'S ARE SET TO 'WAITING' * 00254000
  257. * STATUS. * 00255000
  258. * * 00256000
  259. * CHECK- * 00257000
  260. * * 00258000
  261. * THE RPL FDBK FIELD IS EXAMINED FOR THE RESULTS OF THE * 00259000
  262. * PREVIOUS I/O OPERATION ON THE VSAM DATA SET. CONTROL * 00260000
  263. * IS PASSED TO THE APPROPRIATE EXIT ROUTINE, IF AN * 00261000
  264. * ACTIVE ONE HAS BEEN PROVIDED. ALSO, ALL 'WAITING' * 00262000
  265. * ECB'S ARE POSTED WITH AN EQUIVALENT COMPLETION CODE. * 00263000
  266. * * 00264000
  267. * IF NO ACTIVE EXIT ROUTINE EXISTS, OR IF AN EXIT ROUTINE* 00265000
  268. * 'RETURNS TO VSAM', THE RETURN CODE IS SET IN REGISTER * 00266000
  269. * 15, AND CONTROL IS RETURNED TO THE USER INSTRUCTION * 00267000
  270. * FOLLOWING THE CHECK. * 00268000
  271. * * 00269000
  272. * GENCB- * 00270000
  273. * * 00271000
  274. * FOR GENCB BLK=ACB OR BLK=EXLST, A DOS GENCB REQUEST * 00272000
  275. * IS ISSUED VIA BALR TO IKQGEN. THE PLIST IS UNCHANGED. * 00273000
  276. * * 00274000
  277. * IF THE GENCB IS FOR AN RPL, AND THE USER HAS SPECIFIED * 00275000
  278. * THE ECB KEYWORD, THE PLIST IS REARRANGED TO EXCLUDE * 00276000
  279. * THE ECB ELEMENT, SINCE IT IS NOT SUPPORTED IN DOS. * 00277000
  280. * A DOS GENCB IS THEN ISSUED AND, IF THE USER HAS * 00278000
  281. * PROVIDED A WORKAREA, THE ADDRESS OF THE ECB IS STORED * 00279000
  282. * AT THE END OF THE RPL AND A FLAG IS SET IN THE RPL. * 00280000
  283. * THE PLIST IS RESTORED BEFORE CONTROL IS RETURNED TO * 00281000
  284. * THE USER. * 00282000
  285. * * 00283000
  286. * MODCB, SHOWCB, TESTCB- * 00284000
  287. * * 00285000
  288. * IF A MODCB IS ISSUED FOR AN OS ACB, RPL OR EXLST, * 00286000
  289. * THE CONTROL BLOCK IS REARRANGED TO DOS FORMAT BEFORE * 00287000
  290. * A BALR TO IKQTMS. THE ECB KEYWORD IS NOT ALLOWED ON * 00288000
  291. * A MODCB, SHOWCB OR TESTCB. * 00289000
  292. * * 00290000
  293. * IF THE REQUEST IS FOR TESTCB IO=COMPLETE, A 'NOT EQUAL'* 00291000
  294. * OR 'WAITING' RESULT IS UNCONDITIONALLY RETURNED TO THE * 00292000
  295. * USER. ALL OTHER SUPPORTED TESTCB REQUESTS ARE PASSED * 00293000
  296. * TO DOS, AND THE USER CAN RELY ON THE PSW CONDITION CODE* 00294000
  297. * TO INDICATE THE RESULTS OF THE TEST. * 00295000
  298. * * 00296000
  299. * IF AN ERET EXIT IS PROVIDED FOR TESTCB, THE A(DMSVIP4) * 00297000
  300. * IS SUBSTITUTED IN THE PLIST TO ALLOW VIP TO GAIN CONTROL 00298000
  301. * PRIOR TO ERET ENTRY AND SET THE PROPER SVC BIT (DOS BIT* 00299000
  302. * OFF). THE ERET ADDRESS IS RESTORED TO THE PLIST PRIOR TO 00300000
  303. * RETURN TO THE USER FOLLOWING THE TESTCB. * 00301000
  304. * * 00302000
  305. * VSAM EXIT TO USER EXIT RTN- * 00303000
  306. * * 00304000
  307. * ENTRY TO THE INTERFACE IS MADE AT DMSVIP3 FOR ALL * 00305000
  308. * VSAM ERROR EXITS DURING I/O. THE DOS SVC BIT IS TURNED * 00306000
  309. * OFF AND USER STORAGE KEY IS RESTORED. * 00307000
  310. * * 00308000
  311. * THE ADDRESS OF THE USER ROUTINE IS RECOVERED FROM * 00309000
  312. * THE SAVED LIST (EITHER THE PRIMARY LIST IN THE WORK AREA 00310000
  313. * OR FROM AN OVERFLOW LIST- OEXLSA). * 00311000
  314. * * 00312000
  315. * CONTROL IS THEN PASSED DIRECTLY TO THE EXIT ROUTINE. * 00313000
  316. * IF THE ROUTINE 'RETURNS TO VSAM', VIP3 RESETS THE * 00314000
  317. * ENVIRONMENT FLAGS, AND BRANCHES BACK TO VSAM. * 00315000
  318. * * 00316000
  319. * NOTE THAT THE INTERFACE IS CAPABLE OF SAVING UP TO * 00317000
  320. * 128 DISTINCT EXIT ROUTINE ADDRESSES DURING A RUN UNIT. * 00318000
  321. * * 00319000
  322. * VSAM EXIT TO USER ERET RTN- * 00320000
  323. * * 00321000
  324. * ENTRY TO THE INTERFACE IS MADE AT DMSVIP4 FOR ALL * 00322000
  325. * VSAM EXITS TO A USER ERET ROUTINE DURING TESTCB MACRO * 00323000
  326. * REQUESTS. THE DOS SVC BIT IS TURNED OFF AND USER * 00324000
  327. * STORAGE KEY RESTORED. * 00325000
  328. * * 00326000
  329. * THE ADDRESS OF THE ERET ROUTINE IS RECOVERED FROM THE * 00327000
  330. * WORK AREA AND CONTROL IS PASSED TO THE ROUTINE. * 00328000
  331. * * 00329000
  332. * NOTE THAT THE ERET ROUTINE IS RESTRICTED FROM RETURNING* 00330000
  333. * CONTROL TO VSAM. * 00331000
  334. * * 00332000
  335. * NOTE - PROGRAMMER CODE = @V305174 * 00333000
  336. * * 00334000
  337. *********************************************************************** 00335000
  338. EJECT 00336000
  339. DMSVIP START , @V305174 00337000
  340. USING NUCON,R0 @V305174 00338000
  341. USING DMSVIP,R15 @V305174 00339000
  342. B VIPENTRY GO SET REGISTER 14 @VA07050 00340100
  343. DROP R15 @V305174 00341000
  344. DMSVIP2 EQU * @V305174 00342000
  345. USING *,R15 @V305174 00343000
  346. ICM R14,HIGHBYTE,=X'80' USE HI-ORD TO IND VIP2 ENTRY@V305174 00344000
  347. B REGSTORE GO SAVE REGISTERS @V305174 00345000
  348. *********************************************************************** 00346000
  349. * * 00347000
  350. * VIP ADCON - MUST BE AT RELATIVE LOCATION 12(C) - SEE NOTES * 00348000
  351. * * 00349000
  352. *********************************************************************** 00350000
  353. ADMSVIP1 DC AL4(DMSVIP1) @VA12931 00351000
  354. *********************************************************************** 00352000
  355. DROP R15 @V305174 00353000
  356. DMSVIP3 EQU * @V305174 00354000
  357. USING *,R15 @V305174 00355000
  358. B VIP3PROC BRANCH TO VIP3 PROCESSING @V305174 00356000
  359. DROP R15 @V305174 00357000
  360. SPACE 2 00358000
  361. DMSVIP1 DS 0H MACRO ENTRY POINT @VA12931 00358300
  362. * @VA12931 00358310
  363. * THE ENHANCED OS/VS VSAM CONTROL BLOCK MANIPULATION MACROS @VA12931 00358320
  364. * USE A BRANCH TABLE ENTRY TO INVOKE THE APPROPRIATE VSAM @VA12931 00358330
  365. * FUNCTION. THE FOLLOWING TABLE SUPPORTS BRANCH TABLE ENTRY. @VA12931 00358340
  366. * @VA12931 00358350
  367. SPACE 2 @VA12931 00358360
  368. USING DMSVIP1,R15 @VA12931 00358370
  369. B VIPENTRY + 0 @VA12931 00358380
  370. B VIPENTRY + 4 @VA12931 00358390
  371. B VIPENTRY + 8 GENCB = ACB @VA12931 00358400
  372. B VIPENTRY + 12 GENCB = RPL @VA12931 00358410
  373. B VIPENTRY + 16 GENCB = EXLST @VA12931 00358420
  374. B VIPENTRY + 20 ** RESERVED ** @VA12931 00358430
  375. B VIPENTRY + 24 MODCB AN ACB @VA12931 00358440
  376. B VIPENTRY + 28 MODCB AN RPL @VA12931 00358450
  377. B VIPENTRY + 32 MODCB AN EXLST @VA12931 00358460
  378. B VIPENTRY + 36 ** RESERVED ** @VA12931 00358470
  379. B VIPENTRY + 40 SHOWCB = ACB @VA12931 00358480
  380. B VIPENTRY + 44 SHOWCB = RPL @VA12931 00358490
  381. B VIPENTRY + 48 SHOWCB = EXLST @VA12931 00358500
  382. B VIPENTRY + 52 ** RESERVED ** @VA12931 00358510
  383. B VIPENTRY + 56 TESTCB AN ACB @VA12931 00358520
  384. B VIPENTRY + 60 TESTCB AN RPL @VA12931 00358530
  385. B VIPENTRY + 64 TESTCB AN EXLST @VA12931 00358540
  386. B VIPENTRY + 68 ** RESERVED ** @VA12931 00358550
  387. B VIPENTRY + 72 SHOWCB/TESTCB (KEYWORDS) @VA12931 00358560
  388. B VIPENTRY + 76 SHOWCB (RECLEN OF RPL) @VA12931 00358570
  389. B VIPENTRY + 80 MODCB (RECLEN OF RPL) @VA12931 00358580
  390. DROP R15 @VA12931 00358590
  391. VIPENTRY DS 0H MAIN OR COMMON ENTRY @VA12931 00358600
  392. LA R14,0(,R14) CLEAR HIGH ORDER BYTE @VA07050 00358700
  393. REGSTORE DMSKEY NUCLEUS GET NUCLEUS STOR KEY @V305174 00359000
  394. L R15,AVIPWORK GET ADDRESS OF WORK AREA @V305174 00360000
  395. USING VIPWORK,R15 @V305174 00361000
  396. STM R0,R14,VIPRSAVE SAVE CALLER'S REGS @V305174 00362000
  397. DROP R15 @V305174 00363000
  398. LR R11,R15 LOAD PERM BASE FOR WORK AREA@V305174 00364000
  399. USING VIPWORK,R11 @V305174 00365000
  400. BALR R12,R0 PERM BASE FOR REST OF COMMON CODE@V305174 00366000
  401. USING *,R12 @V305174 00367000
  402. LTR R14,R14 WHERE WAS INTERFACE ENTERED? @V305174 00368000
  403. BM DMREQ ENTERED AT DMSVIP2, @V305174 00369000
  404. * PROCESS VSAM DATA MGT MACRO 00370000
  405. * 00371000
  406. * ELSE, ENTRY WAS MADE AT DMSVIP ENTRY POINT- DETERMINE WHETHER THIS IS 00372000
  407. * FIRST ENTRY TO ROUTINE AND ALSO WHETHER OR NOT CALLER WAS CMS 00373000
  408. * OPEN ROUTINE (DMSSOP) OR USER PROGRAM (GENCB, TESTCB, MODCB, SHOWCB). 00374000
  409. * 00375000
  410. TM VSAMFLG1,VIPINIT FIRST TIME ENTERED? @V305174 00376000
  411. BO QUERCALL NO, DETERMINE CALLER'S IDNTY @V305174 00377000
  412. EJECT 00378000
  413. *********************************************************************** 00379000
  414. * * 00380000
  415. * INITIALIZATION PROCESSING - FIRST CALL TO INTERFACE * 00381000
  416. * * 00382000
  417. *********************************************************************** 00383000
  418. OI VSAMFLG1,VIPINIT TURN ON ENTRY FLAG (CLEANUP @V305174 00384000
  419. * RTN WILL TURN OFF - DMSVSR) 00385000
  420. * 00386000
  421. * LOAD THE DOS SEGMENT 00387000
  422. * 00388000
  423. LA R1,SETDOSON POINT TO PLIST @V305174 00389000
  424. SVC 202 LOAD DOS SHARED SEGMENT @V305174 00390000
  425. DC AL4(*+4) @V305174 00391000
  426. LA R1,=CL8'DMSSMNAT' CALL STORAGE INITIALIZER @V305174 00392000
  427. SVC 202 TO SETUP STOR AND ANCHOR TABLE @V305174 00393000
  428. DC AL4(*+4) @V305174 00394000
  429. * 00395000
  430. * 00396000
  431. * ISSUE DOS ASSGN'S FOR THE OS USER 00397000
  432. * 00398000
  433. * 00399000
  434. L R7,DOSFIRST GET ADDR OF DOSCB'S @V305174 00400000
  435. LTR R7,R7 ANY? @V305174 00401000
  436. BZ QUERCALL NO, SKIP THIS @V305174 00402000
  437. USING DOSSECT,R7 @V305174 00403000
  438. MVC DLUT(44),LUT USE WORK FOR LOG UNIT SEARCH @V305174 00404000
  439. MVC DASSGN(32),ASSGNCMD MOVE CMD TO DYNAMIC AREA @V305174 00405000
  440. LOOPTOP ICM R2,LOWBYTE,DOSDSMD GET MODE FOR POSSIBLE ASSGN @V305106 00406000
  441. LA R3,DOSYSXXX WHERE WE WANT DOS LOG UNIT @V305106 00407000
  442. SR R9,R9 CLEAR REG FOR 1ST CALL INDIC @V305174 00408000
  443. BAL R14,SRCHLUT CALL FOR DOS LOG UNIT ASSGN @V305174 00409000
  444. CLI DOSEXTNO,ALLOFF ANY EXTENTS? @V305106 00410000
  445. BZ MULTCHK NO, CHECK FOR MULTI-VOLS @V305106 00411000
  446. ICM R9,LOWBYTE,DOSEXTNO GET NO. EXTENTS @V305106 00412000
  447. L R10,DOSEXTTB AND ADDRESS OF BLOCK @V305106 00413000
  448. ELOOP ICM R2,LOWBYTE,0(R10) PROVIDE MODE FOR POSS ASSGN @V305106 00414000
  449. CLM R2,LOWBYTE,DOSDSMD DOES MODE MATCH 'MASTER'? @V305106 00415000
  450. BNE EPOINT NO, PREPARE TO CALL SRCHLUT @V305106 00416000
  451. MVC 1(2,R10),DOSYSXXX USE THE SAME LOG UNIT CODE @V305106 00417000
  452. B ENEXT SKIP SRCHLUT CALL @V305106 00418000
  453. EPOINT LA R3,1(,R10) SET DOS LOG UNIT PTR @V305106 00419000
  454. BAL R14,SRCHLUT CALL FOR DOS LOG UNIT ASSGN @V305106 00420000
  455. ENEXT LA R10,11(,R10) POINT TO NEXT ENTRY @V305106 00421000
  456. BCT R9,ELOOP LOOP THRU... @V305106 00422000
  457. MULTCHK CLI DOSVOLNO,ALLOFF MULT-VOLS SPECIFIED? @V305106 00423000
  458. BZ NDOSCB NO, GET NEXT DOSCB @V305106 00424000
  459. ICM R9,LOWBYTE,DOSVOLNO GET NO. ENTRIES @V305174 00425000
  460. L R10,DOSVOLTB AND ADDRESS OF BLOCK @V305106 00426000
  461. MLOOP ICM R2,LOWBYTE,0(R10) PROVIDE MODE FOR POSS ASSGN @V305106 00427000
  462. LA R3,1(,R10) SET DOS LOG UNIT PTR @V305174 00428000
  463. BAL R14,SRCHLUT CALL FOR DOS LOG UNIT ASSGN @V305174 00429000
  464. LA R10,3(,R10) POINT TO NEXT ENTRY @V305174 00430000
  465. BCT R9,MLOOP LOOP THRU MULT BLOCK @V305106 00431000
  466. SPACE 00432000
  467. B NDOSCB NOW ON TO THE NEXT @V305174 00433000
  468. * 00434000
  469. * PROVIDE DOS LOG UNIT CODE, ASSGN IF NECESSARY 00435000
  470. * 00436000
  471. SRCHLUT LA R6,DLUT POINT TO BEG OF TABLE @V305174 00437000
  472. CLC DOSDD(7),=CL8'IJSYSCT' SYSCAT DDNAME? @V305174 00438000
  473. BE SYSCAT YES, SPECIAL HANDLING HERE @V305174 00439000
  474. NOTCAT MVI 0(R3),PROG SET TO INDIC PROG UNIT @V305066 00440000
  475. CLI DOSDEV,DOSDUM DUMMY DATA SET? @V305174 00441000
  476. BNE AGAIN NO, GO MATCH LOGICAL UNIT @V305174 00442000
  477. OI DUMFLAG,DUMMIES SET DUMMY FLAG FOR LATER REF @V305174 00443000
  478. MVI 1(R3),SYS010 LOG UNIT SYS010 FOR DUMMIES @V305174 00444000
  479. BR R14 RETURN TO CALLER @V305174 00445000
  480. AGAIN CLI 0(R6),BLANKS MODE STILL UNASSIGNED? @V305174 00446000
  481. BE NEWSLOT YES, GO AND USE IT @V305174 00447000
  482. CLM R2,LOWBYTE,0(R6) DO FILEMODES MATCH? @V305174 00448000
  483. BNE UPDLUT NO @V305174 00449000
  484. MVC 1(1,R3),3(R6) PROV. LOG DEV NUM FOR CALLER @V305174 00450000
  485. NI 1(R3),HEXTRANS TRANSLATE TO HEX @V305174 00451000
  486. BR R14 RET TO CALLER,ASSGN PREV DONE@V305174 00452000
  487. UPDLUT LA R6,4(,R6) NO, CHECK NEXT IN TABLE @V305174 00453000
  488. B AGAIN @V305174 00454000
  489. NEWSLOT STCM R2,LOWBYTE,0(R6) ASSIGN MODE IN TABLE @V305174 00455000
  490. MVC 1(1,R3),3(R6) MOVE CHAR DEV NUM TO DOSCB @V305174 00456000
  491. NI 1(R3),HEXTRANS TRANSLATE TO HEX @V305174 00457000
  492. EJECT 00458000
  493. * 00459000
  494. * MODIFY ASSGN COMMAND FOR THIS DATA SET AND 00460000
  495. * ISSUE DOS ASSGN 00461000
  496. * 00462000
  497. MVC DASSGN+11(3),1(R6) INSERT LOGICAL DEVICE @V305174 00463000
  498. FOUND STCM R2,LOWBYTE,DASSGN+16 INSERT FILEMODE @V305174 00464000
  499. DOSASSGN LA R1,DASSGN POINT TO PLIST @V305174 00465000
  500. SVC 202 @V305174 00466000
  501. DC AL4(ASGNERR) ERROR ROUTINE @V305174 00467000
  502. BR R14 RETURN TO CALLER @V305174 00468000
  503. SYSCAT EQU * @V305174 00469000
  504. * 00470000
  505. * FOR DDNAME IJSYSCT ISSUE 'ASSGN SYSCAT FILEMODE' 00471000
  506. * 00472000
  507. LTR R9,R9 FIRST DOSCB CALL? @V305174 00473000
  508. BZ GOODCAT YES, GO TO IT @V305174 00474000
  509. CLM R2,LOWBYTE,DOSDSMD EXTENT MODE SAME AS 'MASTER'?@V305106 00475000
  510. BNE NOTCAT NO, TREAT AS NO CAT @V305174 00476000
  511. GOODCAT MVC 0(2,R3),=X'000D' SET SYSTEM CODE IN DOSCB @V305174 00477000
  512. CLI DOSDEV,DOSDUM SYSCAT DUMMIED? @V305174 00478000
  513. BNE CAT NO, PROCEED @V305174 00479000
  514. OI DUMFLAG,DUMCAT YES, SET FLAG FOR LATER REF @V305174 00480000
  515. BR R14 RETURN TO CALLER @V305174 00481000
  516. CAT MVC DASSGN+11(3),=CL3'CAT' SPECIAL LOG UNIT @V305174 00482000
  517. B FOUND ISSUE DOS ASSGN COMMAND @V305174 00483000
  518. NDOSCB ICM R7,B8TO31,DOSNEXT+1 POINT TO NEXT DOSCB @V305174 00484000
  519. LTR R7,R7 ANY LEFT? @V305174 00485000
  520. BP LOOPTOP YES, CONTINUE TO MARCH @V305174 00486000
  521. * 00487000
  522. * ISSUE 'ASSGN SYS010 IGN' OR 'ASSGN SYSCAT IGN' AS INDIC IN DLUT 00488000
  523. * 00489000
  524. MVC DASSGN+16(3),=CL3'IGN' SET IGNORE FIELD IN CMD @V305174 00490000
  525. TM DUMFLAG,DUMMIES ANY DUMMY DATASETS ENCNTR'D? @V305174 00491000
  526. BZ TDUMCAT NO, HOW ABOUT SYSCAT DATA SET@V305174 00492000
  527. MVC DASSGN+11(3),DUMUNIT LOG UNIT SYS010 FOR DUMMY @V305174 00493000
  528. BAL R14,DOSASSGN ISSUE COMMAND @V305174 00494000
  529. TDUMCAT TM DUMFLAG,DUMCAT HAS IJSYSCT BEEN DUMMIED? @V305174 00495000
  530. BZ QUERCALL NO, END OF ASSIGNMENTS @V305174 00496000
  531. MVC DASSGN+11(3),=CL3'CAT' LOGICAL UNIT @V305174 00497000
  532. BAL R14,DOSASSGN ISSUE CMD THEN FALL THRU @V305174 00498000
  533. * TO QUERCALL 00499000
  534. DROP R7 @V305174 00500000
  535. EJECT 00501000
  536. * 00502000
  537. * DETERMINE WHETHER CALLER WAS DMSSOP OR USER VIA CONTROL BLOCK MACRO 00503000
  538. * 00504000
  539. QUERCALL OI DOSFLAGS,DOSSVC TURN ON DOS SVC BIT @V305174 00505000
  540. L R5,SAVER14 LOAD CALLER'S R14 @V305174 00506000
  541. CLC 1(3,R5),=CL3'SOP' IS THIS OPEN ROUTINE'S PLIST?@V305174 00507000
  542. BNE CBMACS NO, CNTL BLK MANIP MACROS-PROC @V305174 00508000
  543. LR R6,R5 PRIME WK REG FOR OPEN CLOSE PROC @V305174 00509000
  544. LA R5,4(,R5) BUMP REG PAST PLIST IN SOP @V305174 00510000
  545. ST R5,SAVER14 REPLACE FOR LATER RETURN @V305174 00511000
  546. EJECT 00512000
  547. * 00513000
  548. * PROCESS REQUEST FROM DMSSOP- OPEN/CLOSE/TCLOSE 00514000
  549. * 00515000
  550. * CALLING SEQUENCE: 00516000
  551. * 00517000
  552. * L R15,ACMSCVT POINT TO CVT 00518000
  553. * L R15,256(,R15) GET ADDR OF DMSVIP (CVTAVIB) 00519000
  554. * BALR R14,R15 EXIT TO INTERFACE 00520000
  555. * DC CL1'O' OPTION BYTE (C'O'-OPEN, C'C'-CLOSE, 00521000
  556. * C'T'-TCLOSE) 00522000
  557. * DC CL3'SOP' SOP IDENTIFIER 00523000
  558. * 00524000
  559. * R6 CONTAINS THE CONTENTS OF CALLER'S R14 00525000
  560. * 00526000
  561. * BUILD LIST OF ACB'S IN FREE STORAGE FOR DOS 00527000
  562. * 00528000
  563. * DETERMINE TYPE OF REQUEST- OPEN, CLOSE, OR TCLOSE 00529000
  564. * 00530000
  565. OI VSAMFLG1,VIPSOP SET FLAG FOR DOS $$B... RTN @V305174 00531000
  566. SR COUNTREG,COUNTREG INITIALIZE COUNTER @V305174 00532000
  567. L R7,SAVER1 PLIST ADDRESS IN WORK REG @V305174 00533000
  568. SOP1 L ACBREG,0(,R7) PT TO CNTL BLK (ACB OR DCB) @V305174 00534000
  569. CLI 0(ACBREG),ACBIDD ACB? @V305174 00535000
  570. BNE SOP2 NO, SKIP @V305174 00536000
  571. LA COUNTREG,1(,COUNTREG) YES, INCREMENT COUNTER @V305174 00537000
  572. SOP2 TM 0(R7),LAST LAST IN PLIST? @V305174 00538000
  573. BO FREEACBL YES, GO DMSFREE FOR LIST @V305174 00539000
  574. LA R7,4(,R7) POINT TO NEXT @V305174 00540000
  575. B SOP1 CONTINUE @V305174 00541000
  576. FREEACBL EQU * @V305174 00542000
  577. SRL COUNTREG,1 DIVIDE BY 2 AND @V305174 00543000
  578. LA COUNTREG,1(,COUNTREG) ADD 1 FOR SPACE REQUEST @V305174 00544000
  579. LR R0,COUNTREG R0 HAS NUMBER OF DWORDS @V305174 00545000
  580. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=ERR109S @V305174 00546000
  581. ST R1,ACBLIST SAVE ADDRESS IN NUCON @V305174 00547000
  582. STC COUNTREG,ACBLIST WITH SIZE IN HI-ORDER BYTE @V305174 00548000
  583. L R0,SAVER1 PRIME R0 WITH PLIST ADDRESS @V305174 00549000
  584. CLI 0(R6),CLOSE CLOSE REQUEST? @V305174 00550000
  585. BE DOSCLOSE YES @V305174 00551000
  586. CLI 0(R6),TCLOSE TCLOSE? @V305174 00552000
  587. BE DOSTCLOS RIGHT THIS TIME @V305174 00553000
  588. SPACE 2 00554000
  589. OSOPEN EQU * @V305174 00555000
  590. LR DOSLREG,R1 USE WORK REG FOR ACB LIST PTR@V305174 00556000
  591. LR R7,R0 PLIST ADDRESS IN WORK REG @V305174 00557000
  592. OP2 L ACBREG,0(,R7) PT TO CNTL BLK (ACB OR DCB) @V305174 00558000
  593. CLI 0(ACBREG),ACBIDD ACB? @V305174 00559000
  594. BE OP4 YES, PROCESS IT @V305174 00560000
  595. OP3 TM 0(R7),LAST IS THIS THE LAST IN PLIST? @V305174 00561000
  596. BO DOSOPEN YES, NOW CAN ISSUE DOS OPEN @V305174 00562000
  597. LA R7,4(,R7) POINT TO NEXT @V305174 00563000
  598. B OP2 CONTINUE @V305174 00564000
  599. OP4 LA R14,OP3 LOAD BRANCH ADDR FOR PROCEXL @V305174 00565000
  600. MVI 0(DOSLREG),ALLOFF CLEAR HI-ORD POS (FLAG BYTE) @V305174 00566000
  601. MVC 1(3,DOSLREG),1(R7) ENTER ACB ADDRESS IN LIST @V305174 00567000
  602. LA DOSLREG,4(,DOSLREG) AND POINT TO NEXT SLOT @V305174 00568000
  603. CLI 3(ACBREG),OSACBLEN OS ACB? @V305174 00569000
  604. BNE PROCEXL NO, DOS-SET=OPEN, 1ST PROC EXLST @V305174 00570000
  605. * 00571000
  606. * BUILD DOS ACB IN WORK AREA FROM THE OS ACB. 00572000
  607. * 00573000
  608. BDOSACB XC CBWKAR(LCBWK),CBWKAR CLEAR WORK AREA @V305174 00574000
  609. USING IKQACB,R11 @V305174 00575000
  610. MVI ACBID,ACBIDD ID @V305174 00576000
  611. MVI ACBSTYP,VSAMTYP VSAM SUBTYPE @V305066 00577000
  612. MVI ACBLEN+1,LENGTH LENGTH @V305066 00578000
  613. MVC ACBAMBL(8),4(ACBREG) AMBL ADDR & PTR TO VSAM @V305174 00579000
  614. MVC ACBBUFND(2),16(ACBREG) NUM OF DATA BUFFERS @V305174 00580000
  615. MVC ACBIBUF(2),18(ACBREG) NUM OF INDEX BUFFERS @V305174 00581000
  616. MVC ACBMACRF(2),12(ACBREG) MACRF BYTES @V305174 00582000
  617. MVI ACBDOSID,ACBDTFID DTF TYPE FOR VSAM @V305174 00583000
  618. MVC ACBSTRNO(1),15(ACBREG) NUM OF RPL STRINGS @V305174 00584000
  619. MVC ACBDDNM(8),40(ACBREG) DDNAME @V305174 00585000
  620. MVC ACBPRTCT(4),32(ACBREG) PTR TO PASSWORD @V305174 00586000
  621. MVC ACBUAPTR(4),52(ACBREG) PTR TO USER WORK AREA @V305174 00587000
  622. MVC ACBBFPL(4),20(ACBREG) ->1ST DATA BUF IN BUF POO@V305174 00588000
  623. MVC ACBEXLST(4),36(ACBREG) USER EXIT LIST PTR @V305174 00589000
  624. MVC 0(68,ACBREG),ACBST OVERLAY OS WITH DOS @V305174 00590000
  625. EJECT 00591000
  626. * 00592000
  627. * IF USER HAS AN EXIT LIST, BUILD A LIST OF EXIT ADDRESSES IN 00593000
  628. * THE WORK AREA AND STORE VIP ADDRESS IN EXLST ADDRESS CELLS. 00594000
  629. * THIS WILL ENABLE VIP TO GET CONTROL PRIOR TO AN EXIT LIST BEING 00595000
  630. * ENTERED SO THAT THE DOS SVC BIT CAN BE TURNED OFF. 00596000
  631. * 00597000
  632. * NOTE- THIS ADDRESS LIST (MADE UP OF 4-BYTE ENTRIES) IS OPTIMIZED 00598000
  633. * AS IT IS BEING BUILT. I.E., EXIT LIST ADDRESSES FOR DIFFERENT 00599000
  634. * ACB'S POINTING TO THE SAME ROUTINES WILL EFFECT ONLY 1 ENTRY 00600000
  635. * IN VIP'S LIST. IF THE PRIMARY SAVE AREA (EXLSA) IS COMPLETELY 00601000
  636. * FILLED, AN OVERFLOW AREA (OEXLSA) IS OBTAINED DYNAMICALLY 00602000
  637. * FROM NUCLEUS FREE STORAGE, CHAINED TO THE PRIMARY AREA, AND 00603000
  638. * FILLED. 00604000
  639. * 00605000
  640. * PROCEXL IS ENTERED VIA AN IN-LINE BAL. R14 CONTAINS THE CALLER'S 00606000
  641. * RETURN ADDRESS, AND R5 CONTAINS A POINTER TO THE ACB. 00607000
  642. * 00608000
  643. PROCEXL EQU * @V305174 00609000
  644. USING IKQACB,ACBREG @V305174 00610000
  645. USING VIPWORK,R11 @V305174 00611000
  646. L EXLSTREG,ACBEXLST GET EXLST PTR @V305174 00612000
  647. LTR EXLSTREG,EXLSTREG ANY? @V305174 00613000
  648. BCR ZERO,R14 NO, RETURN @V305174 00614000
  649. USING IKQEXLST,EXLSTREG @V305174 00615000
  650. PROCEXL2 ST R14,RETSAV SAVE CALLER'S RETURN ADDRESS @V305174 00616000
  651. STM R7,DOSLREG,WKSAVE SAVE OSOPEN'S WORK REGS @V305174 00617000
  652. LA R2,FIVE LOAD SEARCH INCREMENT @V305066 00618000
  653. CLI EXLLEN+1,EXLJRNL EXIT LIST LEN > MAX DOS LEN? @V305174 00619000
  654. BNH SRCHEXL NO, THEN OS IS ALREADY EQUIV @V305174 00620000
  655. * RE-ARRANGE OS EXLST TO DOS FORMAT 00621000
  656. MVC EXLJRN(5),30(EXLSTREG) RELOCATE JRNAD ENTRY @V305174 00622000
  657. MVI EXLLEN+1,EXLJRNL RESET PROPER LENGTH @V305174 00623000
  658. SRCHEXL EQU * @V305174 00624000
  659. LH R3,EXLLEN GET EXIT LIST LENGTH @V305174 00625000
  660. LA R3,0(R3,EXLSTREG) R3 PTS TO END OF EXLST @V305174 00626000
  661. SR R3,R2 NOW PT TO LAST 5-BYTE ENTRY @V305174 00627000
  662. AR EXLSTREG,R2 GO PST HDR INFO & ->1ST ENTRY @V305174 00628000
  663. S2 ICM R4,ALLFOUR,EXENADDR GET PTR TO EXIT ROUTINE @V305174 00629000
  664. LTR R4,R4 ANY? @V305174 00630000
  665. BZ S3 NO, SKIP TABLE CALL @V305174 00631000
  666. BAL R14,BLDEXLSA GO MAKE TABLE ENTRY @V305174 00632000
  667. STCM R4,ALLFOUR,EXENADDR STOR VIP3 ADDR & HI-ORD NDX @V305174 00633000
  668. S3 BXLE EXLSTREG,R2,S2 PROCESS NEXT IF NEC @V305174 00634000
  669. LM R7,DOSLREG,WKSAVE RESTORE OSOPEN'S WORK REGS @V305174 00635000
  670. L R14,RETSAV GET RETURN ADDRESS @V305174 00636000
  671. BR R14 AND EXIT @V305174 00637000
  672. DROP EXLSTREG @V305174 00638000
  673. SPACE 3 00639000
  674. * 00640000
  675. * BUILD TABLE OF EXIT LIST ADDRESSES IN WORK AREA 00641000
  676. * 00642000
  677. * ON ENTRY: R4 HAS ADDRESS OF EXIT LIST ROUTINE 00643000
  678. * ON EXIT: R4 HAS ADDRESS OF VIP3 (WITH INDEX ENTRY IN HI-ORDER 00644000
  679. * BYTE) TO BE STORED BACK INTO EXLST ADCON CELL 00645000
  680. * 00646000
  681. * INDEX ENTRY DESCRIPTION - 00647000
  682. * 00648000
  683. * BIT 0 - ADDRESS HAS BEEN PROCESSED BY VIP 00649000
  684. * BITS 1-3 - BLOCK NUM (PRIMARY BLOCK IN VIPWORK = 0) 00650000
  685. * BITS 4-7 - WORD NUMBER IN ABOVE BLOCK 00651000
  686. * 00652000
  687. * NOTE- EACH ADDRESS SAVE BLOCK IS 18 FW'S, INCLUDING 00653000
  688. * THE PRIMARY BLOCK AND UP TO 7 OVERFLOW BLOCKS. 00654000
  689. * 00655000
  690. BLDEXLSA EQU * @V305174 00656000
  691. USING VIPWORK,R11 @V305174 00657000
  692. LTR R4,R4 ALREADY PROC'D THIS ENTRY? @V305174 00658000
  693. BCR NEG,R14 YES, RETURN @V305174 00659000
  694. XC CUROVFL(4),CUROVFL CLEAR WORK CELLS @V305174 00660000
  695. LA R10,EXLSA ADDRESS PRIMARY SAVE AREA @V305174 00661000
  696. LA R8,FOUR LOAD SEARCH INCREMENT @V305066 00662000
  697. * PROCESS PRIMARY BLOCK FIRST, THEN OVERFLOWS IF NEC 00663000
  698. LA R9,LASTEXL R9->LAST AVAIL SLOT @V305174 00664000
  699. LR R7,R10 PT TO 1ST SLOT IN SAVE AREA @V305174 00665000
  700. BLD2 CLC 0(4,R7),FZERO WHAT'S THERE? @V305174 00666000
  701. BE ADDEXL ZILCH, ADD THIS @V305174 00667000
  702. CLM R4,B8TO31,1(R7) THIS ADDR BEEN SAVED PREV? @V305174 00668000
  703. BE FOUNDEXL YES @V305174 00669000
  704. BXH R7,R8,OVERFLOW BRANCH IF END OF LIST REACHED@V305174 00670000
  705. B BLD2 ELSE, CHECK NEXT SLOT @V305174 00671000
  706. ADDEXL EQU * @V305174 00672000
  707. ST R4,0(,R7) SAVE CALLER'S EXIT ADDRESS @V305174 00673000
  708. FOUNDEXL L R4,AVIP3 GET VIP3 ENTRY ADDRESS @V305174 00674000
  709. SR R7,R10 CALCULATE SLOT NUMBER IN @V305174 00675000
  710. SRL R7,2 EXIT LIST SAVE TABLE @V305174 00676000
  711. STC R7,EXLMISC MOVE TO WORK @V305174 00677000
  712. LH R7,CUROVFL LOAD CURRENT BLOCK NUMBER @V305174 00678000
  713. SLL R7,28 SHIFT TO HIGH 4 BITS @V305174 00679000
  714. O R7,EXLMISC FORMAT FOR WORK CELL @V305174 00680000
  715. STCM R7,HIGHBYTE,EXLMISC STORE @V305174 00681000
  716. OI EXLMISC,HION PROCESSED BIT ON @V305174 00682000
  717. ICM R4,HIGHBYTE,EXLMISC INSERT INDEX BYTE INTO REG @V305174 00683000
  718. BR R14 RETURN @V305174 00684000
  719. OVERFLOW EQU * @V305174 00685000
  720. USING OEXLSA,R10 OVERFLOW BLOCK ADDRESSABILITY@V305174 00686000
  721. ICM R7,ALLFOUR,ANOEXL GET OVERFLOW POINTER @V305174 00687000
  722. BZ FREEAOEX NONE, GO BUY ONE @V305174 00688000
  723. LR R10,R7 REPRIME BASE REG FOR THIS BLK@V305174 00689000
  724. B OVFL2 AND CONTINUE SEARCH @V305174 00690000
  725. SPACE 2 00691000
  726. * OBTAIN AN OVERFLOW BLOCK FROM NUCLEUS FREE STORAGE AND CHAIN IT 00692000
  727. * TO PREVIOUS ONE 00693000
  728. FREEAOEX EQU * @V305174 00694000
  729. CLC OVFLNUM(2),=H'7' WILL THIS REQ EXCEED LIMIT? @V305174 00695000
  730. BNL ERR230E YES, CANNOT HONOR REQUEST @V305174 00696000
  731. LA R0,NINE LOAD STORAGE REQUEST @V305066 00697000
  732. DMSFREE DWORDS=(0),TYPE=NUCLEUS,ERR=ERR109S @V305174 00698000
  733. ST R1,ANOEXL STORE ADDRESS OF NEW BLOCK @V305174 00699000
  734. XC 0(72,R1),0(R1) INITIALIZE FREE'D AREA @V305174 00700000
  735. LH R15,OVFLNUM BUMP TOTAL @V305174 00701000
  736. LA R15,1(,R15) NUMBER OF BLOCKS @V305174 00702000
  737. STH R15,OVFLNUM BY ONE @V305174 00703000
  738. LR R10,R1 RE-PRIME BASE REG @V305174 00704000
  739. LR R7,R10 R7 NOW->1ST OVFL ADDR SLOT @V305174 00705000
  740. OVFL2 LH R15,CUROVFL BUMP CURRENT @V305174 00706000
  741. LA R15,1(,R15) OVERFLOW COUNTER @V305174 00707000
  742. STH R15,CUROVFL BY ONE @V305174 00708000
  743. LA R9,LASTOEXL R9 NOW->LAST AVAIL SLOT @V305174 00709000
  744. B BLD2 CONTINUE PROCESSING @V305174 00710000
  745. DROP R10 @V305174 00711000
  746. SPACE 2 00712000
  747. FRETACBL EQU * @V305174 00713000
  748. * 00714000
  749. * RELEASE DMSFREE'D STORAGE FOR DOS ACB LIST 00715000
  750. * 00716000
  751. * R9 CONTAINS CALLER'S RETURN ADDRESS 00717000
  752. * 00718000
  753. * RETURN CODE IN REG 15 IS SAVED IN REG 6 00719000
  754. * 00720000
  755. SR R0,R0 CLEAR PARM REG @V305174 00721000
  756. ICM R0,LOWBYTE,ACBLIST NUMBER OF DWORDS IN R0 @V305174 00722000
  757. L R1,ACBLIST LOAD ADDRESS OF STORAGE BLOCK@V305174 00723000
  758. LR R6,R15 SAVE RETURN CODE OVER FRET @V305174 00724000
  759. DMSFRET DWORDS=(0),LOC=(1) @V305174 00725000
  760. LR R15,R6 RESTORE RETURN CODE @V305174 00726000
  761. XC ACBLIST,ACBLIST CLEAR POINTER FIELD @V305174 00727000
  762. BR R9 RETURN TO CALLER @V305174 00728000
  763. * 00729000
  764. ERR109S EQU * @V305174 00730000
  765. NI VSAMFLG1,255-VIPSOP CLEAR OPEN BIT IF ON @V305174 00731000
  766. DMSERR NUM=109,LET=S,TEXT='VIRTUAL STORAGE CAPACITY EXCEEDED' 00732000
  767. ABN177 LA R3,ABEND177 LOAD ABEND CODE @V305066 00733000
  768. B ABEND ISSUE ABEND @V305174 00734000
  769. ERR230E EQU * @V305174 00735000
  770. NI VSAMFLG1,255-VIPSOP CLEAR OPEN BIT IF ON @V305174 00736000
  771. DMSERR NUM=230,LET=E,TEXT='NO. OF VSAM EXIT ROUTINES HAS EXCEEX00737000
  772. DED MAX OF 128- UNABLE TO CONTINUE' @V305174 00738000
  773. B ABN177 @V305174 00739000
  774. EJECT 00740000
  775. USING VIPWORK,R11 @V305174 00741000
  776. DOSOPEN EQU * @V305174 00742000
  777. * 00743000
  778. * ISSUE DOS OPEN, TURN OFF DOS SVC BIT, MAP ERROR CODES IF NEC, 00744000
  779. * STORE A(DMSVIP2) IN ACB+8 (ACBAM0), AND RETURN TO CALLER 00745000
  780. * 00746000
  781. MVC 0(2,DOSLREG),SVC2 SET DOS END OF LIST MARKER @V305174 00747000
  782. L R0,ACBLIST GET ACB LIST PTR @V305174 00748000
  783. LA R1,=CL8'$$BOPEN' @V305174 00749000
  784. SVC SVCTWO ISSUE DOS OPEN @V305066 00750000
  785. * 00751000
  786. L R8,ADOSEPRO GET ADDRESS OF ERROR CHECKER @V305174 00752000
  787. BALR R9,R8 CHECK FOR ANY DOS ERRORS @V305174 00753000
  788. * 00754000
  789. BAL R9,FRETACBL GO RELEASE ACB LIST STORAGE @V305174 00755000
  790. NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 00756000
  791. L R1,SAVER1 RESTORE POINTER TO OPEN PLIST@V305174 00757000
  792. L R15,AOPNEMAP LOAD ERROR MAPPING RTN ADDR @V305174 00758000
  793. * OPNEMAP RTN WILL STORE A(DMSVIP2) IN ACB+8 FOR ALL 00759000
  794. * SUCCESSFULLY OPENED ACB'S- ELSE THE ACB'S ARE RETURNED IN THEIR 00760000
  795. * PREVIOUSLY UNOPENED CONDITION BY DOS 00761000
  796. BALR R14,R15 GO TO IT @V305174 00762000
  797. DMSKEY RESET @V305174 00763000
  798. LR R15,R6 RESTORE DOS OPEN RETURN CODE @V305174 00764000
  799. LM R0,R14,VIPRSAVE RESTORE CALLER'S REGISTERS @V305174 00765000
  800. BR R14 RETURN @V305174 00766000
  801. SPACE 2 00767000
  802. * 00768000
  803. * R1= ADDRESS OF DMSFREE'D ACB LIST STORAGE 00769000
  804. * 00770000
  805. DOSTCLOS EQU * @V305174 00771000
  806. OI VSAMFLG1,VIPTCLOS SET BIT FOR DOS CLOSE RTN @V305174 00772000
  807. DOSCLOSE EQU * @V305174 00773000
  808. LR R6,R0 PLIST PTR IN WORK REG @V305174 00774000
  809. DCL02 L ACBREG,0(,R6) POINT TO CONTROL BLOCK @V305174 00775000
  810. USING IKQACB,ACBREG @V305174 00776000
  811. CLI ACBID,ACBIDD IS IT AN ACB? @V305174 00777000
  812. BNE DCL03 NO, SKIP RESTORE @V305174 00778000
  813. MVI 0(R1),ALLOFF CLEAR HI-ORD POS (FLAG BYTE) @V305174 00779000
  814. MVC 1(3,R1),1(R6) ENTER ACB ADDRESS IN LIST @V305174 00780000
  815. LA R1,4(,R1) POINT TO NEXT SLOT @V305174 00781000
  816. MVC ACBAM0,AIKQVSM RESTOR ADDR DATAMGT REQ DRIVER @V305174 00782000
  817. * FOR VSAM RTN (IKQCLO) 00783000
  818. DCL03 TM 0(R6),LAST ALL DONE? @V305174 00784000
  819. BO DSVC YES, ISSUE DOS REQUEST @V305174 00785000
  820. LA R6,4(,R6) NO, POINT TO NEXT @V305174 00786000
  821. B DCL02 AND CONTINUE @V305174 00787000
  822. DSVC EQU * @V305174 00788000
  823. MVC 0(2,R1),SVC2 SET DOS END OF LIST MARKER @V305174 00789000
  824. LA R1,=CL8'$$BCLOSE' DOS RTN NAME @V305174 00790000
  825. L R0,ACBLIST GET ACB LIST PTR @V305174 00791000
  826. SVC SVCTWO @V305066 00792000
  827. L R8,ADOSEPRO GET ADDRESS OF ERROR CHECKER @V305174 00793000
  828. BALR R9,R8 CHECK FOR ANY DOS ERRORS @V305174 00794000
  829. BAL R9,FRETACBL GO RELEASE ACB LIST STORAGE @V305174 00795000
  830. NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 00796000
  831. TM VSAMFLG1,VIPTCLOS WAS THIS A TCLOSE? @V305174 00797000
  832. BO DTCL YES, NEED TO REPL ACBAMO FLD @V305174 00798000
  833. * ELSE, RESTORE ADDR VIP2 FOR ALL ACBS NOT SUCCESSFULLY CLOSED 00799000
  834. L R6,SAVER1 NEED PLIST PTR @V305174 00800000
  835. L ACBREG,0(,R6) POINT TO CONTROL BLOCK @V305174 00801000
  836. DCL04 CLI ACBID,ACBIDD ACB? @V305174 00802000
  837. BNE DCL05 NO, SKIP CLOSE TEST @V305174 00803000
  838. TM ACBOFLGS,ACBOPEN STILL OPEN (UNSUCC CLOSE)? @V305174 00804000
  839. BZ DCL05 NO, DON'T NEED RESTORE @V305174 00805000
  840. MVC ACBAM0,AVIP2 CLOSE NO GOOD- PUT BACK AVIP2@V305174 00806000
  841. DCL05 TM 0(R6),LAST LAST? @V305174 00807000
  842. BO CLOSRTN YES, GO RETURN TO USER @V305174 00808000
  843. LA R6,4(,R6) NEXT @V305174 00809000
  844. B DCL04 AND CONTINUE @V305174 00810000
  845. CLOSRTN LR R6,R15 SAVE RET CODE REG OVER DMSKEY@V305174 00811000
  846. DMSKEY RESET @V305174 00812000
  847. LR R15,R6 RESTORE RETURN CODE @V305174 00813000
  848. LM R0,R14,VIPRSAVE RESTORE CALLER'S REGS @V305174 00814000
  849. BR R14 RETURN @V305174 00815000
  850. DTCL EQU * @V305174 00816000
  851. NI VSAMFLG1,255-VIPTCLOS TURN OFF FLAG BIT @V305174 00817000
  852. L R6,SAVER1 GET PTR TO PLIST AGAIN @V305174 00818000
  853. L ACBREG,0(,R6) POINT TO CONTROL BLOCK @V305174 00819000
  854. DTCL02 CLI ACBID,ACBIDD ACB? @V305174 00820000
  855. BNE DTCL03 NO, SKIP RESTORE @V305174 00821000
  856. MVC ACBAM0,AVIP2 RESTORE ACBAM0 FIELD @V305174 00822000
  857. DTCL03 TM 0(R6),LAST LAST? @V305174 00823000
  858. BO CLOSRTN YES, RETURN TO USER @V305174 00824000
  859. LA R6,4(,R6) NO, GET NEXT @V305174 00825000
  860. B DTCL02 AND CONTINUE @V305174 00826000
  861. DROP ACBREG @V305174 00827000
  862. EJECT 00828000
  863. * 00829000
  864. * PROCESS VSAM CONTROL BLOCK MACRO REQUESTS 00830000
  865. * 00831000
  866. CBMACS EQU * @V305174 00832000
  867. XC CBMACAR(LCBMAC),CBMACAR INIT WORK AREA @V305174 00833000
  868. L LISTPTR,SAVER1 PT WORK REG TO PLIST @V305174 00834000
  869. L ACEPTR,0(,LISTPTR) PT TO HEADER ACE @V305174 00835000
  870. USING CBMACD,ACEPTR @V305174 00836000
  871. * 00837000
  872. * FOR GENCB, MODCB, TESTCB EXLST- INSURE THAT IF THE ELEMENT 00838000
  873. * ARGUMENT CONTROL ENTRY (EACE) CONTAINS THE ADDRESS OF AN EXIT 00839000
  874. * LIST, THE CORRESPONDING BIT (BIT 3) IN THE BIT STRING IS ON 00840000
  875. * 00841000
  876. CLI FTC,SHOWFTC SHOWCB? @V305174 00842000
  877. BE REARR YES, THIS IS N/A - SKIP @V305174 00843000
  878. CLI BTC,BTEXLST BLOCK TYPE=EXLST? @V305174 00844000
  879. BNE TGEN NO, THEN ALSO DON'T NEED THIS@V305174 00845000
  880. BIT3DONE TM 0(LISTPTR),LAST ALL DONE? @V305174 00846000
  881. BO BIT3OUT YES @V305174 00847000
  882. LA LISTPTR,4(,LISTPTR) POINT TO NEXT @V305174 00848000
  883. L ACEPTR,0(,LISTPTR) POINT TO EACE @V305174 00849000
  884. CLC ELEMPTR(4,ACEPTR),FZERO EXLST ADDR IN EACE? @V305174 00850000
  885. BE BIT3DONE NO, GO SEE IF DONE @V305174 00851000
  886. TM ELEMXFLG(ACEPTR),BIT3 BETTER BE ON @V305174 00852000
  887. BO BIT3DONE GREAT @V305174 00853000
  888. OI ELEMXFLG(ACEPTR),BIT3 NO, COVER UP FOR OS @V305174 00854000
  889. B BIT3DONE GO SEE IF DONE @V305174 00855000
  890. BIT3OUT L LISTPTR,SAVER1 RESET TO TOP OF PLIST @V305174 00856000
  891. L ACEPTR,0(,LISTPTR) RESET TO HEADER ACE @V305174 00857000
  892. SPACE 2 00858000
  893. TGEN CLI FTC,GENFTC GENCB? @V305174 00859000
  894. BE PGENCB YES, PROCESS @V305174 00860000
  895. * 00861000
  896. * FOR MODCB, TESTCB, SHOWCB - RE-ARRANGE OS CONTROL BLOCKS TO 00862000
  897. * DOS FORMAT IF NECESSARY. 00863000
  898. * 00864000
  899. REARR CLI BTC,BTACB ACB? @V305174 00865000
  900. BNE TRPL NO @V305174 00866000
  901. L ACBREG,4(,ACEPTR) YES, PT TO CONTROL BLOCK @V305174 00867000
  902. CLI 3(ACBREG),OSACBLEN OS ACB? @V305174 00868000
  903. BNE CBMACS02 NO, SKIP MAPPING @V305174 00869000
  904. STM LISTPTR,ACEPTR,CBMR34 SAVE WORK REGS @V305174 00870000
  905. LA R15,BDOSACB GET ADDR OF ACB MAPPING RTN @V305174 00871000
  906. BALR R14,R15 MAP OS TO DOS @V305174 00872000
  907. LM LISTPTR,ACEPTR,CBMR34 RESTORE REGS @V305174 00873000
  908. B CBMACS02 CONTINUE @V305174 00874000
  909. TRPL EQU * @V305174 00875000
  910. CLI BTC,BTRPL RPL? @V305174 00876000
  911. BNE TEXLST NO @V305174 00877000
  912. L RPLREG,4(,ACEPTR) YES, PT TO CONTROL BLOCK @V305174 00878000
  913. CLC 0(4,RPLREG),DOSRPL RPL IN DOS FORMAT? @V305174 00879000
  914. BE CBMACS02 YES, SKIP MAPPING @V305174 00880000
  915. LA R15,BDOSRPL GET ADDRESS OF RPL MAP RTN @V305174 00881000
  916. BALR R14,R15 MAP OS TO DOS @V305174 00882000
  917. B CBMACS02 CONTINUE @V305174 00883000
  918. TEXLST EQU * @V305174 00884000
  919. CLI BTC,BTEXLST EXLST? @V305174 00885000
  920. BNE CBMACS02 NO @V305174 00886000
  921. L EXLSTREG,4(,ACEPTR) PT TO CONTROL BLOCK @V305174 00887000
  922. USING IKQEXLST,EXLSTREG @V305174 00888000
  923. CLI EXLLEN+1,EXLJRNL EXIT LIST LEN > MAX DOS LEN? @V305174 00889000
  924. BNH CBMACS02 NO, OS IS ALRDY EQUIV TO DOS @V305174 00890000
  925. * RE-ARRANGE OS EXLST TO DOS FORMAT 00891000
  926. MVC EXLJRN(5),30(EXLSTREG) RELOCATE JRNAD ENTRY @V305174 00892000
  927. MVI EXLLEN+1,EXLJRNL RESET PROPER LENGTH @V305174 00893000
  928. B CBMACS02 CONTINUE @V305174 00894000
  929. DROP EXLSTREG @V305174 00895000
  930. EJECT 00896000
  931. PGENCB EQU * @V305174 00897000
  932. * INSURE THAT NUMBER OF COPIES (IN HEADER ACE) IS AT LEAST =1 00898000
  933. LH R9,GENCOP NUMBER OF COPIES IN WORK REG @V305174 00899000
  934. C R9,FZERO IS IT ZERO? @V305174 00900000
  935. BNE GR NO, FINE @V305174 00901000
  936. MVI GENCOP+1,ONES YES, SET TO DEFAULT VALUE @V305174 00902000
  937. GR CLI BTC,BTRPL GENCB BLK=RPL ? @V305174 00903000
  938. BE PGR YES, SPECIAL HANDLING @V305174 00904000
  939. * 00905000
  940. * FOR BLK=ACB OR BLK=EXLST, DOS GENCB IS ISSUED WITH PLIST 00906000
  941. * UNCHANGED. 00907000
  942. * 00908000
  943. BAL R9,GENBALR GO ISSUE DOS MACRO REQUEST @V305174 00909000
  944. GENRET LR R6,R15 SAVE R15 OVER DMSKEY @V305174 00910000
  945. NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 00911000
  946. DMSKEY RESET @V305174 00912000
  947. LR R15,R6 RESTORE RTN CODE REG @V305174 00913000
  948. L R14,SAVER14 LOAD RETURN ADDRESS @V305174 00914000
  949. LM R2,R12,SAVER2 RESTORE CALLER'S REGS @V305174 00915000
  950. BR R14 EXIT @V305174 00916000
  951. * 00917000
  952. PGR EQU * @V305174 00918000
  953. * 00919000
  954. * USER HAS ISSUED GENCB BLK=RPL,... 00920000
  955. * 00921000
  956. * THE PLIST IS SCANNED FOR NON-DOS KEYWORDS (OS/VS ONLY). IF ANY 00922000
  957. * ARE FOUND, THEY ARE CLEARED BEFORE THE DOS REQUEST IS MADE. 00923000
  958. * 00924000
  959. LA R9,GENRET SET RETURN ADDR FOR GENBALR @V305174 00925000
  960. CLC 4(4,ACEPTR),FZERO WORKAREA PROVIDED? @V305174 00926000
  961. BE PGR02 NO, SKIP @V305174 00927000
  962. OI CBMACFLG,WORKAREA SET FLAG @V305174 00928000
  963. MVC COPYNUM,2(ACEPTR) SAVE NUMBER OF COPIES @V305174 00929000
  964. PGR02 LTR ACEPTR,ACEPTR DEFAULT BLK REQ OR LAST EACE @V305174 00930000
  965. BM GENBALR YES, GO ISSUE REQUEST @V305174 00931000
  966. NEXTEACE LA LISTPTR,4(,LISTPTR) PT TO NEXT EACE ADDRESS @V305174 00932000
  967. L ACEPTR,0(,LISTPTR) PT TO EACE @V305174 00933000
  968. CLI 1(ACEPTR),ECBELID ECB ELEMENT ID? @V305174 00934000
  969. BNE PGR02 NO, CONTINUE SCAN @V305174 00935000
  970. * 00936000
  971. * USER HAS SPECIFIED ECB KEYWORD- 00937000
  972. * 00938000
  973. * IF THE ECB EACE ADDRESS IS THE LAST ONE IN THE PLIST, 00939000
  974. * THE HIGH-ORDER BIT OF THE PREVIOUS EACE ADDRESS IS SET ON 00940000
  975. * SO THAT THE ECB KEYWORD WILL NOT BE PROCESSED BY DOS VSAM. 00941000
  976. * NOTE THAT IF THE ECB EACE ADDRESS IS THE ONLY ONE IN THE PLIST, 00942000
  977. * THE HIGH-ORDER BIT IN SET IN THE HEADER ACE ADDRESS (THIS IS 00943000
  978. * LOGICALLY EQUIVALENT TO A DEFAULT REQUEST). 00944000
  979. * 00945000
  980. * IF THE ECB EACE IS NEITHER LAST NOR ONLY, THE LAST EACE ADDRESS 00946000
  981. * IN THE LIST IS COPIED OVER THE ECB EACE ADDRESS, THE 00947000
  982. * OVERLAYED ADDRESS FIELD AND THE ADDRESS OF THE FIELD ARE SAVED, AND 00948000
  983. * RESTORATION IS ACCOMPLISHED UPON RETURN FROM THE GENCB REQUEST. 00949000
  984. * 00950000
  985. ST ACEPTR,AECBEACE SAVE PTR TO ECB EACE @V305174 00951000
  986. LTR ACEPTR,ACEPTR LAST IN PLIST? @V305174 00952000
  987. BNM OVERLAY NO, THEN OVERLAY PLIST ENTRY @V305174 00953000
  988. * 00954000
  989. SH LISTPTR,=H'4' PT TO PREVIOUS LIST ADDR @V305174 00955000
  990. OI 0(LISTPTR),LAST MAKE IT THE LAST @V305174 00956000
  991. BAL R10,COPIES GO PROC COPIES (>1) & ISSUE MACRO@V305174 00957000
  992. * RESTORE PLIST 00958000
  993. RESTOREP L LISTPTR,SAVER1 START AT TOP OF LIST @V305174 00959000
  994. FINDLAST TM 0(LISTPTR),LAST LAST? @V305174 00960000
  995. BO FLAST YES, FINISH RESTORE @V305174 00961000
  996. LA LISTPTR,4(,LISTPTR) PT TO NEXT @V305174 00962000
  997. B FINDLAST CONTINUE SEARCH @V305174 00963000
  998. FLAST NI 0(LISTPTR),255-LAST CLEAR LAST BIT @V305174 00964000
  999. OI 4(LISTPTR),LAST ECB EACE PTR NOW RESET @V305174 00965000
  1000. B GENRET GO EXIT @V305174 00966000
  1001. SPACE 2 00967000
  1002. OVERLAY EQU * @V305174 00968000
  1003. * LISTPTR= ADDRESS OF ECB EACE PTR 00969000
  1004. LR R7,LISTPTR PRIME WORK REG @V305174 00970000
  1005. ONEXT LA R7,4(,R7) PT TO NEXT ADDRESS IN PLIST @V305174 00971000
  1006. TM 0(R7),LAST IS THIS THE LAST ONE? @V305174 00972000
  1007. BZ ONEXT NO, KEEP LOOKING @V305174 00973000
  1008. MVC 0(4,LISTPTR),0(R7) BRNG THIS ENTRY INTO ECB SLOT@V305174 00974000
  1009. NI 0(LISTPTR),255-LAST CLEAR 'LAST' INDIC @V305174 00975000
  1010. SH R7,=H'4' PT TO PREV ENTRY @V305174 00976000
  1011. OI 0(R7),LAST SET 'LAST' INDIC @V305174 00977000
  1012. BAL R10,COPIES GO PROC COPIES (>1) & ISSUE MACRO@V305174 00978000
  1013. * NOW RESTORE PLIST 00979000
  1014. LR R7,LISTPTR START WITH OLD ECB SLOT @V305174 00980000
  1015. OVERLAY2 TM 0(R7),LAST LAST? @V305174 00981000
  1016. BO OVERLAY3 YES @V305174 00982000
  1017. LA R7,4(,R7) NO, NEXT @V305174 00983000
  1018. B OVERLAY2 CONTINUE @V305174 00984000
  1019. OVERLAY3 NI 0(R7),255-LAST SET OFF(THIS WAS PSEUDO LAST)@V305174 00985000
  1020. MVC 0(4,LISTPTR),AECBEACE RESTORE PLIST ENTRY @V305174 00986000
  1021. B GENRET GO EXIT @V305174 00987000
  1022. EJECT 00988000
  1023. COPIES EQU * @V305174 00989000
  1024. * 00990000
  1025. * USER MAY HAVE ISSUED GENCB BLK=RPL,ECB=..,WAREA=..,LENGTH=..,COPIES=N 00991000
  1026. * -WHERE N IS A NUMBER >1. 00992000
  1027. * 00993000
  1028. * SINCE VSAM BUILDS THE CONTROL BLOCKS ADJACENT IN THE WORK AREA, 00994000
  1029. * PROVISION MUST BE MADE FOR A FULL WORD AT THE END OF EACH RPL 00995000
  1030. * FOR THE ECB ADDRESS (CMS USE ONLY). THIS IS DONE BY ISSUING 00996000
  1031. * THE GENCB REQUEST FOR 1 COPY AT A TIME AND ADJUSTING THE WORK 00997000
  1032. * AREA ADDRESS AND LENGTH FOR EACH REQUEST. 00998000
  1033. * 00999000
  1034. * WITH A WORKAREA PROVIDED FOR THE CONTROL BLOCK, THE GENCB IS 01000000
  1035. * ISSUED AND, IF SUCCESSFUL, THE ECB ADDRESS IS STORED IMMEDIATELY 01001000
  1036. * AFTER THE RPL (RPL+52). 01002000
  1037. * 01003000
  1038. * (NOTE THAT THE OS RPL = 76 BYTES IN LENGTH, WHILE THE DOS RPL 01004000
  1039. * IS ONLY 52 BYTES IN LENGTH.) 01005000
  1040. * 01006000
  1041. * IF AN ERROR IS ENCOUNTERED AFTER ANY INDIVIDUAL GENCB REQUEST, 01007000
  1042. * NO FURTHER REQUESTS ARE ISSUED, THE PLIST IS RESTORED, AND CONTROL 01008000
  1043. * IS RETURNED TO THE USER. 01009000
  1044. * 01010000
  1045. TM CBMACFLG,WORKAREA WORKAREA PROVIDED? @V305174 01011000
  1046. BO WARYES YES, CONTINUE @V305174 01012000
  1047. COPYGEN BAL R9,GENBALR NO - ISSUE GENCB HERE @V305174 01013000
  1048. BR R10 AND HEAD FOR THE EXITS @V305174 01014000
  1049. WARYES L R6,SAVER1 PT TO PLIST @V305174 01015000
  1050. L R6,0(,R6) PT TO HEADER ACE @V305174 01016000
  1051. MVC HEACE(12),0(R6) SAVE HEADER ACE IN WORK AREA @V305174 01017000
  1052. SR R8,R8 CLEAR COPY HOLDER REG @V305174 01018000
  1053. ICM R8,LOWTWO,HEACE+2 REAL NO. OF COPIES IN REG8 @V305174 01019000
  1054. LA R5,ONE PRIME WORK REG @V305066 01020000
  1055. STCM R5,LOWTWO,2(R6) NUM COPIES SET TO =1 IN PLIST@V305174 01021000
  1056. COPYGEN2 BAL R9,GENBALR ISSUE GENCB FOR 1 COPY @V305174 01022000
  1057. LTR R15,R15 ERRORS? @V305174 01023000
  1058. BNZ COPYEXIT YES, GO NO FURTHER @V305174 01024000
  1059. * SAVE ECB ADDRESS 01025000
  1060. ICM R5,ALLFOUR,4(R6) GET ADDR OF WORKAREA @V305174 01026000
  1061. USING IKQRPL,R5 @V305174 01027000
  1062. MVC RPLECB,4(ACEPTR) MOVE ECB ADDR->END OF GEN'D RPL@V305174 01028000
  1063. OI RPLFLAG,RPLECBPR SET RPL FLAG @V305174 01029000
  1064. BCTR R8,R0 DECR NUM OF COPIES @V305174 01030000
  1065. LTR R8,R8 ALL DONE? @V305174 01031000
  1066. BZ COPYEXIT YES, PREPARE FOR IN-LINE RETN@V305174 01032000
  1067. AH R5,=H'56' BUMP WAREA ADDR BY LEN(DOS RPL+4)@V305174 01033000
  1068. STCM R5,ALLFOUR,4(R6) STORE IN HEADER @V305174 01034000
  1069. SR R5,R5 ZERO WORK REG @V305174 01035000
  1070. ICM R5,LOWTWO,8(R6) GET WORKAREA LENGTH @V305174 01036000
  1071. SH R5,=H'56' REDUCE LENGTH ACCORDINGLY @V305174 01037000
  1072. STCM R5,LOWTWO,8(R6) STORE IN HEADER @V305174 01038000
  1073. B COPYGEN2 ISSUE NEXT GENCB @V305174 01039000
  1074. COPYEXIT EQU * @V305174 01040000
  1075. MVC 0(12,R6),HEACE RESTORE USER'S HEACE TO PLIST@V305174 01041000
  1076. BR R10 RETURN @V305174 01042000
  1077. DROP R5 @V305174 01043000
  1078. EJECT 01044000
  1079. CBMACS02 EQU * @V305174 01045000
  1080. CLI FTC,TESTFTC TESTCB? @V305174 01046000
  1081. BE PTESTCB YES, SPECIAL HANDLING @V305174 01047000
  1082. * 01048000
  1083. * FOR MODCB AND SHOWCB, CAN ISSUE REQUEST NOW, THEN RETURN 01049000
  1084. * 01050000
  1085. BAL R9,LOADTMS GET ADDRESS OF VSAM RTN @V387274 01051100
  1086. BAL R9,TMSBALR BRANCH TO ISSUE DOS CB MACRO @V305174 01052000
  1087. * 01053000
  1088. * IF REQUEST WAS FOR A MODCB EXLST, PROCESS NEWLY MODIFIED EXLST 01054000
  1089. * TO INSURE THAT EXIT ADDRESSES EQUAL A(DMSVIP3) 01055000
  1090. * 01056000
  1091. CLI FTC,MODFTC MODCB? @V305174 01057000
  1092. BNE GENRET NO @V305174 01058000
  1093. CLI BTC,BTEXLST MODCB EXLST? @V305174 01059000
  1094. BNE GENRET NO, RETURN @V305174 01060000
  1095. STM R15,R1,TEMPRSAV SAVE VITAL REGS OVER BAL @V305174 01061000
  1096. L EXLSTREG,4(,ACEPTR) PRIME REG W/ADDR OF CNTL BLK@V305174 01062000
  1097. BAL R14,PROCEXL2 PROCESS EXLST @V305174 01063000
  1098. LM R15,R1,TEMPRSAV RESTORE REGS @V305174 01064000
  1099. B GENRET GO RETURN TO CALLER @V305174 01065000
  1100. SPACE 3 01066000
  1101. PTESTCB EQU * @V305174 01067000
  1102. L R5,8(,ACEPTR) LOAD POSSIBLE ERET ADDRESS @V305174 01068000
  1103. LTR R5,R5 ANY? @V305174 01069000
  1104. BZ TIOEQCOM NO, PERFORM NEXT CHECK @V305174 01070000
  1105. OI CBMACFLG,ERET SET FLAG @V305174 01071000
  1106. ST R5,AERET SAVE ADDRESS @V305174 01072000
  1107. L R6,AVIP4 GET ADDR VIP TRAP RTN @V305174 01073000
  1108. STCM R6,ALLFOUR,8(ACEPTR) SUB FOR ERET ADD IN HDR ACE@V305174 01074000
  1109. TIOEQCOM EQU * @V305174 01075000
  1110. CLI BTC,ALLOFF ZERO BLOCK TYPE CODE? @V305174 01076000
  1111. BE DOSTCB YES, SKIP @V305174 01077000
  1112. * 01078000
  1113. * IF THE REQUEST IS TESTCB RPL=..,IO=COMPLETE - 01079000
  1114. * A 'NOT EQUAL' RESULT IS UNCONDITIONALLY RETURNED TO THE USER 01080000
  1115. * 01081000
  1116. LA LISTPTR,4(,LISTPTR) PT TO EACE ADDRESS @V305174 01082000
  1117. L ACEPTR,0(,LISTPTR) PT TO EACE @V305174 01083000
  1118. CLI 1(ACEPTR),IOEQCOM IO=COMPLETE KEYWORD? @V305174 01084000
  1119. BNE DOSTCB NO, GO ISSUE DOS REQUEST @V305174 01085000
  1120. TM CBMACFLG,ERET ERET ADDRESS PROVIDED? @V305174 01086000
  1121. BZ TCB02 NO @V305174 01087000
  1122. BAL R9,RESTERET YES, MUST RESTORE PLIST ENTRY@V305174 01088000
  1123. TCB02 NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 01089000
  1124. DMSKEY RESET @V305174 01090000
  1125. SR R15,R15 CLEAR RETURN CODE REG @V305174 01091000
  1126. CLI 1(ACEPTR),WAITING PERFRM UNEQUAL COMPARE TO SET@V305174 01092000
  1127. * PSW CONDITION CODE 01093000
  1128. TCBEXIT L R14,SAVER14 GET RETURN ADDRESS @V305174 01094000
  1129. LM R1,R12,SAVER1 LOAD USER'S REGS @V305174 01095000
  1130. BR R14 EXIT @V305174 01096000
  1131. SPACE 3 01097000
  1132. DOSTCB EQU * @V305174 01098000
  1133. BAL R9,LOADTMS GET ADDRESS OF VSAM RTN @V387274 01099100
  1134. BAL R9,TMSBALR ISSUE DOS TESTCB @V305174 01100000
  1135. * 01101000
  1136. * RETURN TO USER BUT PRESERVE THE PSW CONDITION CODE 01102000
  1137. * 01103000
  1138. BZ CC0 EQUAL @V305174 01104000
  1139. BL CC1 LOW @V305174 01105000
  1140. BH CC2 HIGH @V305174 01106000
  1141. SPACE 2 01107000
  1142. DOSTCB02 EQU * @V305174 01108000
  1143. TM CBMACFLG,ERET USER PROVIDED ERET? @V305174 01109000
  1144. BZ DOSTCB03 NO, SKIP RESTORE @V305174 01110000
  1145. BAL R9,RESTERET RESTORE PLIST ENTRY @V305174 01111000
  1146. DOSTCB03 NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 01112000
  1147. LR R6,R15 SAVE RET CODE REG OVER DMSKEY@V305174 01113000
  1148. DMSKEY RESET @V305174 01114000
  1149. LR R15,R6 RESTORE REG @V305174 01115000
  1150. LA R6,=X'04' ->WK REG TO CONST FOR EX INST@V305174 01116000
  1151. SR R5,R5 ZERO WORK REG @V305174 01117000
  1152. ICM R5,LOWBYTE,CBMACFLG GET CONDITION CODE FLAG @V305174 01118000
  1153. SRL R5,4 POSITION TO BITS 28-31 @V305174 01119000
  1154. EX R5,CCSET PERFORM COMPARE TO SET CC @V305174 01120000
  1155. B TCBEXIT GO RETURN TO USER @V305174 01121000
  1156. SPACE 2 01122000
  1157. RESTERET EQU * @V305174 01123000
  1158. * RESTORE THE USER'S ERET RTN ADDRESS IN THE TESTCB HEADER ACE 01124000
  1159. L LISTPTR,SAVER1 START WITH PLIST ADDRESS @V305174 01125000
  1160. L ACEPTR,0(,LISTPTR) POINT TO HEADER ACE @V305174 01126000
  1161. MVC 8(4,ACEPTR),AERET PUT BACK SAVED ERET ADDRESS @V305174 01127000
  1162. BR R9 RETURN IN-LINE @V305174 01128000
  1163. SPACE 2 01129000
  1164. CC0 OI CBMACFLG,CCEQUAL PSW CONDITION CODE = 0 @V305174 01130000
  1165. B DOSTCB02 BRANCH @V305174 01131000
  1166. CC1 OI CBMACFLG,CCLOW PSW CONDITION CODE = 1 @V305174 01132000
  1167. B DOSTCB02 BRANCH @V305174 01133000
  1168. CC2 OI CBMACFLG,CCHIGH PSW CONDITION CODE = 2 @V305174 01134000
  1169. B DOSTCB02 BRANCH @V305174 01135000
  1170. CCSET CLI 0(R6),BINZERO EXECUTED INSTRUCTION @V305066 01136000
  1171. EJECT 01137000
  1172. GENBALR L R15,AIKQGEN LOAD ADDRESS OF VSAM RTN @V305174 01138000
  1173. TMSBALR L R1,SAVER1 RESTORE PLIST PTR @V305174 01139000
  1174. BALR R14,R15 BRANCH @V305174 01140000
  1175. BR R9 RETURN TO IN-LINE PROC @V305174 01141000
  1176. DROP ACEPTR @V305174 01142000
  1177. SPACE 2 01142100
  1178. LOADTMS L R3,AVSAMSYS PT TO VSAM SAVED SYSYEM @V387274 01142200
  1179. LA R3,FOUR(,R3) PT TO 1ST PHASE NAME @V387274 01142300
  1180. FINDTMS CLC 0(EIGHT,R3),=CL8'IKQVTMS' DR LIVINGSTON? @V387274 01142400
  1181. BE EXLTMS YES, I PRESUME @V387274 01142500
  1182. LA R3,TWELVE(,R3) NEXT ENTRY @V387274 01142600
  1183. B FINDTMS KEEP LOOKING @V387274 01142700
  1184. EXLTMS L R15,EIGHT(,R3) GET ADDRESS OF TMS @V387274 01142800
  1185. BR R9 RETURN IN-LINE @V387274 01142900
  1186. EJECT 01143000
  1187. * 01144000
  1188. * PROCESS VSAM DATA MANAGEMENT MACROS 01145000
  1189. * 01146000
  1190. DMREQ EQU * @V305174 01147000
  1191. L R6,SAVER0 GET REQUEST CODE @V305174 01148000
  1192. LA R5,DOSCODES ->TO TABLE OF DOS EQUIV CODES@V305174 01149000
  1193. IC R6,0(R6,R5) MAP OS TO DOS @V305174 01150000
  1194. ST R6,SAVER0 STORE CONVERTED CODE IN USER'S R0@V305174 01151000
  1195. * 01152000
  1196. * 01153000
  1197. L RPLREG,SAVER1 LOAD ADDRESS OF RPL @V305174 01154000
  1198. CLI SAVER0+3,CHECK CHECK REQUEST (ASYNCHRONOUS)?@V305174 01155000
  1199. BE CKPROC YES, SPECIAL HANDLING @V305174 01156000
  1200. OI DOSFLAGS,DOSSVC TURN ON DOS SVC BIT @V305174 01157000
  1201. DMR2 CLC 0(4,RPLREG),DOSRPL IS RPL IN DOS FORMAT? @V305174 01158000
  1202. BE NEXTRPL YES, CHECK FOR RPL CHAINING @V305174 01159000
  1203. LA R14,NEXTRPL LOAD BRANCH ADDR FOR BDOSRPL @V305174 01160000
  1204. * 01161000
  1205. * BUILD DOS RPL IN WORK AREA FROM THE OS RPL & THEN OVERLAY 01162000
  1206. * OS WITH DOS 01163000
  1207. * 01164000
  1208. BDOSRPL XC CBWKAR(LCBWK),CBWKAR CLEAR WORK AREA @V305174 01165000
  1209. USING IKQRPL,R11 @V305174 01166000
  1210. MVC RPLST(4),DOSRPL ID, SUBTYPE, & LENGTH @V305174 01167000
  1211. MVC RPLARG(4),36(RPLREG) PTR TO SEARCH ARG @V305174 01168000
  1212. MVC RPLAREA(4),32(RPLREG) ADDR OF WORK AREA @V305174 01169000
  1213. MVC RPLRLEN(4),48(RPLREG) RECORD LENGTH @V305174 01170000
  1214. MVC RPLBUFL(4),52(RPLREG) BUFFER LENGTH @V305174 01171000
  1215. MVC RPLACB(4),24(RPLREG) PTR TO ACB @V305174 01172000
  1216. MVC RPLSTRID(1),19(RPLREG) CCW STG ID (OS = 2 BYTES)@V305174 01173000
  1217. MVC RPLKEYL(2),16(RPLREG) KEY LENGTH @V305174 01174000
  1218. MVC RPLCHAIN(4),44(RPLREG) PTR TO NEXT RPL @V305174 01175000
  1219. * 01176000
  1220. * NOW MAP THE OPTION BYTES 01177000
  1221. * ALSO SAVE THE ECB ADDR (LOCATED AT OS RPL+8), IF ANY 01178000
  1222. * 01179000
  1223. USING VIPWORK,R11 @V305174 01180000
  1224. SR R7,R7 CLEAR WORK REG @V305174 01181000
  1225. LA R6,TWO LOAD SEARCH INCREMENT @V305066 01182000
  1226. LA R5,OPTTAB POINT TO DOS OPT CODE TABLE @V305174 01183000
  1227. ICM R7,HIGHTWO,40(RPLREG) OS OPTN BYTES INTO HI-ORD @V305174 01184000
  1228. * 1ST TIME- CHECK BIT 0, LOC MODE 01185000
  1229. BNM NEXTOPT NOT ON, SKIP DOS TURN ON @V305174 01186000
  1230. DOSOPMAP OC WKMISC(2),0(R5) MAP OS TO EQUIV DOS BIT @V305174 01187000
  1231. NEXTOPT AR R5,R6 BUMP TABLE POINTER @V305174 01188000
  1232. BXLE R7,R7,DOSOPMAP MAP EQV DOS IF NXT OS BIT ON @V305174 01189000
  1233. LTR R7,R7 FINISHED? @V305174 01190000
  1234. BNZ NEXTOPT NO, CONTINUE @V305174 01191000
  1235. USING IKQRPL,R11 @V305174 01192000
  1236. MVC RPLOPT1(2),LCBWK-4(R11) MOVE OPT BYTES->DOS RPL @V305174 01193000
  1237. * INSURE THAT THE UPDATE-NO UPDATE BITS ARE IN BALANCE 01194000
  1238. TM RPLOPT1,RPLUPD UPDATE? @V305174 01195000
  1239. BO TECB YES, LEAVE NO UPDATE OFF @V305174 01196000
  1240. OI RPLOPT2,RPLNUP NO, FLIP NO UPDATE ON @V305174 01197000
  1241. * TURN ON RPLFLAG BIT 0 (ECB INDICATOR) IF OS OPT BYTE 1, BIT 7, IS ON 01198000
  1242. TECB TM 40(RPLREG),HEX01 OS RPLECB FIELD HAVE ECB ADDR?@V305174 01199000
  1243. BZ MOVERPL NO SKIP EXTRA TURN-ON @V305174 01200000
  1244. OI RPLFLAG,RPLECBPR INDIC EQUIV DOS FLAG @V305174 01201000
  1245. MVC RPLECB,8(RPLREG) ECB ADDR SAVED AT END OF RPL @V305174 01202000
  1246. MOVERPL MVC 0(56,RPLREG),RPLST OVERLAY OS RPL WITH DOS @V305174 01203000
  1247. BR R14 EXIT @V305174 01204000
  1248. USING VIPWORK,R11 @V305174 01205000
  1249. NEXTRPL EQU * @V305174 01206000
  1250. USING IKQRPL,RPLREG @V305174 01207000
  1251. L RPLREG,RPLCHAIN GET PTR TO NEXT RPL @V305174 01208000
  1252. LA R1,0(R1) CLEAR HI ORDER BYTE @VA06127 01208500
  1253. LTR RPLREG,RPLREG ANY? @V305174 01209000
  1254. BNZ DMR2 YES, FORMAT TO DOS IF NEC @V305174 01210000
  1255. * 01211000
  1256. * BALR TO DOS VSAM REQUEST ROUTINE 01212000
  1257. * 01213000
  1258. * FIRST DETERMINE IF ASYNCHRONOUS PROC IS DESIRED 01214000
  1259. * 01215000
  1260. L RPLREG,SAVER1 RESTORE PTR TO RPL @V305174 01216000
  1261. TM RPLOPT1,RPLASY ASYNCHRONOUS? @V305174 01217000
  1262. BZ VSAMREQ NO, CAN ISSUE DATAMGT REQ NOW@V305174 01218000
  1263. * 01219000
  1264. * FOR ASYNCHRONOUS PROCESSING, ALL ACTIVE EXIT RTNS ARE SET INACTIVE 01220000
  1265. * WITH THE EXCEPTION OF THE JRNAD EXIT (WHICH IS NOT AN ERROR EXIT AND 01221000
  1266. * ALWAYS RETURNS CONTROL TO VSAM). 01222000
  1267. * THIS PRECLUDES VSAM TAKING AN ERROR EXIT AND ENABLES VIP TO DEFER 01223000
  1268. * ANY POSSIBLE EXIT RTN BRANCH UNTIL THE USER ISSUES A CHECK REQUEST 01224000
  1269. * FOR THE RPL. AT CHECK TIME, THE RPL FEEDBACK FIELD INDICATES 01225000
  1270. * WHETHER OR NOT AN ERROR EXIT IS WARRANTED. 01226000
  1271. * 01227000
  1272. * NOTE THAT ONLY 1 EXLST IS PROCESSED REGARDLESS OF WHETHER OR 01228000
  1273. * NOT RPL'S HAVE BEEN CHAINED. SINCE CHAINED RPL'S MAY ONLY POINT 01229000
  1274. * TO ONE DATA SET (I.E., ONE ACB), ONLY A SINGLE EXLST IS INVOLVED. 01230000
  1275. * DOS VSAM (IKQVSM, IKQERH) WILL FLAG AS AN ERROR ANY CHAINED RPL'S 01231000
  1276. * NOT HAVING THE SAME ACB. 01232000
  1277. * 01233000
  1278. * AFTER VSAM RETURNS CONTROL FROM THE DATA MGT REQUEST, THE EXLST 01234000
  1279. * ACTIVE BITS ARE RESET AND ANY RETURN CODE IN REGISTER 15 IS 01235000
  1280. * CLEARED. 01236000
  1281. * 01237000
  1282. L ACBREG,RPLACB GET PTR TO ACB @V305174 01238000
  1283. USING IKQACB,ACBREG @V305174 01239000
  1284. MVI VIPINDC,ALLOFF CLEAR INDICATOR FIELD @V305174 01240000
  1285. L EXLSTREG,ACBEXLST GET PTR TO EXLST @V305174 01241000
  1286. LTR EXLSTREG,EXLSTREG ANY? @V305174 01242000
  1287. BZ VSAMREQ NO, SKP EXLST ACTIVE BITS MSG@V305174 01243000
  1288. USING IKQEXLST,EXLSTREG @V305174 01244000
  1289. CLI EXLLEN+1,EXLEODL EXLST ONLY CONTAINS EODAD? @V305174 01245000
  1290. BE CLEAREOD YES, TEST EODAD ACT BIT ONLY @V305174 01246000
  1291. CLI EXLLEN+1,EXLSYNL SYNAD AND (POSSIBLE) EODAD? @V305174 01247000
  1292. BE CLEARSYN YES, NO LERAD WORK THIS TIME @V305174 01248000
  1293. TM EXLLERF,EXENACTB ACTIVE LERAD? @V305174 01249000
  1294. BZ CLEARSYN NO, ON TO THE NEXT BIT @V305174 01250000
  1295. OI VIPINDC,SETLERAD SET INDICATOR BIT @V305174 01251000
  1296. NI EXLLERF,INACTIVE TURN OFF 'ENTRY ACTIVE' BIT @V305174 01252000
  1297. CLEARSYN TM EXLSYNF,EXENACTB ACTIVE SYNAD? @V305174 01253000
  1298. BZ CLEAREOD NO, ONE MORE TO GO @V305174 01254000
  1299. OI VIPINDC,SETSYNAD SET INDICATOR BIT @V305174 01255000
  1300. NI EXLSYNF,INACTIVE TURN OFF 'ENTRY ACTIVE' BIT @V305174 01256000
  1301. CLEAREOD TM EXLEODF,EXENACTB ACTIVE EODAD? @V305174 01257000
  1302. BZ VSAMREQ NO, ON TO VSAM @V305174 01258000
  1303. OI VIPINDC,SETEODAD SET INDICATOR BIT @V305174 01259000
  1304. NI EXLEODF,INACTIVE TURN OFF 'ENTRY ACTIVE' BIT @V305174 01260000
  1305. * 01261000
  1306. VSAMREQ LM R0,R1,SAVER0 RELOAD REQ TYPE AND RPL ADDR @V305174 01262000
  1307. L R15,AIKQVSM LOAD ADDRESS OF VSAM ROUTINE @V305174 01263000
  1308. BALR R14,R15 BRANCH TO DOS VSAM @V305174 01264000
  1309. NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 01265000
  1310. * 01266000
  1311. * MAP ERROR CODES FROM DOS TO OS IF NECESSARY 01267000
  1312. * 01268000
  1313. L RPLREG,SAVER1 RESTORE PTR TO RPL @V305174 01269000
  1314. LR R7,R15 SAVE RET CODE OVER E-MAP BR @V305174 01270000
  1315. MAPERR L R15,ADMEMAP LOAD BRANCH ADDRESS @V305174 01271000
  1316. BALR R14,R15 GO MAP ERRORS @V305174 01272000
  1317. * 01273000
  1318. L RPLREG,RPLCHAIN GET PTR TO NEXT RPL @V305174 01274000
  1319. LTR RPLREG,RPLREG ANY MORE ON CHAIN? @V305174 01275000
  1320. BO MAPERR YES, DO ANY NEC MAPPING @V305174 01276000
  1321. L RPLREG,SAVER1 PT AGAIN TO 1ST RPL @V305174 01277000
  1322. TM RPLOPT1,RPLASY ASYNCHRONOUS REQUEST? @V305174 01278000
  1323. BO PRASY YES, SPECIAL HANDLING @V305174 01279000
  1324. L R15,AECBPOST GET ADDRESS OF ECB POST RTN @V305174 01280000
  1325. BALR R14,R15 GO SET UP ECB(S) @V305174 01281000
  1326. B DMREQRTN NOW EXIT @V305174 01282000
  1327. * 01283000
  1328. * ASYNCHRONOUS - 01284000
  1329. * SET 'WAITING' FLAG ON FOR ANY ECB'S 01285000
  1330. * RESTORE EXIT ROUTINE FLAGS TO 'ACTIVE' STATUS WHERE NEC 01286000
  1331. * 01287000
  1332. PRASY EQU * @V305174 01288000
  1333. TM RPLFLAG,RPLECBPR ECB FOR THIS RPL? @V305174 01289000
  1334. BZ ASYECB NO, CONTINUE ALONG CHAIN @V305174 01290000
  1335. L R8,RPLECB GET PTR TO ECB @V305174 01291000
  1336. XC 0(4,R8),0(R8) CLEAR ECB @V305174 01292000
  1337. MVI 0(R8),WAITING SET 'WAITING' BIT @V305174 01293000
  1338. ASYECB L RPLREG,RPLCHAIN PT TO NEXT RPL @V305174 01294000
  1339. LTR RPLREG,RPLREG ANY? @V305174 01295000
  1340. BO PRASY YES, CHECK IT OUT @V305174 01296000
  1341. L RPLREG,SAVER1 ELSE DONE, RESTOR 1ST RPL PTR@V305174 01297000
  1342. * 01298000
  1343. SR R7,R7 CLEAR TEMP RETURN CODE REG @V305174 01299000
  1344. CLI VIPINDC,ALLOFF ANY FLAGS SET INACTIVE? @V305174 01300000
  1345. BE DMREQRTN NO, SKIP THIS EXERCISE @V305174 01301000
  1346. TM VIPINDC,SETEODAD EODAD? @V305174 01302000
  1347. BZ TSYN NO, NEXT @V305174 01303000
  1348. OI EXLEODF,EXENACTB RESTORE EODAD TO ACTIVE DUTY @V305174 01304000
  1349. TSYN TM VIPINDC,SETSYNAD SYNAD? @V305174 01305000
  1350. BZ TLER NO, NEXT @V305174 01306000
  1351. OI EXLSYNF,EXENACTB RESTORE SYNAD TO ACTIVE DUTY @V305174 01307000
  1352. TLER TM VIPINDC,SETLERAD LERAD? @V305174 01308000
  1353. BZ DMREQRTN NO, BRANCH AROUND RESTORE @V305174 01309000
  1354. OI EXLLERF,EXENACTB RESTORE LERAD TO ACTIVE DUTY @V305174 01310000
  1355. SPACE 2 01311000
  1356. * RETURN TO CALLER 01312000
  1357. DMREQRTN DMSKEY RESET @V305174 01313000
  1358. LR R15,R7 LOAD RETURN CODE @V305174 01314000
  1359. L R14,SAVER14 GET USER RETURN ADDRESS @V305174 01315000
  1360. LM R2,R12,SAVER2 RESTORE USER'S REGS @V305174 01316000
  1361. BR R14 EXIT @V305174 01317000
  1362. EJECT 01318000
  1363. *********************************************************************** 01319000
  1364. * * 01320000
  1365. * CHECK PROCESSING (ASYNCHRONOUS SIMULATION) * 01321000
  1366. * * 01322000
  1367. * R1 = ADDRESS OF RPL * 01323000
  1368. * * 01324000
  1369. * FIRST, ALL ECB'S ARE POSTED WITH THE PROPER COMPLETION CODE. * 01325000
  1370. * * 01326000
  1371. * THEN, THE RPL FEEDBACK FIELD IS EXAMINED FOR THE RETURN CODE FROM * 01327000
  1372. * THE PREVIOUS I/O OPERATION ON THE VSAM DATA SET. THIS INFORMATION * 01328000
  1373. * IS STORED BY VSAM (AFTER ORIG GET, PUT, ETC REQ) SINCE CMS PROC * 01329000
  1374. * IS SYNCHRONOUS AND I/O IS COMPLETED BEFORE CONTROL IS RETURNED. * 01330000
  1375. * * 01331000
  1376. * PROCESSING CONTINUES FOR EACH RPL (IN THE CASE OF CHAINED REQUESTS). 01332000
  1377. * IF AN ERROR IS FOUND, THE RPL CONTAINING THE ERROR IS THE LAST * 01333000
  1378. * ONE PROCESSED. * 01334000
  1379. * * 01335000
  1380. * CONTROL IS EITHER PASSED TO AN ACTIVE EXIT ROUTINE (AS INDICATED BY* 01336000
  1381. * THE RETURN CODE IN THE RPL), OR BACK TO THE USER. * 01337000
  1382. * * 01338000
  1383. *********************************************************************** 01339000
  1384. CKPROC EQU * @V305174 01340000
  1385. L R15,AECBPOST GET ADDRESS OF ECB POST RTN @V305174 01341000
  1386. BALR R14,R15 RESET ANY ECB'S FRM 'WAITING'@V305174 01342000
  1387. * TO 'COMPLETE' 01343000
  1388. MVI RTNCDSV,ALLOFF INIT RETURN CODE WORK SAVE @V305174 01344000
  1389. CKPROC2 EQU * @V305174 01345000
  1390. CLC RPLRTNCD,RTNCDSV HIGHEST RET CODE SO FAR? @V305174 01346000
  1391. BL CKRCODE NO, SKIP UPDATE @V305174 01347000
  1392. MVC RTNCDSV,RPLRTNCD SAVE FOR RETURN TO USER @V305174 01348000
  1393. CKRCODE EQU * @V305174 01349000
  1394. CLI RPLRTNCD,RC04 EXAMINE PREV I/O RETURN CODE @V305066 01350000
  1395. BNH CKRET 0 OR 4, RET TO CALLER IF LAST RPL@V305174 01351000
  1396. L ACBREG,RPLACB GET PTR TO ACB @V305174 01352000
  1397. L EXLSTREG,ACBEXLST GET PTR TO EXLST @V305174 01353000
  1398. LTR EXLSTREG,EXLSTREG ANY? @V305174 01354000
  1399. BZ CKRET2 NO, FORGET POSS BR TO EXIT RTN@V305174 01355000
  1400. CLI RPLRTNCD,LOGERR LOG ERRO ENCOUNT DURING I/O? @V305174 01356000
  1401. BNE LOCASYN NO, PHYS ERR-FIND ACT SYNAD @V305174 01357000
  1402. * 01358000
  1403. * LOGICAL ERROR HERE MAY HAVE BEEN CAUSED BY AN END OF FILE 01359000
  1404. * CONDITION- IF SO, CONTROL IS PASSED TO THE EODAD ROUTINE IF AN 01360000
  1405. * ACTIVE ONE EXISTS. 01361000
  1406. * 01362000
  1407. CLI RPLFDBKC,RPLEOFDS REACHED END OF FILE? @V305174 01363000
  1408. BNE LOCALER NO, GO FIND AN ACTIVE LERAD @V305174 01364000
  1409. TM EXLEODF,EXENACTB IS THE EODAD ACTIVE? @V305174 01365000
  1410. BZ LOCALER NO, THEN TRY FOR LERAD @V305174 01366000
  1411. * FOUND ACTIVE EODAD EXIT ROUTINE 01367000
  1412. ICM R7,ALLFOUR,EXLEODP LOAD ADDR OF RTN INTO TEMP @V305174 01368000
  1413. * (ACTUALLY, DMSVIP3 ADDRESS) 01369000
  1414. B EXRTNBR GO BALR TO RTN @V305174 01370000
  1415. LOCALER EQU * @V305174 01371000
  1416. CLI EXLLEN+1,EXLLERL EXLST MIN LENGTH FOR LERAD? @V305174 01372000
  1417. BL CKRET2 NO, CAN BAIL OUT NOW @VM03054 01373000
  1418. TM EXLLERF,EXENACTB LERAD ACTIVE? @V305174 01374000
  1419. BZ CKRET2 INACTIVE- EXIT @V305174 01375000
  1420. * FOUND ACTIVE LERAD ROUTINE 01376000
  1421. ICM R7,ALLFOUR,EXLLERP LOAD EXIT RTN ADDR INTO TEMP@V305174 01377000
  1422. B EXRTNBR GO BALR TO RTN @V305174 01378000
  1423. LOCASYN EQU * @V305174 01379000
  1424. CLI EXLLEN+1,EXLSYNL EXLST MIN LENGTH FOR SYNAD? @V305174 01380000
  1425. BL CKRET2 NO, CAN BAIL OUT NOW @VM03054 01381000
  1426. TM EXLSYNF,EXENACTB SYNAD ACTIVE? @V305174 01382000
  1427. BZ CKRET2 INACTIVE- EXIT @V305174 01383000
  1428. *FOUND ACTIVE SYNAD ROUTINE 01384000
  1429. ICM R7,ALLFOUR,EXLSYNP LOAD EXIT RTN ADDR INTO TEMP@V305174 01385000
  1430. B EXRTNBR GO BALR TO RTN @V305174 01386000
  1431. CKRET EQU * @V305174 01387000
  1432. L RPLREG,RPLCHAIN GET ADDRESS OF NEXT RPL @V305174 01388000
  1433. LTR RPLREG,RPLREG ANY? @V305174 01389000
  1434. BO CKPROC2 YES, KEEP GOING @V305174 01390000
  1435. CKRET2 EQU * @V305174 01391000
  1436. SR R6,R6 CLEAR TEMP RETURN CODE REG @V305174 01392000
  1437. ICM R6,LOWBYTE,RTNCDSV INSERT RETURN CODE @V305174 01393000
  1438. * 01394000
  1439. DMSKEY RESET @V305174 01395000
  1440. LR R15,R6 LOAD RETURN CODE @V305174 01396000
  1441. L R14,SAVER14 GET RETURN ADDRESS @V305174 01397000
  1442. LM R2,R12,SAVER2 RESTORE USER'S REGS @V305174 01398000
  1443. BR R14 EXIT @V305174 01399000
  1444. EXRTNBR EQU * @V305174 01400000
  1445. LR R15,R7 ADDRESS IN BRANCH REG @V305174 01401000
  1446. BALR R14,R15 PASS CONTROL TO USER EXIT @V305174 01402000
  1447. * 01403000
  1448. * IF THE USER 'RETURNS TO VSAM', CONTROL IS PASSED BACK TO THE POINT 01404000
  1449. * IMMEDIATELY FOLLOWING THE 'CHECK' REQUEST, WITH THE RPL RETURN CODE 01405000
  1450. * IN REGISTER 15. 01406000
  1451. * 01407000
  1452. * NOTE THAT THE REGISTERS ARE NO LONGER RELIABLE SINCE THE USER 01408000
  1453. * MAY HAVE ALTERED THEM DURING EXIT PROCESSING. 01409000
  1454. * 01410000
  1455. L R11,AVIPWORK ADDRESS WORK AREA @V305174 01411000
  1456. L RPLREG,VIP3R1 RESTOR PTR TO RPL (SAVED BY VIP3)@V305174 01412000
  1457. DMSKEY RESET RESET STORAGE KEY @V305174 01413000
  1458. SR R15,R15 CLEAR RET CODE REG @V305174 01414000
  1459. ICM R15,LOWBYTE,RPLRTNCD INSERT RETURN CODE @V305174 01415000
  1460. L R14,SAVER14 GET RETURN ADDRESS @V305174 01416000
  1461. LM R2,R12,SAVER2 RESTORE USER'S REGS @V305174 01417000
  1462. BR R14 EXIT @V305174 01418000
  1463. DROP RPLREG,ACBREG,EXLSTREG @V305174 01419000
  1464. EJECT 01420000
  1465. *********************************************************************** 01421000
  1466. * * 01422000
  1467. * ENTRY TO THIS CODE INDICATES THAT DOS VSAM HAS TRIED TO ENTER * 01423000
  1468. * A USER-SPECIFIED EXIT ROUTINE. THE DOS SVC BIT IS TURNED OFF, * 01424000
  1469. * AND THE HI-ORDER BYTE OF REG 15 IS USED TO LOCATE THE PROPER * 01425000
  1470. * EXIT ROUTINE ADDRESS THAT HAS BEEN SAVED PREVIOUSLY BY VIP. * 01426000
  1471. * * 01427000
  1472. * IN ADDITION, DOS ERROR CODES ARE MAPPED TO OS EQUIVALENTS WHERE * 01428000
  1473. * NECESSARY. * 01429000
  1474. * * 01430000
  1475. * REGISTERS UPON ENTRY: * 01431000
  1476. * * 01432000
  1477. * R1 - ADDRESS OF RPL (EODAD, LERAD, SYNAD) * 01433000
  1478. * ADDRESS OF PARAM LIST (JRNAD) * 01434000
  1479. * * 01435000
  1480. * R15 - VIP3 ENTRY ADDRESS, HI-ORDER = INDEX TO TABLE OF * 01436000
  1481. * SAVED EXIT ROUTINE ADDRESSES * 01437000
  1482. * * 01438000
  1483. * CONTROL IS THEN PASSED DIRECTLY TO THE OS EXIT ROUTINE. * 01439000
  1484. * * 01440000
  1485. *********************************************************************** 01441000
  1486. VIP3PROC EQU * @V305174 01442000
  1487. BALR R12,R0 @V305174 01443000
  1488. USING *,R12 @V305174 01444000
  1489. USING OEXLSA,R10 BLOCK ADDRESSABILITY @V305174 01445000
  1490. L R11,AVIPWORK ADDRESS WORK AREA @V305174 01446000
  1491. STM R14,R15,VIP3R14 SAVE REGS @V305174 01447000
  1492. ST R1,VIP3R1 R1 TOO @V305174 01448000
  1493. MVC VIP3R213(48),SAVER2 SAVE REGS IN CASE EXIT RTN @V305174 01449000
  1494. * ISSUES ANY C B MANIP MACROS 01450000
  1495. LA R10,EXLSA LOAD BASE FOR PRIM EXIT LIST @V305174 01451000
  1496. * ADDRESS SAVE BLOCK 01452000
  1497. NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 01453000
  1498. * 01454000
  1499. * BALR TO DMEMAP FOR ANY NEC ERROR CODE MAPPING 01455000
  1500. * 01456000
  1501. L R15,ADMEMAP LOAD BRANCH ADDRESS @V305174 01457000
  1502. L RPLREG,VIP3R1 GET VSAM'S R1 @V305174 01458000
  1503. CLC 0(4,RPLREG),DOSRPL PT'NG. TO RPL OR PARAM LIST? @V305174 01459000
  1504. BNE FINDEXR IT'S A JRNAD, SKP ERRMAP PROC@V305174 01460000
  1505. BALR R14,R15 RPL, BRANCH @V305174 01461000
  1506. * 01462000
  1507. * USING THE HI-ORDER BYTE OF R15, FIND THE CORRECT 01463000
  1508. * EXIT ROUTINE ADDRESS AND BRANCH TO THE USER'S CODE. 01464000
  1509. * 01465000
  1510. FINDEXR MVC EXLMISC(1),VIP3WORK MVE NDX(R15 HI-ORD)->WK AREA@V305174 01466000
  1511. NI EXLMISC,255-HION TURN OFF PROCESS BIT @V305174 01467000
  1512. * GO TO CORRECT BLOCK 01468000
  1513. L R5,EXLMISC @V305174 01469000
  1514. SRA R5,28 POSITION BLOCK NUMBER @V305174 01470000
  1515. * EXIT RTN IN PRIMARY? 01471000
  1516. BZ WORD YES, GO POS TO CORRECT WORD @V305174 01472000
  1517. PROC2 L R10,ANOEXL ADDRESS NEXT OVERFLOW BLOCK @V305174 01473000
  1518. BCT R5,PROC2 ON TO NEXT BLOCK OR DONE @V305174 01474000
  1519. * GET WORD NUM 01475000
  1520. WORD L R5,EXLMISC RE-LOAD INDEX INTO REG @V305174 01476000
  1521. SLL R5,4 @V305174 01477000
  1522. SRL R5,28 GET WORD NUMBER @V305174 01478000
  1523. SLL R5,2 *4 FOR DISPLACEMENT @V305174 01479000
  1524. MVC VIP3WORK,SAVER14 NOW USE WK CELL TO SAVE ORIG @V305174 01480000
  1525. * REG 14 IN CASE OF EXIT RTN C B MACRO 01481000
  1526. * ACTIVITY 01482000
  1527. DMSKEY RESET @V305174 01483000
  1528. L R15,0(R5,R10) LOAD EXIT RTN ADDRESS @V305174 01484000
  1529. L R1,VIP3R1 RESTORE VSAM'S R1 @V305174 01485000
  1530. LM R2,R12,SAVER2 GIVE USER BACK ORIG R2-R12 @V305174 01486000
  1531. BALR R14,R15 EXIT @V305174 01487000
  1532. DROP R10,R12 @V305174 01488000
  1533. EJECT 01489000
  1534. *********************************************************************** 01490000
  1535. * * 01491000
  1536. * ENTRY TO THIS CODE MEANS THAT A USER EXIT ROUTINE HAS COMPLETED * 01492000
  1537. * PROCESSING AND HAS OPTED TO RETURN TO VSAM. THE DOS SVC BIT IS * 01493000
  1538. * TURNED ON AND THE RETURN ADDRESS TO VSAM IS RECOVERED FROM THE * 01494000
  1539. * SAVE CELL IN VIPWORK. * 01495000
  1540. * * 01496000
  1541. * * 01497000
  1542. * CONTROL IS PASSED BACK TO VSAM. * 01498000
  1543. * * 01499000
  1544. *********************************************************************** 01500000
  1545. SPACE 2 01501000
  1546. DMSKEY NUCLEUS RESTORE NUCLEUS KEY @V305174 01502000
  1547. OI DOSFLAGS,DOSSVC TURN ON DOS SVC FLAG @V305174 01503000
  1548. L R14,AVIPWORK ADDRESS WORK AREA @V305174 01504000
  1549. USING VIPWORK,R14 @V305174 01505000
  1550. MVC SAVER14,VIP3WORK REPLACE ORIGINAL RET ADDRESS @V305174 01506000
  1551. MVC SAVER2(48),VIP3R213 RESTORE REGS TO THOSE AT @V305174 01507000
  1552. * TIME OF DATA MGT REQUEST MACRO 01508000
  1553. L R15,VIP3R14 LOAD VSAM'S ADDRESS @V305174 01509000
  1554. BR R15 EXIT @V305174 01510000
  1555. DROP R14 @V305174 01511000
  1556. EJECT 01512000
  1557. *********************************************************************** 01513000
  1558. * * 01514000
  1559. * ERROR MAPPING ROUTINES * 01515000
  1560. * * 01516000
  1561. *********************************************************************** 01517000
  1562. * * 01518000
  1563. * OPNEMAP - * 01519000
  1564. * * 01520000
  1565. * REGS UPON ENTRY: * 01521000
  1566. * * 01522000
  1567. * R1 = ADDRESS OF USER'S OPEN PLIST * 01523000
  1568. * R14 = CALLER'S RETURN ADDRESS * 01524000
  1569. * R15 = ENTRY ADDRESS * 01525000
  1570. * * 01526000
  1571. * ADDR OF DMSVIP2 IS STORED AT ACB+8 FOR ALL SUCCESSFULLY OPENED ACB'S 01527000
  1572. * * 01528000
  1573. * DMEMAP - * 01529000
  1574. * * 01530000
  1575. * REGS UPON ENTRY: * 01531000
  1576. * * 01532000
  1577. * R1 = ADDRESS OF RPL * 01533000
  1578. * R14 = CALLER'S RETURN ADDRESS * 01534000
  1579. * R15 = ENTRY ADDRESS * 01535000
  1580. * * 01536000
  1581. * DMEMAP MAPS ONLY A SINGLE RPL (NO CHAIN SEARCH PERFORMED) * 01537000
  1582. * * 01538000
  1583. *********************************************************************** 01539000
  1584. OPNEMAP EQU * @V305174 01540000
  1585. USING *,R15 @V305174 01541000
  1586. USING IKQACB,ACBREG @V305174 01542000
  1587. OPNE2 L ACBREG,0(,R1) POINT TO CONTROL BLOCK @V305174 01543000
  1588. CLI 0(ACBREG),ACBIDD IS IT AN ACB OR DCB @V305174 01544000
  1589. BE OPNE3 ACB, GO LOOK FOR MAPPING WORK@V305174 01545000
  1590. CKLAST TM 0(R1),LAST LAST ADDRESS IN PLIST? @V305174 01546000
  1591. BCR ONES,R14 YES, RETURN TO CALLER @V305174 01547000
  1592. LA R1,4(,R1) NO, POINT TO NEXT @V305174 01548000
  1593. B OPNE2 AROUND AGAIN @V305174 01549000
  1594. OPNE3 TM ACBOFLGS,ACBOPEN WAS THIS ACB OPENED SUC'FLLY?@V305174 01550000
  1595. BZ TOCEXT NO, SCAN FOR MAPPABLE ERRORS @V305174 01551000
  1596. MVC ACBAM0,AVIP2 VIP ENTRY ADDR INTO PTR FLD @V305174 01552000
  1597. CLI ACBERFLG,NOERR ANY ERROR RETURN CODES? @V305174 01553000
  1598. BE CKLAST NO, GO CHECK IF FINISHED @V305174 01554000
  1599. TOCEXT CLI ACBERFLG,ACBOCEXT VOLSER CATALOG/EXTENT MIXUP? @V305174 01555000
  1600. BNE TOEMPT NO, CONTINUE TEST SCAN @V305174 01556000
  1601. MVI DOSRC,LOGERR SET RETURN CODE @V305174 01557000
  1602. L R15,ADOSEPRO GET ADDRESS OF ERROR RTN @V305174 01558000
  1603. BR R15 AND HEAD FOR EOJ @V305174 01559000
  1604. TOEMPT CLI ACBERFLG,ACBOEMPT EMPTY DATASET OPEN FOR INPUT?@V305174 01560000
  1605. BNE TOKBUF NO, CONTINUE TEST SCAN @V305174 01561000
  1606. LA R3,CON160 LOAD OS EQUIV (X'A0') @V305066 01562000
  1607. B MOVECODE GO CONVERT ACB ERR FLAG TO OS@V305174 01563000
  1608. TOKBUF CLI ACBERFLG,ACBOKBUF USER BUFS NOT CONT INT ACC? @V305174 01564000
  1609. BNE TOCTER NO, CONTINUE TEST SCAN @V305174 01565000
  1610. LA R3,CON160 LOAD OS EQUIV (X'A0') @V305066 01566000
  1611. B MOVECODE GO CONVERT ACB ERR FLAG TO OS@V305174 01567000
  1612. TOCTER CLI ACBERFLG,ACBOCTER UNEXPECTED ERROR DET BY DOS? @V305174 01568000
  1613. BNE CKLAST GO CHECK IF DONE @V305174 01569000
  1614. LA R3,CON144 LOAD OS EQUIV (X'90') @V305066 01570000
  1615. MOVECODE EQU * @V305174 01571000
  1616. EX R3,MVIERR OS CODE INTO ACB ERROR FLAG @V305174 01572000
  1617. B CKLAST GO CHECK IF DONE @V305174 01573000
  1618. MVIERR MVI ACBERFLG,BINZERO EXECUTED INSTRUCTION @V305066 01574000
  1619. DROP ACBREG,R15 @V305174 01575000
  1620. SPACE 2 01576000
  1621. DMEMAP EQU * @V305174 01577000
  1622. USING *,R15 @V305174 01578000
  1623. USING IKQRPL,RPLREG @V305174 01579000
  1624. CLI RPLFDBKC,RPLVLERR INTERNAL VSAM LOGIC ERROR? @V305174 01580000
  1625. BNE DME2 NO, CK FOR CATLG ACCESS ERROR@V305174 01581000
  1626. LA R3,ABEND52 LOAD ABEND CODE @V305066 01582000
  1627. B BABN BRANCH AROUND @V305174 01583000
  1628. DME2 CLI RPLFDBKC,RPLCAERR I/O ERR DURING CATLG ACCESS? @V305174 01584000
  1629. BCR NOTEQ,R14 NO, RETURN TO CALLER @V305174 01585000
  1630. LA R3,ABEND56 LOAD ABEND CODE @V305066 01586000
  1631. BABN L R15,AABEND LOAD ADDRESS OF ABEND RTN @V305174 01587000
  1632. BR R15 GO ISSUE ABEND @V305174 01588000
  1633. DROP RPLREG,R15 @V305174 01589000
  1634. EJECT 01590000
  1635. *********************************************************************** 01591000
  1636. * * 01592000
  1637. * ECBPOST - ECB POSTING ROUTINE * 01593000
  1638. * * 01594000
  1639. * REGS UPON ENTRY: * 01595000
  1640. * * 01596000
  1641. * R1 = PTR TO RPL * 01597000
  1642. * R14 = CALLER'S RETURN ADDRESS * 01598000
  1643. * R15 = ENTRY ADDRESS * 01599000
  1644. * * 01600000
  1645. * EACH RPL IN THE CHAIN (IF CHAINING HAS BEEN DONE) IS PROCESSED. * 01601000
  1646. * THE ECB IS POSTED WITH THE APPROPRIATE COMPLETION CODE: * 01602000
  1647. * * 01603000
  1648. * X'7F' - THE EVENT HAS COMPLETED SUCCESSFULLY * 01604000
  1649. * X'41' - I/O OPERATION HAS RESULTED IN A PHYSICAL ERROR * 01605000
  1650. * X'42' - LOGICAL ERROR DETECTED DURING I/O * 01606000
  1651. * * 01607000
  1652. *********************************************************************** 01608000
  1653. ECBPOST EQU * @V305174 01609000
  1654. USING *,R15 @V305174 01610000
  1655. USING IKQRPL,RPLREG @V305174 01611000
  1656. TM RPLFLAG,RPLECBPR ECB FOR THIS RPL? @V305174 01612000
  1657. BZ POSTNEXT NO, SEE IF CHAIN CONTINUES @V305174 01613000
  1658. L R8,RPLECB GET PTR TO ECB @V305174 01614000
  1659. XC 0(4,R8),0(R8) CLEAR ECB @V305174 01615000
  1660. CLI RPLRTNCD,LOGERR LOGICAL ERROR? @V305174 01616000
  1661. BH POST41 NO, PHYSICAL @V305174 01617000
  1662. BE POST42 YES @V305174 01618000
  1663. MVI 0(R8),COMPLETE INDIC SUCCESSFUL COMPLETION @V305174 01619000
  1664. B POSTNEXT GET NEXT @V305174 01620000
  1665. POST41 MVI 0(R8),UNITCHCK INDIC PHYSICAL ERROR @V305174 01621000
  1666. B POSTNEXT GET NEXT @V305174 01622000
  1667. POST42 MVI 0(R8),LOGIC INDIC LOGICAL ERROR @V305174 01623000
  1668. POSTNEXT EQU * @V305174 01624000
  1669. L RPLREG,RPLCHAIN PT TO NEXT RPL ON CHAIN @V305174 01625000
  1670. LTR RPLREG,RPLREG ANY? @V305174 01626000
  1671. BO ECBPOST YES, PROCESS POSSIBLE ECB @V305174 01627000
  1672. L RPLREG,SAVER1 RESTORE PTR TO 1ST RPL @V305174 01628000
  1673. BR R14 RETURN @V305174 01629000
  1674. DROP RPLREG,R15 @V305174 01630000
  1675. EJECT 01631000
  1676. *********************************************************************** 01632000
  1677. * * 01633000
  1678. * DMSVIP4 - * 01634000
  1679. * * 01635000
  1680. * THE VSAM TESTCB RTN (IKQTMS) WAS UNABLE TO PERFORM THE REQUESTED * 01636000
  1681. * OPERATION AND HAS TAKEN AN ERROR EXIT TO THE USER ERET ROUTINE. * 01637000
  1682. * * 01638000
  1683. * THE DOS SVC BIT IS TURNED OFF AND THE ADDRESS OF THE ERET RTN IS * 01639000
  1684. * RECOVERED FROM THE VIP WORK AREA. * 01640000
  1685. * * 01641000
  1686. * CONTROL IS PASSED DIRECTLY TO THE USER'S ERET. * 01642000
  1687. * * 01643000
  1688. * NOTE - THE ERET ROUTINE MUST NOT RETURN TO VSAM AFTER PROCESSING! * 01644000
  1689. * * 01645000
  1690. *********************************************************************** 01646000
  1691. DMSVIP4 EQU * @V305174 01647000
  1692. L R11,AVIPWORK ADDRESS WORK AREA @V305174 01648000
  1693. * RESTORE THE ERET RTN ADDRESS TO THE TESTCB HEADER ACE 01649000
  1694. L LISTPTR,SAVER1 START WITH PLIST ADDRESS @V305174 01650000
  1695. L ACEPTR,0(,LISTPTR) POINT TO HEADER ACE @V305174 01651000
  1696. MVC 8(4,ACEPTR),AERET PUT BACK SAVED ERET ADDRESS- @V305174 01652000
  1697. * USER MAY RE-USE PLIST 01653000
  1698. NI DOSFLAGS,DOSOFF TURN OFF DOS SVC BIT @V305174 01654000
  1699. LR R6,R15 SAVE R15 OVER DMSKEY @V305174 01655000
  1700. DMSKEY RESET @V305174 01656000
  1701. LR R15,R6 RESTORE @V305174 01657000
  1702. L R14,AERET LOAD ADDRESS OF ERET @V305174 01658000
  1703. LM R1,R12,SAVER1 GET USER'S REGS @V305174 01659000
  1704. BR R14 EXIT TO ERET @V305174 01660000
  1705. EJECT 01661000
  1706. *********************************************************************** 01662000
  1707. * * 01663000
  1708. * CMS/DOS ERROR PROCESSING ROUTINES * 01664000
  1709. * * 01665000
  1710. *********************************************************************** 01666000
  1711. * * 01667000
  1712. * ASGNERR - ERROR DETECTED DURING ASSGN FOR OS USER * 01668000
  1713. * * 01669000
  1714. * DOSEPRO - DOS ERROR PROCESSING * 01670000
  1715. * * 01671000
  1716. * REGS UPON ENTRY: * 01672000
  1717. * * 01673000
  1718. * R8 = ENTRY ADDRESS * 01674000
  1719. * R9 = CALLER'S RETURN ADDRESS * 01675000
  1720. * * 01676000
  1721. * THIS ROUTINE IS CALLED AFTER EACH ISSUANCE OF A DOS SVC 2 (OPEN, * 01677000
  1722. * CLOSE,TCLOSE). * 01678000
  1723. * * 01679000
  1724. * IF THE DOS RETURN CODE INDICATES THAT AN ERROR HAS OCCURRED, * 01680000
  1725. * THE SYSTEM SVC SAVE AREA STACK IS SEARCHED AND CLEARED * 01681000
  1726. * UNTIL THE LATEST OUTSTANDING CMS SVC IS LOCATED. CONTROL * 01682000
  1727. * IS THEN PASSED TO CMS AND THE JOB IS TERMINATED. * 01683000
  1728. * * 01684000
  1729. * CONTROL IS RETURNED TO THE USER IF NO ERROR HAS BEEN DETECTED * 01685000
  1730. * BY CMS/DOS (DOSEPRO ONLY). * 01686000
  1731. * * 01687000
  1732. *********************************************************************** 01688000
  1733. ASGNERR EQU * @V305174 01689000
  1734. STCM R15,LOWBYTE,DOSRC SAVE RETURN CODE @V305174 01690000
  1735. DOSEPRO EQU * @V305174 01691000
  1736. CLI DOSRC,ALLOFF GOOD RETURN CODE FROM DOS? @V305174 01692000
  1737. BCR EQ,R9 YES, NORMAL RETURN TO USER @V305174 01693000
  1738. DMSKEY RESET RESET STOR KEY FOR USER @V305174 01694000
  1739. SPACE 2 01695000
  1740. EOJ1 BALR R9,R0 ADDRESSABILITY @V305174 01696000
  1741. USING *,R9 @V305174 01697000
  1742. L R13,CURRSAVE GET CURRENT SAVE POINTER @V305174 01698000
  1743. USING SSAVE,R13 @V305174 01699000
  1744. TM TYPFLAG,TPFSVO CMS SVC? @V305174 01700000
  1745. BZ EOJ2 YES, HEAD FOR CMS LAND @V305174 01701000
  1746. L R2,AEOJ1 GET COME-BACK ADDRESS @VM03028 01702000
  1747. DMSEXS ST,R2,OLDPSW+4 AND SAVE AS OLD PSW @VM03028 01703000
  1748. DMSEXS NI,OLDPSW+1,RESET RESET PSW STORAGE KEY @VM03028 01704000
  1749. SR R15,R15 CLEAR REG 15 @V305174 01705000
  1750. L R14,AOSRET GET OS RET ADDRESS @V305174 01706000
  1751. BR R14 CLR SVC SAVE STK FOR THIS SVC@V305174 01707000
  1752. * AND COME BACK TO EOJ1 01708000
  1753. SPACE 2 01709000
  1754. EOJ2 EQU * @V305174 01710000
  1755. ICM R13,ALLFOUR,SSAVEPRV TAKE A PEEK AT PREVIOUS @VM03028 01711000
  1756. BZ REALEOJ NONE, THIS IS THE END OF THE LINE@VM03028 01712000
  1757. CLC CALLEE,NAMEXEC EXEC THE CALLED ROUTINE? @V305174 01713000
  1758. BE REALEOJ YES, THEN OK BYE... @V305174 01714000
  1759. L R13,CURRSAVE BACK TO CURRENT BUSINESS @VM03028 01715000
  1760. L R14,ACMSRET GET CMS RET ADDRESS @V305174 01716000
  1761. L R2,AEOJ1 RETURN HERE AFTER UNSTACK @VM03028 01717000
  1762. DMSEXS ST,R2,NRMRET MODIFY APPROPRIATE @VM03028 01718000
  1763. DMSEXS ST,R2,ERRET SAVE AREA FIELDS @VM03028 01719000
  1764. BR R14 CLEAR STACK FOR THIS SVC @V305174 01720000
  1765. REALEOJ EQU * @V305174 01721000
  1766. SR R15,R15 CLEAR REG 15 @V305174 01722000
  1767. ICM R15,LOWBYTE,DOSRC GET DOS RETURN CODE @V305174 01723000
  1768. DMSEXS MVI,DOSRC,ALLOFF CLEAR FIELD FOR NEXT TIME @V305174 01724000
  1769. L R14,ACMSRET GET CMS RET ADDRESS @V305174 01725000
  1770. BR R14 RETURN TO CMS @V305174 01726000
  1771. DROP R9,R13 @V305174 01727000
  1772. EJECT 01728000
  1773. *********************************************************************** 01729000
  1774. * * 01730000
  1775. * DMSVIP ABEND * 01731000
  1776. * * 01732000
  1777. * R3 = ABEND CODE * 01733000
  1778. * * 01734000
  1779. *********************************************************************** 01735000
  1780. ABEND EQU * @V305174 01736000
  1781. DMSABN (R3),TYPCALL=SVC @V305174 01737000
  1782. EJECT 01738000
  1783. *********************************************************************** 01739000
  1784. * * 01740000
  1785. * DMSVIP DATA AREAS * 01741000
  1786. * * 01742000
  1787. *********************************************************************** 01743000
  1788. DS 0D @V305174 01744000
  1789. ASSGNCMD DC CL8'ASSGN' @V305174 01745000
  1790. SYSXXX DC CL8'SYS' @V305174 01746000
  1791. MODE DC CL8' ' @V305174 01747000
  1792. DC 8X'FF' @V305174 01748000
  1793. SETDOSON DS 0D @V305174 01749000
  1794. DC CL8'SET' @V305174 01750000
  1795. DC CL8'DOS' @V305174 01751000
  1796. DC CL8'ON' @V305174 01752000
  1797. DC CL8'(' @V305174 01753000
  1798. DC CL8'VSAM' @V305174 01754000
  1799. DC 8X'FF' @V305174 01755000
  1800. AVIP2 DC A(DMSVIP2) @V305174 01756000
  1801. AVIP3 DC A(DMSVIP3) @V305174 01757000
  1802. AVIP4 DC A(DMSVIP4) ERET RTN PROC - TESTCB @V305174 01758000
  1803. AIKQVSM DC V(IKQVSM) ADDR OF VSAM DATAMGT REQ DRIVER @V305174 01759000
  1804. AIKQGEN DC V(IKQGEN) ADDRESS OF VSAM C.B. GEN. RTN@V305174 01760000
  1805. AABEND DC A(ABEND) @V305174 01762000
  1806. AOPNEMAP DC A(OPNEMAP) ADDR OF ERR MAPPING RTN-OPEN @V305174 01763000
  1807. ADMEMAP DC A(DMEMAP) ADDR OF ERR MAPPING RTN-OTHER@V305174 01764000
  1808. AECBPOST DC A(ECBPOST) ADDRESS OF ECB POSTING RTN @V305174 01765000
  1809. ADOSEPRO DC A(DOSEPRO) ADDRESS OF CMS/DOS ERROR PROC@V305174 01766000
  1810. AEOJ1 DC A(EOJ1) @V305174 01767000
  1811. * 01768000
  1812. FZERO DC F'0' @V305174 01769000
  1813. LUT DC CL4' 000' @V305174 01770000
  1814. DC CL4' 001' @V305174 01771000
  1815. DC CL4' 002' @V305174 01772000
  1816. DC CL4' 003' @V305174 01773000
  1817. DC CL4' 004' @V305174 01774000
  1818. DC CL4' 005' @V305174 01775000
  1819. DC CL4' 006' @V305174 01776000
  1820. DC CL4' 007' @V305174 01777000
  1821. DC CL4' 008' @V305174 01778000
  1822. DC CL4' 009' @V305174 01779000
  1823. DC XL4'00F0F1F0' @V305174 01780000
  1824. * 01781000
  1825. OPTTAB DS 0XL32 DOS OPTION FLAG BYTES 1 & 2 @V305174 01782000
  1826. * OS OPTION FLAG BYTE 1 (EACH ENTRY REPRESENTS 1 BIT POS) : 01783000
  1827. DC X'0008' LOCATE MODE @V305174 01784000
  1828. DC X'1000' DIRECT PROCESSING @V305174 01785000
  1829. DC X'2000' SEQUENTIAL @V305174 01786000
  1830. DC X'0400' SKIP SEQUENTIAL @V305174 01787000
  1831. DC X'0800' ASYNCHRONOUS @V305174 01788000
  1832. DC X'0080' SEARCH KEY GT/EQ @V305174 01789000
  1833. DC X'0040' GENERIC KEY @V305174 01790000
  1834. DC X'0000' NO OPT BYTE EQV (IS IN RPLFLAG) @V305174 01791000
  1835. * OS OPTION FLAG BYTE 2: 01792000
  1836. DC X'8000' KEYED ACCESS @V305174 01793000
  1837. DC X'4000' ADDRESSED ACCESS @V305174 01794000
  1838. DC X'0200' CONTROL INTERVAL ACC BY RBA @V305174 01795000
  1839. DC X'0000' NO OPT BYTE EQUIV @V305174 01796000
  1840. DC X'0000' NO OPT BYTE EQUIV @V305174 01797000
  1841. DC X'0000' NO OPT BYTE EQUIV @V305174 01798000
  1842. DC X'0100' UPDATE @V305174 01799000
  1843. DC X'0020' NOTE STRING POSITION @V305174 01800000
  1844. * 01801000
  1845. DOSRPL DC XL4'00100034' FIXED PORT(1ST 4 BYTES)OF DOS RPL@V305174 01802000
  1846. DOSCODES DC X'040C14001C0820' DOS R0 REQUEST CODES @V305174 01803000
  1847. SVC2 DC XL2'0A02' DOS END OF LIST MARKER @V305174 01804000
  1848. NAMEXEC DC CL8'EXEC' EXEC COMMAND @V305174 01805000
  1849. SPACE 2 01806000
  1850. LTORG @V305174 01807000
  1851. EJECT 01808000
  1852. *********************************************************************** 01809000
  1853. * * 01810000
  1854. * VIPWORK - DMSVIP WORK/SAVE AREA DSECT * 01811000
  1855. * * 01812000
  1856. *********************************************************************** 01813000
  1857. VIPWORK DSECT @V305174 01814000
  1858. DS 0D @V305174 01815000
  1859. CBWKAR DS 17F DOS VSAM CNTL BLK BUILD AREA @V305174 01816000
  1860. WKMISC DS F WORK SPACE @V305174 01817000
  1861. LCBWK EQU *-CBWKAR @V305174 01818000
  1862. CBMACAR DS 0F CNTL BLK MANIP MACRO WK AREA @V305174 01819000
  1863. AECBEACE DS F SAVED ECB EACE ADDRESS @V305174 01820000
  1864. AERET DS F TESTCB--ADDR OF USER ERET RTN@V305174 01821000
  1865. HEACE DS 3F HEADER ACE SAVE AREA @V305174 01822000
  1866. CBMR34 DS 2F SAVE FOR WORK REGS @V305174 01823000
  1867. COPYNUM DS H SAVE FOR NUMBER OF COPIES @V305174 01824000
  1868. CBMACFLG DS X FLAG BYTE @V305174 01825000
  1869. * NOTE- BIT 3 IS NOT TO BE USED (X'10') 01826000
  1870. CCEQUAL EQU X'40' PSW CONDITION CODE = 0 @V305174 01827000
  1871. CCLOW EQU X'80' PSW CONDITION CODE = 1 @V305174 01828000
  1872. CCHIGH EQU X'20' PSW CONDITION CODE = 2 @V305174 01829000
  1873. WORKAREA EQU X'08' USER HAS PROVIDED WORKAREA @V305174 01830000
  1874. ERET EQU X'04' USER PRV'D ERET RTN(TESTCB) @V305174 01831000
  1875. DS X @V305174 01832000
  1876. LCBMAC EQU *-CBMACAR @V305174 01833000
  1877. VIPRSAVE DS 0F SAVE AREA FOR CALLER'S REGS @V305174 01834000
  1878. SAVER0 DS F @V305174 01835000
  1879. SAVER1 DS F @V305174 01836000
  1880. SAVER2 DS F @V305174 01837000
  1881. SAVER3 DS F @V305174 01838000
  1882. SAVER4 DS F @V305174 01839000
  1883. SAVER5 DS F @V305174 01840000
  1884. SAVER6 DS F @V305174 01841000
  1885. SAVER7 DS F @V305174 01842000
  1886. SAVER8 DS F @V305174 01843000
  1887. SAVER9 DS F @V305174 01844000
  1888. SAVER10 DS F @V305174 01845000
  1889. SAVER11 DS F @V305174 01846000
  1890. SAVER12 DS F @V305174 01847000
  1891. SAVER13 DS F @V305174 01848000
  1892. SAVER14 DS F @V305174 01849000
  1893. EXLSA DS 15F PRIMARY EXLST ADDR SAVE AREA @V305174 01850000
  1894. LASTEXL DS F LAST ADDRESS SAVE SLOT @V305174 01851000
  1895. DS F PTR TO 1ST OVERFLOW BLOCK @V305174 01852000
  1896. OVFLNUM DS H TOT NUM OF OVFL BLKS ALLOC @V305174 01853000
  1897. VIPINDC DS X INDICATOR BYTE @V305174 01854000
  1898. SETEODAD EQU X'80' EODAD RTN SET INACTIVE @V305174 01855000
  1899. SETSYNAD EQU X'40' SYNAD RTN SET INACTIVE @V305174 01856000
  1900. SETLERAD EQU X'20' LERAD RTN SET INACTIVE @V305174 01857000
  1901. RTNCDSV DS X CK PROC--RPL RET CODE SAVE @V305174 01858000
  1902. * 01859000
  1903. * DMSVIP3 SAVE AREA - EXIT ROUTINE BRANCHES 01860000
  1904. * 01861000
  1905. VIP3REGS DS 0F @V305174 01862000
  1906. VIP3R1 DS F @V305174 01863000
  1907. VIP3R213 DS 12F @V305174 01864000
  1908. VIP3R14 DS F @V305174 01865000
  1909. VIP3WORK DS F @V305174 01866000
  1910. VIPWKEND DS 0F END OF VIPWORK @V305174 01867000
  1911. SPACE 2 01868000
  1912. ORG VIPWORK ASSGNS RTN USAGE @V305174 01869000
  1913. DLUT DS 10F @V305174 01870000
  1914. DUMFLAG DS X @V305174 01871000
  1915. DUMMIES EQU X'80' @V305174 01872000
  1916. DUMCAT EQU X'40' @V305174 01873000
  1917. DUMUNIT DS 3C @V305174 01874000
  1918. DS 0D @V305174 01875000
  1919. DASSGN DS 4D @V305174 01876000
  1920. SPACE 2 01877000
  1921. ORG VIPWORK BLDEXLSA, CBMACS02 RTN USAGE @V305174 01878000
  1922. TEMPRSAV DS 3F TEMP SAVE FOR REGS R15,R0,R1 @V305174 01879000
  1923. RETSAV DS F RETURN ADDRESS SAVE CELL @V305174 01880000
  1924. EXLMISC DS F WORK AREA @V305174 01881000
  1925. WKSAVE DS 2F SAVE FOR WK REGS/(ENTRY REG) @V305174 01882000
  1926. CUROVFL DS H CURRENT OVERFLOW BLOCK NUMBER@V305174 01883000
  1927. ORG , @V305174 01884000
  1928. EJECT 01885000
  1929. OEXLSA DSECT OVERFLOW OVERFLOW EXLST ADDR @V305174 01886000
  1930. DS 0D @V305174 01887000
  1931. OEXLADS DS 15F ADDRESS SAVE WORDS @V305174 01888000
  1932. LASTOEXL DS F LAST ADDRESS SAVE SLOT @V305174 01889000
  1933. ANOEXL DC A(0) ADDRESS OF NEXT OVERFLOW AREA@V305174 01890000
  1934. DS F RESERVED @V305174 01891000
  1935. OEXLEND DS 0F END OF OVERFLOW AREA @V305174 01892000
  1936. EJECT 01893000
  1937. CBMACD DSECT HEADER HDR ARG CNTL ENTRY DSE@V305174 01894000
  1938. HEADER EQU * @V305174 01895000
  1939. BTC DS B BLOCK TYPE CODE @V305174 01896000
  1940. BTACB EQU X'A0' ACB @V305174 01897000
  1941. BTEXLST EQU X'B0' EXLST @V305174 01898000
  1942. BTRPL EQU X'C0' RPL @V305174 01899000
  1943. FTC DS B FUNCTION TYPE CODE @V305174 01900000
  1944. GENFTC EQU 1 GENCB @V305174 01901000
  1945. MODFTC EQU 2 MODCB @V305174 01902000
  1946. SHOWFTC EQU 3 SHOWCB @V305174 01903000
  1947. TESTFTC EQU 4 TESTCB @V305174 01904000
  1948. GENCOP DS H NUMBER OF COPIES- GENCB @V305174 01905000
  1949. EJECT 01906000
  1950. DOSCB @V305174 01907000
  1951. NUCON @V305174 01908000
  1952. CMSAVE @V305174 01909000
  1953. IKQACB @V305174 01910000
  1954. EJECT 01911000
  1955. IKQRPL @V305174 01912000
  1956. RPLECB DS A SAVE ECB ADDR (CMS USE ONLY) @V305174 01913000
  1957. EJECT 01914000
  1958. IKQEXLST @V305174 01915000
  1959. EJECT 01916000
  1960. REGEQU @V305174 01917000
  1961. * 01918000
  1962. * OTHER EQUATES 01919000
  1963. * 01920000
  1964. PROG EQU X'01' PROGRAMMER LOGICAL UNIT @V305066 01921000
  1965. SYS010 EQU X'0A' SYS010 LOGICAL UNIT @V305066 01922000
  1966. VSAMTYP EQU X'10' VSAM SUB TYPE @V305066 01923000
  1967. LENGTH EQU X'44' ACB LENGTH @V305066 01924000
  1968. FIVE EQU 5 ... @V305066 01925000
  1969. FOUR EQU 4 ... @V305066 01926000
  1970. NINE EQU 9 ... @V305066 01927000
  1971. ONE EQU 1 ... @V305066 01928000
  1972. TWO EQU 2 ... @V305066 01929000
  1973. EIGHT EQU 8 ... 01929100
  1974. TWELVE EQU 12 ... 01929200
  1975. ABEND177 EQU X'177' ABEND CODE - 177 @V305066 01930000
  1976. ABEND34 EQU 34 ABEND CODE = 34 @V305066 01931000
  1977. ABEND52 EQU 52 ABEND CODE = 52 @V305066 01932000
  1978. ABEND56 EQU 56 ABEND CODE = 56 @V305066 01933000
  1979. SVCTWO EQU 2 SVC 2 @V305066 01934000
  1980. BINZERO EQU X'00' @V305066 01935000
  1981. HEX01 EQU X'01' @V305066 01936000
  1982. RC04 EQU X'04' @V305066 01937000
  1983. CON160 EQU 160 @V305066 01938000
  1984. CON144 EQU 144 @V305066 01939000
  1985. RESET EQU X'0F' @V305066 01940000
  1986. ZERO EQU 8 @V305174 01941000
  1987. EQ EQU 8 @V305174 01942000
  1988. NOTEQ EQU 7 @V305174 01943000
  1989. NEG EQU 4 @V305174 01944000
  1990. ONES EQU 1 @V305174 01945000
  1991. BIT3 EQU B'00010000' @V305174 01946000
  1992. CLOSE EQU C'C' @V305174 01947000
  1993. TCLOSE EQU C'T' @V305174 01948000
  1994. CHECK EQU X'14' DOS CHECK REQUEST CODE @V305174 01949000
  1995. COUNTREG EQU 4 @V305174 01950000
  1996. DOSLREG EQU 8 @V305174 01951000
  1997. ACBREG EQU 5 @V305174 01952000
  1998. RPLREG EQU 1 @V305174 01953000
  1999. EXLSTREG EQU 6 @V305174 01954000
  2000. LISTPTR EQU 3 @V305174 01955000
  2001. ACEPTR EQU 4 @V305174 01956000
  2002. ELEMPTR EQU 4 @V305174 01957000
  2003. ELEMXFLG EQU 8 @V305174 01958000
  2004. OSACBLEN EQU 76 @V305174 01959000
  2005. ECBELID EQU 47 ECB EACE ID @V305174 01960000
  2006. IOEQCOM EQU 54 IO=COMPLETE EACE ID @V305174 01961000
  2007. LOGERR EQU 8 LOGICAL ERROR DURING VSAM I/O@V305174 01962000
  2008. RPLCAERR EQU X'38' RPL FDBK CDE-IO ERR DUR CATG ACC @V305174 01963000
  2009. NOERR EQU X'00' @V305174 01964000
  2010. LAST EQU X'80' @V305174 01965000
  2011. HION EQU X'80' @V305174 01966000
  2012. BLANKS EQU X'40' @V305174 01967000
  2013. HEXTRANS EQU X'0F' @V305174 01968000
  2014. ALLOFF EQU X'00' @V305174 01969000
  2015. DOSOFF EQU X'BF' @V305174 01970000
  2016. INACTIVE EQU X'BF' EXIT RTN INACTIV FLAG (EXLST)@V305174 01971000
  2017. LOWBYTE EQU B'0001' @V305174 01972000
  2018. LOWTWO EQU B'0011' @V305174 01973000
  2019. HIGHTWO EQU B'1100' @V305174 01974000
  2020. B8TO31 EQU B'0111' @V305174 01975000
  2021. HIGHBYTE EQU B'1000' @V305174 01976000
  2022. ALLFOUR EQU B'1111' @V305174 01977000
  2023. * ECB EQUATES 01978000
  2024. WAITING EQU X'80' WAITING FOR COMPL'TN OF EVENT@V305174 01979000
  2025. COMPLETE EQU X'7F' EVENT COMPL'TD SUCCESSFULLY @V305174 01980000
  2026. UNITCHCK EQU X'41' UNIT CHECK--PHYS ERROR INDIC @V305174 01981000
  2027. LOGIC EQU X'42' LOGICAL ERROR INDIC @V305174 01982000
  2028. END 01983000