Table of Contents

DMSSVT Source

References

Source Listing

DMSSVT.ASSEMBLE.txt
  1. SVT TITLE 'DMSSVT (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. * 00003000
  4. ********************************************************************* 00004000
  5. *. 00005000
  6. * 00006000
  7. * MODULE NAME: 00007000
  8. * 00008000
  9. * DMSSVT 00009000
  10. * 00010000
  11. * FUNCTION: 00011000
  12. * 00012000
  13. * DMSSVT PROCESSES OS MACROES. 00013000
  14. * 00014000
  15. * ATTRIBUTES: 00015000
  16. * 00016000
  17. * SERIALLY REUSABLE, TRANSIENT 00017000
  18. * 00018000
  19. * ENTRY POINT: 00019000
  20. * 00020000
  21. * DMSSVT 00021000
  22. * 00022000
  23. * ENTRY CONDITIONS: 00023000
  24. * 00024000
  25. * R12 = A(DMSSVT) 00025000
  26. * R14 = RETURN ADDRESS 00026000
  27. * 00027000
  28. * CALLS TO OTHER ROUTINES: 00028000
  29. * 00029000
  30. * DMSERR,DMSSTT,DMSDBD,DMSBWR,DMSBRD,DMSFNS,DMSERS,DMSFRE, 00030000
  31. * DMSADL,DMSUFD,DMSSBDFR,DMSCRD,DMSCWR,GETMAIN,FREEMAIN, 00031000
  32. * NOTE, TIME, DMSKEY, DMSROS 00032000
  33. * 00033000
  34. * EXTERNAL REFERENCES: 00034000
  35. * 00035000
  36. * OPSECT, IHADCB, FCBSECT, NUCON, PGMSECT 00036000
  37. * 00037000
  38. * 00038000
  39. * SVC SUPPORT ROUTINES AND THEIR OPERATION: 00039000
  40. * 00040000
  41. * 00041000
  42. * XDAP-SVC 0: USED TO WRITE AND READ THE SOURCE CODE SPILL 00042000
  43. * FILE, 00043000
  44. * SYSUT1, DURING LANGUAGE COMPILATION FOR PL/I OPTIMIZER AND 00044000
  45. * ANSI COBOL COMPILERS. THIS ROUTINE CHECKS TO SEE IF THE I/O 00045000
  46. * CODE IS X'0E' (READ) OR X'0D' (WRITE). IF IT IS NEITHER OF 00046000
  47. * THESE, IT PRINTS OUT ERROR MSG 119S. OTHERWISE IT BUILDS A 00047000
  48. * PLIST FROM INFORMATION IN THE CONTROL BLOCKS AND CALLS 00048000
  49. * DMSBRD OR DMSBWR TO READ OR WRITE A BLOCK. IT THEN SETS A 00049000
  50. * RETURN CODE IN THE ECB AND RETURNS CONTROL TO THE USER. 00050000
  51. * 00051000
  52. * TIME-SVC 11: THIS ROUTINE (TIME) LOCATED IN DMSSVT RECEIVES 00052000
  53. * CONTROL 00053000
  54. * WHEN A TIME MACRO INSTRUCTION IS ISSUED. A CALL IS MADE TO 00054000
  55. * THE RPQ SOFTWARE CHRONOLOGICAL TIMER DEVICE, X'OFF'. THE 00055000
  56. * REAL TIME OF DAY AND DATE ARE RETURNED TO THE CALLING 00056000
  57. * PROGRAM IN A SPECIFIED FORM: DECIMAL (DEC) BINARY (BIN), OR 00057000
  58. * TIMER UNITS (TU). 00058000
  59. * 00059000
  60. * SPIE-SVC 14: THIS ROUTINE (SPIE) RECEIVES CONTROL WHEN A 00060000
  61. * SPIE MACRO INSTRUCTION IS ISSUED. WHEN IT GETS CONTROL, 00061000
  62. * SPIE INSERTS THE NEW PROGRAM INTERRUPTION CONTROL AREA 00062000
  63. * (PICA) ADDRESS INTO THE PROGRAM INTERRUPTION ELEMENT (PIE). 00063000
  64. * THE PROGRAM INTERRUPTION ELEMENT RESIDES 00064000
  65. * IN THE PROGRAM INTERRUPTION HANDLER (DMSITP). IT THEN 00065000
  66. * RETURNS THE 00066000
  67. * ADDRESS OF THE OLD PICA TO THE CALLING PROGRAM, SETS THE 00067000
  68. * PROGRAM MASK IN THE CALLING PROGRAM'S PSW, AND RETURNS TO 00068000
  69. * THE CALLING PROGRAM. 00069000
  70. * 00070000
  71. * RESTORE-SVC 17: RESTORE IS A NOP LOCATED IN DMSSVT. 00071000
  72. * 00072000
  73. * BLDL/FIND-SVC 18: SEE BLDL AND FIND UNDER DESCRIPTION OF 00073000
  74. * BPAM ROUTINES. 00074000
  75. * 00075000
  76. * STOW-SVC 21: SEE STOW UNDER DESCRIPTION OF BPAM ROUTINES. 00076000
  77. * 00077000
  78. * DEVTYPE-SVC 24: THIS ROUTINE (DEVTYPE), LOCATED IN DMSSVT, 00078000
  79. * RECEIVES CONTROL 00079000
  80. * WHEN A DEVTYPE MACRO IS ISSUED. UPON ENTRY, DEVTYPE MOVES 00080000
  81. * DEVICE CHARACTERISTIC INFORMATION FOR THE REQUESTED DATA SET 00081000
  82. * INTO A USER SPECIFIED AREA, AND THEN RETURNS CONTROL TO THE 00082000
  83. * USER. 00083000
  84. * 00084000
  85. * 00085000
  86. * TRKBAL-SVC 25: TRKBAL IS A NOP LOCATED IN DMSSVT. 00086000
  87. * 00087000
  88. * WTO, WTOR--SVC 35: THIS ROUTINE (WTO), LOCATED IN DMSSVT, 00088000
  89. * RECEIVES CONTROL 00089000
  90. * WHEN EITHER A WTO OR A WTOR MACRO INSTRUCTION IS ISSUED. 00090000
  91. * FOR A WTO, IT 00091000
  92. * CONSTRUCTS A CALLING SEQUENCE TO THE DMSCWR FUNCTION PROGRAM 00092000
  93. * TO TYPE THE 00093000
  94. * MESSAGE AT THE TERMINAL. (THE ADDRESS OF THE MESSAGE AND 00094000
  95. * ITS LENGTH ARE PROVIDED IN THE PARAMETER LIST THAT RESULTS 00095000
  96. * FROM THE EXPANSION OF THE WTO 00096000
  97. * MACRO INSTRUCTION.) IT THEN CALLS THE DMSCWT FUNCTION 00097000
  98. * PROGRAM TO WAIT UNTIL 00098000
  99. * ALL TERMINAL I/O ACTIVITY HAS CEASED. NEXT, IT CALLS THE 00099000
  100. * DMSCWR 00100000
  101. * FUNCTION PROGRAM TO TYPE THE MESSAGE AT THE TERMINAL AND 00101000
  102. * RETURNS TO THE CALLING PROGRAM. 00102000
  103. * 00103000
  104. * FOR A WTOR MACRO INSTRUCTION, THIS ROUTINE PROCEEDS AS 00104000
  105. * DESCRIBED FOR WTO; HOWEVER, AFTER IT HAS TYPED THE MESSAGE 00105000
  106. * AT THE TERMINAL IT CALLS THE 00106000
  107. * DMSCRD 00107000
  108. * FUNCTION PROGRAM TO READ THE USER'S REPLY FROM THE TERMINAL. 00108000
  109. * WHEN THE USER REPLIES WITH A MESSAGE, IT MOVES THE MESSAGE 00109000
  110. * TO THE BUFFER SPECIFIED IN THE WTOR PARAMETER LIST, SETS THE 00110000
  111. * COMPLETION BIT IN THE ECB, AND RETURNS TO THE CALLING 00111000
  112. * PROGRAM. 00112000
  113. * 00113000
  114. * EXTRACT-SVC 40: THIS ROUTINE (EXTRACT), LOCATED IN DMSSVT 00114000
  115. * RECEIVES CONTROL 00115000
  116. * WHEN AN EXTRACT MACRO IS ISSUED. UPON ENTRY, EXTRACT CLEARS 00116000
  117. * THE USER PROVIDED ANSWER AREA AND RETURNS CONTROL TO THE 00117000
  118. * USER WITH A RETURN CODE OF 4 IN REGISTER 15. 00118000
  119. * 00119000
  120. * IDENTIFY - SVC 41 ADD ENTRY NAME AND ADDRESS TO 00120000
  121. * LOADER TABLE 00121000
  122. * 00122000
  123. * CHAP-SVC 44: CHAP IS A NOP LOCATED IN DMSSVT. 00123000
  124. * 00124000
  125. * TTIMER-SVC46: CHECKS TO INSURE THAT THE VALUE IN THE TIMER 00125000
  126. * (HEX LOCATION 50) WAS SET BY AN STIMER MACRO. IF IT WAS, 00126000
  127. * THE VALUE IS CONVERTED TO AN UNSIGNED 32 BIT BINARY NUMBER 00127000
  128. * SPECIFYING 26 MICRO-SECOND UNITS AND IS RETURNED IN REGISTER 00128000
  129. * 0. IF THE TIMER WAS NOT SET BY AN STIMER MACRO A ZERO IS 00129000
  130. * RETURNED IN REGISTER 0. AFTER SETTING REGISTER 0, THE CANCEL 00130000
  131. * OPTION IS CHECKED. IF IT IS NOT SPECIFIED, CONTROL IS 00131000
  132. * RETURNED TO THE USER. IF IT IS SPECIFIED, THE TIMER VALUE 00132000
  133. * AND EXIT ROUTINE SET BY THE STIMER MACRO ARE CANCELLED AND 00133000
  134. * CONTROL IS RETURNED TO THE USER. 00134000
  135. * 00135000
  136. * STIMER-SVC47: CHECKS TO SEE IF THE WAIT OPTION IS 00136000
  137. * SPECIFIED. IF SO, CONTROL IS RETURNED TO THE USER. IF NOT, 00137000
  138. * THE SPECIFIED TIMER INTERVAL IS CONVERTED TO 13 MICRO-SECOND 00138000
  139. * UNITS AND STORED IN THE TIMER (HEX LOCATION 50). IF A TIMER 00139000
  140. * COMPLETION EXIT ROUTINE IS SPECIFIED, IT IS SCHEDULED TO BE 00140000
  141. * GIVEN CONTROL AFTER COMPLETION OF THE SPECIFIED TIME 00141000
  142. * INTERVAL. IF NOT, NO INDICATION OF THE COMPLETION OF THE 00142000
  143. * TIME INTERVAL IS SCHEDULED. AFTER CHECKING AND HANDLING ANY 00143000
  144. * SPECIFIED EXIT ROUTINE ADDRESS, CONTROL IS RETURNED TO THE 00144000
  145. * USER. THE MAXIMUM TIME INTERVAL ALLOWED IS RESTRICTED TO @VA15155 00145000
  146. * X'7FFFFF00' TIMER UNITS (X'00555554' IN BINARY, OR @VA15155 00145200
  147. * 15 HOURS, 32 MINUTES, AND 4 SECONDS IF IN DECIMAL). IF @VA15155 00145400
  148. * THE TIME INTERVAL IS GREATER THAN THE MAXIMUM, IT WILL BE @VA15155 00145600
  149. * SET TO THE MAXIMUM. @VA15155 00145800
  150. * 00146000
  151. * DEQ-SVC 48: DEQ IS A NOP LOCATED IN DMSSVT. 00147000
  152. * 00148000
  153. * SNAP-SVC 51: CONTROL IS PASSED TO SNAP IN DMSSVT WHEN A 00149000
  154. * SNAP MACRO IS ISSUED. FIRST A CHECK IS MADE TO SEE IF THE @VA04475 00150000
  155. * DCB SPECIFIED IN THE PLIST IS OPEN. IF NOT, CONTROL IS @VA04475 00151000
  156. * RETURNED TO THE CALLER WITH A RETURN CODE OF 4. IF THE DCB @VA04475 00152000
  157. * IS OPENED, THE FCB IS CHECKED FOR A DEVICE TYPE OF DUMMY. @VA04475 00153000
  158. * IF DUMMY, THE EXECUTION OF THE DUMP FUNCTION IS IGNORED. @VA04475 00154000
  159. * OTHERWISE, SNAP FILLS IN A PLIST WITH THE STARTING AND ENDING@VA04475 00155000
  160. * ADDRESS AND CALLS DMSDBD. DMSDBD DUMPS THE SPECIFIED CORE 00156000
  161. * ALONG WITH THE REGISTERS AND LOW CORE TO THE PRINTER. 00157000
  162. * CONTROL IS THEN RETURNED TO SNAP AND SNAP CHECKS TO SEE IF 00158000
  163. * ANY MORE ADDRESSES ARE SPECIFIED. IT CONTINUES CALLING 00159000
  164. * DMSDBD UNTIL ALL THE SPECIFIED ADDRESSES HAVE BEEN DUMPED 00160000
  165. * TO THE PRINTER. CONTROL IS THEN RETURNED TO THE USER. 00161000
  166. * SINCE THE DUMP ALWAYS GOES TO THE PRINTER, THE DCB 00162000
  167. * SPECIFICATION CAN BE ANY DUMMY ADDRESS. 00163000
  168. * 00164000
  169. * ENQ-SVC 56: ENQ IS A NOP LOCATED IN DMSSVT. 00165000
  170. * 00166000
  171. * FREEDBUF-SVC 57: THIS ROUTINE (FREEDBUF) LOCATED IN DMSSVT 00167000
  172. * RECEIVES 00168000
  173. * CONTROL WHEN A FREEDBUF MACRO IS ISSUED. UPON ENTRY, 00169000
  174. * FREEDBUF SETS UP 00170000
  175. * THE CORRECT DSECT REGISTERS AND CALLS THE FREEDBUF ROUTINE 00171000
  176. * IN DMSSBD. 00172000
  177. * THIS ROUTINE RETURNS THE DYNAMICALLY OBTAINED BUFFER (BDAM) 00173000
  178. * SPECIFIED IN THE DECB TO THE DCB BUFFER CONTROL BLOCK CHAIN. 00174000
  179. * CONTROL IS THEN 00175000
  180. * RETURNED TO THE DMSSVT ROUTINE WHICH RETURNS CONTROL TO THE 00176000
  181. * USER. 00177000
  182. * 00178000
  183. * STAE-SVC 60: THIS ROUTINE (STAE) LOCATED IN DMSSVT RECEIVES 00179000
  184. * CONTROL WHEN 00180000
  185. * A STAE MACRO IS ISSUED. UPON ENTRY, STAE CREATES, OVERLAYS 00181000
  186. * OR CANCELS A STAE CONTROL BLOCK (SCB) AS REQUESTED. CONTROL 00182000
  187. * IS THEN RETURNED TO THE USER WITH ONE OF THE FOLLOWING 00183000
  188. * RETURN CODES IN REGISTER 15. 00184000
  189. * 00185000
  190. * CODE MEANING 00186000
  191. * 00187000
  192. * 00 AN SCB IS SUCCESSFULLY CREATED, 00188000
  193. * OVERLAID OR CANCELLED. 00189000
  194. * 00190000
  195. * 08 THE USER IS ATTEMPTING TO CANCEL OR 00191000
  196. * OVERLAY A NON-EXISTENT SCB. 00192000
  197. * 00193000
  198. * 00194000
  199. * 00195000
  200. * FORMAT OF SCB 00196000
  201. * 00197000
  202. * 0 __________________________ 00198000
  203. * |0 OR POINTER TO NEXT SCB| 00199000
  204. * 4 |________________________| 00200000
  205. * |EXIT ADDRESS | 00201000
  206. * 8 |________________________| 00202000
  207. * |PARAMETER LIST ADDRESS | 00203000
  208. * 12 |________________________| 00204000
  209. * _ 00205000
  210. * 00206000
  211. * DETACH-SVC 62: DETACH IS A NOP LOCATED IN DMSSVT. 00207000
  212. * 00208000
  213. * CHKPT-SVC 63: CHKPT IS A NOP LOCATED IN DMSSVT. 00209000
  214. * 00210000
  215. * RDJFCB-SVC 64: THIS ROUTINE (RDJFCB) RECEIVES CONTROL WHEN 00211000
  216. * A RDJFCB MACRO INSTRUCTION IS ISSUED. WHEN IT GETS CONTROL, 00212000
  217. * RDJFCB OBTAINS THE ADDRESS OF THE JFCB FROM THE DCBEXLST 00213000
  218. * FIELD IN THE DCB AND SETS THE JFCB TO ZERO. IT THEN READS 00214000
  219. * THE SIMULATED JFCB LOCATED IN CMSCB THAT WAS PRODUCED BY 00215000
  220. * ISSUING A FILEDEF INTO THE CLOSED AREA. RDJFCB CALLS THE 00216000
  221. * STATE FUNCTION PROGRAM TO DETERMINE IF THE ASSOCIATED FILE 00217000
  222. * EXISTS. IF IT DOES, RDJFCB RETURNS TO THE CALLING PROGRAM. 00218000
  223. * IF THE FILE DOES NOT EXIST, RDJFCB SETS A SWITCH IN THE DCB 00219000
  224. * TO INDICATE THIS AND THEN RETURNS TO THE CALLING PROGRAM. 00220000
  225. * FOR UNOPENED DCB'S, RDJFCB SEARCHES THE DOSCB'S THAT OS USERS 00221000
  226. * PRODUCED BY DLBL COMMANDS FOR VSAM DATA SETS. IF A MATCHING 00222000
  227. * DDNAME IS FOUND, ONLY THE JFCDSORG 'VSAM' BIT (BIT 4 OF BYTE 00223000
  228. * 2) IS TURNED 'ON' AND NO STATE IS ISSUED BEFORE RETURN. THIS BIT 00224000
  229. * IS CHECKED BY THE PL/1 OPEN ROUTINE TO DETECT VSAM DATA SETS. 00225000
  230. * RDJFCB IS LOCATED 00226000
  231. * IN DMSSVT. 00227000
  232. * 00228000
  233. * NOTE: THE SWITCH SET BY THE RDJFCB IS TESTED BY THE FORTRAN 00229000
  234. * OBJECT-TIME DIRECT-ACCESS HANDLER (DIOCS) TO DETERMINE 00230000
  235. * WHETHER OR NOT A REFERENCED DISK FILE EXISTS. IF IT DOES 00231000
  236. * NOT, DIOCS WILL INITIALIZE THE DIRECT ACCESS FILE. 00232000
  237. * 00233000
  238. * SYNAD-SVC 68: LOCATED IN DMSSVT, SYNAD ATTEMPTS TO SIMULATE 00234000
  239. * THE FUNCTIONS 00235000
  240. * SYNADAF AND SYNADRLS. SYNADAF EXPANSION INCLUDES AN SVC 68 00236000
  241. * AND A HIGH-ORDER BYTE IN REGISTER 15 DENOTING AN ACCESS 00237000
  242. * METHOD. SYNAD WILL PREPARE AN ERROR MESSAGE LINE AND SWAP 00238000
  243. * SAVE AREAS AND REGISTER 13 POINTERS. THE MESSAGE BUFFER IS 00239000
  244. * 120 BYTES: BYTES 1-43,84-119 BLANK; BYTES 44-83 'DMSSVT120S 00240000
  245. * INPUT/OUTPUT ERROR NN ON DSNAME', WHERE NN IS THE CMS 00241000
  246. * I/O ERROR CODE. 00242000
  247. * 00243000
  248. * SYNADRLS EXPANSION INCLUDES SVC 68 AND A HIGH ORDER BYTE OF 00244000
  249. * X'FF' IN REGISTER 15. THE SAVE AREA WILL BE RESET, AND 00245000
  250. * THE MESSAGE BUFFER WILL BE RETURNED TO FREE STORAGE. 00246000
  251. * 00247000
  252. * BACKSPACE-SVC 69: 00248000
  253. * CONTROL IS PASSED TO BACKSPACE IN DMSSVT WHEN A BACKSPACE 00249000
  254. * MACRO IS ISSUED. UPON ENTRY, BACKSPACE CHECKS FOR THE FCB OS 00250000
  255. * BIT. IF IT IS ON, DMSROS IS CALLED TO BACKSPACE THE TTR AND 00251000
  256. * CONTROL IS RETURNED TO THE CALLER. OTHERWISE 00252000
  257. * BACKSPACE DECREMENTS THE READ WRITE POINTER BY ONE AND 00253000
  258. * RETURNS CONTROL TO THE USER. NO PHYSICAL TAPE OR DISK 00254000
  259. * ADJUSTMENTS ARE MADE UNTIL THE NEXT READ OR WRITE MACRO IS 00255000
  260. * ISSUED. 00256000
  261. * 00257000
  262. * STAX-SVC 96: LOCATED IN DMSSVT, STAX WILL GET AND CHAIN A 00258000
  263. * TAXE CONTROL BLOCK FOR EACH STAX SVC ISSUED WITH AN EXIT 00259000
  264. * ROUTINE ADDRESS SPECIFIED. THE CHAIN WILL BE ANCHORED BY 00260000
  265. * TAXEADDR IN DMSNUC. IF NO EXIT ADDRESS IS SPECIFIED THE MOST 00261000
  266. * RECENTLY ADDED TAXE IS CLEARED FROM THE CHAIN. IF AN ERROR 00262000
  267. * OCCURS DURING STAX SVC PROCESSING, A RETURN CODE OF EIGHT IS 00263000
  268. * PLACED IN REGISTER 15. THE ONLY OPTION OF STAX WHICH MAY BE 00264000
  269. * SPECIFIED IS 'EXIT ADDRESS'. ANY OTHER OPTIONS WILL CAUSE 00265000
  270. * RETURN CODE EIGHT. 00266000
  271. * 00267000
  272. * 00268000
  273. * 00269000
  274. ******************************************************************** 00270000
  275. * *KEYSAV (BDAM OR BSAM) 00271000
  276. * 00272000
  277. * FUNCTION: 00273000
  278. * 00274000
  279. * TO BUILD A KEYS FILE WHEN A DATA FILE USING KEYS IS 00275000
  280. * OPENED AND TO SAVE THE KEYS AT THE END OF THE DATA 00276000
  281. * FILE WHEN IT IS CLOSED. 00277000
  282. * 00278000
  283. * ENTRY CONDITION: 00279000
  284. * 00280000
  285. * SVC 203 FOLLOWED BY HALFWORD OF -3 AND R0=0. 00281000
  286. * 00282000
  287. * EXIT CONDITIONS: 00283000
  288. * 00284000
  289. * CONTROL IS RETURNED TO CALLER WITH A ZERO IN REGISTER 00285000
  290. * 15 IF EXECUTION WAS SUCCESSFUL AND A NONZERO, IF NOT. 00286000
  291. * 00287000
  292. * CALLS TO OTHER ROUTINES: 00288000
  293. * 00289000
  294. * DMSFNS,DMSFRE,DMSBWR,DMSBRD, DMSERS, DMSSTT,DMSUFD,DMSADL 00290000
  295. * 00291000
  296. * 00292000
  297. * TABLES/WORKAREAS: 00293000
  298. * 00294000
  299. * KEYTABL DSECT USED TO READ, WRITE AND SEARCH FOR 00295000
  300. * KEYS. 00296000
  301. * 00297000
  302. * REGISTER USAGE: 00298000
  303. * 00299000
  304. * R0, R1, R3, R4, R6, R7, R9, R11, R14, R15 - WORK 00300000
  305. * R2 - DCB 00301000
  306. * R5 - KEYTABL DSECT 00302000
  307. * R8 - FCB 00303000
  308. * R10 - OPSECT DSECT 00304000
  309. * R12 - BASE 00305000
  310. * 00306000
  311. * OPERATION: 00307000
  312. * 00308000
  313. * KEYSAV GETS CONTROL FROM EITHER DMSSBD OR THE CLOSE 00309000
  314. * ROUTINE, DMSSOP. 00310000
  315. * 00311000
  316. * . IF KEYSAV GETS CONTROL FROM DMSSBD, A KEY TABLE 00312000
  317. * AND A PLIST FOR 00313000
  318. * ACCESSING THE KEY TABLE IS BUILT IN CORE. NEXT, 00314000
  319. * THE XTENT PARAMETER IS READ FROM THE LAST ITEM IN 00315000
  320. * THE DATA FILE AND IF THE FILE FORMAT IS FIXED OR IF 00316000
  321. * THE FILE IS NOT BEING UPDATED, CONTROL IS RETURNED 00317000
  322. * TO DMSSBD. OTHERWISE 00318000
  323. * TWO NEW FILES WITH THE SAME FILETYPE AS THE DATA 00319000
  324. * FILE, BUT WITH FILENAMES OF $KEYTEMP AND $KEYSAVE 00320000
  325. * ARE CREATED, USING THE KEYS AT THE END OF THE DATA 00321000
  326. * FILE. THE $KEYTEMP FILE WILL BE USED FOR UPDATES 00322000
  327. * TO THE KEYS, AND THE $KEYSAVE FILE WILL BE USED IN 00323000
  328. * CASE OF A SYSTEM CRASH OR RE-IPL. IF A $KEYSAVE 00324000
  329. * FILE ALREADY EXISTS FOR A DATA FILE WHEN IT IS 00325000
  330. * OPENED, THEN THE KEYS FROM THAT FILE RATHER THAN 00326000
  331. * THE KEYS FROM THE END OF THE DATA FILE, WILL BE 00327000
  332. * USED TO CREATE $KEYTEMP. AFTER THE TWO FILES ARE 00328000
  333. * CREATED, CONTROL 00329000
  334. * IS RETURNED TO DMSSBD. 00330000
  335. * 00331000
  336. * . IF KEYSAV GETS CONTROL FROM DMSSOP, THEN KEYS FROM 00332000
  337. * THE LAST KEY TABLE REFERRENCED ARE SAVED. IF THE FILE 00333000
  338. * FORMAT IS FIXED OR IF THE FILE WAS NOT UPDATED, 00334000
  339. * THE CORE FOR THE KEY TABLE AND KEY PLIST IS FREED 00335000
  340. * AND CONTROL IS RETURNED TO DMSSBD. OTHERWISE, THE 00336000
  341. * $KEYTEMP FILE ARE READ IN AND WRITTEN AT THE END 00337000
  342. * OF THE DATA FILE. WHEN THIS IS COMPLETE, THE 00338000
  343. * $KEYTEMP AND $KEYSAVE FILES ARE ERASED, THE CORE 00339000
  344. * FOR THE KEY TABLE AND ITS PLIST IS FREED UP, AND 00340000
  345. * CONTROL 00341000
  346. * IS RETURNED TO DMSSOP. 00342000
  347. * 00343000
  348. * 00344000
  349. ********************************************************************* 00345000
  350. * *BPAM ROUTINES: 00346000
  351. * 00347000
  352. * THE CMS BPAM MACRO ROUTINES ARE USED TO ACCESS AND 00348000
  353. * BUILD PARTITIONED DATA SETS. THESE DATA SETS ARE 00349000
  354. * DIVIDED INTO SEQUENTIALLY ORGANIZED MEMBERS, EACH OF 00350000
  355. * WHICH HAS A UNIQUE NAME STORED IN A DIRECTORY. THE 00351000
  356. * CMS BPAM MACRO ROUTINES SUPPORT ALL THE OS BPAM MACRO 00352000
  357. * FUNCTIONS EXCEPT THE OS FACILITY OF ADDING USER DATA 00353000
  358. * TO THE DIRECTORY ENTRIES. ANY CMS MACLIB CAN BE ACCESSED 00354000
  359. * BY OS BPAM MACROES BUT ONLY MACLIBS CREATED ON CMS 1.0 00355000
  360. * OR CONVERTED TO CMS 1.0 BY A MACLIB COMMAND WITH THE 00356000
  361. * COMPACT OPTION CAN BE UPDATED BY OS BPAM MACROES. 00357000
  362. * 00358000
  363. * THE FUNCTIONS AND OPERATIONS OF THE CMS BPAM MACRO 00359000
  364. * PROGRAMS ARE GIVEN BELOW. 00360000
  365. * 00361000
  366. ******************************************************************** 00362000
  367. * *FIND (BPAM) 00363000
  368. * 00364000
  369. * FUNCTION: 00365000
  370. * 00366000
  371. * WHEN CALLED BY THE USER: 00367000
  372. * TO CAUSE THE CONTROL PROGRAM TO USE THE ADDRESS OF 00368000
  373. * THE FIRST BLOCK OF A SPECIFIED PARTITIONED DATA 00369000
  374. * SET MEMBER AS THE STARTING POINT FOR THE NEXT READ 00370000
  375. * MACRO INSTRUCTION FOR THE SAME DATA SET. 00371000
  376. * 00372000
  377. * WHEN CALLED BY STOW OR BLDL: 00373000
  378. * TO FIND THE DIRECTORY ENTRY FOR A MEMBER AND PASS 00374000
  379. * BACK THE IN-CORE ADDRESS OF THE ENTRY. 00375000
  380. * 00376000
  381. * WHEN CALLED BY DICTSAVE: 00377000
  382. * TO READ IN THE DIRECTORY 00378000
  383. * 00379000
  384. * ENTRY CONDTIONS: 00380000
  385. * 00381000
  386. * FIND ROUTINE IN DMSSVT CAN BE CALLED BY OS FIND MACRO OR BY 00382000
  387. * DMSSVT ROUTINES BLDL, PDSSAVE AND STOW. 00383000
  388. * 00384000
  389. * EXIT CONDITIONS: 00385000
  390. * 00386000
  391. * WHEN CONTROL IS RETURNED TO THE PROBLEM PROGRAM OR 00387000
  392. * CALLING ROUTINE, THE RETURN CODE IN REGISTER 15 IS AS 00388000
  393. * FOLLOWS: 00389000
  394. * 00390000
  395. * NAME PROVIDED RELATIVE ADDRESS PROVIDED 00391000
  396. * ------------- ------------------------- 00392000
  397. * 00393000
  398. * 00-SUCCESSFUL EXECUTION 00-AT ALL TIMES. 00394000
  399. * 04-NAME NOT FOUND IF THE RELATIVE ADDRESS IS 00395000
  400. * 08-PERMANENT I/O BAD IT IS REFLECTED IN 00396000
  401. * ERROR READING THE NEXT READ. 00397000
  402. * IN DIRECTORY 00398000
  403. * 00399000
  404. * THE FOLLOWING ERROR MESSAGE IS PRINTED OUT IF THE DATA 00400000
  405. * SET SPECIFIED IS NOT A VALID MACLIB OR IF THE USER 00401000
  406. * IS TRYING TO UPDATE A MACLIB THAT WAS NOT CREATED ON 00402000
  407. * OR COVERTED TO 1.0. 00403000
  408. * DMSSVT033E FILE 'FILEID' IS NOT A LIBRARY 00404000
  409. * 00405000
  410. * 00406000
  411. * CALLS TO OTHER ROUTINES: 00407000
  412. * 00408000
  413. * DMSBRD, DMSFRE, DMSFNS, DMSROS 00409000
  414. * 00410000
  415. * 00411000
  416. * TABLES/WORKAREAS: 00412000
  417. * 00413000
  418. * TABLES OF PDS ENTRIES ARE KEPT IN CORE. THE SIZE OF 00414000
  419. * THE TABLE IN BYTES IS 24+(12XNO. OF MEMBER AND ALIAS 00415000
  420. * NAMES IN PDS). 00416000
  421. * 00417000
  422. * REGISTER USAGE: 00418000
  423. * 00419000
  424. * R2 - DCB 00420000
  425. * R8 - FCB 00421000
  426. * R9 - MEMBER NAME 00422000
  427. * R11 - PDSSECT DSECT 00423000
  428. * R12 - BASE 00424000
  429. * R13 - SAVE 00425000
  430. * R0,R1,R3 - R7,R10,R14,R15 - WORK 00426000
  431. * 00427000
  432. * 00428000
  433. * OPERATION: 00429000
  434. * 00430000
  435. * UPON ENTRY TO FIND, A CHECK IS MADE OF THE FCB OS BIT. 00431000
  436. * IF IT IS ON, THE OS FST ADDRESS IS LIFTED FROM THE CMSCB 00432000
  437. * OR, IF THE CONCAT BIT IS ON, FROM THE GLOBAL MACLIB 00433000
  438. * LIST. DMSROS IS THEN CALLED TO FIND THE MEMBER NAME AND 00434000
  439. * TTR. IF THE FCB OS BIT IS NOT ON, FCBDSNAM AND THE ADDRESS 00435000
  440. * OF THE 1ST MACRO LIBRARY IS LIFTED FROM THE CMSCB 00436000
  441. * OR, IF THE CONCAT BIT IS ON, FROM THE GLOBAL MACLIB LIST. 00437000
  442. * NEXT A CHECK IS MADE OF THE 00438000
  443. * IN CORE DIRECTORY ADDRESS. IF IT IS ZERO, THE 00439000
  444. * DIRECTORY HEADER RECORD 00440000
  445. * IS READ INTO A SAVE AREA, DMSFRE IS CALLED TO GET 00441000
  446. * CORE FOR THE DIRECTORY AND ITS CONTROL WORDS, 00442000
  447. * THE DIRECTORY IS READ IN, AND THE POINTER TO THE 00443000
  448. * IN-CORE DIRECTORY IS STORED IN FCBPDS. IF, WHEN THE 00444000
  449. * DICTIONARY HEADER RECORD IS READ IN, THE EIGHTH 00445000
  450. * CHARACTER IN IT IS A '$', A ONE IS PUT IN THE CHANGE 00446000
  451. * BYTE AND THE PDS DIRECTORY IS READ FROM A FILE WITH 00447000
  452. * THE SAME FILETYPE AND A FILENAME OF $PDSTEMP. ONCE 00448000
  453. * IN, THE DIRECTORY IS KEPT IN CORE UNTIL A BLDL OR A 00449000
  454. * CLOSE IS ISSUED FOR THE DATA SET. IF THE 2ND 00450000
  455. * THREE BYTES OF THE HEADER ARE NOT 'LIB' OR IF FIND 00451000
  456. * WAS CALLED BY PDSSAVE AND THE 1ST THREE BYTES ARE 00452000
  457. * NOT 'DMS', ERROR MESSAGE DMSSVT033E IS PRINTED OUT AND 00453000
  458. * CONTROL IS PASSED BACK TO THE USER WITH AN I/O ERROR 00454000
  459. * CODE. AFTER FIND HAS 00455000
  460. * THE POINTER TO THE IN-CORE DIRECTORY, IT BEGINS 00456000
  461. * SEARCHING FOR A MATCHING MEMBER NAME OR, IF THE 00457000
  462. * FCBMVPDS OPTION IS SPECIFIED, A HIGHER MEMBER NAME. 00458000
  463. * IF THE CORRECT MEMBER 00459000
  464. * NAME IS NOT FOUND, A CHECK IS MADE TO SEE IF ANY 00460000
  465. * ADDITIONAL DIRECTORY BLOCKS HAVE BEEN ADDED BY STOW. 00461000
  466. * IF SO, THEY TOO ARE SEARCHED. 00462000
  467. * 00463000
  468. * AFTER THE CMS DIRECTORY OR DMSROS SEARCH IS THROUGH AND THE 00464000
  469. * MEMBER IS EITHER FOUND OR NOT FOUND, A CHECK IS MADE TO SEE 00465000
  470. * WHAT PROGRAM REQUESTED THE SEARCH. IF IT WAS 00466000
  471. * PDSSAVE, BLDL OR STOW, CONTROL IS RETURNED TO THOSE 00467000
  472. * ROUTINES. IF IT WAS A SUCCESSFUL USER REQUEST, THE 00468000
  473. * ITEM NUMBER OF THE MEMBER IS MOVED FROM THE DIRECTORY 00469000
  474. * INTO FCBITEM AND DCBRELAD, AND CONTROL IS RETURNED TO 00470000
  475. * THE USER WITH A ZERO IN REGISTER 15. IF IT WAS AN 00471000
  476. * UNSUCCESSFUL USER REQUEST AND THE CONCATIONATION 00472000
  477. * BIT IS NOT ON, CONTROL IS RETURNED TO THE USER 00473000
  478. * WITH A FOUR IN REGISTER 15. IF THE CONCATIONATION 00474000
  479. * BIT IS ON, THE NEXT MACLIB NAME IN THE MACLIB 00475000
  480. * LIST IS USED TO GET THE OS FST OR CMS PDS ADDRESS AND THE 00476000
  481. * SEARCH FOR THE 00477000
  482. * MEMBER STARTS AGAIN. IF THE NEXT FCB POINTER IN THE 00478000
  483. * MACLIB FCB LIST IS ZERO, CONTROL IS RETURNED TO THE 00479000
  484. * USER WITH A FOUR IN REGISTER 15. 00480000
  485. * 00481000
  486. * 00482000
  487. * 00483000
  488. * 00484000
  489. * * . THERE ARE TWO FIND ROUTINES. ONE IS PART OF DMSSCT 00485000
  490. * AND IS USED ONLY WHEN A RELATIVE ADDRESS LIST 00486000
  491. * IS PROVIDED. THE OTHER IS PART OF DMSSVT. 00487000
  492. * 00488000
  493. * . THE DCBDSORG OPTION IN THE DCB MUST ALWAYS BE PO WHEN 00489000
  494. * REFERENCING A BPAM DATA SET. 00490000
  495. * 00491000
  496. ********************************************************************* 00492000
  497. * *BLDL (BPAM) 00493000
  498. * 00494000
  499. * FUNCTION: 00495000
  500. * 00496000
  501. * TO FILL IN A USERS LIST IN MAIN STORAGE WITH THE 00497000
  502. * RELATIVE TRACK ADDRESSES (ITEM NUMBERS) FOR REQUESTED 00498000
  503. * MEMBERS. 00499000
  504. * 00500000
  505. * ENTRY CONDITIONS: 00501000
  506. * 00502000
  507. * BLDL ROUTINE IN DMSSVT 00503000
  508. * MUST BE CALLED BY 00504000
  509. * OS BLDL MACRO. 00505000
  510. * 00506000
  511. * EXIT CONDITIONS: 00507000
  512. * 00508000
  513. * WHEN CONTROL IS RETURNED TO THE PROBLEM PROGRAM, THE 00509000
  514. * RETURN CODE IN REGISTER 15 IS AS FOLLOWS: 00510000
  515. * 00511000
  516. * CODE (HEXIDECIMAL) 00512000
  517. * 00 SUCCESSFUL COMPLETION 00513000
  518. * 00514000
  519. * 04 LIST COULD NOT BE FILLED. 00515000
  520. * TTR FIELD OF MEMBER 00516000
  521. * NOT FOUND IS FILLED IN 00517000
  522. * AS ZERO. 00518000
  523. * 00519000
  524. * 08 PERMANENT INPUT OR OUTPUT 00520000
  525. * ERROR WHILE READING IN DIRECTORY. 00521000
  526. * 00522000
  527. * CALLS TO OTHER ROUTINES: 00523000
  528. * 00524000
  529. * FIND, PDSSAVE (BOTH ROUTINES IN DMSSVT) 00525000
  530. * 00526000
  531. * TABLES / WORKAREAS: 00527000
  532. * 00528000
  533. * NONE 00529000
  534. * 00530000
  535. * REGISTER USAGE: 00531000
  536. * 00532000
  537. * R2 - DCB 00533000
  538. * R8 - FCB 00534000
  539. * R9 - MEMBER NAME 00535000
  540. * R11 - PDSSECT DSECT 00536000
  541. * R12 - BASE 00537000
  542. * R13 - SAVE 00538000
  543. * R0,R1,R3-R7,R10,R14,R15 - WORK 00539000
  544. * 00540000
  545. * 00541000
  546. * OPERATION: 00542000
  547. * 00543000
  548. * UPON ENTRY TO BLDL, A CHECK IS MADE TO DETERMINE 00544000
  549. * IF THE JOBLIB OR LINKLIB OPTION IS SPECIFIED. IF 00545000
  550. * SO, CONTROL IS RETURNED TO THE USER WITH A ZERO IN 00546000
  551. * REGISTER 15. IF NOT, FIND IS CALLED TO SEARCH THE 00547000
  552. * DIRECTORY 00548000
  553. * FOR A MATCH OF THE FIRST MEMBER NAME IN THE USER'S 00549000
  554. * LIST. IF A MATCH IS NOT FOUND, THE TTR FIELD IS 00550000
  555. * FILLED IN WITH ZEROES, FIND IS CALLED TO SEARCH FOR 00551000
  556. * THE NEXT MEMBER AND A FOUR IS PUT IN REGISTER 15. IF 00552000
  557. * IT IS FOUND, BLDL FILLS IN THE USERS LIST WITH THE 00553000
  558. * MEMBER'S ITEM NUMBER AND CONTINUES CALLING FIND UNTIL 00554000
  559. * THE WHOLE BLDL LIST HAS BEEN FILLED IN. AFTER THE 00555000
  560. * LIST IS FULL, THE CHANGE BYTE IS CHECKED. IF IT IS 00556000
  561. * NOT SET, CONTROL IS RETURNED TO THE USER. OTHERWISE PDSSAVE IS 00557000
  562. * CALLED TO FREE THE IN-CORE DIRECTORY AND CONTROL IS 00558000
  563. * RETURNED TO THE USER. THE FORMAT OF THE USER'S LIST 00559000
  564. * AFTER CALLING BLDL FOLLOWS: 00560000
  565. * 00561000
  566. * 00562000
  567. * FF LL NAME TTR KZC DATA 00563000
  568. * 00564000
  569. * 00565000
  570. * TTR THE ITEM NUMBER WILL ALWAYS BE RIGHT JUSTIFIED IN 00566000
  571. * THESE THREE BYTES. 00567000
  572. * KZ THESE TWO BYTES WILL ALWAYS BE ZERO. 00568000
  573. * C THE HIGH ORDER BIT IN THIS BYTE WILL BE ON 00569000
  574. * IF THE NAME IS AN ALIAS AND THE MACLIB IS A 00570000
  575. * 1.0 MACLIB. THE DATA FIELD WILL ALWAYS BE ZERO 00571000
  576. * IF THE DCB REFERS TO A CMS DISK. IF THE DCB 00572000
  577. * REFERS TO AN OS DISK, THE C BYTE AND THE DATA 00573000
  578. * FIELD WILL BE FILLED IN FROM THE OS DATA SET. 00574000
  579. * 00575000
  580. * 00576000
  581. ********************************************************************* 00577000
  582. * *STOW (BPAM) 00578000
  583. * 00579000
  584. * FUNCTION: 00580000
  585. * 00581000
  586. * TO ADD, CHANGE, REPLACE OR DELETE AN ENTRY IN A 00582000
  587. * PARTITIONED DATA SET (PDS) DIRECTORY. 00583000
  588. * 00584000
  589. * ENTRY CONDITIONS: 00585000
  590. * 00586000
  591. * OS STOW MACRO 00587000
  592. * 00588000
  593. * EXIT CONDITIONS: 00589000
  594. * 00590000
  595. * WHEN CONTROL IS RETURNED TO THE PROBLEM PROGRAM,THE 00591000
  596. * RETURN CODE IN REGISTER 15 IS AS FOLLOWS: 00592000
  597. * 00593000
  598. * CODE (HEXADECIMAL) 00594000
  599. * 00 UPDATE SUCCESSFUL 00595000
  600. * 04 NAME ALREADY IN DIRECTORY 00596000
  601. * 08 NAME COULD NOT BE FOUND 00597000
  602. * 0C DIRECTORY OR FILE FULL 00598000
  603. * 10 A PERMANENT INPUT OR OUTPUT 00599000
  604. * ERROR WAS DETECTED ATTEMPTING 00600000
  605. * TO UPDATE THE DIRECTORY. 00601000
  606. * 00602000
  607. * CALLS TO OTHER ROUTINES: 00603000
  608. * 00604000
  609. * FINDD IN DMSSVT,NOTE IN DMSSCT, DMSFRE,DMSBWR 00605000
  610. * 00606000
  611. * TABLES/WORKAREAS: 00607000
  612. * 00608000
  613. * THE IN-CORE PDS DIRECTORY IS UPDATED BY STOW. 00609000
  614. * 00610000
  615. * REGISTER USAGE: 00611000
  616. * 00612000
  617. * R0,R1,R3,R4,R6,R7,R11,R14,R15 - WORK 00613000
  618. * R2 - DCB 00614000
  619. * R5-PDSSECT DSECT 00615000
  620. * R8-FCB 00616000
  621. * R9-MEMBER NAME 00617000
  622. * R10-OPSECT BASE 00618000
  623. * R12-BASE 00619000
  624. * R13-SAVE AREA 00620000
  625. * 00621000
  626. * . TWO FILES 00622000
  627. * WITH THE SAME FILETYPE CANNOT BE UPDATED AT THE SAME 00623000
  628. * TIME. 00624000
  629. * 00625000
  630. * OPERATION: 00626000
  631. * 00627000
  632. * . IF THE DELETE OPTION IS SPECIFIED, FIND IS 00628000
  633. * CALLED TO SEARCH THE DIRECTORY FOR A MATCH TO THE 00629000
  634. * MEMBER IN THE USERS LIST. IF THE SEARCH IS 00630000
  635. * SUCCESSFUL, THE DIRECTORY ENTRY IS ZEROED OUT, A ONE 00631000
  636. * IS PUT IN THE CHANGE BYTE AND CONTROL IS RETURNED TO 00632000
  637. * THE USER WITH A ZERO IN REGISTER 15. IF THE SEARCH 00633000
  638. * IS NOT SUCCESSFUL, CONTROL IS RETURNED TO THE USER 00634000
  639. * WITH AN EIGHT IN REGISTER 15. 00635000
  640. * 00636000
  641. * .IF THE CHANGE OPTION IS SPECIFIED, FIND IS CALLED 00637000
  642. * TO SEARCH THE DIRECTORY FOR A MATCH TO THE MEMBER IN 00638000
  643. * THE USERS LIST. IF THE SEARCH IS NOT SUCCESSFUL, 00639000
  644. * CONTROL IS RETURNED TO THE USER WITH AN EIGHT IN 00640000
  645. * REGISTER 15. IF THE SEARCH IS SUCCESSFUL, FIND IS 00641000
  646. * CALLED AGAIN TO SEARCH FOR THE NEW MEMBER NAME IN THE 00642000
  647. * DIRECTORY. IF THIS SECOND SEARCH IS SUCCESSFUL 00643000
  648. * CONTROL IS RETURNED TO THE USER WITH A FOUR IN 00644000
  649. * REGISTER 15. IF THIS SECOND SEARCH IS NOT SUCCESSFUL 00645000
  650. * THE DIRECTORY IS CHANGED, A ONE IS PUT IN THE CHANGE 00646000
  651. * BYTE AND CONTROL IS RETURNED TO THE USER WITH A ZERO 00647000
  652. * IN REGISTER 15. 00648000
  653. * 00649000
  654. * . IF THE REPLACE OR ADD OPTION IS SPECIFIED, FIND IS 00650000
  655. * CALLED TO SEARCH THE DIRECTORY FOR A MATCH TO THE 00651000
  656. * MEMBER IN THE USERLIST. IF A MATCH IS FOUND AND ADD 00652000
  657. * IS SPECIFIED, CONTROL IS RETURNED TO THE USER WITH A 00653000
  658. * 4 IN REGISTER 15. 00654000
  659. * 00655000
  660. * IF A MATCH IS NOT FOUND, FIND IS CALLED TO SEARCH THE 00656000
  661. * DIRECTORY FOR A MEMBER NAME OF ALL ZEROES. AFTER THE 00657000
  662. * SEARCH IS COMPLETE, NOTE 00658000
  663. * IS CALLED, AND A CHECK IS MADE TO MAKE SURE THERE IS 00659000
  664. * ROOM FOR THE NEW MEMBER, AND, IF NECESSARY, A NEW PDS 00660000
  665. * BLOCK ON THE DISK. IF THERE IS NOT ENOUGH ROOM, 00661000
  666. * CONTROL IS RETURNED TO THE USER WITH A TWELVE IN 00662000
  667. * REGISTER 15. IF THERE IS ENOUGH ROOM AND AN 00663000
  668. * UNSUCCESSFUL SEARCH FOR A NAME OF ZEROES WAS MADE, 00664000
  669. * DMSFRE IS CALLED TO GET ENOUGH 00665000
  670. * CORE FOR A PDS BLOCK AND 4 EXTRA BYTES. THEN ONE 00666000
  671. * IS ADDED TO THE NEWBLKS COUNT AND THE NEW PDS BLOCK IS 00667000
  672. * ZEROED OUT AND CHAINED TO THE PREVIOUS PDS BLOCK. IF 00668000
  673. * THE ALIAS BIT IS ON IN THE STOW LIST, THE PDS IS UPDATED 00669000
  674. * WITH THE TTR AND ALIAS BIT FROM THE STOW LIST AND CONTROL 00670000
  675. * IS RETURNED TO THE USER. IF THE ALIAS BIT IS NOT ON, 00671000
  676. * AN END OF DATA SET MARK (HEX '61FFFF61') IS WRITTEN AT 00672000
  677. * THE END OF THE MEMBER AND THE ITEM 00673000
  678. * NUMBER OF THE ITEM AFTER THE END OF DATA SET MARK IS 00674000
  679. * STORED IN DICTPTR. THE DIRECTORY ENTRY OR NEW PDS BLOCK IS 00675000
  680. * THEN UPDATED WITH THE MEMBER NAME AND ITEM NUMBER, 00676000
  681. * A TWO IS STORED IN 00677000
  682. * THE CHANGE BYTE, AND CONTROL IS RETURNED TO THE USER 00678000
  683. * WITH A ZERO IN REGISTER 15. 00679000
  684. * 00680000
  685. * . THE UPDATED DIRECTORY IS NOT WRITTEN OUT TO DISK 00681000
  686. * UNTIL THE DATA SET IS CLOSED. IF AN UPDATE PROGRAM 00682000
  687. * DOES NOT CLOSE A PDS DATA SET FOR SOME REASON, E.G, A 00683000
  688. * SYSTEM CRASH OR A RE-IPL, THE PDS DIRECTORY FOR THAT 00684000
  689. * FILE WILL BE SAVED IN A TEMPORARY FILE WITH THE SAME 00685000
  690. * FILETYPE AND A FILENAME OF $PDSTEMP. TO RESTORE THE 00686000
  691. * DIRECTORY TO THE ORIGINAL FILE THE UPDATE PROGRAM 00687000
  692. * MUST BE RUN AGAIN. 00688000
  693. * 00689000
  694. * 00690000
  695. * 00691000
  696. ********************************************************************* 00692000
  697. * *PDSSAVE (BPAM) 00693000
  698. * 00694000
  699. * FUNCTION: 00695000
  700. * 00696000
  701. * TO ENSURE THAT A BPAM PDS DIRECTORY IS NOT DESTROYED 00697000
  702. * DURING AN UPDATE AND IS SAVED AFTER IT. 00698000
  703. * 00699000
  704. * ENTRY CONDITIONS: 00700000
  705. * 00701000
  706. * SVC 203 FOLLOWED BY A HALFWORD OF -3 AND R0 LESS THAN 0. 00702000
  707. * 00703000
  708. * EXIT CONDITIONS: 00704000
  709. * 00705000
  710. * CONTROL IS RETURNED TO THE CALLING ROUTINE WITH THE 00706000
  711. * FOLLOWING CODE: 00707000
  712. * 00708000
  713. * SUCCESSFUL CALLING ROUTINE FCBPDS ENTRY 00709000
  714. * ---------- --------------- ------------ 00710000
  715. * YES DMSSBS ADDRESS OF DIRECTORY 00711000
  716. * NO DMSSBS ZERO 00712000
  717. * YES DMSSOP ZERO 00713000
  718. * NO DMSSOP ADDRESS OF DIRECTORY 00714000
  719. * 00715000
  720. * CALLS TO OTHER ROUTINES: 00716000
  721. * 00717000
  722. * FIND IN DMSSVT,DMSFRE,DMSBWR,DMSERS,DMSFNS,DMSUFD, DMSADL 00718000
  723. * 00719000
  724. * TABLES/WORKAREAS: 00720000
  725. * 00721000
  726. * THE IN-CORE PDS DIRECTORY IS SAVED BY PDSSAVE. 00722000
  727. * 00723000
  728. * REGISTER USAGE: 00724000
  729. * 00725000
  730. * R0, R1, R3, R4,, R6, R7, R9, R11, R14, R15 - WORK 00726000
  731. * R2 - DCB 00727000
  732. * R5 - PDSSECT DSECT 00728000
  733. * R8 - FCB 00729000
  734. * R10 - OPSECT DSECT 00730000
  735. * R12 - BASE 00731000
  736. * R13 - SAVE AREA 00732000
  737. * 00733000
  738. * 00734000
  739. * OPERATION: 00735000
  740. * 00736000
  741. * PDSSAVE GETS CONTROL FROM DMSSBS ON THE FIRST WRITE 00737000
  742. * TO A BPAM FILE AFTER OPEN AND FROM DMSSOP WHEN AN 00738000
  743. * UPDATED BPAM FILE IS CLOSED. WHEN CALLED BY DMSSBS, 00739000
  744. * PDSSAVE CALLS FIND TO 00740000
  745. * READ IN THE DIRECTORY. THE CHANGE BYTE IS CHECKED 00741000
  746. * AND, IF IT IS ON, CONTROL IS RETURNED 00742000
  747. * TO DMSSBS. IF THE CHANGE BYTE IS NOT ON, A $ IS 00743000
  748. * WRITTEN IN THE TEMPORARY INDICATOR OF THE DIRECTORY 00744000
  749. * HEADER RECORD OF THE ORIGINAL FILE, FIND IS CALLED TO 00745000
  750. * READ IN THE DIRECTORY, AND A NEW FILE IS CREATED WITH 00746000
  751. * THE SAME FILETYPE AND FILENAME OF $PDSTEMP. A 00747000
  752. * DIRECTORY HEADER RECORD AND A COPY OF THE IN-CORE 00748000
  753. * DIRECTORY IS WRITTEN INTO THIS FILE AND CONTROL IS 00749000
  754. * RETURNED TO DMSSBS. 00750000
  755. * 00751000
  756. * WHEN CALLED BY DMSSOP OR BLDL, PDSSAVE CHECKS THE 00752000
  757. * CHANGE BYTE AND, IF IT IS ZERO, FREES THE DIRECTORY 00753000
  758. * CORE, 00754000
  759. * SETS FCBPDS TO ZERO AND RETURNS TO THE CALLER. IF 00755000
  760. * THE CHANGE BYTE IS NOT ZERO, PDSSAVE WRITES THE 00756000
  761. * DIRECTORY 00757000
  762. * TO DISK. IF THERE ARE NO ERRORS, THE DIRECTORY 00758000
  763. * HEADER RECORD IS WRITTEN, DMSFRE IS CALLED 00759000
  764. * TO FREE THE DIRECTORY CORE, FCBPDS IS SET TO ZERO, 00760000
  765. * THE $PDSTEMP FILE IS ERASED AND CONTROL IS RETURNED 00761000
  766. * TO THE CALLER. IF THERE ARE ERRORS WRITING THE 00762000
  767. * DIRECTORY TO DISK, THE DIRECTORY HEADER RECORD IS NOT 00763000
  768. * WRITTEN AND THE $PDSTEMP FILE IS NOT ERASED. 00764000
  769. * 00765000
  770. * TABLE/RECORD FORMAT: THE FORMAT OF THE DIRECTORY 00766000
  771. * HEADER RECORD, THE DIRECTORY ON DISK AND THE IN-CORE 00767000
  772. * DIRECTORY WITH ITS CONTROL WORDS IS DESCRIBED BELOW. 00768000
  773. * 00769000
  774. * DIRECTORY BYTES HEADER RECORD CONTENTS 00770000
  775. * --------------- ---------------------- 00771000
  776. * 1 - 6 MACLIB INDICATOR 'DMSLIB' 00772000
  777. * 7 - 8 ITEM POINTER TO START OF DIRECTORY 00773000
  778. * 11 - 12 BYTE SIZE OF DIRECTORY 00774000
  779. * 13 - 80 REST OF RECORD NOT USED 00775000
  780. * 00776000
  781. * 00777000
  782. * 00778000
  783. * 00779000
  784. * DIRECTORY ON DISK 00780000
  785. * 00781000
  786. * 8 BYTES 2 BYTES 2 BYTES 00782000
  787. * ----------------------------------------------- 00783000
  788. * |NAME OF FIRST MEMBER |ITEM PTR| ZERO | 00784000
  789. * |NAME OF SECOND MEMBER|ITEM PTR| OR | 00785000
  790. * | | | ALIAS BIT | 00786000
  791. * |NAME OF NTH MEMBER |ITEM PTR| (X'0080') | 00787000
  792. * ----------------------------------------------- 00788000
  793. * 00789000
  794. * IN-CORE DIRECTORY AND CONTROL WORDS 00790000
  795. * 00791000
  796. * DIRNAME DS 3H USED FOR MACLIB INDICATOR 00792000
  797. * DIRPTR DS 1H ITEM POINTER TO START OF DIRECTORY 00793000
  798. * TEMPBYTE DS 1X TEMP INDICATOR 00794000
  799. * NEWBLKS DS 1X NO. OF NEW BLOCKS ADDED BY STOW 00795000
  800. * CORESIZE DS 1H BYTE SIZE OF ORIGINAL IN CORE DIRECTORY 00796000
  801. * PDSBLKSI DS 1H BYTE SIZE OF EACH PDS BLOCK 00797000
  802. * CHNGBYTE DC X'00' BYTE USED TO INDICATE DIRECTORY CHANGE 00798000
  803. * R15CODE DC X'00' USED TO SAVE REGISTER FIFTEEN. 00799000
  804. * PDSDIR DS 0F IN CORE DIRECTORY. 00800000
  805. * AT THE END OF THE IN-CORE DIRECTORY IS A 00801000
  806. * FULL WORD THAT IS EITHER ZERO OR A POINTER 00802000
  807. * TO THE NEXT PDS BLOCK. 00803000
  808. * 00804000
  809. * 00805000
  810. * 00806000
  811. * 00807000
  812. * PDS BLOCK 00808000
  813. * 00809000
  814. * (ADDED TO IN-CORE DIRECTORY BY STOW) 00810000
  815. * 00811000
  816. * BYTES CONTENTS 00812000
  817. * -------------------------------------------------- 00813000
  818. * | 1 TO N | BLOCK OF PDS ENTRIES | 00814000
  819. * | N+1 TO N+4 | ZERO OR POINTER TO NEXT PDS BLOCK | 00815000
  820. * -------------------------------------------------- 00816000
  821. * 00817000
  822. * N = NUMBER OF ENTRIES IN A BLOCK 00818000
  823. * 00819000
  824. * 00820000
  825. * 00821000
  826. * 00822000
  827. *. 00823000
  828. EJECT 00824000
  829. *********************************************************************** 00825000
  830. SPACE 5 00826000
  831. MACRO 00827000
  832. JTBL &SVC,&ADD 00828000
  833. DC AL1(&SVC),AL3(&ADD) 00829000
  834. MEND 00830000
  835. SPACE 2 00831000
  836. MACRO 00832000
  837. JOST &NUM,&LOC 00833000
  838. DC AL1(&NUM),VL3(&LOC) 00834000
  839. MEND 00835000
  840. EJECT 00836000
  841. DMSSVT START X'0' V0313 00837000
  842. SOSVCTR EQU * V0313 00838000
  843. USING SOSVCTR,R12 BASE ADDRESSS IN R12 00839000
  844. USING TEMPSPC,R1 @V305665 00840000
  845. USING FCBSECT,R8 00841000
  846. USING OPSECT,R10 00842000
  847. USING NUCON,R0 00843000
  848. USING SSAVE,R13 00844000
  849. L R13,CURRSAVE 00845000
  850. LR R3,R14 SAVE R14 IN "WORK REGISTER", @VM03083 00846000
  851. LA R0,TEMPLNT NUMBER OF DBL WORDS NEEDED, @VM03083 00847000
  852. DMSFREE DWORDS=(0),TYPCALL=BALR GET TEMPORARY SPACE @VM03083 00848000
  853. ST R3,SAVR14 SAVE RETURN REGISTER @VM03083 00849000
  854. ST R1,OSTEMP SAVE SPACE ADDRESS @V305665 00850000
  855. LM R0,R11,EGPR0 RESTORE REGS 00851000
  856. LM R14,R15,EGPR14 TO VALUE AT TIME OF SVC 00852000
  857. L R10,AOPSECT 00853000
  858. L R9,=A(SOSVCT2) GET ADDR OF SECOND BASE REG 00854000
  859. SR R3,R3 CLEAR WORK REGISTER @V305665 00855000
  860. IC R3,OLDPSW+3 GET SVC NUMBER @V305665 00856000
  861. LM R5,R7,SEARCH GET SEARCH ARGS 00857000
  862. CARE1 EQU * SEARCH FOR SVC ADDRESS 00858000
  863. CLM R3,1,0(R5) IS THIS THE SVC? @V305665 00859000
  864. BNE CARE2 NO 00860000
  865. L R4,0(,R5) FOUND SVC ADDRESS 00861000
  866. CLI 0(R5),203 IS SVC NO. 203 00862000
  867. BCR 8,R4 YES, THEN GO TO 203 ROUTINE 00863000
  868. OI OSSFLAGS,OSRESET SET TO RESET OS CHAINS AT EOJ 00864000
  869. BR R4 00865000
  870. CARE2 BXLE R5,R6,CARE1 LOOP THRU 00866000
  871. LM R5,R7,SEARCH1 GET SEARCH ARGUMENTS @V305665 00867000
  872. CARE3 EQU * @V305665 00868000
  873. CLM R3,1,0(R5) IS THIS THE SVC? @V305665 00869000
  874. BNE CARE4 BRANCH IF NOT @V305665 00870000
  875. OI OSSFLAGS,OSRESET SET TO RESET OS CHAINS AT EOJ@V305665 00871000
  876. L R1,OSTEMP GET SPACE ADDRESS @V305665 00872000
  877. L R3,SAVR14 PRESERVE RETURN REGISTER, @VM03083 00873000
  878. LA R0,TEMPLNT NUMBER OF DBL WORDS USED, @VM03083 00874000
  879. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR RETURN SPACE @VM03083 00875000
  880. LR R14,R3 RECOVER THE RETURN REGISTER @VM03083 00876000
  881. DROP R1 @V305665 00877000
  882. LM R0,R1,EGPR0 RESTORE REGISTERS @V305665 00878000
  883. L R12,0(,R5) FOUND SVC ADDRESS @V305665 00879000
  884. BR R12 @V305665 00880000
  885. CARE4 EQU * @V305665 00881000
  886. BXLE R5,R6,CARE3 LOOP THRU @V305665 00882000
  887. * 00883000
  888. * NOT FOUND 00884000
  889. * 00885000
  890. L R6,OSTEMP GET SPACE ADDRESS @V305665 00886000
  891. USING TEMPSPC,R6 @V305665 00887000
  892. L R5,TEXT3 GET MESSAGE ADDRESS @V305665 00888000
  893. DMSERR MF=(E,ERRMESS),TEXTA=(R5),NUM=121,LET=S, @V305665X00889000
  894. SUB=(DEC,(R3),HEX,(R3),HEXA,CALLER) @V305665 00890000
  895. DROP 6 @V305665 00891000
  896. LA R15,4 SET ERRROR CODE 00892000
  897. STC R4,48 00893000
  898. B CMSRET 00894000
  899. EJECT 00895000
  900. ********************************************************************** 00896000
  901. DEVTYPE EQU * 24-DETERMINE DEVICE CHARACTERISTECS 00897000
  902. * C(R0)=A(DEVAREA), C(R1)=A(DCBDDNAM) 00898000
  903. * IF C(R0)<0, DEVTAB WAS SPECIFIED 00899000
  904. * IF C(R1)<0, RPS WAS SPECIFIED (WILL BE IGNORED) 00900000
  905. * 00901000
  906. LTR R9,R0 TEST REG 0 00902000
  907. BM DEVTAB DEVTAB SPECIFIED 00903000
  908. * 00904000
  909. DV1 LA R6,DEVTABB GET ADDR OF DEVICE TBL ADDRESSES 00905000
  910. LA R4,20 SETUP DEFAULT FCBDEV @VA07200 00906000
  911. LA R15,4 SET CRT ERROR CODE 00907000
  912. L R8,FCBTAB GET ADDR OF 1ST FCB 00908000
  913. LTR R1,R1 WAS RPS SPECIFIED? @VA05153 00909000
  914. BNM CKLAST BRANCH IF NOT @VA05153 00910000
  915. LCR R1,R1 RECOMPLEMENT R1 @VA05153 00911000
  916. B CKLAST CHECK FOR LAST FCB IN CHAIN 00912000
  917. GETFCB CLC 0(8,R1),FCBDD IS THIS RIGHT FCB 00913000
  918. BE GETDEV YES, GO GET FCBDEV 00914000
  919. L R8,0(,R8) NO, GET NEXT FCB ADDR 00915000
  920. CKLAST LA R8,0(,R8) CLEAR HI ORDER BYTE @VA03767 00916000
  921. LTR R8,R8 IS THIS LAST FCB IN CHAIN? @VA03767 00917000
  922. BNZ GETFCB NO, GO CHECK FOR MATCH 00918000
  923. B DEVADDRS YES, GET TABLE ADDR 00919000
  924. GETDEV IC R4,FCBDEV GET DEVICE CODE 00920000
  925. DEVADDRS L R3,0(R6,R4) GET ADDR OF OS DEV CODE 00921000
  926. IC R4,0(R6,R4) GET DEV CODE LENGTH 00922000
  927. CH R4,EIGHT TWO WORD MOVE? 00923000
  928. BE DOIT1 YES, DISREGUARD 'DEVTAB' 00924000
  929. BL CMSRET MUST BE CRT, RETURN ERR CODE 00925000
  930. LTR R0,R0 WAS DEVTAB SPECIFIED? 00926000
  931. BM DOIT1 YES, FIVE WORD DEVICE TABLE 00927000
  932. LA R4,8 FORCE TWO WORD DEVICE TABLE 00928000
  933. DOIT1 BCTR R4,0 GET MVC COUNTER 00929000
  934. EX R4,MVC MOBE IT, BUSTER 00930000
  935. B CMSCLEAR RETURN 00931000
  936. * 00932000
  937. DEVTAB EQU * DEVTAB SPECIFIED. FIVE WORDS OF INFO 00933000
  938. LCR R9,R9 RECOMPLEMENT R9 00934000
  939. XC 0(20,R9),0(R9) CLEAR FIVE WORDS 00935000
  940. B DV1 00936000
  941. * TABLE OF DEVICE CHARACTERISTIC CONSTANTS 00937000
  942. CN1052 DC X'10000820',AL4(130) 00938000
  943. PR1403 DC X'10800808',AL4(120) 00939000
  944. PU2540 DC X'10000802',AL4(80) 00940000
  945. RD2540 DC X'10000801',AL4(80) 00941000
  946. TP24009 DC X'30008001',AL4(32767) 00942000
  947. DK2314 DC X'30C02008',AL4(7294) 00943000
  948. DC X'00CB00141C7E922D2D010216' 00944000
  949. MVC MVC 0(0,R9),0(R3) MOVE DEVICE CHARAC INTO DEVAREA 00945000
  950. DEVTABB EQU * 00946000
  951. DC X'14',AL3(DK2314) DUMMY 00947000
  952. DC X'08',AL3(PR1403) PTR 00948000
  953. DC X'08',AL3(RD2540) RDR 00949000
  954. DC X'08',AL3(CN1052) CON 00950000
  955. DC X'08',AL3(TP24009) TAPE 00951000
  956. DC X'14',AL3(DK2314) DSK 00952000
  957. DC X'08',AL3(PU2540) PUN 00953000
  958. DC F'0' CRT 00954000
  959. EJECT @VA04475 00955000
  960. ********************************************************************** 00956000
  961. RDJFCB EQU * 64-READ JOB FILE CONTROL BLOCK 00957000
  962. * C(R1) = V(DCB) 00958000
  963. L 2,0(,1) PICK UP LSTDCB ADDRESS 00959000
  964. ST R1,EGPR1 SAVE R1 @VA03361 00960000
  965. USING IHADCB,2 00961000
  966. L R3,DCBEXLST GET A(EXITLIST) 00962000
  967. LA R3,0(,R3) 00963000
  968. LTR R3,R3 WAS AN EXITLIST PROVIDED? 00964000
  969. BZ CMSCLEAR NOPE. RETURN NONVIOLENTLY @VA03361 00965000
  970. RDJF1 TM 0(3),X'07' IS THIS THE JFCB POINTER 00966000
  971. BO RDJF2 YES. 00967000
  972. TM 0(3),X'80' IS THIS THE END OF EXIT LIST? 00968000
  973. BO RDJF3 YES. 00969000
  974. LA 3,4(,3) INCREMENT EXIT LIST POINTER 00970000
  975. B RDJF1 ZIP THRU ENTIRE EXIT LIST 00971000
  976. RDJF2 L 3,0(,3) OBTAIN STORAGE ADDR OF JFCB 00972000
  977. LA R3,0(,R3) CLEAR HIGH ORDER BYTE 00973000
  978. LTR R3,R3 A(JFCB WORK AREA SUPPLIED)? 00974000
  979. BZ RDJF3 NOPE, ABEND 00975000
  980. MVI 0(3),X'00' 00976000
  981. MVC 1(175,3),0(3) ZERO JFCB 00977000
  982. TM DCBOFLGS,X'10' HAS DCB BEEN OPENED 00978000
  983. BO RDJF2B YES @V1D1709 00979000
  984. MVI 88(R3),X'01' SET BUFFERING TO ONE 00980000
  985. B RDJF2A GO FIND OUT IF DATA SET EXISTS 00981000
  986. RDJF2B EQU * @V1D1709 00982000
  987. L R8,DCBDEBAD GET SIMULATED DEB ADDR @V1D1709 00983000
  988. SH R8,=AL2(IHADEB-FCBINIT) GET FCB ADDR. @V1D1709 00984000
  989. LA R9,CKFILE LOAD BRANCH ADDR. @V1D1709 00985000
  990. RDJF2C MVC 0(52,R3),IHAJFCB MOVE JFCB INTO DCBAREA @VA03858 00986000
  991. MVI 18(R3),X'40' BLANK OUT UNUSED PART @V1D1709 00987000
  992. MVC 19(25,R3),18(R3) OF DSNAME FIELD @VA03858 00988000
  993. MVC 72(JFCLRECL+2-JFCBMASK,R3),JFCBMASK 00989000
  994. BR R9 @V1D1709 00990000
  995. RDJF2A MVI 87(R3),X'C0' INDICATE NEW FILE 00991000
  996. BAL R9,CKDLBL PERFORM SEARCH FOR VSAM DATA SET @V305174 00992000
  997. LA R1,CMSOP GET PLIST ADDR 00993000
  998. L R8,FCBFIRST GET PTR TO 1ST FCB 00994000
  999. B CKLSTFCB IS THIS LAST FCB 00995000
  1000. GETMATCH LA R9,CKFILE LOAD BRANCH ADDRESS @V1D1709 00996000
  1001. CLC DCBDDNAM(8),FCBDD DO DDNAMES MATCH? @V1D1709 00997000
  1002. BE RDJF2C YES, GO MOVE IN JFCB INFO. @V1D1709 00998000
  1003. L R8,0(,R8) GET ADDR OF NEXT FCB 00999000
  1004. CKLSTFCB LTR R8,R8 IS THIS LAST FCB 01000000
  1005. BNZ GETMATCH NO, CHECK FOR MATCH 01001000
  1006. MVC FILENAME(8),CMSNAME SET DEFAULT NAME 01002000
  1007. MVC FILEMODE(2),=CL2'A1' SET DEFAULT MODE 01003000
  1008. MVC FILETYPE(8),DCBDDNAM SET DEFAULT TYPE 01004000
  1009. MVC CMSOP(8),WSTATE SET OP CODE 01005000
  1010. B DOSTATE GO DO STATE 01006000
  1011. CKFILE LA R1,FCBOP GET ADDR OF FCB PLIST 01007000
  1012. MVC FCBOP(8),WSTATE SET OP CODE 01008000
  1013. CLI FCBDEV,FCBDSK IS DEVICE DISK? @V1D1709 01009000
  1014. BNE CMSCLEAR NO, THEN INDICATE NEW FILE @VA03361 01010000
  1015. DOSTATE SVC X'CA' DO STATE @V1D1709 01011000
  1016. DC AL4(CMSCLEAR) NO THERE, RETURN @VA03361 01012000
  1017. MVI 87(R3),X'40' INDICATE OLD FILE 01013000
  1018. LTR R2,R2 LAST LISTDCB ADDRESS? @VA03361 01014000
  1019. BM CMSCLEAR YES, GET OUT @VA03361 01015000
  1020. L R1,EGPR1 GET PREVIOUS POINTER @VA03361 01016000
  1021. LA R1,4(,R1) GET NEXT POINTER @VA03361 01017000
  1022. B RDJFCB START OVER AGAIN @VA03361 01018000
  1023. RDJF3 EQU * NO JFCB STORAGE POINTER FOUND. ERROR 01019000
  1024. ABEND X'240' ABEND WITH SYSTEM CODE OF HEX 240 01020000
  1025. * 01021000
  1026. * SEARCH DLBL CHAIN OF DOSCB'S - MATCH MEANS VSAM DATA SET 01022000
  1027. * 01023000
  1028. CKDLBL L R7,DOSFIRST GET POINTER TO FIRST DOSCB @V305174 01024000
  1029. LTR R7,R7 DO ANY EXIST ? @V305174 01025000
  1030. BCR 8,R9 NO, PROCESS FCB CHAIN @V305174 01026000
  1031. USING DOSSECT,R7 @V305174 01027000
  1032. DOSDDCK CLC DCBDDNAM(7),DOSDD DDNAMES MATCH ? @V305174 01028000
  1033. BE INDICVSM YES, GO TURN ON VSAM DSORG @V305174 01029000
  1034. L R7,DOSNEXT GET ADDRESS NEXT DOSCB @V305174 01030000
  1035. LA R7,0(,R7) CLEAR HIGH ORDER BYTE @V305174 01031000
  1036. LTR R7,R7 FINISHED ? @V305174 01032000
  1037. BCR 8,R9 YES, PROCESS FCB CHAIN @V305174 01033000
  1038. B DOSDDCK ELSE, LOOP @V305174 01034000
  1039. INDICVSM MVI 99(R3),VSAMIND SET JFCDSORG TO 'VSAM' @V305066 01035000
  1040. B CMSCLEAR RETURN TO CALLER @V305174 01036000
  1041. DROP R2,R7 @V305174 01037000
  1042. EJECT @VA04475 01038000
  1043. ********************************************************************** 01039000
  1044. * SVC 18 01040000
  1045. * 01041000
  1046. * CALLED BY FIND, BLDL, CLOSE OR THE FIRST WRITE 01042000
  1047. * TO A BPAM DATA SET. CONTENTS OF REG 0 AND REG 1 01043000
  1048. * DETERMINE THE ACTION TO BE TAKEN 01044000
  1049. * 01045000
  1050. *********************************************************************** 01046000
  1051. SPACE 01047000
  1052. SVC18 EQU * ENTRY FOR FIND AND BLDL 01048000
  1053. USING IHADCB,R2 01049000
  1054. USING PDSSECT,R11 01050000
  1055. MACLIBR EQU 32 01051000
  1056. LPR R2,R1 GET DCB ADDRESS 01052000
  1057. BZ CMSCLEAR IGNORE JOB LIB PROCESSING 01053000
  1058. L R8,DCBDEBAD GET ADDR OF DEB 01054000
  1059. SH R8,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 01055000
  1060. LR R9,R0 01056000
  1061. LTR R1,R1 IS THIS BLDL SVC? 01057000
  1062. BNL BLDL YES 01058000
  1063. SR R14,R14 RETURN TO USER AFTER FIND 01059000
  1064. * 01060000
  1065. * FINDD 01061000
  1066. * USED BY FIND, BLDL, STOW AND PDSSAVE ROUTINES TO READ 01062000
  1067. * IN AND SEARCH PDS DIRECTORIES FOR MEMBER NAMES. 01063000
  1068. * 01064000
  1069. FINDD SR R6,R6 SET FOR 1ST MACLIB NAME @V201122 01065000
  1070. MVI DCBRELAD+3,0 ZERO CONCATONATION NO. V0313 01066000
  1071. TM FCBINIT,FCBCATML IS CONCATONATION SPECIFIED 01067000
  1072. BO NEXTMAC YES, GET MACLIB NAME @V201122 01068000
  1073. TM FCBINIT,FCBOS IS THIS AN OS FCB @V201122 01069000
  1074. BO OSFNDDSK YES, THEN DO AN OS FIND @V201122 01070000
  1075. GETPDS L R11,FCBPDS GET ADDRESS OF PDS @V201122 01071000
  1076. LTR R11,R11 PDS DIRECTORY SPECIFIED @V201122 01072000
  1077. BNP GETDIR NO, GO GET IT 01073000
  1078. SRCHTBL LA R5,PDSDIR GET ADDRESS OF ENTRIES 01074000
  1079. LA R6,12 GET LENGTH OF ENTRIES 01075000
  1080. LH R7,CORESIZE GET CORESIZE OF ENTRIES 01076000
  1081. LTR R7,R7 ARE THERE ANY ENTRIES? @VA01953 01077000
  1082. BZ CHKSTOW SEE IF STOW ADDED ANY @VA01953 01078000
  1083. SETEND AR R7,R5 GET END OF DIRECTORY 01079000
  1084. BCTR R7,R0 SUBTRACT ONE 01080000
  1085. COMPLOOP TM FCBIOSW2,FCBMVPDS IS MOVE PDS SWITCH ON @V201122 01081000
  1086. BNO COMPARE NO, DO NORMAL COMPARE @V201122 01082000
  1087. CLC 0(8,R9),ZEROBIN IS SPECIFIED NAME = ZERO@V201122 01083000
  1088. BE SETMEMBR YES, GET NAME > ZERO @V201122 01084000
  1089. CLC 0(8,R5),0(R9) NAMES EQUAL @V201122 01085000
  1090. BNE BXLELOOP NO, CHECK NEXT NAME @V201122 01086000
  1091. TM FCBIOSW2,FCBMMV TST FOR MOVE MEMBER @VA03059 01087000
  1092. BNO BIXEL NO, THEN NOT FROM MOVE @VA03059 01088000
  1093. CLC 8(2,R5),8(R9) DUPLICATE MEMBER? @VA03059 01089000
  1094. BNE BXLELOOP YES, GET NEXT MEMBER @VA03059 01090000
  1095. BIXEL BXLE R5,R6,SETMEMBR GET NAME @VA03059 01091000
  1096. B NOTFOUND END OF LIST, SO NOT FOUN@V201122 01092000
  1097. SETMEMBR EQU * @VA05057 01093000
  1098. TM FCBIOSW2,FCBMMV IS THIS MOVE MEMBER? @VA05057 01094000
  1099. BZ MOVEMBR BRANCH IF NOT @VA05057 01095000
  1100. CLC 8(2,R5),8(R9) DUPLICATE ENTRY POINT? @VA05057 01096000
  1101. BE BIXEL BRANCH IF SO @VA05057 01097000
  1102. MOVEMBR EQU * @VA05057 01098000
  1103. MVC 0(8,R9),0(R5) NAME = NEW NAME @VA05057 01099000
  1104. CLC 0(8,R5),ZEROBIN NAME> ZEROES @V201122 01100000
  1105. BNH BXLELOOP NO, GET NEXT NAME @V201122 01101000
  1106. B FOUND INDICATE NEW NAME FOUND @V201122 01102000
  1107. COMPARE CLC 0(8,R5),0(R9) DO NAMES MATCH 01103000
  1108. BE FOUND YES 01104000
  1109. BXLELOOP BXLE R5,R6,COMPLOOP SETUP FOR NEXT COMPARE @V201122 01105000
  1110. CHKSTOW DS 0H @VA01953 01106000
  1111. CLC 0(4,R5),ZEROBIN DID STOW ADD ON ENTRIES 01107000
  1112. BE NOTFOUND NO 01108000
  1113. L R5,0(R5) YES, GET ADDRESS OF ENTRIES 01109000
  1114. LH R7,PDSBLKSI GET SIZE OF ENTRIES 01110000
  1115. B SETEND CONTINUE SEARCH 01111000
  1116. SPACE 2 01112000
  1117. * 01113000
  1118. * READ IN PDS DIRECTORY 01114000
  1119. * 01115000
  1120. GETDIR MVC FILENAME(32),FCBDSNAM FILL IN PLIST 01116000
  1121. ST R14,FCBOP SAVE RETURN ADDRESS 01117000
  1122. LH R5,DCBLRECL GET LRECL 01118000
  1123. CLC FCBCOUT(2),ONEBIN BLOCKING FACTOR= 1 V0277 01119000
  1124. BNE *+8 NO, USE LRECL V0277 01120000
  1125. LH R5,DCBBLKSI YES, USE BLKSIZE 01121000
  1126. LR R3,R5 SAVE LRECL 01122000
  1127. SR R4,R4 ZERO R4 01123000
  1128. D R4,TWELVE GET ENTRIES PER BLK 01124000
  1129. SR R3,R4 GET PDSBLKSI 01125000
  1130. LR R4,R3 SAVE IN REG 4 01126000
  1131. L R3,USAVEPTR GET FREE AREA 01127000
  1132. ST R3,FILEBUFF FILL IN ADDRESS 01128000
  1133. MVC FILEBYTE(4),TWELVE FILL IN LENGTH 01129000
  1134. MVC FILECOUT(2),ONEBIN FILL IN NO. OF ITEMS 01130000
  1135. LA R5,CKNAME SET ERROR RETURN 01131000
  1136. MVC FILEITEM(2),ONEBIN READ DICTIONARY 01132000
  1137. LA R1,PLIST HEADER 01133000
  1138. RDHEAD L R15,ARDBUF RECORD 01134000
  1139. BALR R14,R15 01135000
  1140. CH R15,NINE IS A FINIS NECESSARY? 01136000
  1141. BNE CKFOR1 CHECK FOR ERRORS 01137000
  1142. MVC CMSOP(8),WFINIS SET TO CALL FINIS 01138000
  1143. SVC X'CA' FINIS FILE 01139000
  1144. B RDHEAD GO READ HEADER 01140000
  1145. CKNAME LA R14,SETCODE SET RETURN ADDR 01141000
  1146. CLC 0(6,R3),MACLIB IS THIS A 1.0 MACLIB 01142000
  1147. BE CKTEMPSW YES, CONTINUE 01143000
  1148. LTR R11,R11 DID PDSSAVE CALL FINDD 01144000
  1149. BM BADPDS YES, THEN BAD MACLIB 01145000
  1150. CLC 3(3,R3),MACLIB+3 IS THIS A 3.1 MACLIB 01146000
  1151. BNE BADPDS NO, THEN PRINT ERR MSG 01147000
  1152. CKTEMPSW CLI 8(R3),C'$' IS THIS A GOOD DICTIONARY 01148000
  1153. BNE GETSIZE YES 01149000
  1154. MVC FILENAME(8),TEMP NO, GET TEMP FILE 01150000
  1155. B RDHEAD READ TEMP FILE 01151000
  1156. GETSIZE LH R7,10(R3) GET DICTIONARY SIZE 01152000
  1157. LA R0,27(R7) ADD CONTROL SPACE 01153000
  1158. SRL R0,3 GET NO. OF DOUBLE WORDS 01154000
  1159. DMSFREE DWORDS=(0),TYPCALL=BALR CALL FREE ROUTINE @VM03083 01155000
  1160. LR R11,R1 GET ADDRESS OF SPACE 01156000
  1161. TM FCBINIT,FCBCATML IS CONCATONATION SPECIFIED 01157000
  1162. BNO STFCBPDS NO 01158000
  1163. TM FCBINIT,FCBDOSL DOSLIB FCB ? @V305001 01159000
  1164. BNO MAC1 NO, BRANCH @V305001 01160000
  1165. ST R11,DOSDIRC(R6) SAVE PDS ADDRESS @V305001 01161000
  1166. B STFCBPDS BRANCH AROUND @V305001 01162000
  1167. MAC1 ST R11,MACDIRC(R6) SAVE PDS ADDRESS @V305001 01163000
  1168. STFCBPDS ST R1,FCBPDS SAVE DICTIONARY ADDRESS 01164000
  1169. LA R1,PLIST FILL IN PLIST 01165000
  1170. MVC DIRNAME(12),0(R3) SAVE HEADER INFO 01166000
  1171. MVI NEWBLKS,X'00' SET NO. OF NEW BLKS TO ZERO 01167000
  1172. SR R3,R3 ZERO REG 3 01168000
  1173. LR R6,R4 SET PDSBLKSI 01169000
  1174. MVC FILEITEM(2),DIRPTR GET START OF DICTIONARY 01170000
  1175. LA R4,PDSDIR GET START OF BUFFER 01171000
  1176. ST R6,FILEBYTE FILL IN PDSBLKSI 01172000
  1177. STH R6,PDSBLKSI SAVE PDSBLKSI 01173000
  1178. AR R7,R4 GET END OF ENTRIES 01174000
  1179. XC 0(4,R7),0(R7) ZERO DICTIONARY EXTENSION 01175000
  1180. LA R5,STBUFFAD SET UP ERROR RETURN 01176000
  1181. MVI CHNGBYTE,X'00' SET CHANGE BYTE 01177000
  1182. CLC FILENAME(8),TEMP IS THIS A TEMP FILE 01178000
  1183. BNE STBUFFAD NO 01179000
  1184. MVI CHNGBYTE,X'03' SET CHANGE BYTE 01180000
  1185. LA R15,2 PUT 2 IN REG 15 01181000
  1186. STH R15,FILEITEM POINT TO START OF TEMP PDS 01182000
  1187. BR R5 START READS 01183000
  1188. READBLK L R15,ARDBUF READ IN DICTIONARY 01184000
  1189. BALR R14,R15 BLOCKS 01185000
  1190. STH R3,FILEITEM ZERO ITEM NO. 01186000
  1191. BNZ CKFOR8 CHECK FOR ERRORS 01187000
  1192. STBUFFAD ST R4,FILEBUFF FILL IN BUFFER ADDRESS 01188000
  1193. BXLE R4,R6,READBLK CONTINUE READING 01189000
  1194. L R14,FCBOP RESTORE RETURN ADDRESS 01190000
  1195. C R7,FILEBYTE WAS LAST ITEM READ 01191000
  1196. BE SRCHTBL YES 01192000
  1197. SR R4,R6 NO 01193000
  1198. SR R7,R4 IS THERE ANYMORE 01194000
  1199. BZ SRCHTBL NO 01195000
  1200. ST R7,FILEBYTE YES 01196000
  1201. B READBLK DO ONE MORE READ 01197000
  1202. SPACE 2 01198000
  1203. * 01199000
  1204. * FOUND MEMBER NAME IN DIRECTORY 01200000
  1205. * 01201000
  1206. FOUND SR R15,R15 INDICATE NAME FOUND 01202000
  1207. LTR R14,R14 RETURN TO USER? 01203000
  1208. BCR 7,R14 NO, GO TO CALLING RTN 01204000
  1209. MVI DCBFDAD,X'00' TURN OFF POINT INDICATOR 01205000
  1210. MVC FCBITEM(2),8(R5) SET ITEM NO. 01206000
  1211. MVI DCBRELAD,0 SET 1ST BYTE OF DCBRELAD TO ZERO 01207000
  1212. MVC DCBRELAD+1(2),8(R5) SAVE ITEM NO. 01208000
  1213. B CMSCLEAR RETURN TO THE USER 01209000
  1214. SPACE 2 01210000
  1215. * 01211000
  1216. * MEMBER NAME NOT FOUND IN DIRECTORY 01212000
  1217. * 01213000
  1218. NOTFOUND LA R15,4 NAME NOT FOUND CODE 01214000
  1219. TM FCBINIT,FCBCATML IS CONCATONATION SPECIFIED 01215000
  1220. BO GETMAC YES 01216000
  1221. CKCALLER LTR R14,R14 RETURN TO USER? 01217000
  1222. BCR 7,R14 NO, GO TO CALLING RTN 01218000
  1223. ST R14,DCBRELAD ZERO DCBRELAD 01219000
  1224. B CMSRET RETURN TO THE USER 01220000
  1225. SPACE 2 01221000
  1226. * 01222000
  1227. * SET FCB TO SEARCH NEXT MACLIB PDS FOR MEMBER NAME 01223000
  1228. * 01224000
  1229. GETMAC SR R6,R6 CLEAR REG 6 @V201122 01225000
  1230. IC R6,DCBRELAD+3 GET CURRENT MACLIB PTR @V201122 01226000
  1231. LA R6,4(R6) GET NEXT MACLIB PTR @V201122 01227000
  1232. ST R6,DCBRELAD SAVE NEW MACLIB INCREMEN@V201122 01228000
  1233. NEXTMAC LA R5,0(R6,R6) GET MACLIB NAME INCREMEN@V201122 01229000
  1234. TM FCBINIT,FCBDOSL DOSLIB FCB ? @V305001 01230000
  1235. BNZ DOSLIB YES, BRANCH @V305001 01231000
  1236. LA R5,MACLIBL(R5) GET MACLIB NAME POINTER @V201122 01232000
  1237. L R11,MACDIRC(R6) GET PDS OR OS FST ADDR @V305001 01233000
  1238. B CHKEND BRANCH AROUND DOSLIB @V305001 01234000
  1239. DOSLIB LA R5,DOSLIBL(R5) GET DOSLIB NAME PTR @V305001 01235000
  1240. L R11,DOSDIRC(R6) GET PDS OR OS FST ADDR @V305001 01236000
  1241. CHKEND CLI 0(R5),FF END OF LIBRARY LIST ? @V305066 01237000
  1242. BE CKCALLER YES RETURN TO CALLER @V201122 01238000
  1243. LTR R11,R11 IS THIS AN OS DISK @V201122 01239000
  1244. BM OSCONCAT YES, DO AN OS FIND @V201122 01240000
  1245. NI FCBINIT,255-FCBOS TURN OFF FCB OS SWITCH @V201122 01241000
  1246. ST R11,FCBPDS FILL IN FCB PDS ADDRESS @V201122 01242000
  1247. MVC FCBDSNAM(8),0(R5) GET NEW MACLIB NAME @V201122 01243000
  1248. B GETPDS RETURN TO DO CMS FIND @V201122 01244000
  1249. * DO FIND ON OS DISK 01245000
  1250. OSCONCAT OI FCBINIT,FCBOS TURN ON FCB OS SWITCH @V201122 01246000
  1251. ST R11,FCBOSFST FILL IN OS FST ADDR @V201122 01247000
  1252. OSFNDDSK LR R11,R8 SET FCB ADDRESS IN R11 @V201122 01248000
  1253. LR R6,R14 SAVE RETURN REG @V201122 01249000
  1254. L R15,ADMSROS GET ADDRESS OF DMSROS @V201122 01250000
  1255. BAL R14,12(R15) GO TO OS FIND ROUTINE @V201122 01251000
  1256. LR R14,R6 RESTORE RETURN ADDRESS @V201122 01252000
  1257. CH R15,FOURBIN IS THIS A NOT FOUND ERRO@V201122 01253000
  1258. BE NOTFOUND YES, CHECK CONCAT BIT @V201122 01254000
  1259. B CKCALLER RETURN TO CALLER @V201122 01255000
  1260. SPACE 2 01256000
  1261. * 01257000
  1262. * CHECK ERRORS AND TAKE APPROPRIATE ACTION 01258000
  1263. * 01259000
  1264. CKFOR8 CH R15,EIGHT INCORRECT LENGTH? 01260000
  1265. BCR 8,R5 YES, CONTINUE 01261000
  1266. SETCODE LA R15,8 NO, THEN INDICATE I/O ERROR 01262000
  1267. PASSCODE L R14,FCBOP RESTORE RETURN ADDR P3056 01263000
  1268. B CKCALLER RETURN TO CALLER P3056 01264000
  1269. CKFOR1 CH R15,ONEBIN IS THIS A NEW DATA SET P3056 01265000
  1270. BNE CKFOR8 NO 01266000
  1271. LR R11,R3 YES 01267000
  1272. LA R7,16(R4) SETUP TO GET A PDSBLK 01268000
  1273. LR R5,R3 GET ADDR OF WORK AREA P3056 01269000
  1274. BAL R10,ADPDSBLK+4 GO GET A PDSBLK 01270000
  1275. L R10,AOPSECT RESTORE OPSECT REG V0277 01271000
  1276. LR R11,R5 GET ADDR OF PDS SECT 01272000
  1277. STH R4,CORESIZE FILL IN CORESIZE 01273000
  1278. STH R4,PDSBLKSI FILL IN PDSBLKSI 01274000
  1279. MVI DIRPTR+1,X'02' FILL IN DIRPTR 01275000
  1280. MVC DIRNAME(6),MACLIB FILL IN PDS INDICATOR 01276000
  1281. ST R5,FCBPDS FILL IN PDS ADDRESS @V201122 01277000
  1282. L R14,FCBOP GET RETURN ADDR P3056 01278000
  1283. TM FCBINIT,FCBCATML IS CONCATONATION SPECIFIED P3056 01279000
  1284. BNO ERR1RTRN NO, CHECK FOR PDSSAVE CALL P3056 01280000
  1285. TM FCBINIT,FCBDOSL DOSLIB FCB ? @V305001 01281000
  1286. BNO MAC3 NO, BRANCH @V305001 01282000
  1287. ST R5,DOSDIRC(R6) SAVE PDS ADDRESS @V305001 01283000
  1288. B NOTFOUND INDICATE MEM NOT FND @V305001 01284000
  1289. MAC3 ST R5,MACDIRC(R6) SAVE PDS ADDRESS @V305001 01285000
  1290. B NOTFOUND INDICATE MEMBER NOT FOUND P3056 01286000
  1291. ERR1RTRN LR R11,R5 SET PDS BASE REG @V201122 01287000
  1292. CLC FCBOP+1(3),=AL3(PDSSAVRT) CALL FROM PDSSAVE? @V201122 01288000
  1293. BNE NOTFOUND NO, GIVE NOT FOUND CODE @V201122 01289000
  1294. MVI CHNGBYTE,X'04' SET CHNGBYTE 01290000
  1295. LH R9,DCBLRECL GET RECORD LENGTH 01291000
  1296. CLC FCBCOUT(2),ONEBIN BLOCKING FACTOR= 1 V0277 01292000
  1297. BNE *+8 NO, USE LRECL V0277 01293000
  1298. LH R9,DCBBLKSI YES, USE BLKSIZE 01294000
  1299. ST R9,FILEBYTE SET BUFFER SIZE 01295000
  1300. ST R11,FILEBUFF SET BUFFER ADDR 01296000
  1301. LA R1,PLIST GET ADDR OF PLIST 01297000
  1302. L R15,AWRBUF GET ADDR OF WRBUF 01298000
  1303. BALR R14,R15 WRITE HEADER 01299000
  1304. BNZ SETCODE IF ERROR, THEN SET ERROR CODE 01300000
  1305. B PASSCODE RETURN TO CALLER P3056 01301000
  1306. SPACE 2 01302000
  1307. BADPDS EQU * @V305665 01303000
  1308. DMSERR NUM=033,LET=E,TEXTA=ERRMSG4, @V305665X01304000
  1309. SUB=(CHAR8A,(FCBDSNAM,18)) @V305665 01305000
  1310. BR R14 RETURN VIA CALLERS EXIT ADDR 01306000
  1311. EJECT @VA04475 01307000
  1312. *********************************************************************** 01308000
  1313. * 01309000
  1314. * BLDL 01310000
  1315. * USED TO TO HANDLE BLDL MACROES 01311000
  1316. * 01312000
  1317. *********************************************************************** 01313000
  1318. SPACE 01314000
  1319. BLDL EQU * P3056 01315000
  1320. LA R9,4(R9) MEMBER NAME 01316000
  1321. BAL R14,FINDD FIND MEMBER 01317000
  1322. L R14,OSTEMP GET SPACE ADDRESS @V305665 01318000
  1323. USING TEMPSPC,R14 @V305665 01319000
  1324. MVI R15CODE,X'00' 01320000
  1325. LR R4,R9 GET START OF MEMBER NAME 01321000
  1326. SH R4,FOURBIN GET START OF BLDL LIST 01322000
  1327. LH R3,2(R4) GET ENTRY LENGTH 01323000
  1328. LH R4,0(R4) GET NO. OF ENTRIES 01324000
  1329. SH R3,NINE GET NUMBER FOR CLEARTTR 01325000
  1330. B ZERODATA GO CLEAR ENTRY 01326000
  1331. GOTOFIND L R14,USAVEPTR GET USER SAVE AREA PTR @V201122 01327000
  1332. STM R3,R4,R3*4(R14) SAVE REG3 AND 4 @V201122 01328000
  1333. BAL R14,FINDD FIND NEXT MEMBER @V201122 01329000
  1334. L R14,USAVEPTR GET USER SAVE AREA PTR @V201122 01330000
  1335. LM R3,R4,R3*4(R14) RESTORE REG3 AND 4 @V201122 01331000
  1336. ZERODATA EX R3,CLEARTTR CLEAR BLDL ENTRY 01332000
  1337. CH R15,FOURBIN WAS MEMBER FOUND 01333000
  1338. BL FILLTTR YES 01334000
  1339. BH CMSRET 01335000
  1340. L R14,OSTEMP GET SPACE ADDRESS @V305665 01336000
  1341. STC R15,R15CODE NO, SAVE CODE 01337000
  1342. B CKFOREND GO CHECK FOR END 01338000
  1343. FILLTTR MVC 9(2,R9),8(R5) FILL IN TTR 01339000
  1344. MVC 11(1,R9),DCBRELAD+3 SET CONCATONATION NO. V0313 01340000
  1345. TM FCBINIT,FCBOS OS FCB? @V201122 01341000
  1346. BNO CKRELEAS NO, CHECK FOR RELEASE @V201122 01342000
  1347. LR R15,R3 GET ENTRY LENGTH - 9 @V201122 01343000
  1348. MVC 8(3,R9),8(R5) FILL IN OS TTR @V201122 01344000
  1349. SH R15,=H'5' SETUP FOR MOVE @V201122 01345000
  1350. BM CKFOREND MINIMUM LENGTH REQUESTED @VA10101 01345500
  1351. EX R15,MOVEINFO MOVE ENTRY TO BLDL LIST @V201122 01346000
  1352. B CKFOREND GET NEXT ENTRY @V201122 01347000
  1353. MOVEINFO MVC 13(0,R9),11(R5) MOVE ENTRY TO BLDL LIST @V201122 01348000
  1354. CKRELEAS EQU * CHECK RELEASE OF MACLIB @V201122 01349000
  1355. CLC DIRNAME(3),MACLIB IS THIS A 1.0 MACLIB 01350000
  1356. BNE CKFOREND NO, THEN DON'T MOVE ALIAS BIT 01351000
  1357. MVC 13(1,R9),11(R5) SET CONCATONATION NO. V0313 01352000
  1358. CKFOREND LA R9,9(R3,R9) GET NEXT MEMBER 01353000
  1359. BCT R4,GOTOFIND CONTINUE FILLING LIST 01354000
  1360. L R14,OSTEMP GET SPACE ADDRESS @V305665 01355000
  1361. SR R15,R15 CLEAR RETURN CODE REG @VA12189 01355500
  1362. IC R15,R15CODE 01356000
  1363. B CMSRET YES RETURN TO USER 01357000
  1364. DROP R14 @V305665 01358000
  1365. EJECT 1 01359000
  1366. *********************************************************************** 01360000
  1367. * 01361000
  1368. * PDSSAVE 01362000
  1369. * USED TO SAVE A PDS DIRECTORY IN A TEMP FILE IN CASE 01363000
  1370. * OF A SYSTEM CRASH DURING AN UPDATE 01364000
  1371. * 01365000
  1372. ********************************************************************** 01366000
  1373. SPACE 01367000
  1374. SVC203 EQU * ENTRY FOR PDSSAVE AND KEYSAVE 01368000
  1375. OI OSSFLAGS,OSRESET SET TO RESET OS CHAINS AT EOJ 01369000
  1376. PDSSAVE L R8,DCBDEBAD GET ADDR OF DEB 01370000
  1377. SH R8,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 01371000
  1378. AH R0,ONEBIN IS THIS A PDS CLOSE 01372000
  1379. BZ PDSCLOSE YES, GO TO PDSCLOSE 01373000
  1380. BP KEYSAV NO, GO SAVE KEYS 01374000
  1381. LA R15,4 SET ERROR CODE 01375000
  1382. TM FCBINIT,FCBCATML IS CONCATONATION SPECIFIED 01376000
  1383. BO CMSRET YES, RETURN TO THE USER V0277 01377000
  1384. LA R9,ZEROBIN CALL FIND TO 01378000
  1385. BAL R14,FINDD READ IN THE DIRECTORY 01379000
  1386. PDSSAVRT EQU * RETURN POINT FOR FIND CA@V201122 01380000
  1387. CH R15,EIGHT WAS THERE AN I/O ERROR 01381000
  1388. BE CMSRET YES, RETURN TO THE USER 01382000
  1389. MVC FCBITEM(2),DIRPTR SET ITEM NO. 01383000
  1390. MVI DCBRELAD,0 SET 1ST BYTE OF DCBRELAD TO ZERO 01384000
  1391. MVC DCBRELAD+1(2),DIRPTR FILL IN DCBRELAD 01385000
  1392. CLI CHNGBYTE,X'00' IS CHANGE BYTE ZERO? 01386000
  1393. BNE CMSCLEAR NO, RETURN TO THE USER 01387000
  1394. B GETPLIST YES 01388000
  1395. EJECT @VA04475 01389000
  1396. ********************************************************************** 01390000
  1397. * 01391000
  1398. * PDSCLOSE 01392000
  1399. * USED BY CLOSE TO SAVE A KEY OR PDS DIRECTORY AND FREE THE 01393000
  1400. * DIRECTORY CORE 01394000
  1401. * 01395000
  1402. *********************************************************************** 01396000
  1403. SPACE 1 01397000
  1404. USING TEMPSPC,R14 @V305665 01398000
  1405. PDSCLOSE EQU * @V305665 01399000
  1406. L R14,OSTEMP GET SPACE ADDRESS @V305665 01400000
  1407. MVI R15CODE,RC0 ZERO RETURN CODE @V305066 01401000
  1408. PDSCLOS2 L R11,FCBPDS GET PDS ADDRESS V0313 01402000
  1409. CKSYSLIB TM FCBINIT,FCBCATML IS CONCATIONATION SPECIFIED? 01403000
  1410. BO FREESYS YES, GO FREE CORE 01404000
  1411. CLI CHNGBYTE,X'00' IS CHANGE BYTE SET 01405000
  1412. BNE GETPLIST YES, SAVE PDS @V201122 01406000
  1413. CLI TEMPBYTE,C'$' WAS PDS SAVED @V201122 01407000
  1414. BNE FREEPDS NO, FREE PDS @V201122 01408000
  1415. MVI CHNGBYTE,5 SET CHANGE INDICATOR @V201122 01409000
  1416. GETPLIST EQU * @V305665 01410000
  1417. L R14,OSTEMP GET SPACE ADDRESS @V305665 01411000
  1418. MVI R15CODE,RC0 ZERO RETURN CODE @V305066 01412000
  1419. DROP R14 @V305665 01413000
  1420. MVI TEMPBYTE,0 SET NON TEMP INDICATOR 01414000
  1421. MVC FILENAME(32),FCBDSNAM FILL IN PLIST 01415000
  1422. LH R6,DCBLRECL GET DCBBLKSI 01416000
  1423. CLC FCBCOUT(2),ONEBIN BLOCKING FACTOR= 1 V0277 01417000
  1424. BNE *+8 NO, USE LRECL V0277 01418000
  1425. LH R6,DCBBLKSI YES, THEN USE BLKSIZE 01419000
  1426. ST R6,FILEBYTE FILL IN LENGTH 01420000
  1427. MVC FILECOUT(2),ONEBIN FILL IN NO. OF ITEMS 01421000
  1428. LH R3,DIRPTR GET START OF DIRECTORY 01422000
  1429. LA R1,PLIST GET PLIST ADDRESS 01423000
  1430. CLI CHNGBYTE,X'00' CALLED BY CLOSE OR BSAM? 01424000
  1431. BE NEWPDS BSAM, GO SETUP TEMP PLIST 01425000
  1432. WRDIR LA R4,PDSDIR GET DIRECTORY ADDRESS 01426000
  1433. STH R3,FILEITEM FILL IN ITEM NO. 01427000
  1434. SR R3,R3 ZERO REG 3 01428000
  1435. LH R6,PDSBLKSI GET PERBLKSI 01429000
  1436. LR R7,R4 01430000
  1437. AH R7,CORESIZE GET END OF DIRECTORY ADDRESS 01431000
  1438. CKBLKEND CR R4,R7 IS THIS END OF PDS BLK 01432000
  1439. BE CKSTOW YES, SEE IF STOW ADDED A BLK 01433000
  1440. WRBLK ST R4,FILEBUFF FILL IN BUFFER ADDR 01434000
  1441. L R15,AWRBUF WRITE DIRECTORY 01435000
  1442. BALR R14,R15 TO DISK 01436000
  1443. LA R14,*+8 GET RETURN ADDR 01437000
  1444. BNZ WRERR GO HANDLE ERR CODE IF SET 01438000
  1445. STH R3,FILEITEM ZERO ITEM NO. 01439000
  1446. BXLE R4,R6,CKBLKEND CONTINUE WRITING 01440000
  1447. B CKTEMP CHECK TEMP SWITCH 01441000
  1448. CKSTOW CLC 0(4,R7),ZEROBIN DID STOW ADD ENTRIES 01442000
  1449. BE EXTRBLK NO 01443000
  1450. L R4,0(R7) YES, GET ENTRY ADDR 01444000
  1451. LA R7,0(R6,R4) GET END ADDR 01445000
  1452. B WRBLK GO WRITE BLK 01446000
  1453. EXTRBLK CH R6,HEX48 IS BLKSIZE 72 01447000
  1454. BNE CKTEMP NO, CHECK TEMP SWITCH 01448000
  1455. CLC FILENAME(8),TEMP IS THIS TEMP FILE 01449000
  1456. BE CKTEMP GO UPDATE DIRECTORY 01450000
  1457. SR R4,R6 YES, THEN SET UP 01451000
  1458. AR R6,R6 TO WRITE EXTRA BLK 01452000
  1459. XC 0(76,R4),0(R4) SO THE MACLIB COMMAND 01453000
  1460. B WRBLK WILL WORK ON THIS PDS 01454000
  1461. CKTEMP CLC FILENAME(8),TEMP IS TEMP SWITCH ON 01455000
  1462. BNE WRHEADER NO, GO WRITE HEADER 01456000
  1463. BAL R4,UPDTDSK UPDATE DISK DIRECTORY 01457000
  1464. LA R1,PLIST RESTORE ADDR OF PLIST 01458000
  1465. MVC FILENAME(8),FCBDSNAM YES, WRITE HEADER 01459000
  1466. MVI TEMPBYTE,C'$' SET TEMP INDICATOR 01460000
  1467. B WRHEADER GO WRITE 01461000
  1468. NEWPDS LA R3,2 CHANGE DIRPTR 01462000
  1469. MVC FILENAME(8),TEMP FILL TEMP MODE 01463000
  1470. WRHEADER MVC FILEITEM(2),ONEBIN FILL ITEM NO. 01464000
  1471. LH R4,CORESIZE GET PDS SIZE 01465000
  1472. N R4,HALFWORD ZERO FIRST HALF 01466000
  1473. SR R15,R15 GET NO. OF NEW BLKS 01467000
  1474. IC R15,NEWBLKS 01468000
  1475. MH R15,PDSBLKSI GET SIZE OF PDS IN BYTES 01469000
  1476. AR R15,R4 ADD SIZE OF NEW BLKS 01470000
  1477. STH R15,CORESIZE SET CORE SIZE FOR HEADER 01471000
  1478. LA R15,DIRNAME GET BUFFER ADDRESS 01472000
  1479. ST R15,FILEBUFF FILL BUFFER ADDRESS 01473000
  1480. WRHEAD L R15,AWRBUF GET ADDR OF WRITE RTN 01474000
  1481. BALR R14,R15 WRITE BUFFER 01475000
  1482. LA R14,WRHEAD GET ADDR OF WRITE RTN 01476000
  1483. BNZ WRERR GO HANDLE ERR CODE IF SET 01477000
  1484. STH R4,CORESIZE SET CORESIZE OF MAIN PDS 01478000
  1485. CLC FILENAME(8),TEMP TEMP? FILE 01479000
  1486. BE WRDIR YES, CONTINUE WRITES 01480000
  1487. BAL R14,FINISFIL GO FINIS FILE 01481000
  1488. CLI CHNGBYTE,X'00' CALLED BY BSAM? 01482000
  1489. BE CMSCLEAR YES, RETURN 01483000
  1490. MVC FILENAME(8),TEMP ERASE TEMP FILE 01484000
  1491. L R15,AERASE 01485000
  1492. BALR R14,R15 01486000
  1493. SPACE 1 01487000
  1494. * FREE DIRECTORY CORE 01488000
  1495. SPACE 1 01489000
  1496. FREEPDS LA R5,CMSRET SET RETURN ADDRESS 01490000
  1497. XC FCBPDS(4),FCBPDS ZERO FCBPDS 01491000
  1498. FREECORE LTR R1,R11 GET DIRECTORY ADDRESS 01492000
  1499. BCR 13,R5 BNP GET NEXT ADDRESS @V201122 01493000
  1500. LH R6,PDSBLKSI GET PDSBLKSI 01494000
  1501. LH R7,CORESIZE GET CORESIZE 01495000
  1502. LA R7,16(R7) ADD CONTROL WORDS 01496000
  1503. FREEBLK LA R0,11(R7) GET SIZE FOR CALL TO FRET 01497000
  1504. L R7,0(R1,R7) GET EXTENSION ADDRESS 01498000
  1505. SRL R0,3 GET NO. OF DOUBLE WORDS 01499000
  1506. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR FRET ROUTINE @VM03083 01500000
  1507. SR R15,R15 SET RETURN CODE 01501000
  1508. USING TEMPSPC,R14 @V305665 01502000
  1509. L R14,OSTEMP GET SPACE ADDRESS @V305665 01503000
  1510. IC R15,R15CODE 01504000
  1511. C R7,ZEROBIN IS THERE A STOW EXTENSION 01505000
  1512. BCR 8,R5 NO 01506000
  1513. LR R1,R7 YES, GET ENTRY ADDRESS 01507000
  1514. LR R7,R6 GET BLKSI 01508000
  1515. B FREEBLK FREE BLOCKS 01509000
  1516. SPACE 1 01510000
  1517. * FREE MACLIB DIRECTORY CORE 01511000
  1518. SPACE 1 01512000
  1519. FREESYS LA R3,MACDIRC GET ADDR OF MAC PDS'S @V201122 01513000
  1520. LA R4,MACLIBL GET ADDR OF MAC NAME LIS@V201122 01514000
  1521. TM FCBINIT,FCBDOSL DOSLIB FCB ? @V305001 01515000
  1522. BNO MAC4 NO, BRANCH @V305001 01516000
  1523. LA R3,DOSDIRC GET ADDR DOS PDS'S @V305001 01517000
  1524. LA R4,DOSLIBL GET ADDR DOS NAME LIST @V305001 01518000
  1525. MAC4 BALR R5,R0 GET RETURN ADDRESS @V305066 01519000
  1526. L R11,0(R3) GET NEW DIRECTORY ADDRESS 01520000
  1527. L R14,OSTEMP GET SPACE ADDRESS @V305665 01521000
  1528. SR R15,R15 CLEAR RETURN REG V0313 01522000
  1529. IC R15,R15CODE SET ERROR CODE V0313 01523000
  1530. CLI 0(R4),X'FF' END OF MAC LIST? @V201122 01524000
  1531. BE CMSRET RETURN TO CALLER V0313 01525000
  1532. XC 0(4,R3),0(R3) ZERO PDS ADDR 01526000
  1533. LA R4,8(R4) INCREMENT BY 8 01527000
  1534. LA R3,4(R3) INCREMENT BY 4 01528000
  1535. B FREECORE GO FREE CORE 01529000
  1536. DROP R14 @V305665 01530000
  1537. SPACE 2 01531000
  1538. WRERR CH R15,NINE IS FILE OPEN FOR READS 01532000
  1539. BNE CMSRET NO, RETURN TO THE USER 01533000
  1540. FINISFIL MVC CMSOP(8),WFINIS CALL FINIS 01534000
  1541. SVC X'CA' 01535000
  1542. DC AL4(CMSRET) 01536000
  1543. BR R14 RETURN TO CALLER 01537000
  1544. SPACE 1 01538000
  1545. * UPDATE DISK DIRECTORY 01539000
  1546. SPACE 1 01540000
  1547. UPDTDSK L R15,VCADTLKP GET ADTLKP ADDRESS @VM03093 01541000
  1548. BALR R14,R15 GO GET ADT ADDR 01542000
  1549. LR R0,R1 GET ADT ADDR 01543000
  1550. LTR R15,R15 TEST REG 15 @VA09243 01544000
  1551. BCR 7,R4 NON ZERO,THEN RETURN 01545000
  1552. TM ADTFLG1-ADTSECT(R1),ADTFRW R/W DISK @VA09243 01545100
  1553. BO UPDISK YES , UPDATE THE DISK @VA09243 01545200
  1554. LA R15,ERR36 ERROR FOR WRITE ON R/O DISK @VA09243 01545300
  1555. BR R4 RETURN @VA09243 01545400
  1556. UPDISK DS 0H @VA09243 01545500
  1557. SR R1,R1 ZERO REG 1 @VA09243 01545600
  1558. L R15,ATFINIS GET ADDR OF TFINIS 01546000
  1559. BALR R14,R15 TFINIS FILE 01547000
  1560. LTR R15,R15 TEST FOR ERRORS 01548000
  1561. BCR 7,R4 NON ZERO, THEN RETURN 01549000
  1562. LR R1,R0 SET REG 1 POSITIVE 01550000
  1563. L R15,AUPDISK GO UPDATE DIRECTORY 01551000
  1564. BALR R14,R15 BRACH TO UPDISK 01552000
  1565. BR R4 RETURN 01553000
  1566. EJECT @VA04475 01554000
  1567. ********************************************************************* 01555000
  1568. * 01556000
  1569. * KEYSAV 01557000
  1570. * WHEN CALLED BY SOBDAM ... CREATE KEY FILES AND KEY TABLE 01558000
  1571. * WHEN CALLED BY SOOPCL ... RESTORE KEYS TO DATA FILE AND FREE 01559000
  1572. * THE KEY TABLE CORE 01560000
  1573. ********************************************************************* 01561000
  1574. SPACE 1 01562000
  1575. USING KEYSECT,R5 01563000
  1576. KEYSAV L R5,FCBKEYS GET ADDR OF KEY TABLE 01564000
  1577. SR R7,R7 CLEAR REG 7 OFR KEYLE V0016 01565000
  1578. LH R3,DCBBLKSI GET BLOCKSIZE V0016 01566000
  1579. IC R7,DCBKEYLE GET KEY LENGTH V0016 01567000
  1580. LR R6,R7 SAVE KEY LENGTH V0300 01568000
  1581. LA R9,1 SET KEYCOUT TO 1 V0300 01569000
  1582. SLL R7,8 MULTIPLY BY 256 V0016 01570000
  1583. CLI EGPR0+3,4 IS THIS CALL FROM DMSSBD V0016 01571000
  1584. BNE GETBLKSI NO, SAVE AND OR FREE TBLS V0016 01572000
  1585. LTR R5,R5 IS IT ZERO 01573000
  1586. BNZ CKDATA NO, THEN BYPASS GETMAIN V0016 01574000
  1587. SPACE 1 01575000
  1588. * SETUP KEY TABLE CONTROL BLOCK 01576000
  1589. SPACE 1 01577000
  1590. TM DCBRECFM,VAR IS RECFM FXD V0016 01578000
  1591. BO GETTBL NO, GO GET CORE V0016 01579000
  1592. SR R6,R6 PREPARE FOR DIVIDE V0016 01580000
  1593. DR R6,R3 GET NO. BLOCKS IN TABLE V0016 01581000
  1594. LTR R6,R6 IS THERE A REMAINDER V0016 01582000
  1595. BZ GETFXDSI NO, USE RESULT V0016 01583000
  1596. LA R7,1(R7) ADD ONE TO RESULT V0016 01584000
  1597. GETFXDSI LR R9,R7 SAVE RESULT AS KEYCOUT V0016 01585000
  1598. MR R6,R3 GET SIZE OF TABLE V0016 01586000
  1599. GETTBL LA R0,59(R7,R6) GET SIZE OF KEY TABLE V0300 01587000
  1600. SRL R0,3 GET NO. OF DOUBLE WORDS 01588000
  1601. DMSFREE DWORDS=(0),TYPCALL=BALR CALL FREE ROUTINE @VM03083 01589000
  1602. LR R5,R1 GET TABLE ADDR 01590000
  1603. ST R5,FCBKEYS FILL IN FCBKEYS 01591000
  1604. XC 0(56,R5),0(R5) CLEAR PLIST 01592000
  1605. MVC KEYTYPE(10),FCBDSTYP FILL IN FILE TYPE 01593000
  1606. ST R7,TBLLNGTH FILL IN TABLE LENGTH 01594000
  1607. MVI KEYCOUT+1,X'01' FILL IN BLOCKING FACTOR 01595000
  1608. LA R14,KEYTABLE GET ADDR OF KEY TABLE V0016 01596000
  1609. ST R14,KEYTBLAD SET TABLE ADDR IN PLIST V0016 01597000
  1610. MVC KEYLNGTH+3(1),DCBKEYLE SET KEY LENGTH V0016 01598000
  1611. STH R9,KEYCOUT SET BLOCKING FACTOR OF KEYSV0300 01599000
  1612. TM DCBRECFM,VAR IS RECFM FIXED V0016 01600000
  1613. BO CKDATA NO, THEN CONTINUE V0016 01601000
  1614. MVC DATAEND+2(2),FCBXTENT SET END OF DATA SET PTR V0016 01602000
  1615. CKDATA MVI KEYFORM,C'F' SET FOR FIXED KEY TABLES V0016 01603000
  1616. LA R1,FCBOP GET PLIST ADDR V0016 01604000
  1617. MVC KEYNAME(8),KEYTEMP SET TEMPORARY NAME V0300 01605000
  1618. L R4,ASTATE GET ADDR OF STATE 01606000
  1619. LR R15,R4 GET STATE ADDR 01607000
  1620. BALR R14,R15 CALL STATE TO GET FST ADDR 01608000
  1621. BNZ ZEROTBL NO DATA FILE, THEN RETURN 01609000
  1622. GETBLKSI LH R6,DCBBLKSI GET BLKSI 01610000
  1623. LR R3,R6 SAVE BLKSI 01611000
  1624. CR R6,R7 IS BLKSI LARGER THAN KEY TABLE 01612000
  1625. BNH CKREG0 NO THEN CONTINUE 01613000
  1626. LR R6,R7 REPLACE BLKSI WITH TABLE SIZE 01614000
  1627. CKREG0 CLI EGPR0+3,4 IS THIS A CALL FROM DMSSBD V0016 01615000
  1628. BE SETUP YES, THEN SETUP KEY FILE V0016 01616000
  1629. SPACE 1 01617000
  1630. * SETUP TO MOVE KEYS TO DATA FILE 01618000
  1631. SPACE 1 01619000
  1632. XC FCBKEYS(4),FCBKEYS CLEAR ADDR OF KEY TBL 01620000
  1633. LR R0,R3 GET FCB I/O SIZE 01621000
  1634. L R3,DATAEND GET END OF DATA PTR 01622000
  1635. AH R3,FCBCOUT ADD BLOCKING FACTOR 01623000
  1636. STH R3,FCBITEM POINT TO END DATA 01624000
  1637. LA R3,1(R3) GET PTR TO START OF KEYS 01625000
  1638. L R9,AWRBUF GET WRBUF ADDR 01626000
  1639. L R10,ARDBUF GET RDBUF ADDR 01627000
  1640. LA R1,KEYOP GET ADDR OF KEY PLIST 01628000
  1641. CLI KEYCHNG,X'00' WAS THE KEY TABLE CHANGED 01629000
  1642. BE RESET NO, CONTINUE 01630000
  1643. TM DCBRECFM,VAR RECFM VAR OR UND V0300 01631000
  1644. BO LASTTBL YES, NOT BLOCKED V0300 01632000
  1645. LH R14,KEYTBLNO GET TBL NO V0016 01633000
  1646. BCTR R14,R0 MINUS ONE FOR MULTIPLY V0016 01634000
  1647. MH R14,KEYCOUT GET RELATIVE ITEM NO. V0016 01635000
  1648. A R14,DATAEND GET ACTUAL ITEM NO. V0016 01636000
  1649. STH R14,KEYTBLNO SET ITEM NO. V0016 01637000
  1650. LASTTBL LR R15,R9 WRITE LAST KEY TABLE V0016 01638000
  1651. BALR R14,R15 SAVE THIS KEY TABLE 01639000
  1652. BNZ CKERRS CHECK ERRORS 01640000
  1653. RESET MVC KEYTBLNO(2),DATAEND+2 SET STARTING ITEM NO. V0300 01641000
  1654. CLC KEYNAME(8),KEYTEMP SHOULD FILE BE WRITTEN V0016 01642000
  1655. BNE FREETBL NO, GO FREE TABLES V0016 01643000
  1656. ST R3,DATAEND SET KEY POINTER NO. V0016 01644000
  1657. BAL R2,WREOF GO WRITE EOF INDICATOR 01645000
  1658. L R2,EGPR2 GET DCB BASE V0016 01646000
  1659. TM DCBRECFM,VAR IS RECFM FIXED V0016 01647000
  1660. BNO GETKEYS YES, THEN CONTINUE V0300 01648000
  1661. L R0,TBLLNGTH BLKSI= TABLE LENGTH V0016 01649000
  1662. LR R6,R0 BLKSI= TABLE LENGTH V0016 01650000
  1663. MVC KEYTBLNO(2),ONEBIN SET ITEM NO. TO ONE V0300 01651000
  1664. GETKEYS SR R3,R3 IGNORE $KEYSAVE PLIST V0300 01652000
  1665. BAL R2,RDWRKEY2 MOVE KEYS TO DATA FILE 01653000
  1666. MVC 0(8,R1),WFINIS FINIS DATA FILE 01654000
  1667. SVC X'CA' SVC TO FINIS 01655000
  1668. DC AL4(*+4) 01656000
  1669. L R15,AERASE GET ADDR OF ERASE 01657000
  1670. LA R1,KEYOP GET ADDR OF KEY PLIST 01658000
  1671. BALR R14,R15 ERASE $KEYTEMP FILE 01659000
  1672. MVC KEYNAME(8),SAVEFILE GET $KEYSAVE NAME 01660000
  1673. L R15,AERASE GET ADDR OF ERASE 01661000
  1674. BALR R14,R15 ERASE $KEYSAVE 01662000
  1675. FREETBL EQU * FREE KEY TABLE V0016 01663000
  1676. L R1,TBLLNGTH GET TABLE LENGTH 01664000
  1677. L R2,EGPR2 GET DCB ADDR V0300 01665000
  1678. SR R15,R15 DO NOT ADD IN KEYLENGTH V0300 01666000
  1679. TM DCBRECFM,VAR RECFM = VAR OR UND V0300 01667000
  1680. BNO SETSIZE NO, DON'T ADD KEYLENGTH V0300 01668000
  1681. L R15,KEYLNGTH ADD KEYLENGTH TO SIZE V0300 01669000
  1682. SETSIZE LA R0,59(R1,R15) GET SIZE OF KEY TABLES V0300 01670000
  1683. LR R1,R5 GET DSECT ADDR 01671000
  1684. SRL R0,3 GET NO. OF DOUBLE WORDS 01672000
  1685. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR FRET KEY TBL @VM03083 01673000
  1686. B CMSCLEAR RETURN 01674000
  1687. SPACE 1 01675000
  1688. * MOVE KEYS TO OR FROM DATA FILE 01676000
  1689. SPACE 1 01677000
  1690. RDWRKEY1 LTR R1,R3 IS $KEYSAVE PART OF MOVE 01678000
  1691. BZ RDWRKEY2 NO, CONTINUE 01679000
  1692. LR R15,R10 GET ADDR OF I/O RTN 01680000
  1693. BALR R14,R15 GO DO I/O 01681000
  1694. BNZ CKERRS CHECK ERRS 01682000
  1695. SR R15,R15 ZERO REG 15 P3056 01683000
  1696. STH R15,X'1A'(R1) ZERO ITEM NO. P3056 01684000
  1697. RDWRKEY2 LA R1,KEYOP GET ADDR OF KEY PLIST 01685000
  1698. LR R15,R10 GET I/O ADDR 01686000
  1699. BALR R14,R15 DO I/O 01687000
  1700. BNZ CKERRS CHECK ERRORS 01688000
  1701. SR R15,R15 ZERO REG 15 01689000
  1702. STH R15,KEYTBLNO ZERO KEYTBLNO. 01690000
  1703. MOVEKEYS LA R1,FCBOP GET ADDR OF FCB PLIST 01691000
  1704. L R4,KEYTBLAD GET KEY TABLE ADDR 01692000
  1705. LR R7,R4 SET KEY TABLE ADDR 01693000
  1706. A R7,TBLLNGTH GET ADDR OF END KEY TABLE 01694000
  1707. ST R0,FCBBYTE FILL IN BYTE SIZE 01695000
  1708. SETAD ST R4,FCBBUFF FILL IN BUFFER ADDR 01696000
  1709. BXH R4,R6,GETREST IS BUFFER FULL 01697000
  1710. RDWRDATA LR R15,R9 GET I/O ADDR 01698000
  1711. BALR R14,R15 DO I/O 01699000
  1712. BNZ CKERRS CHECK ERRORS 01700000
  1713. SR R15,R15 ZERO REG 15 01701000
  1714. STH R15,FCBITEM ZERO ITEM NO. 01702000
  1715. CLC KEYTABLE(4),EOF IS THIS AN EOF INDICATOR? 01703000
  1716. BCR 8,R2 YES, THEN RETURN TO CALLER 01704000
  1717. L R14,KEYLNGTH GET THE KEYLENGTH @VA01363 01705000
  1718. SLL R14,8 KEYLENGTH X 256 @VA01363 01706000
  1719. CR R6,R14 BLKSI = > TBLLENGTH @VA01363 01707000
  1720. BNL RDWRKEY1 YES, GET NEXT TBL @VA01363 01708000
  1721. B SETAD MOVE NEXT RECORD 01709000
  1722. GETREST SR R4,R6 GET AMOUNT LEFT IN BUFFER 01710000
  1723. SR R7,R4 01711000
  1724. BNP RDWRKEY1 IF FULL, MOVE ON 01712000
  1725. LTR R3,R3 SHOULD FCBBYTE BE CHANGED 01713000
  1726. BZ RDWRDATA NO 01714000
  1727. ST R7,FCBBYTE FILL IN RESIDUAL COUNT 01715000
  1728. B RDWRDATA GO WRITE KEYS 01716000
  1729. CKERRS CH R15,EIGHT IS ERROR BAD LENGTH 01717000
  1730. BE 4(R14) YES, CONTINUE 01718000
  1731. CH R15,TWELVE+2 IS THIS END OF FILE 01719000
  1732. BE ENDMOVE YES, THEN SET FOR RETURN 01720000
  1733. CH R15,NINE IS A FINIS NEEDED 01721000
  1734. BNE CMSRET NO, RETURN WITH ERROR CODE 01722000
  1735. MVC 0(8,R1),WFINIS GET FINIS SVC 01723000
  1736. SVC X'CA' SVC TO FINIS 01724000
  1737. DC AL4(*+4) 01725000
  1738. SH R14,FOURBIN DO I/O AGAIN 01726000
  1739. BCR 15,R14 DO I/O AGAIN 01727000
  1740. ENDMOVE C R9,ARDBUF IS THIS DURING CLOSE 01728000
  1741. BCR 8,R2 NO, RETURN 01729000
  1742. CLC KEYTABLE(4),EOF EOF ALREADY @VA09243 01729300
  1743. BE CMSRET YES, GIVE UP @VA09243 01729600
  1744. WREOF L R15,EGPR2 GET DCB BASE V0016 01730000
  1745. USING IHADCB,R15 V0016 01731000
  1746. LH R0,DCBBLKSI GET BLOCKSIZE V0016 01732000
  1747. DROP R15 V0016 01733000
  1748. USING IHADCB,R2 V0016 01734000
  1749. MVC KEYTABLE(4),EOF SET EOF INDICATOR V0016 01735000
  1750. MVC KEYTABLE+4(2),FCBXTENT SET FCBXTENT V0016 01736000
  1751. MVC KEYTABLE+6(2),=CL2'KY' SET INDICATOR FOR PTR V0016 01737000
  1752. MVC KEYTABLE+8(2),DATAEND+2 SET POINTER TO KEYS V0016 01738000
  1753. B MOVEKEYS WRITE EOF RECORD V0016 01739000
  1754. SPACE 1 01740000
  1755. * SETUP TO CREATE KEYS FILES 01741000
  1756. SPACE 1 01742000
  1757. SETUP LR R0,R6 SET BUFFER LENGTH P3056 01743000
  1758. L R3,FCBBUFF GET FST PTR 01744000
  1759. MVC FCBITEM(2),26(R3) POINT TO LAST DATA ITEM 01745000
  1760. MVC DATAEND+2(2),26(R3) POINT TO LAST DATA ITEM 01746000
  1761. LA R3,PLIST GET ADDR OF PLIST 01747000
  1762. MVI KEYTBLNO+1,X'01' SET KEY FILE PTRS AT 1 01748000
  1763. MVC FILENAME(8),SAVEFILE FILL IN $KEYSAVE NAME 01749000
  1764. MVC FILETYPE(24),KEYTYPE GET REST OF PLIST 01750000
  1765. LR R1,R3 GET PLIST ADDR 01751000
  1766. LR R15,R4 GET STATE ADDR 01752000
  1767. BALR R14,R15 SEE IF FILE EXISTS 01753000
  1768. MVC FILEBUFF(4),KEYTBLAD RESTOR KEY TABLE ADDR 01754000
  1769. L R9,ARDBUF GET READ PTRS 01755000
  1770. L R10,AWRBUF GET WRITE PTRS 01756000
  1771. BNZ RDKEYPTR FILE NOT THERE 01757000
  1772. LR R8,R3 SET FCB DSECT REG TO CMSOP ADDR 01758000
  1773. SH R8,=H'16' ALIGN CMSOP SAME AS FCBOP 01759000
  1774. LR R6,R7 GET TABLE LENGTH 01760000
  1775. SR R3,R3 ZERO REG 3 01761000
  1776. B GOMOVE GO CREATE $KEYSAVE FILE 01762000
  1777. RDKEYPTR BAL R2,MOVEKEYS READ IN PTR TO KEYS 01763000
  1778. L R2,EGPR2 GET DCB BASE V0016 01764000
  1779. CLC KEYTABLE+4(4),SAVEFILE IS THIS A KEY PTR 01765000
  1780. BNE CKFORKY NO,CHECK FOR NEW INDICATOR V0016 01766000
  1781. L R15,KEYTABLE+8 GET POINTER TO KEYS V0016 01767000
  1782. B SETFORRD GO GET KEYS V0016 01768000
  1783. CKFORKY LA R15,8 SET ERROR CODE V0016 01769000
  1784. CLC KEYTABLE+6(2),=CL2'KY' IS THIS A VALID KEY PTR V0016 01770000
  1785. BNE CMSRET NO, RETURN WITH ERROR CODE V0016 01771000
  1786. LH R15,KEYTABLE+8 GET POINTER TO KEYS V0016 01772000
  1787. LH R0,KEYTABLE+4 GET FCBXTENT V0016 01773000
  1788. STH R0,FCBXTENT SET FCBXTENT V0016 01774000
  1789. AH R0,FCBCOUT POINT TO EOF RECORD V0016 01775000
  1790. AH R0,ONEBIN POINT TO KEYS V0016 01776000
  1791. STH R0,DATAEND+2 SET END OF DATA NO. V0016 01777000
  1792. LR R6,R7 USE TABLE LENGTH FOR BLKSI V0016 01778000
  1793. TM DCBRECFM,VAR IS RECFM FIXED V0016 01779000
  1794. BNO NOTEMP YES, DON'T USE TEMP FILE V0016 01780000
  1795. STH R15,DATAEND+2 SET PTR TO KEYS V0016 01781000
  1796. TM IOBIOFLG,IOBIN IS THIS A READ V0016 01782000
  1797. BNO SETFORRD NO, SAVE KEY TBLS V0016 01783000
  1798. MVC KEYFORM(1),FCBFORM SET FORMAT OF KEY TBLS V0016 01784000
  1799. STH R15,DATAEND+2 SET PTR TO KEYS V0016 01785000
  1800. NOTEMP MVC KEYNAME(8),FCBDSNAM READ KEYS IN DATA FILE V0016 01786000
  1801. B ZEROTBL RETURN TO DMSSBD V0016 01787000
  1802. SETFORRD N R15,HALFWORD CLEAR 1ST HALF EOF POINT V0016 01788000
  1803. STH R15,FCBITEM POINT TO KEYS 01789000
  1804. BCTR R15,R0 01790000
  1805. SH R15,FCBCOUT SET PTR TO LAST DATA ITEM 01791000
  1806. TM DCBRECFM,VAR IS RECFM FIXED V0016 01792000
  1807. BNO SETTBLNO YES, CONTINUE V0300 01793000
  1808. ST R15,DATAEND SAVE END OF DATA PTR 01794000
  1809. B GOMOVE MOVE KEYS V0300 01795000
  1810. SETTBLNO MVC KEYTBLNO(2),DATAEND+2 SET START OF KEY TABLE V0300 01796000
  1811. GOMOVE LR R0,R6 SET BUFFER LENGTH P3056 01797000
  1812. BAL R2,MOVEKEYS GO MOVE KEYS P3056 01798000
  1813. LTR R1,R3 WAS REG 3 ZERO 01799000
  1814. BZ ZEROTBL YES, THEN WE'RE THROUGH 01800000
  1815. BAL R4,UPDTDSK GO UPDATE DIRECTORY 01801000
  1816. ZEROTBL XC KEYTBLNO(2),KEYTBLNO CLEAR KEY TABLE NO. V0016 01802000
  1817. B CMSCLEAR RETURN 01803000
  1818. DROP R5 01804000
  1819. EJECT @VA04475 01805000
  1820. *********************************************************************** 01806000
  1821. * 01807000
  1822. * STOW 01808000
  1823. * USED TO UPDATE A PDS DIRECTORY 01809000
  1824. * CONTENTS OF R0 AND R1 DETERMINE ACTION TO BE TAKEN 01810000
  1825. * 01811000
  1826. *********************************************************************** 01812000
  1827. SPACE 01813000
  1828. SVC21 EQU * 01814000
  1829. LTR R1,R1 IS A DELETE OR ADD SPECIFIED 01815000
  1830. BL CKREPLAC NO, NEITHER IS SPECIFIED 01816000
  1831. LTR R0,R0 IS A DELETE SPECIFIED 01817000
  1832. BL DELETE YES 01818000
  1833. LA R14,ADD SET UP FOR ADD 01819000
  1834. FINDMEM LPR R9,R0 GET ADDRESS OF MEMBER 01820000
  1835. LPR R2,R1 GET DCB ADDRESS 01821000
  1836. L R8,DCBDEBAD GET ADDR OF DEB 01822000
  1837. SH R8,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 01823000
  1838. B FINDD FIND MEMBER 01824000
  1839. SPACE 2 01825000
  1840. CKREPLAC LTR R0,R0 IS CHANGE SPECIFIED 01826000
  1841. BL CHANGE YES 01827000
  1842. REPLAC BAL R14,FINDMEM FIND MEMBER 01828000
  1843. USING TEMPSPC,R14 @V305665 01829000
  1844. L R14,OSTEMP GET SPACE ADDRESS @V305665 01830000
  1845. MVI R15CODE,X'00' 01831000
  1846. CH R15,FOURBIN CHECK FOR ERRORS 01832000
  1847. BH STOWERR I/O ERROR 01833000
  1848. BL NOTEITEM NO ERRORS 01834000
  1849. MVI R15CODE,X'08' SET ERROR CODE 01835000
  1850. ADDREPL LR R3,R9 SAVE MEMBER PTR 01836000
  1851. LA R9,ZEROBIN FIND ENTRY SPACE 01837000
  1852. BAL R14,FINDD CALL FINDD 01838000
  1853. LR R9,R3 RESTORE MEMBER PTR 01839000
  1854. NOTEITEM LH R4,FCBITEM GET FCBITEM 01840000
  1855. N R4,HALFWORD 01841000
  1856. AH R4,FCBCOUT 01842000
  1857. LA R1,4(R4) SET FOR MAX CK 01843000
  1858. LH R7,CORESIZE GET CORESIZE 01844000
  1859. LR R3,R7 GET CORESIZE 01845000
  1860. TM 11(R9),X'80' IS THIS AN ALIAS STOW @V201122 01846000
  1861. BO CKSPACE GO GET ENTRY SPACE @V201122 01847000
  1862. SR R6,R6 01848000
  1863. D R6,PDSBLKSI GET SIZE OF PDS IN BLKS 01849000
  1864. AR R1,R7 ADD TO CURRENT ITEM PTR 01850000
  1865. SR R7,R7 GET NO. OF NEW BLKS ADDED 01851000
  1866. IC R7,NEWBLKS 01852000
  1867. AR R1,R7 ADD NO. OF NEW BLKS 01853000
  1868. C R1,MAXSIZE IS FILE FULL 01854000
  1869. BNL TOBIGERR YES 01855000
  1870. CH R4,DIRPTR SHOULD DIRECTORY MOVE UP? 01856000
  1871. BNH CKSPACE NO, CONTINUE 01857000
  1872. STH R4,DIRPTR SAVE NEW DIRECTORY PTR 01858000
  1873. CKSPACE LTR R15,R15 WAS ENTRY SPACE FOUND? 01859000
  1874. BZ ADDENTRY YES 01860000
  1875. BAL R10,ADPDSBLK NO 01861000
  1876. ADDENTRY MVC 0(8,R5),0(R9) ADD MEMBER NAME 01862000
  1877. LA R14,STOWERR SET RETURN FOR BADPDS 01863000
  1878. CLC DIRNAME(6),MACLIB IS THIS A 1.0 MACLIB 01864000
  1879. BNE BADPDS NO, THEN PRINT ERR MSG 01865000
  1880. TM 11(R9),X'80' IS ALIAS BIT SET 01866000
  1881. BNO SETNAME NO, WRITE EOF INDICATOR 01867000
  1882. MVI 10(R5),0 ZERO THIS BYTE 01868000
  1883. MVI 11(R5),X'80' SET ALIAS BYTE 01869000
  1884. MVC 8(2,R5),9(R9) SET MEMBER ITEM NO. 01870000
  1885. B STOWRET RETURN TO CALLER 01871000
  1886. SETNAME MVC 8(2,R5),DCBRELAD+1 FILL IN ITEM NO. 01872000
  1887. MVC 8(3,R9),DCBRELAD SET TTR IN USER STOW LIST 01873000
  1888. MVI CHNGBYTE,X'03' SET CHANGE BYTE 01874000
  1889. LA R1,FCBOP GET ADDR OF PLIST 01875000
  1890. L R14,OSTEMP GET SPACE ADDRESS @V305665 01876000
  1891. MVC FEOF,EOF MOVE EOF IND. TO BUFFER @V305665 01877000
  1892. LA R14,FEOF GET ADDRESS OF FEOF @V305665 01878000
  1893. ST R14,FCBBUFF SAVE FOR WRBUF @V305665 01879000
  1894. L R15,AWRBUF WRITE /* TO 01880000
  1895. BALR R14,R15 INDICATE END OF FILE 01881000
  1896. BNZ STOWERR CHECK FOR ERRORS 01882000
  1897. OI DCBCIND2,X'80' TURN ON STOW BIT @VA04367 01883000
  1898. STH R4,FCBITEM UPDATE ITEM NO. 01884000
  1899. MVC DCBRELAD+1(2),FCBITEM SET POINTER FOR NEXT MEMBER 01885000
  1900. SH R4,FCBCOUT COMPUTE MEMBER SIZE 01886000
  1901. SH R4,8(R5) 01887000
  1902. STH R15,10(R5) ZERO ALIAS BYTE 01888000
  1903. STOWRET EQU * @V305665 01889000
  1904. L R14,OSTEMP GET SPACE ADDRESS @V305665 01890000
  1905. IC R15,R15CODE GET RETURN CODE @V305665 01891000
  1906. B CMSRET RETURN TO USER 01892000
  1907. SPACE 2 01893000
  1908. ADPDSBLK LH R7,PDSBLKSI GET PDSBLKSI 01894000
  1909. LA R0,11(R7) ADD CONTROL WORD 01895000
  1910. SRL R0,3 GET NO. OF DOUBLE WORDS 01896000
  1911. DMSFREE DWORDS=(0),TYPCALL=BALR CALL FREE ROUTINE @VM03083 01897000
  1912. SR R3,R3 GET NO. OF NEW BLKS 01898000
  1913. IC R3,NEWBLKS 01899000
  1914. LA R3,1(R3) ADD ONE TO NO. OF BLKS 01900000
  1915. STC R3,NEWBLKS SAVE NO. OF NEW BLKS 01901000
  1916. ST R1,0(R5) ADD BLOCK TO DIRECTORY 01902000
  1917. LR R5,R1 SET UP TO 01903000
  1918. LA R7,4(R1,R7) ZERO OUT THE 01904000
  1919. CLEAR LA R6,256 GET NO. 256 01905000
  1920. SR R1,R6 SUBTRACT 256 01906000
  1921. SR R7,R6 SUBTRACT 256 01907000
  1922. B BXLE NEW BLOCK 01908000
  1923. EXECUTE XC 0(256,R1),0(R1) CLEAR 256 BYTES 01909000
  1924. BXLE BXLE R1,R6,EXECUTE 01910000
  1925. AR R7,R6 GET END OF TABLE 01911000
  1926. SR R7,R1 01912000
  1927. BCR 13,R10 BNP NO, RETURN 01913000
  1928. BCTR R7,R0 SUBTRACT ONE 01914000
  1929. EX R7,CLEARBLK CLEAR EXTRA BYTES 01915000
  1930. BCR 15,R10 RETURN 01916000
  1931. SPACE 2 01917000
  1932. DELETE BAL R14,FINDMEM FIND MEMBER 01918000
  1933. AR R15,R15 ANY ERRORS? 01919000
  1934. BNZ CMSRET YES, RETURN 01920000
  1935. XC 0(12,R5),0(R5) CLEAR ENTRY 01921000
  1936. B CMSCLEAR RETURN TO THE USER 01922000
  1937. SPACE 2 01923000
  1938. CHANGE BAL R14,FINDMEM FIND MEMBER 01924000
  1939. AR R15,R15 ANY ERRORS? 01925000
  1940. BNZ CMSRET YES RETURN 01926000
  1941. LR R3,R5 01927000
  1942. LA R9,8(R9) SEE IF NEW MEMBER 01928000
  1943. BAL R14,FINDD IS ALREADY IN DIRECTORY 01929000
  1944. LTR R15,R15 ANY ERRORS? 01930000
  1945. BZ ADDERR YES, RETURN 01931000
  1946. MVC 0(8,R3),0(R9) CHANGE ENTRY 01932000
  1947. B CMSCLEAR RETURN TO THE USER 01933000
  1948. SPACE 2 01934000
  1949. ADD EQU * @V305665 01935000
  1950. L R14,OSTEMP GET SPACE ADDRESS @V305665 01936000
  1951. MVI R15CODE,RC0 WAS MEMBER IN DIRECTORY? @V305066 01937000
  1952. CH R15,FOURBIN IF NOT, 01938000
  1953. BE ADDREPL CONTINUE 01939000
  1954. BH STOWERR OTHERWISE RETURN ERROR 01940000
  1955. ADDERR LA R15,4 RETURN ADD ERROR CODE 01941000
  1956. B CMSRET 01942000
  1957. SPACE 2 01943000
  1958. TOBIGERR LA R15,12 DIRECTORY FULL ERROR CODE 01944000
  1959. B CMSRET 01945000
  1960. STOWERR LA R15,16 I/O ERROR CODE 01946000
  1961. B CMSRET 01947000
  1962. DROP R14 @V305665 01948000
  1963. EJECT 01949000
  1964. * CONSTANTS 01950000
  1965. SPACE 1 01951000
  1966. DS 0F 01952000
  1967. ZEROBIN DC XL8'00' 01953000
  1968. ONEBIN DC XL2'0001' 01954000
  1969. FOURBIN DC XL2'0004' 01955000
  1970. EIGHT DC XL2'0008' 01956000
  1971. NINE DC XL2'0009' 01957000
  1972. TWELVE DC F'12' 01958000
  1973. WSTATE DC CL8'STATE' @V305665 01959000
  1974. TEMP DC CL8'$PDSTEMP' 01960000
  1975. KEYTEMP DC CL8'$KEYTEMP' 01961000
  1976. SAVEFILE DC CL8'$KEYSAVE' 01962000
  1977. MACLIB DC CL6'DMSLIB' 1.0 LIBRARY INDICATOR 01963000
  1978. SPACE 1 01964000
  1979. HEX48 DC XL2'0048' @VM03083 01965000
  1980. MAXSIZE DC F'65535' 01966000
  1981. HALFWORD EQU MAXSIZE 01967000
  1982. FF EQU X'FF' @V305066 01968000
  1983. TWO EQU 2 @V305066 01969000
  1984. HEX00 EQU X'00' @V305066 01970000
  1985. ERR8 EQU 8 @V305066 01971000
  1986. ERR36 EQU 36 WRITE TO R/O DISK ERROR @VA09243 01971500
  1987. RC0 EQU 0 @V305066 01972000
  1988. CON1 EQU 1 @V305066 01973000
  1989. P EQU C'P' @V305066 01974000
  1990. RC4 EQU 4 @V305066 01975000
  1991. VSAMIND EQU X'08' @V305066 01976000
  1992. HEXF0 EQU X'F0' @V305066 01977000
  1993. CLEARBLK XC 0(0,R1),0(R1) 01978000
  1994. CLEARTTR XC 8(R0,R9),8(R9) 01979000
  1995. EOF DC XL4'61FFFF61' EOF MARKER 01980000
  1996. WFINIS DC CL8'FINIS' 01981000
  1997. SEARCH DS 0F SVC SEARCH ARGUMENTS 01982000
  1998. DC A(SVCTABBG) 01983000
  1999. DC F'4' 01984000
  2000. DC A(SVCTABED) 01985000
  2001. SEARCH1 DS 0F VCON SEARCH ARGUMENTS @V305665 01986000
  2002. DC A(SVCVCNBG) @V305665 01987000
  2003. DC F'4' @V305665 01988000
  2004. DC A(SVCVCNED) @V305665 01989000
  2005. TEXT3 DC AL4(ERRMSG3) @V305665 01990000
  2006. EJECT @VA04475 01991000
  2007. ********************************************************************* 01992000
  2008. * 01993000
  2009. * RETURN TO CMS 01994000
  2010. * 01995000
  2011. * 01996000
  2012. CMSCLEAR SR R15,R15 ERROR CODE = 0 01997000
  2013. CMSRET ST R15,EGPR15 SET ERROR CODE IN SAVE AREA 01998000
  2014. RETRN EQU * @V305665 01999000
  2015. L R1,OSTEMP GET SPACE ADDRESS @V305665 02000000
  2016. USING TEMPSPC,R1 @V305665 02001000
  2017. L R14,SAVR14 GET RETURN REGISTER @V305665 02002000
  2018. ST R14,OSTEMP PRESERVE RETURN REGISTER, @VM03083 02003000
  2019. LA R0,TEMPLNT NUMBER OF DBL WORDS USED, @VM03083 02004000
  2020. DROP R1 NOW RETURN THE TEMPORARY SPACE @VM03083 02005000
  2021. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR ... @VM03083 02006000
  2022. L R14,OSTEMP RECOVER THE RETURN REGISTER @VM03083 02007000
  2023. BR R14 02008000
  2024. SPACE 02009000
  2025. LTORG 02010000
  2026. EJECT 02011000
  2027. ********************************************************************* 02012000
  2028. * 02013000
  2029. ORG SOSVCTR+4096 SETUP SECOND BASE REG 02014000
  2030. SOSVCT2 EQU * 02015000
  2031. USING SOSVCT2,R9 SECOND BASE REG 02016000
  2032. SPACE 02017000
  2033. ********************************************************************** 02018000
  2034. SNAP EQU * 51-SNAP DUMP SPECIFIED CORE @VM03083 02019000
  2035. L R2,EGPR1 LOAD PLIST ADDR. @VA04475 02020000
  2036. L R2,4(R2) LOAD DCB ADDR. FROM PLIST @VA04475 02021000
  2037. CL R2,=4X'FF' IS IT AN ABEND FROM DMSSAB? @VA05383 02022000
  2038. * VA05383 02023000
  2039. BE ABDMP YES @VA05383 02024000
  2040. USING IHADCB,R2 @VA04475 02025000
  2041. TM DCBOFLGS,X'10' FILE OPEN ? @VA04475 02026000
  2042. BO CKFCB YES, CHECK FCB FOR DUMMY @VA04475 02027000
  2043. LA R15,4 SET RETURN CODE @VA04475 02028000
  2044. B CMSRET RETURN, RC=4, DCB NOT OPEN @VA04475 02029000
  2045. CKFCB L R8,DCBDEBAD LOAD DEB ADDR. @VA04475 02030000
  2046. SH R8,=AL2(IHADEB-FCBINIT) BACK UP TO FCB START @VA04475 02031000
  2047. USING FCBSECT,R8 @VA04475 02032000
  2048. CLI FCBDEV,FCBDUM THIS DEVICE DUMMY ? @VA04475 02033000
  2049. BE CMSCLEAR YES, DON'T DO THE DUMP @VA04475 02034000
  2050. ABDMP EQU * @VA05383 02035000
  2051. LA R10,DUMPLIST GET ADDR OF DUMP PLIST @VM03083 02036000
  2052. LM R2,R7,0(R10) GET PLIST REGS @VM03083 02037000
  2053. MVC 0(64,R2),EGPR0 MOVE REGS TO DUMP AREA @VM03083 02038000
  2054. MVC LOWSAVE,0 MOVE LOW CORE TO DUMP AREA @VM03083 02039000
  2055. MVC 0(32,R6),EFPRS MOVE FLOATING REGS TO DUMP AREA @VM03083 02040000
  2056. MVI 0(R7),X'40' SET BLANK TO CLEAR TITLE @VA09674 02040600
  2057. MVC 1(131,R7),0(R7) CLEAR TITLE AREA @VA09674 02041200
  2058. MVC 10(4,R7),=CL4'ID= ' SETUP TITLE @VM03083 02042000
  2059. SR R5,R5 ZERO REG 5 @VM03083 02043000
  2060. IC R5,0(R1) GET ID NO. @VM03083 02044000
  2061. CVD R5,8(R10) CONVERT TO DECIMAL @VM03083 02045000
  2062. UNPK 14(2,R7),14(2,R10) PUT ID IN MSG @VM03083 02046000
  2063. OI 15(R7),X'F0' REPLACE SIGN BITS @VM03083 02047000
  2064. L R2,12(,R1) GET DUMP ADDRESSES @VM03083 02048000
  2065. LA R4,25 LIMIT 25 DUMPS PER SNAP @VM03083 02049000
  2066. LTR R2,R2 DUMP ADDRESSES SPECIFIED? @VM03083 02050000
  2067. BNZ SNAPDUMP YES, CONTINUE @VM03083 02051000
  2068. LA R4,1 ONLY DUMP ONCE @VM03083 02052000
  2069. SR R6,R6 START ADDR IS ZERO @VM03083 02053000
  2070. LA R7,164 ENDING ADDR IS 164 @VM03083 02054000
  2071. TM 3(R1),2 DUMP CORE SPECIFIED? @VM03083 02055000
  2072. BNO SETDMPAD NO, DUMP LOW CORE @VM03083 02056000
  2073. L R7,VMSIZE DUMP ALL CORE @VM03083 02057000
  2074. B SETDMPAD SET DUMP ADDRESSES @VM03083 02058000
  2075. SNAPDUMP LM R6,R7,0(R2) GET START AND END ADDR @VM03083 02059000
  2076. SETDMPAD EQU * @VM03083 02060000
  2077. SRL R6,2 ROUND DOWN TO FULLWORD @VM03083 02061000
  2078. SLL R6,2 @VM03083 02062000
  2079. LA R6,0(,R6) STRIP OFF HIGH ORDER BYTE @VM03083 02063000
  2080. LA R7,3(,R7) ROUND UP TO A FULLWORD @VM03083 02064000
  2081. SRL R7,2 @VM03083 02065000
  2082. SLL R7,2 @VM03083 02066000
  2083. STM R6,R7,8(R10) FILL START AND END ADDR @VM03083 02067000
  2084. LA R0,32 SET ADDR OF PSW TO BE PRINTED@VM03083 02068000
  2085. LR R1,R10 GET ADDR OF PLIST @VM03083 02069000
  2086. L R15,ADMPEXEC GET ADDR OF DUMP PROGRAM @VM03083 02070000
  2087. BALR R14,R15 BRANCH TO DUMP PROGRAM @VM03083 02071000
  2088. TM 4(R2),X'80' LAST SET OF ADDRESSES @VM03083 02072000
  2089. BO CMSCLEAR YES, RETURN @VM03083 02073000
  2090. LA R2,8(,R2) GET NEXT SET OF ADDRESSES @VM03083 02074000
  2091. BCT R4,SNAPDUMP CONTINUE DUMPING @VM03083 02075000
  2092. B CMSCLEAR OVER 25 DUMPS, RETURN @VM03083 02076000
  2093. EJECT @VA04475 02077000
  2094. SPIE EQU * SPEC PRG INTERPT EXECUTION @V305066 02078000
  2095. L R2,APIE GET ADDRESSS OF PICA @V305066 02079000
  2096. L R10,0(R2) GET ADDR OF PICA @V305066 02080000
  2097. ST R1,0(R2) INSET NEW PICA ADDR IN PIE @V305066 02081000
  2098. MVI 0(R2),HEX00 CLEAR PICA RESERVE BYTE @V305066 02082000
  2099. ST R10,EGPR1 RETURN OLD PICA ADDR @V305066 02083000
  2100. NI OLDPSW+4,HEXF0 CLEAR THE PROGRAM MASK @V305066 02084000
  2101. OC OLDPSW+4(1),0(R1) SET PROGRAM MASK IN USERS PSW @V305066 02085000
  2102. B RETRN RETURN @V305066 02086000
  2103. EJECT @VA04475 02087000
  2104. ********************************************************************* 02088000
  2105. EXTRACT EQU * 40 - ZERO ANSWER AREA 02089000
  2106. * 02090000
  2107. * C(R1)=A(ANSWER AREA) 02091000
  2108. * 02092000
  2109. * C(R1+8)=FIELD BYTES 02093000
  2110. * 02094000
  2111. * THE NUMBER OF BITS SET IN THE FIELD BYTES DETERMAINS THE NUMBER 02095000
  2112. * OF FULLWORDS TO BE CLEARED IN THE ANSWER AREA. 02096000
  2113. * 02097000
  2114. SPACE 02098000
  2115. SR R5,R5 02099000
  2116. SR R4,R4 02100000
  2117. L R5,8(,R1) GET FIELD BYTES 02101000
  2118. SRL R5,21 INITIAL SHIFT FOR BITS NOT USED 02102000
  2119. EXTLOOP EQU * 02103000
  2120. LTR R5,R5 ANY BITS? 02104000
  2121. BZ DONE NO, NOTHING TO CLEAR 02105000
  2122. LA R14,CON1 INDICATE LOW ORDER BIT @V305066 02106000
  2123. NR R14,R5 IS BIT SET? @V305665 02107000
  2124. BZ BUMP BRANCH IF NOT @V305665 02108000
  2125. LA R4,1(,R4) YES, INCREMENT R4 02109000
  2126. BUMP EQU * 02110000
  2127. SRL R5,1 SHIFT 02111000
  2128. B EXTLOOP LOOP THROUGH FIRST BYTE 02112000
  2129. SPACE 02113000
  2130. DONE EQU * 02114000
  2131. SLL R4,2 MULTIPLY BY 4 02115000
  2132. LTR R4,R4 ANY BITS AT ALL? 02116000
  2133. BZ NOBITS NO, LETS EXIT 02117000
  2134. BCTR R4,0 DECREMENT BY 1 02118000
  2135. L R5,0(,R1) GET ANSWER AREA ADDRESS 02119000
  2136. EX R4,EXTCLEAR ZERO OUT ANSWER AREA 02120000
  2137. NOBITS EQU * 02121000
  2138. LA R15,4 SET RETURN CODE OF 4 02122000
  2139. B CMSRET RETURN 02123000
  2140. SPACE 02124000
  2141. EXTCLEAR XC 0(0,R5),0(R5) ZERO OUT ANSWER AREA 02125000
  2142. SPACE 02126000
  2143. EJECT 02127000
  2144. ********************************************************************** 02128000
  2145. * 02129000
  2146. * FREEDBUF 02130000
  2147. * USED TO HANDLE FREEDBUF MACROES 02131000
  2148. * REG0=V(DECB) REG1=V(DCB) 02132000
  2149. *********************************************************************** 02133000
  2150. SPACE 02134000
  2151. SVC57 LR R3,R0 SET UP DSECT REGS @VM03203 02135000
  2152. LR R2,R1 @VM03203 02136000
  2153. L R15,=V(DMSSBDFR) GO TO FREDBUF @VM03203 02137000
  2154. BALR R4,R15 TO RETURN BUFFER @VM03203 02138000
  2155. B RETRN RETURN @VM03203 02139000
  2156. EJECT @VA04475 02140000
  2157. *********************************************************************** 02141000
  2158. * 02142000
  2159. * STAE 02143000
  2160. * USED TO HANDLE STAE MACROES 02144000
  2161. * REG0=ACTION CODE REG1=V(PARM LIST) 02145000
  2162. ********************************************************************** 02146000
  2163. SPACE 02147000
  2164. USING PGMSECT,R3 @VM03203 02148000
  2165. SVC60 L R3,APGMSECT GET ADDR OF PGMSECT @VM03203 02149000
  2166. LA R3,SCBPTR GET ADDR OF SCB POINTER @VM03203 02150000
  2167. DROP R3 @VM03203 02151000
  2168. LR R4,R1 SAVE R1 @VM03203 02152000
  2169. L R1,0(R3) @VM03203 02153000
  2170. CH R0,FOURBIN CHECK OPTION CODE @VM03203 02154000
  2171. BH OVERLAY OVERLAY SCB @VM03203 02155000
  2172. LA R0,TWO GET SCB LEN IN DWORDS @VM03203 02156000
  2173. BE CANCEL CANCEL SCB @VM03203 02157000
  2174. DMSFREE DWORDS=(0),TYPE=NUCLEUS,TYPCALL=BALR @VM03203 02158000
  2175. MVC 0(4,R1),0(R3) CHAIN SCB'S @VM03203 02159000
  2176. ST R1,0(R3) FILL IN SCB PTR @VM03203 02160000
  2177. OVERLAY MVC 4(8,R1),0(R4) FILL IN STAE PARAMETERS @VM03203 02161000
  2178. MVI 12(R1),HEX00 CLEAR FLAG BYTE @VM03203 02162000
  2179. B CMSCLEAR RETURN @VM03203 02163000
  2180. CANCEL LA R15,ERR8 SET ERROR CODE @VM03203 02164000
  2181. LTR R1,R1 IS THERE AN SCB @VM03203 02165000
  2182. BZ CMSRET NO, THAN RETURN @VM03203 02166000
  2183. MVC 0(4,R3),0(R1) DELETE SCB @VM03203 02167000
  2184. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VM03203 02168000
  2185. B CMSCLEAR RETURN @VM03203 02169000
  2186. EJECT 02170000
  2187. ***************************************************************@VA04475 02171000
  2188. RESTORE EQU * 17-RESTORE IOB @VA04475 02172000
  2189. * @VA04475 02173000
  2190. TRKBAL EQU * 25-TRKBAL @VA04475 02174000
  2191. * @VA04475 02175000
  2192. CHAP EQU * 44-CHANGE PRIORITY @VA04475 02176000
  2193. * C(R1)=A(TCB LOCATION), C(R0)=PRIORITY VALUE @VA04475 02177000
  2194. * @VA04475 02178000
  2195. CHKPT EQU * CHECKPOINT RESTART @VA04475 02179000
  2196. * @VA04475 02180000
  2197. DEQ EQU * 48-DEQUEUE A TASK @VA04475 02181000
  2198. * @VA04475 02182000
  2199. DETACH EQU * 62-DETACH A MODULE FROM TASK QUEUE @VA04475 02183000
  2200. * C(R1)=A(TCB LOCATION) @VA04475 02184000
  2201. * @VA04475 02185000
  2202. ENQ EQU * 56-ENQUEUE ADDITIONAL TASK @VA04475 02186000
  2203. * @VA04475 02187000
  2204. B CMSCLEAR ALL OF ABOVE ARE EFFECTIVE NO-OP @VA04475 02188000
  2205. * @VA04475 02189000
  2206. FEOV EQU * FORCED END OF VOLUME @VA04475 02190000
  2207. LA R15,4 SET ERROR CODE @VA04475 02191000
  2208. B CMSRET RETURN WITH ERROR CODE @VA04475 02192000
  2209. * @VA04475 02193000
  2210. EJECT @VA04475 02194000
  2211. ******************************************************************* 02195000
  2212. IDENTIFY DS 0H 41-ASSIGN ADDITIONAL ENTRY POINTS 02196000
  2213. * C(R0)=A(CL8'LOAD MODULE'), C(R1)=A(ENTRY POINT) 02197000
  2214. OI OSSFLAGS,OSRESET INDICATE OS SIM. ENTERED @V1D1705 02198000
  2215. LR R4,R0 SAVE INPUT REGS @V1D1705 02199000
  2216. LR R5,R1 @V1D1705 02200000
  2217. DMSFREE DWORDS=15,TYPCALL=BALR @VM03083 02201000
  2218. L R0,LINKSTRT CHAIN IDENTIFY RB ON LOAD RB CHAI@V1D1705 02202000
  2219. ST R1,LINKSTRT @V1D1705 02203000
  2220. XC 0(120,R1),0(R1) CLEAR REQ. BLK. @VM03203 02204000
  2221. ST R0,0(R1) CHAIN BLOCKS @VA02596 02205000
  2222. MVC 12(8,R1),0(R4) MOVE IDENTIFIED NAME TO RB @V1D1705 02206000
  2223. ST R5,28(R1) SET IDENTIFIED ADDR. AS ENTRY POI@V1D1705 02207000
  2224. B CMSCLEAR RETURN @V1D1705 02208000
  2225. EJECT @VA04475 02209000
  2226. *********************************************************************** 02210000
  2227. *STAX (SVC 96) 02211000
  2228. SPACE 02212000
  2229. STAX L R2,0(0,R1) GET EXIT ADDRESS 02213000
  2230. LTR R2,R2 WAS AN EXIT ADDRESS SPECIFIED 02214000
  2231. BZ STXCLR NO, CLEAR HIGHEST EXIT 02215000
  2232. OI OSSFLAGS,OSRESET INDICATE CLEANUP NEEDED 02216000
  2233. LA R0,28 YES, GET AN EXIT ELEMENT @V1D1709 02217000
  2234. LR R4,R1 PROTECT PARAMETER REG. 02218000
  2235. DMSFREE DWORDS=(0),TYPCALL=BALR @VM03083 02219000
  2236. USING CMSTAXE,R1 @V1D1709 02220000
  2237. L R3,TAXEADDR CHAIN NEW ELEMENT 02221000
  2238. ST R1,TAXEADDR AT BEGGINNING OF 02222000
  2239. ST R3,TAXELNK QUEUE @V1D1709 02223000
  2240. ST R2,TAXEEXIT SET EXIT ADDR. IN ELEMENT @V1D1709 02224000
  2241. MVC 0(4,R1),STAXPSW MOVE IN LEFT HALF OF PSW FIELD 02225000
  2242. MVC TAXEDEF(4),16(R4) MOVE IN USADDR + DEFER IND. @V1D1709 02226000
  2243. B CMSCLEAR RETURN 02227000
  2244. DROP R1 @V1D1709 02228000
  2245. USING CMSTAXE,R2 @V1D1709 02229000
  2246. STXCLR L R2,TAXEADDR GET HIGHEST ELEMENT 02230000
  2247. LTR R1,R2 IS THERE ONE 02231000
  2248. BZ STXERR NO 02232000
  2249. L R3,TAXELNK GET POINTER TO NEXT TAXE @V1D1709 02233000
  2250. ST R3,TAXEADDR MAKE NXT=1ST 02234000
  2251. LA R0,28 FREE THIS EXIT ELEMENT @V1D1709 02235000
  2252. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @VM03083 02236000
  2253. B CMSCLEAR RETURN 02237000
  2254. STXERR LA R15,8 RETURN CODE 02238000
  2255. B CMSRET 02239000
  2256. STAXPSW DC X'FF040000' LEFT 1/2 OF EXIT PSW 02240000
  2257. DROP R2 @V1D1709 02241000
  2258. EJECT @VA04475 02242000
  2259. ******************************************************************* 02243000
  2260. SYNAD DS 0H 68-SYNAD ERROR MESSAGES 02244000
  2261. * R1=A(DCB) R0=A(DECB) R15=X'ACCESS METHOD CODE',AL3(0) 02245000
  2262. USING IHADCB,R2 02246000
  2263. USING IHADECB,R3 02247000
  2264. LR R2,R1 SETUP DCB REG 02248000
  2265. LR R3,R0 SETUP DECB REG 02249000
  2266. CLI EGPR15,X'FF' SYNADRLS? 02250000
  2267. BE SYNADRLS YES. 02251000
  2268. SYNADAF EQU * PREPARE ERROR MESSAGE 02252000
  2269. LA R0,200 GET SAVE AREA PLUS MESSAGE BUFFER 02253000
  2270. SR R1,R1 02254000
  2271. GETMAIN R,LV=(R0) 02255000
  2272. L R5,EGPR13 GET A(USER SAVE AREA) 02256000
  2273. ST R5,4(,R1) SET A (PREVIOUS SAVE AREA) 02257000
  2274. ST R1,8(,R5) SAVE A(NEXT SAVE AREA) 02258000
  2275. ST R1,EGPR13 PASS BACK NEWEST SAVEAREA 02259000
  2276. LA R1,72(,R1) POINT TO A(MESSAGE BUFFER) 02260000
  2277. XC 0(8,R1),0(R1) CLEAR BDW AND RDW 02261000
  2278. MVI 8(R1),X'40' BLANK OUT BUFFER 02262000
  2279. MVC 9(119,R1),8(R1) 02263000
  2280. LA R4,124 GET RDW 02264000
  2281. STH R4,4(,R1) STORE RDW IN BUFFER 02265000
  2282. MVC 44(31,R1),ERRMSG1 MOVE IN STANDARD MSG 02266000
  2283. USING IHADCB,R2 02267000
  2284. MVC 55(6,R1),=C'OUTPUT' 02268000
  2285. TM EGPR1,X'40' OUTPUT ERROR? 02269000
  2286. BO DCBNAME YES, GO SET DDNAME 02270000
  2287. MVC 55(6,R1),=C'INPUT ' 02271000
  2288. DCBNAME L R8,DCBDEBAD GET ADDR OF DEB 02272000
  2289. SH R8,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 02273000
  2290. IC R4,DECSDECB+3 GET ERROR CODE V0300 02274000
  2291. USING TEMPSPC,R14 @V305665 02275000
  2292. L R14,OSTEMP GET SPACE ADDRESS @V305665 02276000
  2293. CVD R4,DHOUR CONVERT TO DECIMAL 02277000
  2294. UNPK 68(3,R1),DHOUR+5(3) 02278000
  2295. DROP R14 @V305665 02279000
  2296. OI 70(R1),C'0' RESET SIGN BITS 02280000
  2297. MVC 75(8,R1),FCBDD GET NAME OF DCB 02281000
  2298. MVI 83(R1),C',' SET DDNAME DELIMITER 02282000
  2299. TM EGPR1,X'C0' WAS THIS I/O ERROR 02283000
  2300. BNZ SYRETRN YES, THEN RETURN 02284000
  2301. MVC 55(6,R1),8(R1) RESET I/O INDIC BACK TO BLNK 02285000
  2302. MVC 68(3,R1),8(R1) SAME WITH ERROR CODE 02286000
  2303. SYRETRN ST R1,EGPR1 SEND BACK R1=A(MESSAGE BUFFER) 02287000
  2304. B SVC68RET RETURN TO CALLER 02288000
  2305. * 02289000
  2306. SYNADRLS DS 0H 68-RELEASE SYNAD MESSAGE BUFFER 02290000
  2307. L R1,EGPR13 GET A(SYNAD SAVEAREA) 02291000
  2308. LA R0,200 BYTE COUNT 02292000
  2309. L R4,4(,R1) GET A(PREVIOUS SAVEAREA) 02293000
  2310. ST R4,EGPR13 RESET PREV ST AREA 02294000
  2311. FREEMAIN R,LV=(R0),A=(R1) 02295000
  2312. XC 8(4,R4),8(R4) ZERO SAVE AREA PTR 02296000
  2313. SVC68RET SR R15,R15 ZERO REG 15 02297000
  2314. ST R15,EGPR0 ZERO REG 0 IN SAVE AREA 02298000
  2315. B RETRN RETURN TO CALLER 02299000
  2316. * 02300000
  2317. EJECT @VA04475 02301000
  2318. ********************************************************************** 02302000
  2319. SPACE 02303000
  2320. STIMER EQU * 02304000
  2321. DIN EQU X'30' DECIMAL TIME INTERVAL 02305000
  2322. BIN EQU X'10' BINARY TIME INTERVAL 02306000
  2323. TUI EQU X'F0' TIMER UNIT TIME INTERVAL 02307000
  2324. TOD EQU X'70' TIME OF DAY TIME INTERVAL 02308000
  2325. REAL EQU X'03' REAL OPTION 02309000
  2326. WAIT EQU X'01' WAIT OPTION 02310000
  2327. * R1 =V(TIME INTERVAL) 02311000
  2328. * R0 =V(EXIT ADDRESS) 02312000
  2329. * 02313000
  2330. USING EXTSECT,R4 02314000
  2331. TM EGPR0,REAL REAL OPTION SPECIFIED 02315000
  2332. BO CKTIMUNT YES, CONTINUE 02316000
  2333. TM EGPR0,WAIT IS WAIT OPTION SPECIFIED 02317000
  2334. BO CMSCLEAR YES, TREAT AS NOP 02318000
  2335. CKTIMUNT L R5,EGPR0 GET ADDR OF EXIT ROUTINE 02319000
  2336. L R1,0(R1) GET TIME SPECIFICATION 02320000
  2337. TM EGPR0,TUI TIME IN TIMER UNITS 02321000
  2338. BZ TINT YES, BRANCH @VA15155 02322000
  2339. DECIM TM EGPR0,TOD-BIN NON BINARY OPTIONS ON 02325000
  2340. BZ BINT NO, MUST BE BINARY 02326000
  2341. L R1,EGPR1 GET ADDR OF TIME 02327000
  2342. CONVERT EQU * CONVERT TO BINARY V0277 02328000
  2343. USING TEMPSPC,R8 @V305665 02329000
  2344. L R8,OSTEMP GET SPACE ADDRESS @V305665 02330000
  2345. PACK WORK(8),4(4,R1) PACK HUNDREDTHS OF SECONDS 02331000
  2346. CVB R4,WORK CONVERT TO BINARY 02332000
  2347. PACK WORK(8),2(2,R1) PACK MINUTES 02333000
  2348. CVB R7,WORK CONVERT TO BINARY 02334000
  2349. MH R7,=H'6000' CONVERT TO HUNDREDTHS 02335000
  2350. AR R4,R7 ADD TO TOTAL 02336000
  2351. PACK WORK(8),0(2,R1) PACK HOURS 02337000
  2352. CVB R7,WORK CONVERT TO BINARY 02338000
  2353. DROP R8 @V305665 02339000
  2354. M R6,=F'360000' CONVERT TO HUNDREDTHS 02340000
  2355. AR R4,R7 ADD TO TOTAL 02341000
  2356. C R1,EGPR1 CALL FROM TIME? V0277 02342000
  2357. BCR 7,R14 YES, RETURN TO TIME V0277 02343000
  2358. TM EGPR0,TOD-DIN IS TIME OF DAY BIT ON 02344000
  2359. BNO DINT NO, THEN OPTION= DECIMAL 02345000
  2360. TIME BIN 02346000
  2361. SR R4,R0 GET TIME TILL INTERRUPT 02347000
  2362. BP DINT IF INTERVAL NOT EXPIRED, CONTINUE 02348000
  2363. L R4,TIMEUNIT IF EXPIRED, SET TO 1/100 SEC 02349000
  2364. DINT LR R1,R4 SETUP TO SET TIMER 02350000
  2365. BINT MH R1,TIMEUNIT+2 CONVERT TO TIMER UNITS 02351000
  2366. TINT EQU * @VA15155 02351100
  2367. CL R1,MAXTIME IS TIME <= MAX VALUE @VA15155 02351200
  2368. BNH TIMEOK YES, TIME OK @VA15155 02351300
  2369. L R1,MAXTIME NO, SET TO MAX VALUE @VA15155 02351400
  2370. TIMEOK EQU * @VA15155 02351500
  2371. SLL R1,1 MULTIPLY BY 2 V0416 02352000
  2372. STIMRETN ST R1,TIMER SET TIMER 02353000
  2373. L R4,AEXTSECT GET DSECT ADDR 02354000
  2374. ST R5,STIMEXIT SET EXIT ROUTINE ADDR 02355000
  2375. MVI STIMEXIT,1 INDICATE STIMER HAS BEEN ISSUED V0206 02356000
  2376. B CMSCLEAR RETURN TO CALLER 02357000
  2377. TIMEUNIT DC A(10000/26) 100 TH SEC IN TIMER UNITS V0416 02358000
  2378. MAXTIME DC X'7FFFFF00' MAX VALUE IN TIMER UNITS @VA15155 02358500
  2379. EJECT @VA04475 02359000
  2380. ****************************************************************** 02360000
  2381. SPACE 02361000
  2382. TTIMER EQU * 02362000
  2383. * R1 = CANCEL FLAG 02363000
  2384. * R0 = RETURN REG FOR REMAINING TIME 02364000
  2385. L R4,AEXTSECT GET DSECT ADDR 02365000
  2386. SR R0,R0 ZERO REG 0 02366000
  2387. C R0,STIMEXIT WAS STIMER SPECIFIED 02367000
  2388. BE SETR0 NO, RETURN ZERO TIME 02368000
  2389. L R0,TIMER GET REMAINING TIME 02369000
  2390. SRL R0,1 CONVERT TO OS TIMER UNITS V0206 02370000
  2391. SETR0 ST R0,EGPR0 SET R0 IN SAVE AREA 02371000
  2392. LTR R1,R1 WAS CANCEL SPECIFIED 02372000
  2393. BZ CMSCLEAR NO, RETURN 02373000
  2394. SR R1,R1 YES, CLEAR TIMER EXIT ADDR 02374000
  2395. ST R1,STIMEXIT TIMER EXIT ADDR=0 02375000
  2396. CLI TIMCHAR,0 IS BLIP OFF @VA04419 02376000
  2397. BE NOBLIP YES, THEN SET TIMER TO HIGH VALUE@VA04419 02377000
  2398. MVC TIMER(4),=X'000258F6' SET TIMER FOR 2 SECONDS @VA04419 02378000
  2399. B CMSCLEAR RETURN @VA04419 02379000
  2400. NOBLIP MVC TIMER(4),=X'7FFFFF00' SET TIMER TO HIGH VALUE @VA04419 02380000
  2401. B CMSCLEAR RETURN TO CALLER 02381000
  2402. DROP R4 02382000
  2403. EJECT 1 02383000
  2404. USING TEMPSPC,R8 @V305665 02384000
  2405. ********************************************************************* 02385000
  2406. TIME EQU * 11-PROCURE REAL TIME & DATE 02386000
  2407. * MODE FLAG: BITS X'03'; B'10'=DEC B'01'=BIN B'00'=TU 02387000
  2408. DEC EQU X'02' "HHMMSS00" 02388000
  2409. * GET REAL TIME-OF-DAY & DATE 02389000
  2410. L R8,OSTEMP GET SPACE ADDRESS @V305665 02390000
  2411. STC 1,FLAG SAVE TIME-FORMAT CODE 02391000
  2412. LA R1,DIAGTIME GET ADDR OF TIME BUFFER V0277 02392000
  2413. DC X'8310000C' DIAGNOSE FOR TIME V0277 02393000
  2414. MVC TIMBUF(24),CURRDATE MOVE INTO WORKING BUFFER 02394000
  2415. XC TIMEWK1(TIMEWK2-TIMEWK1),TIMEWK1 CLEAR WORK REGION 02395000
  2416. * PACK CHRONOLOGICALLY ACQUIRED DATA 02396000
  2417. SR R0,R0 02397000
  2418. MVI TIMDAY+2,X'C0' 02398000
  2419. PACK ZEIT(2),TIMDAY(3) HOURS: "HH" 02399000
  2420. MVI TIMDAY+5,X'C0' 02400000
  2421. PACK ZEIT+1(2),TIMDAY+3(3) MINUTES: "MM" 02401000
  2422. MVI TIMDAY+8,X'C0' 02402000
  2423. PACK ZEIT+2(2),TIMDAY+6(3) SECONDS: "SS" 02403000
  2424. * 02404000
  2425. MVI TDATE+2,X'C0' 02405000
  2426. PACK TAG+1(2),TDATE(3) MONTH: "MM" 02406000
  2427. MVI TDATE+5,X'C0' 02407000
  2428. PACK TAG+2(2),TDATE+3(3) DAY: "DD" 02408000
  2429. MVI TDATE+8,X'C0' 02409000
  2430. PACK TAG+3(2),TDATE+6(3) YEAR: "YY" 02410000
  2431. * SET DATE INTO REG 1: "00 YY DD D+" 02411000
  2432. IC R0,TAG+3 02412000
  2433. SLL R0,16 02413000
  2434. AH R0,SIGN 02414000
  2435. ST R0,DATE 02415000
  2436. H12 SRL R0,12 02416000
  2437. AH R0,SIGN 02417000
  2438. ST R0,YEAR 02418000
  2439. DP YEAR(4),FOUR(2) 02419000
  2440. SR R1,R1 02420000
  2441. IC R1,TAG+1 02421000
  2442. IC R1,TRTABL(R1) 02422000
  2443. LH R0,NTABL(R1) GET MONTH INCREMENT 02423000
  2444. STH R0,DAY AND SAVE 02424000
  2445. CLI YEAR+3,X'0C' IS IT A LEAP YEAR? 02425000
  2446. BH NOLEAP NO, BRANCH 02426000
  2447. CH R1,FOURBIN IF MONTH > FEB. ADD 1 TO DATE V0277 02427000
  2448. BL JANFEB NO 02428000
  2449. AP DAY(2),ONE(2) YES, ADD ONE DAY TO DATE PAST FEB 02429000
  2450. JANFEB EQU * 02430000
  2451. NOLEAP AP DATE(4),DAY(2) 02431000
  2452. MVI TAG+3,X'C0' 02432000
  2453. LH R0,TAG+2 02433000
  2454. SRL R0,4 RIGHT SHIFT FOR ADD DECIMAL 02434000
  2455. STH R0,DAY 02435000
  2456. AP DATE(4),DAY(2) 02436000
  2457. OI DATE+3,X'0F' SET PRINTABLE SIGN CHARACTER 02437000
  2458. MVC EGPR1,DATE MOVE DATE TO R1 SAVEAREA 02438000
  2459. CLI FLAG,2 DECIMAL TIME SPECIFIED V0277 02439000
  2460. BNE TIMBIN GET BINARY TIME V0277 02440000
  2461. * DEC: "HHMMSS00" 02441000
  2462. NI ZEIT+3,X'00' CLEAR BYTE 02442000
  2463. MVC EGPR0,ZEIT MOVE TIME TO SAVEAREA 02443000
  2464. B CMSCLEAR 02444000
  2465. TIMBIN MVC TIMDAY(8),CURRDATE+8 RESET TIME OF DAY V0277 02445000
  2466. MVC TIMDAY+2(2),TIMDAY+3 SETUP FOR CONVERT V0277 02446000
  2467. MVC TIMDAY+4(2),TIMDAY+6 SETUP FOR CONVERT V0277 02447000
  2468. MVC TIMDAY+6(2),=XL2'F0F0' SET HUNDRETHS OF SECONDS V0277 02448000
  2469. LA R1,TIMDAY USE STIMER FOR CONVERT V0277 02449000
  2470. BAL R14,CONVERT CONVERT TO BINARY V0277 02450000
  2471. LR R5,R4 SAVE BINARY TIME V0277 02451000
  2472. CLI FLAG,1 BINARY FLAG ON V0277 02452000
  2473. BE TIMRET YES RETURN TO CALLER V0277 02453000
  2474. MH R4,TIMEUNIT+2 CONVERT TO TIMER UNITS V0277 02454000
  2475. CLI FLAG,3 MIC OPTION SPECIFIED V0277 02455000
  2476. BNE TIMRET NO, RETURN TO CALLER V0277 02456000
  2477. M R4,=F'409600' GET MICROSECOND IN 51ST BIT V0277 02457000
  2478. L R1,EGPR0 GET RETURN ADDR FOR TIME V0277 02458000
  2479. STM R4,R5,0(R1) SET TIME IN RETURN ADDR V0277 02459000
  2480. B CMSCLEAR RETURN TO CALLER V0277 02460000
  2481. TIMRET ST R4,EGPR0 SET TIME IN REG 0 V0277 02461000
  2482. B CMSCLEAR RETURN TO CALLER V0277 02462000
  2483. * 02463000
  2484. * NEEDED CONSTANTS, WORK AREAE, & TIMER VARIABLES 02464000
  2485. * 02465000
  2486. * DISPLACEMENT PER MONTH INTO "DAY OF YEAR" TABLE. 02466000
  2487. TRTABL DC X'0C000204' V0277 02467000
  2488. DC X'06080A0C' 02468000
  2489. DC X'0E10' 02469000
  2490. ONE DC PL2'1' 02470000
  2491. FOUR DC PL2'4' 02471000
  2492. SIGN DC X'000F' PRINTABLE SIGN 02472000
  2493. DC X'121416' 02473000
  2494. * CUMULATIVE "DAY-OF-YEAR" PER MONTH TABLE 02474000
  2495. NTABL DS 0H 02475000
  2496. DC X'000C031C' 02476000
  2497. DC X'059C090C' 02477000
  2498. DC X'120C151C' 02478000
  2499. DC X'181C212C' 02479000
  2500. DC X'243C273C' 02480000
  2501. DC X'304C334C' 02481000
  2502. DROP R8 @V305665 02482000
  2503. EJECT 1 02483000
  2504. USING FCBSECT,R8 @V305665 02484000
  2505. ********************************************************************** 02485000
  2506. WTO EQU * 35-WRITE-TO-OPERATOR-/-WITH REPLY 02486000
  2507. * WTO: AL2(L'MSG); 2X'FLAGS'; MESSAGE; SVC 35. 02487000
  2508. * WTOR: AL1(L'REPLY); AL3(REPLY BUFFER); A(ECB); AL2(L'MSG); 02488000
  2509. * 2X'FLAGS'; MESSAGE; SVC 35. 02489000
  2510. * 02490000
  2511. MVI OSIOTYPE,C'N' INDICATE "WTO" 02491000
  2512. LR 2,1 SAVE R1 FOR REPLY. 02492000
  2513. CLI 0(R1),0 DETERMINE: WTO, OR WTOR? 02493000
  2514. BE SUIT05 YES 02494000
  2515. MVI OSIOTYPE,C'M' INDICATE "WTOR" 02495000
  2516. LA 1,8(,1) 02496000
  2517. SUIT05 LH 3,0(,1) 02497000
  2518. SH R3,HAL4+2 TR 02498000
  2519. STH R3,CONWRCNT STORE WRITE COUNT 02499000
  2520. HAL4 LA R1,4(R1,R0) C(R1)=LINE OF PRINT ADRESS TR 02500000
  2521. ST R1,CONWRBUF SET A(OUTPUT BUFFER) 02501000
  2522. * 02502000
  2523. LA R1,WAITLIST WAIT FOR CLEAR TYPEOUT 02503000
  2524. SVC X'CA' (JAS -- 23 AUGUST 1967) 02504000
  2525. * 02505000
  2526. LA R1,CONWRITE 02506000
  2527. SVC X'CA' 02507000
  2528. DC AL4(*+4) 02508000
  2529. CLI 0(R2),0 IS IT A WTO? @VA01757 02509000
  2530. BE WTORET YES, RETURN @VA01757 02510000
  2531. LA R1,CONREAD READ THE REPLY 02511000
  2532. SVC X'CA' 02512000
  2533. DC AL4(*+4) 02513000
  2534. L R5,0(,R2) GET A(REPLY BUFFER) 02514000
  2535. SR 4,4 02515000
  2536. IC R4,0(,R2) GET L'REPLY DESIRED. 02516000
  2537. LTR R15,R4 IS READ COUNT ZERO? V0023 02517000
  2538. BZ WTORRET YES, RETURN V0023 02518000
  2539. LH R4,CONRDCNT GET NO. BYTES READ P3056 02519000
  2540. LTR R4,R4 BYTES READ= ZERO? V0023 02520000
  2541. BZ WTORRET YES, RETURN V0023 02521000
  2542. CR R4,R15 BYTES READ> BYTES REQUESTED V0023 02522000
  2543. BNH *+6 NO, CONTINUE V0023 02523000
  2544. LR R4,R15 YES, USE BYTES REQUESTED V0023 02524000
  2545. BCTR R4,R0 SET FOR MOVE P3056 02525000
  2546. EX 4,MOVE MOVE INTO USER'S BUFFER 02526000
  2547. WTORRET EQU * RETURN TO CALLER V0023 02527000
  2548. L 2,4(,2) R2 POINTS TO THE ECB. 02528000
  2549. XC 0(4,2),0(2) SET COMPLETION CODE 02529000
  2550. OI 0(2),X'7F' IN THE ECB. 02530000
  2551. WTORET B CMSCLEAR TR 02531000
  2552. * 02532000
  2553. * DATA AREA. 02533000
  2554. * 02534000
  2555. MOVE MVC 0(1,R5),CMNDLINE MOVE CONSOLE INPUT 02535000
  2556. EJECT @VA04475 02536000
  2557. ******************************************************************** 02537000
  2558. * 02538000
  2559. * SVC 0 - EXCP, XDAP * 02539000
  2560. * * 02540000
  2561. *********************************************************************** 02541000
  2562. SPACE 02542000
  2563. * 02543000
  2564. * DURING PL/I COMPLIATION, THE "XDAP" ACCESS METHOD IS USED TO READ * 02544000
  2565. * OR TO WRITE-IN-PLACE TEXT & DICTIONARY BLOCKS. * 02545000
  2566. * FOR ANY OTHER PURPOSE, SVC 0 IS UNSUPPORTED. RETURN TO ABEND * 02546000
  2567. * 02547000
  2568. * 02548000
  2569. USING IHADCB,2 SET BASE FOR DCB REFERENCES 02549000
  2570. * ON ENTRY: 02550000
  2571. * GPR 1 = ADDR OF XDAP CONTROL BLOCK 02551000
  2572. * 02552000
  2573. XDAP EQU * 02553000
  2574. L 2,20(,1) GET DCB ADDRESS 02554000
  2575. L R8,DCBDEBAD GET ADDR OF DEB 02555000
  2576. SH R8,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 02556000
  2577. LH R7,FCBITEM SAVE ITEM NO. 02557000
  2578. LH R5,38(R1) GET TTR 02558000
  2579. N R5,HALFWORD 02559000
  2580. STH R5,FCBITEM FILL IN ITEM NO. 02560000
  2581. MVC FCBBUFF(8),56(R1) GET ADDRESS AND LENGTH 02561000
  2582. MVI FCBBUFF,X'00' 02562000
  2583. XC FCBBYTE(2),FCBBYTE 02563000
  2584. CLI 56(1),X'0E' DETERMINE I/O OPERATION 02564000
  2585. BNE XDAP2 NOT A READ. 02565000
  2586. L R15,ARDBUF READ. 02566000
  2587. NI DCBOFLGS,X'7F' INDICATE LAST I/O IS READ 02567000
  2588. B XDAP3 02568000
  2589. XDAP2 CLI 56(1),X'0D' IS IT WRITE? 02569000
  2590. BNE CNTRL NO. ILLEGAL OPERATION 02570000
  2591. L R15,AWRBUF WRITE 02571000
  2592. OI DCBOFLGS,X'80' INDICATE LAST I/O IS WRITE 02572000
  2593. XDAP3 LR 3,1 SET A(IOB) INTO R3 02573000
  2594. SH 3,FOURBIN - ?'4' = A(ECB) 02574000
  2595. XC 0(4,R3),0(R3) CLEAR ECB FLAG 02575000
  2596. LR R6,R15 SAVE REG 15 02576000
  2597. XDAPRW LA R1,FCBOP EXECUTE READ / WRITE 02577000
  2598. BALR R14,R15 02578000
  2599. BNZ XDAP5 02579000
  2600. * 02580000
  2601. XDAPOK EQU * @VA01052 02581000
  2602. MVI 0(3),X'7F' INDICATE I/O COMPLETE, NO ERRORS. 02582000
  2603. SETITEM STH R7,FCBITEM RESTORE ITEM NO. 02583000
  2604. B CMSCLEAR RETURN TO THE USER 02584000
  2605. * 02585000
  2606. XDAP5 EQU * ERROR FROM RDBUF / WRVUF 02586000
  2607. CH R15,NINE IS THIS AN ERROR NINE 02587000
  2608. BNE XDAP6 NO, CONTINUE 02588000
  2609. MVC FCBOP(8),WFINIS YES, THEN FINIS FILE 02589000
  2610. SVC X'CA' 02590000
  2611. DC AL4(*+4) 02591000
  2612. LR R15,R6 RESTORE REG 15 02592000
  2613. B XDAPRW RETRY I/O 02593000
  2614. XDAP6 TM DCBOFLGS,X'80' OUTPUT? @VA01052 02594000
  2615. BO XDAPERR YES, THEN ERROR @VA01052 02595000
  2616. CH R15,EIGHT LENGTH ERROR? @VA01052 02596000
  2617. BE XDAPOK YES, THEN IGNORE @VA01052 02597000
  2618. XDAPERR EQU * @VA01052 02598000
  2619. STH 15,2(,3) STORE ERR CODE INTO ECB 02599000
  2620. MVI 0(3),X'42' SET BYTE CODE IN ECB 02600000
  2621. B SETITEM RETURN TO USER 02601000
  2622. CNTRL DMSERR MF=I,TEXTA=ERRMSG2,NUM=119,LET=S 02602000
  2623. ABEND X'400' SYSTEM ABEND WITH ERROR CODE 02603000
  2624. EJECT 1 02604000
  2625. ************************************************************** 02605000
  2626. BSP EQU * 69-BACKSPACE A DATA SET @V305665 02606000
  2627. * 02607000
  2628. * A BACKSPACE IS EXECUTED BY SETTING A POINT 02608000
  2629. * INDICATOR TO THE CURRENT ITEM NO. MINUS ONE. 02609000
  2630. * THE DISK OR TAPE IS NOT PHYSICALLY MOVED UNTIL 02610000
  2631. * THE NEXT BSAM READ OR WRITE TAKES PLACE. 02611000
  2632. USING IHADCB,R2 @V305665 02612000
  2633. LR R2,R1 GET V(DCB) IN REG 2 @V305665 02613000
  2634. L R8,DCBDEBAD GET ADDR OF DEB @V305665 02614000
  2635. SH R8,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB @V305665 02615000
  2636. TM FCBINIT,FCBOS IS THIS OS FCB? @V305665 02616000
  2637. BNO BACKDA BRANCH IF NOT @V305665 02617000
  2638. LR R11,R8 SET FCB REG FOR OS @V305665 02618000
  2639. LCR R0,R8 INDICATE BSP CALL @V305665 02619000
  2640. L R15,ADMSROS GET DMSROS ADDRESS @V305665 02620000
  2641. BAL R14,16(R15) BAL TO DMSROS @V305665 02621000
  2642. LTR R15,R15 ANY ERRORS? @V305665 02622000
  2643. BNZ BACKERR BRANCH IF YES @V305665 02623000
  2644. B BSPRET RETURN TO CALLER @V305665 02624000
  2645. BACKDA EQU * @V305665 02625000
  2646. LH R5,FCBITEM GET ITEM NO. @V305066 02626000
  2647. N R5,HALFWORD ZERO FIRST HALF @V305665 02627000
  2648. CLI DCBFDAD,P WAS A POINT JUST ISSUED? @V305066 02628000
  2649. BNE BACKUP NO, USE FCBITEM @V305665 02629000
  2650. CLC DCBFDAD+6(2),=XL2'FFF8' BSP OVER EOF? @V305665 02630000
  2651. BE BACKUP BRANCH IF YES @V305665 02631000
  2652. MVC FCBOP(2),DCBFDAD+6 GET NEW ITEM NUMBER @V305665 02632000
  2653. LH R5,FCBOP GET THE NUMBER @V305665 02633000
  2654. LA R5,1(,R5) ADD ONE BACK @V305665 02634000
  2655. BACKUP EQU * @V305665 02635000
  2656. SH R5,FCBCOUT BACKSPACE ONE BLOCK @V305665 02636000
  2657. LTR R5,R5 IS NO. POSITIVE? @V305665 02637000
  2658. BNP BACKERR BRANCH IF NOT @V305665 02638000
  2659. BCTR R5,R0 SUBTRACT ONE FOR A POINT @V305665 02639000
  2660. STH R5,FCBOP SAVE NUMBER IN FCB @V305665 02640000
  2661. MVC DCBFDAD+6(2),FCBOP AND DCB @V305665 02641000
  2662. MVI DCBFDAD,P INDICATE POINT @V305066 02642000
  2663. CLI FCBDEV,FCBTAP IS THIS TAPE? @VA04853 02643000
  2664. BNE BSPRET BRANCH IF NOT @VA04853 02644000
  2665. TM DCBRECFM,VAR IS RECFM FIXED? @VA04853 02645000
  2666. BO BSPSET BRANCH IF NOT @VA04853 02646000
  2667. LH R5,DCBBLKSI GET BLOCKSIZE @VA04853 02647000
  2668. LH R6,DCBLRECL AND THE LRECL @VA04853 02648000
  2669. CR R5,R6 IS FILE BLOCKED? @VA04853 02649000
  2670. BE BSPSET BRANCH IF NOT @VA04853 02650000
  2671. N R5,HALFWORD ZERO FIRST HALF OF BLOCKSIZE @VA04853 02651000
  2672. N R6,HALFWORD AND LRECL @VA04853 02652000
  2673. SR R4,R4 ZERO REGISTER 4 @VA04853 02653000
  2674. DR R4,R6 GET BLOCKING FACTOR @VA04853 02654000
  2675. STH R5,FCBCOUT AND SAVE IT (NEEDED FOR @VA04853 02655000
  2676. BSPSET EQU * SHORT LAST BLOCK) @VA04853 02656000
  2677. LH R4,FCBTBSP GET NUMBER OF RECORDS BSP @VA04853 02657000
  2678. LA R4,1(,R4) ADD ONE @VA04853 02658000
  2679. STH R4,FCBTBSP AND SAVE IT @VA04853 02659000
  2680. BSPRET EQU * RETURN FROM BACKSPACE @V201122 02660000
  2681. NI DCBOFLGS,255-PREVIOUS TURN OFF WRITE INDICATOR 02661000
  2682. B CMSCLEAR 02662000
  2683. * 02663000
  2684. BACKERR DS 0H THERE WAS AN ERROR, GOSH 02664000
  2685. LA R15,4 SET OS ERROR CODE 02665000
  2686. B CMSRET 02666000
  2687. EJECT 1 02667000
  2688. ************************************************************** HRC380DS 02667025
  2689. SVC120 EQU * 120-GETMAIN for memory above HRC380DS 02667050
  2690. * the 16 megabyte line. HRC380DS 02667075
  2691. * HRC380DS 02667100
  2692. * This is (hopefully) temporary code. As neither CMS HRC380DS 02667125
  2693. * nor CP is ready for 31-bit addressing, this entry HRC380DS 02667150
  2694. * point merely allows programs such as GCC to run as HRC380DS 02667175
  2695. * they do on MVS/XA or z/VM. No memory management is HRC380DS 02667200
  2696. * done here. We simply return a fixed address which HRC380DS 02667225
  2697. * represents where the memory has been "allocated". HRC380DS 02667250
  2698. * On entry, R0 has the requested amount. We leave R0 HRC380DS 02667275
  2699. * alone, as that is where the amount allocated is HRC380DS 02667300
  2700. * returned. We return the address of the allocated HRC380DS 02667325
  2701. * memory in R1. HRC380DS 02667350
  2702. L R1,=XL4'04100000' this is where Paul wants it HRC380DS 02667375
  2703. ST R1,EGPR1 save it for our caller HRC380DS 02667400
  2704. SR R15,R15 works every time HRC380DS 02667425
  2705. B CMSRET HRC380DS 02667450
  2706. EJECT 1 HRC380DS 02667475
  2707. *********************************************************************** 02668000
  2708. SVCTABBG DS 0F SVC TABLE 02669000
  2709. SPACE 02670000
  2710. JTBL 0,XDAP 02671000
  2711. JTBL 11,TIME 02672000
  2712. JTBL 14,SPIE 02673000
  2713. JTBL 17,RESTORE 02674000
  2714. JTBL 18,SVC18 02675000
  2715. JTBL 21,SVC21 02676000
  2716. JTBL 24,DEVTYPE 02677000
  2717. JTBL 25,TRKBAL V0317 02678000
  2718. JTBL 31,FEOV @VA01363 02679000
  2719. JTBL 35,WTO 02680000
  2720. JTBL 40,EXTRACT 02681000
  2721. JTBL 41,IDENTIFY 02682000
  2722. JTBL 44,CHAP 02683000
  2723. JTBL 46,TTIMER 02684000
  2724. JTBL 47,STIMER 02685000
  2725. JTBL 48,DEQ 02686000
  2726. JTBL 51,SNAP 02687000
  2727. JTBL 56,ENQ 02688000
  2728. JTBL 57,SVC57 02689000
  2729. JTBL 60,SVC60 02690000
  2730. JTBL 62,DETACH 02691000
  2731. JTBL 63,CHKPT 02692000
  2732. JTBL 64,RDJFCB 02693000
  2733. JTBL 68,SYNAD 02694000
  2734. JTBL 69,BSP 02695000
  2735. JTBL 96,STAX 02696000
  2736. JTBL 120,SVC120 HRC380DS 02696100
  2737. JTBL 203,SVC203 02697000
  2738. SPACE 02698000
  2739. SVCTABED EQU *-4 02699000
  2740. SVCVCNBG EQU * @V305665 02700000
  2741. JOST 01,DMSSVN1 WAIT @V305665 02701000
  2742. JOST 02,DMSSVN2 POST @V305665 02702000
  2743. JOST 03,DMSSLN3 EXIT/RETURN @V305665 02703000
  2744. JOST 04,DMSSMN4 GETMAIN @V305665 02704000
  2745. JOST 05,DMSSMN5 FREEMAIN @V305665 02705000
  2746. JOST 06,DMSSLN6 LINK @V305665 02706000
  2747. JOST 07,DMSSLN7 XCTL @V305665 02707000
  2748. JOST 08,DMSSLN8 LOAD @V305665 02708000
  2749. JOST 09,DMSSLN9 DELETE @V305665 02709000
  2750. JOST 10,DMSSMN10 GETMAIN/FREEMAIN @V305665 02710000
  2751. JOST 13,DMSSAB ABEND (CHECK THIS!!) @V305665 02711000
  2752. JOST 19,DMSSOP19 OPEN @V305665 02712000
  2753. JOST 20,DMSSOP20 CLOSE @V305665 02713000
  2754. JOST 22,DMSSOP22 OPENJ @V305665 02714000
  2755. JOST 23,DMSSOP23 TCLOSE @V305665 02715000
  2756. JOST 42,DMSSLN42 ATTACH @V305665 02716000
  2757. JOST 93,DMSSVN93 TSO TGET-TPUT @V305665 02717000
  2758. JOST 94,DMSSVN94 TSO TCLEARQ @V305665 02718000
  2759. SVCVCNED EQU *-4 @V305665 02719000
  2760. SPACE 2 02720000
  2761. * VCONS FOR OS ROUTINES 02721000
  2762. DC V(DMSSVN) @V305665 02722000
  2763. DC V(DMSSMN) @V305665 02723000
  2764. DC V(DMSLGT) @V305665 02724000
  2765. DC V(DMSSLN) @V305665 02725000
  2766. DC V(DMSSAB) @V305665 02726000
  2767. DC V(DMSSOP) @V305665 02727000
  2768. DC V(DMSSQS) @V305665 02728000
  2769. DC V(DMSSBS) @V305665 02729000
  2770. DC V(DMSSCT) @V305665 02730000
  2771. DC V(DMSLSB) @V305665 02731000
  2772. SPACE 3 02732000
  2773. ERRMSG1 DC C'DMSSVT120S ****** ERROR *** ON ' 02733000
  2774. ERRMSG2 DC AL1(32) 02734000
  2775. DC C'UNSUPPORTED FORM OF ''XDAP'' MACRO' 02735000
  2776. ERRMSG3 DC AL1(ENDMSG3-ERRMSG3-1) 02736000
  2777. DC C'UNSUPPORTED SVC ... (HEX ..) CALLED FROM ......' 02737000
  2778. ENDMSG3 DS 0X 02738000
  2779. ERRMSG4 DC AL1(ENDMSG4-ERRMSG4-1) MSG LENGTH 02739000
  2780. DC C'FILE ''....................'' IS NOT A' @VA06023 02740000
  2781. DC C' LIBRARY' @VA06023 02741000
  2782. ENDMSG4 DS 0X END OF MSG 4 02742000
  2783. SPACE 02743000
  2784. LTORG (FOR 2ND PAGE OF CODE) @VM03083 02744000
  2785. EJECT 02745000
  2786. DCBD DSORG=(PS) 02746000
  2787. EJECT 02747000
  2788. PGMSECT 02748000
  2789. TSOBLKS @V1D1709 02749000
  2790. CMSCB 02750000
  2791. DOSCB @V305174 02751000
  2792. IO 02752000
  2793. FSTB 02753000
  2794. NUCON 02754000
  2795. EXTSECT 02755000
  2796. CMSAVE 02756000
  2797. REGEQU 02757000
  2798. PDSSECT 02758000
  2799. KEYSECT 02759000
  2800. ADT 02759500
  2801. EJECT 1 02760000
  2802. TEMPSPC DSECT @V305665 02761000
  2803. SAVR14 DS F REGISTER 14 SAVE AREA @V305665 02762000
  2804. FEOF DS F @V305665 02763000
  2805. ZEIT DS PL4 TIME WORK AREA @V305665 02764000
  2806. TAG DS PL4 DATE WORK AREA @V305665 02765000
  2807. TIMEWK1 DS 0X CLEAR OUT REGION @V305665 02766000
  2808. DAY DS H @V305665 02767000
  2809. HOUR DS 3H @V305665 02768000
  2810. MIN DS 3H @V305665 02769000
  2811. DHOUR DS D @V305665 02770000
  2812. DATE EQU DHOUR @V305665 02771000
  2813. YEAR EQU DHOUR+4 @V305665 02772000
  2814. TIMEWK2 DS 0X END OF CLEAR AREA @V305665 02773000
  2815. * 02774000
  2816. TIMBUF DS CL24 WORKING BUFFER @V305665 02775000
  2817. TDATE EQU TIMBUF @V305665 02776000
  2818. TIMDAY EQU TIMBUF+8 @V305665 02777000
  2819. FLAG DS X @V305665 02778000
  2820. R15CODE DS X @V305665 02779000
  2821. WORK DS 1D WORK AREA @V305665 02780000
  2822. ERRMESS DMSERR MF=L,MAXSUBS=3 @V305665 02781000
  2823. TEMPSEND EQU * @V305665 02782000
  2824. TEMPLNT EQU (TEMPSEND-TEMPSPC)/8 @V305665 02783000
  2825. END 02784000