Table of Contents

DMSLBT Source

References

Source Listing

DMSLBT.ASSEMBLE.txt
  1. LBT TITLE 'DMSLBT (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. *. 00003000
  4. * MODULE NAME: 00004000
  5. * 00005000
  6. * DMSLBT (TXTLIB) 00006000
  7. * 00007000
  8. * FUNCTION: 00008000
  9. * 00009000
  10. * TO CREATE A TEXT LIBRARY, TO ADD TEXT FILES TO AN 00010000
  11. * EXISTING TEXT LIBRARY, TO DELETE TEXT FILES FROM AN 00011000
  12. * EXISTING TEXT LIBRARY, TO CREATE A DISK FILE THAT LISTS 00012000
  13. * THE CONTROL SECTION AND ENTRY POINT NAMES IN A TEXT 00013000
  14. * LIBRARY, OR TO TYPE AT THE TERMINAL THE CONTROL SECTION 00014000
  15. * AND ENTRY POINT NAMES IN A TEXT LIBRARY. 00015000
  16. * 00016000
  17. * ATTRIBUTES: 00017000
  18. * 00018000
  19. * DISK RESIDENT, USER AREA ROUTINE 00019000
  20. * 00020000
  21. * ENTRY POINTS: 00021000
  22. * 00022000
  23. * DMSLBT,TXTLIB 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS: 00025000
  26. * 00026000
  27. * GPR = A(R2) 00027000
  28. * DS 0D 00028000
  29. * PLIST DC CL8'TXTLIB' 00029000
  30. * GEN 00030000
  31. * ADD 00031000
  32. * DC CL8' MAP ' 00032000
  33. * DEL 00033000
  34. * DC CL8' ' LIBRARY NAME 00034000
  35. * DC CL8' ' FILENAME/CSECTNAME 00035000
  36. * DC CL8'(', CL8'TERM'|'PRINT' 'DISK' (FOR MAP ONLY) 00036000
  37. * 00037000
  38. * EXIT CONDITIONS: 00038000
  39. * 00039000
  40. * 00040000
  41. * NORMAL - 00041000
  42. * GPR15 = 000: NO ERRORS 00042000
  43. * 00043000
  44. * ERROR - 00044000
  45. * GPR15 = COMPLETION CODES 00045000
  46. * 004: SPECIFIED FILES NOT FOUND OR 00046000
  47. * LIBRARY FILE DELETED/NOT CREATED 00047000
  48. * 024: NO LIBRARY NAMES SPECIFIED, NO TEXT FILE 00048000
  49. * NAMES SPECIFIED, NO FUNCTION SPECIFIED, AN 00049000
  50. * INVALID FUNCTION OR AN INVALID OPTION 00050000
  51. * 032: A SPECIFIED MEMBER TO BE DELETED WAS NOT FOUND, 00051000
  52. * A TEXT FILE CONTAINS INVALID RECORD 00052000
  53. * FORMATS 00053000
  54. * 036: SPECIFIED DISK NOT AVAILABLE FOR THE MAP FILE, 00054000
  55. * SPECIFIED DISK FOR MAP FILE IS R/O 00055000
  56. * 088: CSECT NAMES EXCEEDED THE MAXIMUM 00056000
  57. * 100: I/O ERRORS READING OR WRITING A FILE 00057000
  58. * 00058000
  59. * 00059000
  60. * EXTERNAL REFERENCES: 00060000
  61. * 00061000
  62. * NONE 00062000
  63. * 00063000
  64. * 00064000
  65. * CALLS TO OTHER ROUTINES: 00065000
  66. * 00066000
  67. * NONE 00067000
  68. * 00068000
  69. * 00069000
  70. * TABLES / WORKAREAS: 00070000
  71. * 00071000
  72. * TABLE - THE GENERATED OR EXISTING DICTIONARY TABLE 00072000
  73. * TABLE2 - THE MODIFIED DICTIONARY USED BY DELETE FOR UPDATING 00073000
  74. * OPTBL - BRANCH TABLE FOR LINK EDIT OPERANDS 00074000
  75. * OPTLIST - COMMAND OPTION LIST BRANCH TABLE 00075000
  76. * DELTBL - LIST OF MEMBERS TO BE DELETED 00076000
  77. * EPTBL - TABLE OF ENTRY POINTS IN A TEXT DECK 00077000
  78. * 00078000
  79. * 00079000
  80. * REGISTER USAGE: 00080000
  81. * 00081000
  82. * R5 - FILE ITEM POINTER 00082000
  83. * R7,R9 - DICTIONARY POINTERS 00083000
  84. * R8,R14 - LINKAGE REGISTERS 00084000
  85. * R12,R13 - BASE REGISTERS 00085000
  86. * 00086000
  87. * 00087000
  88. * NOTES: 00088000
  89. * 00089000
  90. * NONE 00090000
  91. * 00091000
  92. * 00092000
  93. * OPERATION: 00093000
  94. * 00094000
  95. * THE OPERATION OF TXTLIB DEPENDS ON WHETHER THE CALLING 00095000
  96. * PROGRAM SPECIFIES GENERATE, ADD, MAP, OR DELETE. 00096000
  97. * 00097000
  98. * GENERATE: 00098000
  99. * TXTLIB CALLS THE ERASE COMMAND PROGRAM TO ERASE THE 00099000
  100. * EXISTING TEXT LIBRARY (IF ANY) WITH THE SAME NAME AS 00100000
  101. * THE ONE TO BE CREATED. NEXT, TXTLIB INITIALIZES THE 00101000
  102. * INDEX AND SAVES IT FOR SUBSEQUENT USE TO CALCULATE THE 00102000
  103. * SIZE OF THE FIRST CONTROL SECTION. THEN TXTLIB CALLS 00103000
  104. * THE STATE FUNCTION PROGRAM TO DETERMINE IF THE FIRST 00104000
  105. * INPUT TEXT FILE SPECIFIED EXISTS. IF IT DOES NOT, 00105000
  106. * TXTLIB SIGNALS AN ERROR BY MEANS OF A TERMINAL MESSAGE 00106000
  107. * AND PROCESSES THE NEXT INPUT TEXT FILE. 00107000
  108. * 00108000
  109. * IF THE TEXT FILE EXISTS, TXTLIB CALLS THE RDBUF 00109000
  110. * FUNCTION PROGRAM TO READ THE FIRST RECORD IN THE FILE 00110000
  111. * AND CHECKS THE FIRST COLUMN FOR A BLANK ( INDICATING 00111000
  112. * THAT IT MAY BE AN OS LINKAGE EDITOR CONTROL CARD) AND 00112000
  113. * IF IT IS NOT, THE RECORD IS PASSED ON TO BE WRITTEN OUT 00113000
  114. * (THIS PROCESS IS FURTHER DESCRIBED LATER). IF THE FIRST 00114000
  115. * COLUMN IS BLANK AND A LINKAGE EDITOR OPERATOR IS DETECTED, 00115000
  116. * CONTROL IS PASSED TO THE APPROPRIATE PROCESSING 00116000
  117. * ROUTINE, OTHERWISE THE CARD WILL BE WRITTEN TO THE TEXT DECK 00117000
  118. * AND PROCESSED IN THE STANDARD FASHION. 00118000
  119. * 00119000
  120. * THE LINKAGE EDITOR OPERATORS THAT ARE PROCESSED CONSIST 00120000
  121. * OF THREE: ENTRY, ALIAS AND NAME. THE FOLLOWING DESCRIBES 00121000
  122. * THE EFFECT OF EACH OPERATOR. 00122000
  123. * 00123000
  124. * ENTRY - THE FIRST VALID ENTRY CARD ENCOUNTERED SETS THE ENTRY 00124000
  125. * POINT NAME FIELD IN THE LDT CARD, WHICH IS TO 00125000
  126. * BE PUT OUT WHEN THE TEXT DECK IS COMPLETED. 00126000
  127. *| ERRONEOUS ENTRY FORMATS OR INVALID ENTRY POINTS P3098 00127000
  128. *| WILL RESULT IN A WARNING MESSAGE TYPED AT THE TERMIP3098 00128000
  129. * ALIAS - ALL VALID ALIAS NAMES ARE STACKED IN A TABLE, (A MAX OF 00129000
  130. * 16, PER LINKAGE EDITOR LIMITS) AS ENCOUNTERED. 00130000
  131. * NAME - THE NAME CARD IS USED AS ONE OF TWO MEANS OF DELIMITING 00131000
  132. * A TEXT DECK(THE OTHER IS DESCRIBED UNDER 'END' CARD 00132000
  133. * PROCESSING). IF THE NAME CARD CONTAINS AN INVALID 'NAME', 00133000
  134. * THE TEXT DECK IS NOT ADDED TO THE LIBRARY, AND THE 00134000
  135. * USER IS INFORMED VIA A CONSOLE MESSAGE. 00135000
  136. * IF THE NAME CARD IS VALID, AN LTD CARD AND A FILE 00136000
  137. * DELIMITER RECORD ARE ADDED TO THE FILE, AND AN ENTRY 00137000
  138. * IS MADE IN THE DICTIONARY FOR THE 'NAME', WITH THE 00138000
  139. * 'C' BYTE ALIAS FLAG INITIALIZED TO X'00', AND THE 00139000
  140. * MEMBER POINTER SET TO THE PROPER ITEM 00140000
  141. * NUMBER. THE ALIAS TABLE IS THEN CHECKED TO SEE IF ANY 00141000
  142. * ALIAS NAMES WERE INCLUDED. IF SO, THE NAMES ARE ENTERED 00142000
  143. * IN THE DICTIONARY, WITH THE SAME MEMBER POINTER AS THE 00143000
  144. * 'NAME' ENTRY, BUT THE 'C' BYTE SET TO X'80' 00144000
  145. * TO INDICATE AN ALIAS. ALL ENTRIES IN THE ENTRY POINT 00145000
  146. * TABLE ARE IGNORED, ALL SWITCHES AND TABLE 00146000
  147. * POINTERS ARE RE-INITIALIZED AND THE RECORD IS 00147000
  148. * READ IN AND PROCESSED. 00148000
  149. *| NOTE: ERRONEOUS NAME AND ALIAS CARD FORMATS WILL CAUP3098 00149000
  150. *| AN ERROR MESSAGE TO BE GENERATED, AND THE P3098 00150000
  151. *| MEMBER WILL NOT BE ADDED TO THE DICTIONARY. P3098 00151000
  152. *| SETSSI - THE SSI INFORMATION (8 CHARACTER MAX) IS MOVED INTP3098 00152000
  153. *| THE LDT CARD FOR RETENTION. IF FORMAT ERRORS ARE P3098 00153000
  154. *| DETECTED, THE CARD IGNORED AND NO MESSAGES ARE P3098 00154000
  155. *| GENERATED. P3098 00155000
  156. * 00156000
  157. * IF THE FIRST COLUMN IS NOT BLANK, OR IS NOT ONE OF THE 00157000
  158. * ABOVE, THE PROGRAM INCREMENTS THE OUTPUT RECORD 00158000
  159. * POINTER AND WRITES OUT THE RECORD. THE FOLLOWING OPERATIONS 00159000
  160. * ARE THEN PERFORMED ACCORDING TO THE RECORD TYPES: 00160000
  161. *| LDT - THE RECORD IS IGNORED (I.E. THE OUTPUT FILE POINTER P3098 00161000
  162. * IS SET TO THE POSITION BEFORE THIS 00162000
  163. * RECORD WAS WRITTEN) SINCE THE PROGRAM WILL PUT OUT 00163000
  164. *| IT'S OWN LDT RECORD. A SWITCH IS TURNED ON TO P3098 00164000
  165. *| INDICATE THE SITUATION, SINCE LDT CARDS CAN BE USED P3098 00165000
  166. *| DELIMIT CMS-TYPE TEXT DECKS. P3098 00166000
  167. * END - A SWITCH IS TURNED ON TO INDICATE THAT AN 'END' 00167000
  168. * CARD HAS BEEN READ. THE PROCESSING OF 00168000
  169. * A NAME CARD OR THE NEXT VALID TEXT DECK CARD, 00169000
  170. * OTHER THAN AN END OR LTD CARD WILL RESET THIS SWITCH. 00170000
  171. * NOTE - AT THIS POINT, A CHECK IS MADE TO DETERMINE 00171000
  172. * IF THE RECORD BEING PROCESSED IS A TEXT DECK 00172000
  173. * RECORD(COL. 1 = X'02'). IF NOT THE PROGRAM RETURNS 00173000
  174. *| TO GET THE NEXT RECORD. OTHERWISE, THE LDT SWITCH IP3098 00174000
  175. * CHECKED, AND, IF ON, IT IS INDICATIVE OF 00175000
  176. * A CMS TYPE TEXT DECK(I.E. ALL ENTRY 00176000
  177. * POINTS ARE TO BE ENTERED IN THE DICTIONARY). THE 00177000
  178. * PROGRAM PUTS ALL TABLED ENTRY POINTS IN THE 00178000
  179. * DICTIONARY, PUTTING IN THE PROPER MEMBER POINTER 00179000
  180. * AND SETTING THE 'C' BYTE TO INDICATE AN ALIAS (X'80'), 00180000
  181. * AFTER THE LTD CARD AND DELIMITER RECORD HAVE 00181000
  182. * BEEN PUT AT THE END OF THE MEMBER. PROCESSING IS 00182000
  183. * THEN RESUMED AFTER THE SWITCHES AND TABLES HAVE BEEN 00183000
  184. * RESET. 00184000
  185. * ESD - IF THE RECORD IS AN ESD RECORD, TXTLIB GETS THE FIRST 00185000
  186. * ESD DATA ITEM IN THE RECORD. IF THIS DATA ITEM IS FOR 00186000
  187. * A SECTION DEFINITION (SD) OR LABEL DEFINITION (LD), 00187000
  188. * TXTLIB PUTS THE ASSOCIATED NAME INTO THE NEXT AVAILABLE 00188000
  189. * ENTRY IN THE ENTRY POINT TABLE, UP TO A MAXIMUM OF 00189000
  190. *| 255 ENTRIES PER MEMBER. IT THEN OBTAINS AND P3098 00190000
  191. * SIMILARLY PROCESSES THE NEXT ESD DATA ITEM IN THE 00191000
  192. * RECORD. IF THE OBTAINED DATA ITEM IS NEITHER FOR A 00192000
  193. * SECTION DEFINITION NOR FOR A LABEL DEFINITION, TXTLIB 00193000
  194. * SKIPS IT AND OBTAINS THE NEXT DATA ITEM. WHEN ALL THE 00194000
  195. * DATA ITEMS IN THE ESD RECORD ARE PROCESSED, TXTLIB 00195000
  196. * READS AND PROCESSES THE NEXT RECORD IN THE INPUT FILE. 00196000
  197. * THIS TABLE IS USED TO VERIFY THE 'ENTRY POINT' 00197000
  198. * SPECIFIED IN THE ENTRY CARD, OR TO FILL IN THE DICTIONARY 00198000
  199. * ENTRIES IF THE CMS TYPE DICTIONARY IS USED. 00199000
  200. * 00200000
  201. * WHEN AN END-OF-FILE ON THE INPUT TEXT FILE IS 00201000
  202. * ENCOUNTERED, TXTLIB CALLS THE FINIS COMMAND PROGRAM TO 00202000
  203. * CLOSE THAT FILE, OBTAINS THE NEXT FILE, AND ADDS ITS 00203000
  204. * CONTENTS TO THE TEXT LIBRARY IN A SIMILAR FASHION. 00204000
  205. * 00205000
  206. * WHEN THE LAST INPUT FILE HAS BEEN PROCESSED, TXTLIB 00206000
  207. * SUCCESSIVELY CALLS THE WRBUF FUNCTION PROGRAM TO WRITE 00207000
  208. * THE DICTIONARY (72 BYTES AT A TIME) AT THE END OF THE 00208000
  209. * TEXT LIBRARY, CONSTRUCTS A DICTIONARY HEADER RECORD, 00209000
  210. * AND WRITES THE HEADER RECORD AT THE BEGINNING OF THE 00210000
  211. * TEXT LIBRARY. (TXTLIB HAS LEFT ROOM AT THE BEGINNING 00211000
  212. * OF THE LIBRARY FOR THE HEADER RECORD.) FINALLY, TXTLIB 00212000
  213. * CALLS THE FINIS COMMAND PROGRAM TO CLOSE THE TEXT 00213000
  214. * LIBRARY AND RETURNS TO THE CALLING PROGRAM. 00214000
  215. * 00215000
  216. * OVERFLOW: THE MAXIMUM NUMBER OF ENTRIES ALLOWED IN THE 00216000
  217. * DICTIONARY IS 1000. EACH TIME AN ENTRY 00217000
  218. * IS MADE, THE TOTAL IS CHECKED. IF THE NUMBER 00218000
  219. * EXCEEDS 1000, THE POINTER TO THE END OF THE FILE IS SET 00219000
  220. * BACK TO THE END OF THE LAST COMPLETE CSECT, THE 00220000
  221. * DICTIONARY IS WRITTEN OUT, AND THE PROGRAM COMPLETES IN 00221000
  222. * THE NORMAL WAY , ISSUING A MESSAGE TO INDICATE 00222000
  223. * WHICH CSECT CAUSED AN OVERLOW. 00223000
  224. * 00224000
  225. * ADD: TXTLIB CALLS THE STATE FUNCTION PROGRAM TO 00225000
  226. * DETERMINE WHETHER THE TEXT LIBRARY TO BE ADDED TO 00226000
  227. * EXISTS. IF IT DOES NOT, TXTLIB TYPES A MESSAGE AT THE 00227000
  228. * TERMINAL TO THAT EFFECT AND RETURNS TO THE CALLING 00228000
  229. * PROGRAM. IF THE LIBRARY EXISTS, TXTLIB CALLS THE RDBUF 00229000
  230. * FUNCTION PROGRAM TO READ THE HEADER RECORD INTO MAIN 00230000
  231. * STORAGE. FROM THE HEADER RECORD, TXTLIB OBTAINS THE 00231000
  232. * LOCATION AND SIZE OF THE DICTIONARY. IT AGAIN CALLS 00232000
  233. * RDBUF TO READ THE ENTIRE DICTIONARY INTO MAIN STORAGE. 00233000
  234. * THEN, TXTLIB SETS THE WRITE POINTER TO THE LOCATION OF 00234000
  235. * THE DICTIONARY IN THE TEXT LIBRARY. THIS IS DONE SO 00235000
  236. * THAT THE DICTIONARY WILL BE WRITTEN OVER WHEN THE NEW 00236000
  237. * TEXT FILES ARE ADDED TO THE LIBRARY. IT THEN ADDS THE 00237000
  238. * NEW TEXT FILES TO THE END OF THE LIBRARY BY BRANCHING TO 00238000
  239. * THE GENERATE ROUTINE 00239000
  240. * 00240000
  241. * MAP: TXTLIB CALLS THE STATE FUNCTION PROGRAM TO 00241000
  242. * DETERMINE WHETHER THE TEXT LIBRARY WHOSE CONTROL 00242000
  243. * SECTION AND ENTRY POINT NAMES ARE TO BE PLACED INTO A 00243000
  244. * DISK FILE EXISTS. IF IT DOES NOT, TXTLIB TYPES A 00244000
  245. * MESSAGE AT THE TERMINAL TO THAT EFFECT AND RETURNS TO 00245000
  246. * THE CALLING PROGRAM. IF THE LIBRARY EXISTS, TXTLIB 00246000
  247. * READS THE HEADER RECORD INTO MAIN STORAGE AND THEN 00247000
  248. * READS THE DICTIONARY INTO MAIN STORAGE. NEXT, IT CALLS 00248000
  249. * THE FINIS COMMAND PROGRAM TO CLOSE THE LIBRARY. TXTLIB 00249000
  250. * THEN CALLS THE ERASE COMMAND PROGRAM TO ERASE THE 00250000
  251. * PREVIOUSLY CREATED DISK FILE (THAT IS, THE MAP FILE), 00251000
  252. * IF ONE EXISTS. NEXT, TXTLIB CALLS THE WRBUF FUNCTION 00252000
  253. * PROGRAM TO WRITE A HEADING INTO THE NEW MAP FILE BEING 00253000
  254. * CREATED. SUBSEQUENTLY, TXTLIB REPEATEDLY CALLS THE 00254000
  255. * WRBUF FUNCTION PROGRAM TO WRITE A RECORD INTO THE NEW 00255000
  256. * MAP FILE FOR EACH ENTRY IN THE DICTIONARY. IF THE 00256000
  257. * DICTIONARY ENTRY REPRESENTS THE ITEM IN A CONTROL SECTION 00257000
  258. * OR A NAME, THE CORRESPONDING RECORD CONSISTS OF THE NAME 00258000
  259. * OF THE CONTROL SECTION AND THE LOCATION OF THE CONTROL 00259000
  260. * SECTION WITHIN THE TEXT LIBRARY IN TERMS OF AN INDEX VALUE. 00260000
  261. * IF THE DICTIONARY ENTRY IS FOR AN ENTRY POINT (THAT IS, A 00261000
  262. * LD OR ALIAS), THE CORRESPONDING RECORD CONSISTS 00262000
  263. * ONLY OF THE ENTRY POINT OR ALIAS NAME. WHEN ALL DICTIONARY 00263000
  264. * ENTRIES ARE PROCESSED, TXTLIB WRITES A RECORD 00264000
  265. * CONTAINING A COUNT OF THE NUMBER OF ENTRIES IN THE 00265000
  266. * DICTIONARY INTO THE MAP FILE. IT THEN CALLS THE FINIS 00266000
  267. * COMMAND PROGRAM TO CLOSE THE MAP AND RETURNS TO THE 00267000
  268. * CALLING PROGRAM. THE ABOVE PROCEDURE IS VALID IF THE 00268000
  269. * OPTION "DISK" HAD BEEN SPECIFIED ALONG WITH "MAP". IF 00269000
  270. * "TERM" IS SPECIFIED, TXTLIB CALLS THE CONWRITE FUNCTION 00270000
  271. * PROGRAM, RATHER THAN WRBUF, TO TYPE THE RECORDS 00271000
  272. * PRODUCED FOR THE ENTRIES IN THE DICTIONARY AT THE 00272000
  273. * TERMINAL. IF "PRINT" IS SPECIFIED, TXTLIB CALLS PRINTIO 00273000
  274. * TO OUTPUT THE DICTIONARY RECORDS TO THE PRINTER. 00274000
  275. * 00275000
  276. * DELETE: TXTLIB TAKES A FILENAME OF FILETYPE TXTLIB AND 00276000
  277. * A LIST OF MEMBER NAMES IN THE TXTLIB FILE TO BE DELETED. 00277000
  278. * TXTLIB SCANS THE DICTIONARY AND COPIES EVERYTHING NOT 00278000
  279. * FOUND IN THE LIST OF MEMBER NAMES TO BE DELETED INTO A 00279000
  280. * NEW DUMMY FILE, TXTLIB CMSUT1. A NEW DICTIONARY IS 00280000
  281. * CREATED FOR THIS NEW TXTLIB FILE. WHEN THE OPERATION 00281000
  282. * IS COMPLETE, THE ORIGINAL TXTLIB FILE IS ERASED AND THE 00282000
  283. * TXTLIB CMSUT1 HAS ITS NAME ALTERED TO THAT OF THE 00283000
  284. * ORIGINAL FILE. IF THE NEW FILE (TXTLIB CMSUT1) IS A @VA13116 00284000
  285. * NULL FILE AS A RESULT OF THE LAST MEMBER HAVING BEEN @VA13116 00284250
  286. * DELETED THEN IT WILL BE ERASED AND A WARNING MESSAGE @VA13116 00284500
  287. * WILL BE ISSUED TO THE USER. @VA13116 00284750
  288. * 00285000
  289. * NOTE: IF A MEMBER NAME OCCURS TWICE WITHIN THE TXTLIB 00286000
  290. * FILE, ONLY THE FIRST OCCURRENCE IS DELETED. A MEMBER 00287000
  291. * NAME MAY BE ENTERED INTO THE ARGUMENT LIST TWO OR MORE 00288000
  292. * TIMES TO DELETE TWO OR MORE MEMBERS WITH THE SAME MEMBER 00289000
  293. * NAME. MEMBERS MUST BE DELETED BY THEIR INITIAL ENTRY IN 00290000
  294. * THE DICTIONARY(I.E. THEIR 'NAME' OR THE FIRST SD NAME) 00291000
  295. * ANY ATTEMPT TO DELETE A SPECIFIC ALIAS 00292000
  296. * OR ENTRY POINT WITHIN A MEMBER WILL RESULT IN A NOT 00293000
  297. * FOUND MESSAGE. THE ENTIRE MEMBER AND ALL IT'S REFERENCES 00294000
  298. * WILL BE DELETED. 00295000
  299. * 00296000
  300. * TABLE/RECORD FORMATS: THE FORMATS OF THE TEXT LIBRARY 00297000
  301. * DICTIONARY AND THE DICTIONARY HEADER RECORD ARE 00298000
  302. * DESCRIBED BELOW. TABLES ARE CONSTRUCTED FOR ENTRY POINTS 00299000
  303. * AND ALIAS NAMES IN EACH TEXT DECK. 00300000
  304. * 00301000
  305. * TEXT LIBRARY DICTIONARY: THIS DICTIONARY HAS ROOM FOR 00302000
  306. * 1000 ENTRIES. EACH ENTRY IS ASSOCIATED WITH EITHER A 00303000
  307. * LINKAGE EDITOR NAME OR ALIAS CONTROL CARD 'NAME', 00304000
  308. * CONTROL SECTION NAME (SECTION DEFINITION ESD ITEM) OR 00305000
  309. * AN ENTRY POINT NAME (LABEL DEFINITION ESD ITEM). AN 00306000
  310. * ENTRY IS 12 BYTES IN LENGTH AND CONTAINS FOUR FIELDS. 00307000
  311. * THE NAME FIELD (8 BYTES) CONTAINS EITHER THE NAME 00308000
  312. * OR ALIAS 'NAME' FROM THE LINKEDIT CONTROL CARD, THE CONTROL 00309000
  313. * SECTION OR ENTRY POINT NAME. THE INDEX FIELD (2 BYTES) 00310000
  314. * CONTAINS THE LOCATION OF THE CORRESPONDING CONTROL 00311000
  315. * SECTION FROM THE START OF THE TEXT LIBRARY. THIS FIELD 00312000
  316. * IS EXPRESSED AS AN ITEM NUMBER. ONE BYTE IS RESERVED, 00313000
  317. * AND THE LAST FIELD, THE 'C' BYTE, IS USED TO INDICATE 00314000
  318. * WHETHER THE ENTRY IS THAT OF A NAME 00315000
  319. * OR AN ALIAS/ENTRY POINT. 00316000
  320. * TEXT LIBRARY DICTIONARY IS ILLUSTRATED IN FIGURE 32. 00317000
  321. * 00318000
  322. * DICTIONARY HEADER RECORD: THE DICTIONARY HEADER RECORD 00319000
  323. * DEFINES THE LOCATION AND SIZE OF THE TEXT LIBRARY 00320000
  324. * DICTIONARY. IT IS AN 80-BYTE RECORD AND CONTAINS THREE 00321000
  325. * MEANINGFUL FIELDS. THE FIRST FIELD (BYTES 01-06) IS A 00322000
  326. * CMS PDS IDENTIFIER, 'DMSLIB'. THE SECOND 00323000
  327. * FIELD(BYTES 07-08) CONTAINS THE POINTER TO THE FIRST 00324000
  328. * RECORD IN THE FILE CONTAINING THE DICTIONARY. THE THIRD FIELD, 00325000
  329. * (BYTES 09-12), CONTAINS THE SIZE OF THE DICTIONARY 00326000
  330. * IN BYTES. THE DICTIONARY HEADER RECORD IS ILLUSTRATED 00327000
  331. * IN FIGURE 33. 00328000
  332. * 00329000
  333. * 00330000
  334. * 1 9-10 11 12 00331000
  335. * <-------------12 BYTES--------------------> 00332000
  336. * 00333000
  337. * ----------------------------------------- 00334000
  338. * | | | | | ' 00335000
  339. * | NAME1 | INDEX1 |RES |CBYT1| ' 00336000
  340. * | | | | | ' 00337000
  341. * ----------------------------------------- ' 00338000
  342. * | | | | | ' 00339000
  343. * | NAME2 | INDEX2 |RES |CBYT2| ' 00340000
  344. * | | | | | ' 00341000
  345. * ----------------------------------------- > MAXIMUM OF 00342000
  346. * | | | | | ' 1000 ENTRIES 00343000
  347. * | | | | | ' 00344000
  348. * | | | | | ' 00345000
  349. * ----------------------------------------- ' 00346000
  350. * | | | | | ' 00347000
  351. * | NAMEN | INDEXN |RES |CBYTN| ' 00348000
  352. * | | | | | ' 00349000
  353. * ----------------------------------------- ' 00350000
  354. * 00351000
  355. * FIGURE 32. TEXT LIBRARY DICTIONARY FORMAT 00352000
  356. * 00353000
  357. * ---------------------------------------- 00354000
  358. * | BYTES | CONTENTS | 00355000
  359. * ---------------------------------------- 00356000
  360. * | | | 00357000
  361. * | 01-06 | FILE I.D. | 00358000
  362. * | | | 00359000
  363. * | 07-08 | POINTER TO START OF | 00360000
  364. * | | DICTIONARY | 00361000
  365. * | | | 00362000
  366. * | 09-12 | SIZE OF DICTIONARY - 12 | 00363000
  367. * | | IN BYTES | 00364000
  368. * | | | 00365000
  369. * | 13-80 | NOT USED | 00366000
  370. * | | | 00367000
  371. * ---------------------------------------- 00368000
  372. * 00369000
  373. * FIGURE 33. TEXT LIBRARY DICTIONARY HEADER RECORD FORMAT 00370000
  374. *. 00371000
  375. DMSLBT CSECT 00372000
  376. ENTRY TXTLIB P3128 00373000
  377. TXTLIB EQU DMSLBT 00374000
  378. USING TXTLIB,R15 TEMP ADDRESSABILITY 00375000
  379. STM R0,R15,SAVEREG SAVE REGISTERS 00376000
  380. B REGSAVED BRANCH AROUND SAVEAREA @VA04699 00377000
  381. SPACE 1 00378000
  382. * SAVE AREA WAS REPLACED HERE TO MAINTAIN COMPATABILITY AND TO ALLOW 00379000
  383. * GREATER EASE IN MODIFICATION OF THE CODE IN THE FIRST 4K OF DMSLBT 00380000
  384. SPACE 1 00381000
  385. SAVEREG DC 16F'0' REGISTER SAVEAREA @VA04699 00382000
  386. SPACE 1 00383000
  387. REGSAVED EQU * @VA04699 00384000
  388. DROP R15 00385000
  389. LR R12,R15 ESTABLISH ADDRESSABILITY 00386000
  390. LA R13,2048(,R12) SET UP SECOND BASE REG 00387000
  391. LA R13,2048(,R13) 00388000
  392. USING TXTLIB,R12,R13 00389000
  393. USING NUCON,R0 00390000
  394. USING DICTDS,R7 SET UP ADDR FOR NEW DICT. DSECT 00391000
  395. SPACE 2 00392000
  396. *************************************************************** 00393000
  397. * 00394000
  398. * CHECK P-LIST FOR BASIC ELEMENTS 00395000
  399. * 00396000
  400. CLI 8(R1),X'FF' CHECK FOR FENCE IN FUNCT. POSIT. 00397000
  401. BE NOFUNCT ERROR..NO FUNCTION SPECIFIED P3128 00398000
  402. CLI 8(R1),C'(' IS IT OPEN PARENS ? P3128 00399000
  403. BNE VERFUNCT IF NOT, VERIFY VALIDITY P3128 00400000
  404. NOFUNCT DMSERR MF=(E,ERLIST),NUM=MSG47ID,LET=E,TEXTA=MSG47 00401000
  405. MVI RETCODE,MSG47RC SET RETURN CODE 00402000
  406. B FINISH WRAP UP THE JOB 00403000
  407. EJECT P3128 00404000
  408. VERFUNCT EQU * 00405000
  409. LA R2,8(,R1) GET THE ADDR OF,FUNCTION 00406000
  410. LA R3,FUNCTABC GET NUMBER OF ELEMENTS IN TABLE 00407000
  411. LA R5,FUNCTAB INITIAL ADDR OF FUNCTION TABLE 00408000
  412. VERLOOP EQU * 00409000
  413. CLC 0(8,R5),0(R2) CHECK ALL CHARS IN FUNCT. 00410000
  414. BE FUNCTOK IF IT MATCHES, OK 00411000
  415. LA R5,8(,R5) BUMP TABLE POINTER 00412000
  416. BCT R3,VERLOOP CHECK ALL THE FUNCTIONS IN TABLE 00413000
  417. * 00414000
  418. MVC MSG14FCT(8),0(R2) SET FUNCTION IN MSG 00415000
  419. DMSERR MF=(E,ERLIST),NUM=MSG14ID,LET=E,TEXTA=MSG14 00416000
  420. MVI RETCODE,MSG14RC SET RETURN CODE 00417000
  421. B FINISH END THE JOB 00418000
  422. FUNCTOK EQU * 00419000
  423. CLI 16(R1),X'FF' CHECK FOR SPECIFIED FILE TXTLIB 00420000
  424. BE ERR46 ERROR..NO LIBRARY NAME SPECIFIED P3128 00421000
  425. CLI 16(R1),C'(' IS IT OPEN PARENS ? P3128 00422000
  426. BNE PROCESS IF NOT, OK FOR NOW P3128 00423000
  427. ERR46 EQU * P3128 00424000
  428. DMSERR MF=(E,ERLIST),NUM=MSG46ID,LET=E,TEXTA=MSG46 00425000
  429. MVI RETCODE,MSG46RC SET RETURN CODE 00426000
  430. B FINISH WRAP UP JOB 00427000
  431. EJECT P3128 00428000
  432. PROCESS EQU * 00429000
  433. LA R0,TABLE COMPUTE THE ADDR OF THE END OF TABLE 00430000
  434. A R0,TBLSZ ADD LENGTH 00431000
  435. ST R0,ATBL2 USE AS ADDRESS OF TABLE2 00432000
  436. MVC TYPLIN(108),SETFREE MOVE VARIABLES TO FREEST 00433000
  437. LD FINIS,FINISET SET REGS FOR SVC'S 00434000
  438. LD STATE,STSET ... 00435000
  439. LD RDBUF,RDSET ... 00436000
  440. LA R5,1 SET TO CONTROL ITEMNO FOR LIBR 00437000
  441. LD FILE,8(,R2) GET NAME OF LIBRARY 00438000
  442. STD FILE,LIBNAM PUT IN P LIST 00439000
  443. ST R2,PPP STORE FOR FUTURE REFERENCE 00440000
  444. CLI 0(R2),C'G' WAS GENLIB CALLED 00441000
  445. BNE LIBMOD NO, MODIFY LIBRARY 00442000
  446. MVC WRLIB(5),ERASET ERASE ANY PREVIOUS LIBRARY 00443000
  447. LA R1,WRLIB ... 00444000
  448. SVC X'CA' ... 00445000
  449. DC AL4(*+4) 00446000
  450. MVC WRLIB(5),WRSET RESET CALL TO WRBUF 00447000
  451. LA R7,TABLE-INDEXL SET TO STORE FIRST ENTRY 00448000
  452. SPACE 2 00449000
  453. GENGO LA R2,8(0,R2) INCREMENT PLIST PTR 00450000
  454. CLI 8(R2),X'FF' CHECK FOR FENCE IN FILE NAME 00451000
  455. BE ERR01 ERROR..NO FILENAME SPECIFIED P3128 00452000
  456. CLI 8(R2),C'(' IS IT OPEN PARENS ? P3128 00453000
  457. BNE FNAMEOK IF NOT, PROCEDE WITH ADD OR GEN P3128 00454000
  458. ERR01 EQU * P3128 00455000
  459. MVC MSG01NME(5),=CL5'FILE' SET UP MSG NAME NOT FOUND 00456000
  460. B SHRTLIST P-LIST IS SHORT, FILE NAME MISSING 00457000
  461. FNAMEOK EQU * 00458000
  462. LA R6,1(0,R5) SET INDEX FOR NO OF PRESENT FL 00459000
  463. MVC LIBADD(4),=AL4(BUFF) ADDRESS OF BUFFER FOR 00460000
  464. SR R14,R14 SET FOR NO ERRORS 00461000
  465. LA R1,ALIASTBL-8 INIT. TBLS. TO PREV. POSIT. 00462000
  466. ST R1,LASTSAVE STORE IN ALIAS ITEM PTR. 00463000
  467. LA R1,EPTBL-8 LOAD INIT. OF ENTRY POINT TABLE 00464000
  468. ST R1,EPEND STORE IN ALIAS TABLE PTR. 00465000
  469. MVI SWS,X'00' SET ALL SWITCHES TO ZERO @VA04662 00466000
  470. MVC LDTNAME(8),LDTNAME-1 INITIALIZE LDT NAME TO BLANKS 00467000
  471. MVC FIRSTSD(8),LDTNAME RE-INIT SD ENTRY 00468000
  472. MVC LDTSSI(8),LDTSSI-1 SET SSI FIELD TO BLANKS P3098 00469000
  473. EJECT 00470000
  474. FILCHK LA R2,8(0,R2) INCREMENT PLIST PTR 00471000
  475. CLI 0(R2),X'FF' END OF PLIST? 00472000
  476. BE WRDICT YES, WRITE DICTIONARY 00473000
  477. CLI 0(R2),C'(' END OF PLIST? P3128 00474000
  478. BE WRDICT YES, WRITE DICTIONARY P3128 00475000
  479. STM R6,R7,SAVE SAVE IN CASE OF OVERFLOW 00476000
  480. LD FILE,0(,R2) GET INPUT FILE NAME 00477000
  481. STD FILE,RNAME SET NAME FOR READIN 00478000
  482. MVC RMODE(2),SETMODE RESET MODE TO ' ' 00479000
  483. STD STATE,RDISK SEE IF FILE EXISTS 00480000
  484. LA R1,RDISK 00481000
  485. SVC X'CA' ... 00482000
  486. DC AL4(NOFILE) ... 00483000
  487. TM FLAGS,SPACE SPACE CHECK DONE? @VA04662 00484000
  488. BO CKDONE YES, DON'T DO AGAIN @VA04662 00485000
  489. BAL R10,XSAVE NO, GO CHECK @VA03771 00486000
  490. CKDONE L R10,FSTLOC GET LOCATION OF FILE STAT TAB @VA03771 00487000
  491. LH R4,26(R10) GET RECORD THIS FILE @VA03771 00488000
  492. N R4,MAXHW CLEAN TOP @VA04662 00489000
  493. L R9,TOTAL GET TOTAL RECORDS LEFT @VA03771 00490000
  494. CR R9,R4 ENOUGH ROOM FOR THIS FILE? @VA03771 00491000
  495. BNH WRERRA NO, THEN ERROR @VA03771 00492000
  496. SR R9,R4 SUBTRACT THIS FILE FROM TOTAL @VA03771 00493000
  497. ST R9,TOTAL RESET TOTAL @VA03771 00494000
  498. OI FLAGS,STFD SET FLAG FOR NONERROR FROM STATE @VA04662 00495000
  499. MVC RMODE(2),FMODE(R10) SET MODE OF FILE 00496000
  500. CLC FSIZE(4,R10),RSIZE CHECK LENGTH OF FILE 00497000
  501. BNE BADSIZE WRONG RECORD SIZE 00498000
  502. CLI FFORM(R10),C'F' IS IT FIXED FORMAT 00499000
  503. BNE BADSIZE SAME DIFFERENCE, REJECT IT 00500000
  504. MVC RADD(4),=AL4(BUFF) RESET BUFFER ADDR 00501000
  505. STD RDBUF,RDISK RESET SVC NAME 00502000
  506. CLM R5,M1,HFF IS THIS 'FF' BOUNDARY? @VA04072 00503000
  507. BNE RDCRD BRANCH IF NOT @VA04072 00504000
  508. LA R5,M1(,R5) DO NOT ALLOW 'FF' BOUNDARY @VA04072 00505000
  509. LA R6,M1(,R6) ALSO FOR DICTIONARY @VA04072 00506000
  510. SPACE 2 00507000
  511. RDCRD EQU * 00508000
  512. LA R1,RDISK 00509000
  513. SVC X'CA' ... 00510000
  514. DC AL4(EOFCHK) ... 00511000
  515. CLI BUFF,C' ' CHECK FOR BLANK IN COL. 1 00512000
  516. BNE WRCRD IF NOT, IT IS NOT A LKED. CTL. CRD. 00513000
  517. LA R1,BUFF+1 LOAD ADDR. OF FIRST CHAR. TO SCAN 00514000
  518. BAL R14,SCANOP LINK TO SCAN ROUTINE FOR FIRST PARM 00515000
  519. LTR R15,R15 CHECK IF VALID OPERAND FOUND 00516000
  520. BNZ WRCRD IF NOT, PUT IT IN DECK 00517000
  521. LA R1,OPTBL SET BASE OF OPERAND DSECT 00518000
  522. LA R3,OPTBLQTY LOAD NO. OF OPERANDS IN TABLE 00519000
  523. USING OPTBLDS,R1 EST. ADDRESSABILITY FOR OPERAND DSECT 00520000
  524. OPTSRCH EQU * 00521000
  525. CLC OPERAND(8),OPNAME COMP. OPER. IN CARD TO TABLE 00522000
  526. BE OPRTNAD IF EQUAL, GO TO APPROP. ROUTINE 00523000
  527. LA R1,12(,R1) BUMP DSECT BASE TO NEXT TABLE ENTRY 00524000
  528. BCT R3,OPTSRCH LOOP THROUGH TABLE 00525000
  529. B WRCRD IF NOT FOUND, WRITE CARD TO TEXT FILE 00526000
  530. XSAVE L R15,AADTLKW ADDRESS OF LOOKUP @VA03771 00527000
  531. LR R9,R14 PRESERVE R14 @VA03771 00528000
  532. LA R1,XLIST LOAD ADDR PLIST FOR LOOKUP @VA03771 00529000
  533. BALR R14,R15 @VA03771 00530000
  534. LR R14,R9 RESTORE R14 @VA03771 00531000
  535. LTR R15,R15 ERROR FROM LOOKUP? @VA03771 00532000
  536. BNZ WRERRA YES, ERROR @VA03771 00533000
  537. SH R0,=H'3' SAVE SOME FOR INDEX/HDR @VA03771 00534000
  538. BM WRERRA NO, THEN SAY SO @VA03771 00535000
  539. LR R4,R0 GET DISK SPACE FROMLOOKUP @VA03771 00536000
  540. MH R4,=H'10' CONVERT TO RECORDS/BLOCK @VA03771 00537000
  541. ST R4,TOTAL SAVE IN TOTAL FIELD @VA03771 00538000
  542. OI FLAGS,SPACE SET SPACE CHECK BIT @VA04662 00539000
  543. BR R10 @VA03771 00540000
  544. EJECT P3128 00541000
  545. NAME EQU * 00542000
  546. TM SWS,FLUSH CHECK IF ERRORS DETECTED IN DECK @VA04662 00543000
  547. BO NAMENG IF SO, SEND MSG AND DROP DECK @VA04662 00544000
  548. TM SWS,END+INCL END OR INCLUDE CARD READ? @VA04662 00545000
  549. BZ NAMEIGN NO, WARN USER AND IGNORE CARD @VA04662 00546000
  550. L R1,OPEND LOAD ADDR OF DELIMITER AFTER 'NAME' 00547000
  551. LA R1,1(,R1) BUMP TO NEXT POSITION FOR SCAN 00548000
  552. BAL R14,SCANOP GET NEXT OPERADN 00549000
  553. B *+4(R15) BRANCH ON R.C. 00550000
  554. B NAMEOK R.C.=0, O.K. 00551000
  555. B NAMENG1 R.C.=4, COMMA DELIMITER, NO GOOD 00552000
  556. B NAMEOK R.C.=8, LONG OPERAND, COULD BE O.K. 00553000
  557. B NAMENG1 R.C.=12, NOT FOUND 00554000
  558. NAMEOK EQU * 00555000
  559. NI SWS,X'FF'-(END+INCL) RESET END & INCL SWITCHES @VA04662 00556000
  560. LA R1,OPERAND SET FOR REPLACE '(R)' CHECK 00557000
  561. LR R3,R0 GET LENGTH OF OPERAND 00558000
  562. REPCHK EQU * 00559000
  563. CLC 0(3,R1),=C'(R)' CHECK FOR REPLACE OPTION 00560000
  564. BE GOTREP 00561000
  565. LA R1,1(,R1) BUMP POINTER BY ONE 00562000
  566. BCT R3,REPCHK LOOP THRU OPENAND 00563000
  567. LTR R15,R15 CHECK IF A LONG NAME WAS PASSED BACK 00564000
  568. BNZ NAMENG1 IF SO, AND NO '(R)' FND., IT NO GOOD 00565000
  569. B OPERSET OPERAND IS READY 00566000
  570. GOTREP EQU * 00567000
  571. SR R0,R3 LOCATION OFFSET 00568000
  572. LA R3,MAXSIZ GET MAXIMUM LENGTH ALLOWED 00569000
  573. SR R3,R0 CALCULATE NO. OF CHAR. TO BLANK 00570000
  574. EX R3,BLKREP BLANK OUT '(R)' PLUS ANYTHING ELSE FOL. 00571000
  575. EJECT P3128 00572000
  576. OPERSET EQU * 00573000
  577. * PUT OUT LDT CARD 00574000
  578. LA R5,1(,R5) BUMP TO NEXT RCD. POINTER 00575000
  579. STH R5,LIBITEM SET POINTER IN P-LIST 00576000
  580. LA R1,LDTAREA GET ADDR OF LDT WORK AREA 00577000
  581. ST R1,LIBADD SET I/O AREA IN P-LIST 00578000
  582. LA R1,WRLIB GET ADDR OF WRITE P-LIST 00579000
  583. SVC 202 WRITE RECORD TO LIBRARY 00580000
  584. DC AL4(WRERR) 00581000
  585. LA R1,EOFMARK GET ADDR OF EOF INDICATOR 00582000
  586. ST R1,LIBADD SET WRITE ADDR PTR TO EOF INDIC. 00583000
  587. LA R5,1(,R5) BUMP ITEM POINTER 00584000
  588. STH R5,LIBITEM SET POINTER TO NEXT RCD. 00585000
  589. LA R1,WRLIB GET ADDR OF WRITE P-LIST 00586000
  590. SVC 202 WRITE RECORD 00587000
  591. DC AL4(WRERR) 00588000
  592. LA R1,BUFF GET NORMAL I/O AREA 00589000
  593. ST R1,LIBADD RESTORE P-LIST 00590000
  594. LA R7,INDEXL(,R7) BUMP POINTER TO DICT. 00591000
  595. C R7,ATBL2 CHECK IF TABLE FULL 00592000
  596. BNL OVRFLO IF SO FORGET THIS ENTRY AND QUIT 00593000
  597. MVC INDXNAME,OPERAND MOVE NAME TO DICT 00594000
  598. XC INDXSPAR(3),INDXSPAR ZAP THE LOW ORD. POSITS. 00595000
  599. STH R6,INDXADDR PUT POINTER TO MEMBER IN DICT 00596000
  600. L R3,LASTSAVE LOAD ADDR OF LAST ENTRY IN ALIAS TBL. 00597000
  601. LA R1,ALIASTBL-8 LOAD ADDR OF INITIAL ALIAS PTR 00598000
  602. SR R3,R1 FIND DIFFERENCE 00599000
  603. BNP ALIASCMP IF ZERO, NONE STACKED FOR THIS DECK 00600000
  604. LA R1,8(R1) POSITION TO FIRST ENTRY 00601000
  605. SRA R3,3 DIVIDE BY 8 TO GET NO. OF ENTRIES 00602000
  606. ALIASDIC EQU * 00603000
  607. LA R7,INDEXL(,R7) BUMP THE POINTER TO THE DICT. 00604000
  608. C R7,ATBL2 CHECK IF OFF DEEP END 00605000
  609. BNL OVRFLO IF SO RESTORE THE DICT. AND QUIT 00606000
  610. MVC INDXNAME,0(R1) MOVE ALIAS NAME INTO DICTIONARY 00607000
  611. STH R6,INDXADDR STORE INDEX INTO DICTIONARY PREV. SET-UP 00608000
  612. MVI INDXCBYT,ALIASID IDENTIFY ITEM AS ALIAS 00609000
  613. MVI INDXSPAR,X'00' ZAP SPARE POSIT 00610000
  614. LA R1,8(,R1) BUMP TO NEXT ITEM IN ALIAS TABLE 00611000
  615. BCT R3,ALIASDIC SET UP EACH ALIAS 00612000
  616. EJECT P3128 00613000
  617. ALIASCMP EQU * 00614000
  618. LA R6,1(,R5) SET FWD. PTR. TO NEXT ITEM TO BE WRITTEN 00615000
  619. RESET EQU * 00616000
  620. STM R6,R7,SAVE UPDATE ITEM AND DICT. PTR SAVE AREA 00617000
  621. LA R1,ALIASTBL-8 GET ADDR OF ALIAS TABLE 00618000
  622. ST R1,LASTSAVE RE-INITIALIZE ALIAS TABLE POINTER 00619000
  623. LA R1,EPTBL-8 RESET E.P. TABLE TO IND. NO ENTRIES 00620000
  624. ST R1,EPEND BY SETTING END = BEGINNING 00621000
  625. MVC LDTNAME(8),LDTNAME-1 INITIALIZE LDT NAME TO BLANKS 00622000
  626. MVC FIRSTSD(8),LDTNAME REINIT SD ENTRY 00623000
  627. MVC LDTSSI(8),LDTSSI-1 SET SSI FIELD TO BLANKS P3098 00624000
  628. NI SWS,X'FF'-(FLUSH+ENTR+LDT) RESET VAR SWITCHES @VA04662 00625000
  629. TM SWS,EOD CHECK IF EOF SENT CTL HERE @VA04662 00626000
  630. BZ CHREAD IF NOT EOF, CHECK END W/ NOTHING @VA04662 00627000
  631. NI SWS,X'FF'-(END+INCL+EOD) RESET SWITCHES @VA04662 00628000
  632. BAL R8,CLOSEIN CLOSE INPUT FILE 00629000
  633. B FILCHK LOOK FOR ANOTHER FILE 00630000
  634. CHREAD EQU * 00631000
  635. TM SWS,END HAS END CARD BEEN READ? @VA04662 00632000
  636. BZ NAMERET IF NAME CARD READ, SW=0 @VA04662 00633000
  637. NI SWS,X'FF'-END ELSE CTL MUST RETURN TO WRITE RCD@VA04662 00634000
  638. B WRCRD SINCE NAME ROUTINE FAKED 00635000
  639. NAMENG1 EQU * 00636000
  640. MVC MSG56RTP(5),NAMEOP SET RCD. TYPE IN MSG 00637000
  641. NAMENG EQU * 00638000
  642. LR R5,R6 IF AN ERROR DETECTED IN TEXT OR NAME CARD 00639000
  643. BCTR R5,0 RESET LIB. PTR. TO PREVIOUS LOCATION 00640000
  644. MVC MSG56NME(8),0(R2) MOVE IN NAME @VA03139 00641000
  645. DMSERR MF=(E,ERLIST),NUM=MSG56ID,LET=E,TEXTA=MSG56 00642000
  646. MVI RETCODE,MSG56RC SET RETURN CODE 00643000
  647. B RESET RESET FOR NEXT TEXT DECK 00644000
  648. EJECT P3128 00645000
  649. NAMEIGN MVC MSG56RTP(5),NAMEOP SET RCD. TYPE IN MSG @VMT3234 00646000
  650. IGNRCD MVC MSG56NME(8),0(R2) MOVE IN NAME @VA03139 00647000
  651. DMSERR MF=(E,ERLIST),NUM=MSG56ID,LET=W,TEXTA=MSG56 @VMT3234 00648000
  652. MVI RETCODE,MSG56RCW SET RETURN CODE @VMT3234 00649000
  653. EJECT @VMT3234 00650000
  654. NAMERET EQU * 00651000
  655. B RDCRD BRANCH TO GET NEXT RECORD 00652000
  656. BLKREP MVC 0(1,R1),BLANKS EXEC. TO GET RID OF REP. OPTION 00653000
  657. * 00654000
  658. ENTRY EQU * ENTRY CARD PROCESSING ROUTINE 00655000
  659. TM SWS,ENTR CHECK IF ENTRY CARD PROCESSED @VA04662 00656000
  660. BO ENTRYCMP IF SO, IGNORE SUBSEQUENT ONES @VA04662 00657000
  661. L R1,OPEND LOAD THE ADDR. OF DELIMITER IN CARD 00658000
  662. LA R1,1(,R1) BUMP TO FIRST POSIT. FOR SCAN 00659000
  663. BAL R14,SCANOP GO TO SCAN FOR ENTRY NAME 00660000
  664. LTR R15,R15 CHECK RET. CODE 00661000
  665. BNZ EPNG IF NOT PROPER E.P. NAME, IT'S NO GOOD 00662000
  666. LA R1,EPTBL GET ADDR OF ENTRY POINT TABLE 00663000
  667. L R3,EPEND GET THE ADDR OF THE LAST E.P. ENTRY 00664000
  668. SR R3,R1 FIND DIFFERENCE 00665000
  669. LA R3,8(,R3) BUMP ONE INDEX FOR ZERO OFFSET 00666000
  670. LTR R3,R3 CHECK IF ANY ENTRIES 00667000
  671. BNP EPNG IF NO ENTRIES, ENTRY CARD INVALID 00668000
  672. SRA R3,3 DIVIDE DIFF. BY 8 FOR NO. OF ENTRIES 00669000
  673. SCANEP EQU * 00670000
  674. CLC 0(8,R1),OPERAND COMPARE TABLE ENTRY TO FOUND OPERAND 00671000
  675. BE EPOK ENTRY NAME MUST MATCH VALID E.P. 00672000
  676. LA R1,8(R1) BUMP TO NEXT POSITION P3098 00673000
  677. BCT R3,SCANEP LOOP THRU E.P. TABLE 00674000
  678. EPNG EQU * 00675000
  679. CLC OPERAND(8),FIRSTSD CHECK FOR FIRST SD, IT IS NOT P0929 00676000
  680. BE EPOK IN TABLE OF ENTRY POINTS P0929 00677000
  681. MVC MSG56RTP(5),ENTRYOP SET TYPE OF ERROR P3098 00678000
  682. B IGNRCD ISSUE MSG AND IGNORE THIS RECORD @VA04662 00679000
  683. EPOK EQU * 00680000
  684. MVC LDTNAME,OPERAND MOVE OPERAND + BLKS. TO LDT CARD 00681000
  685. OI SWS,ENTR SET ENTRY CARD SWITCH @VA04662 00682000
  686. ENTRYCMP EQU * 00683000
  687. B RDCRD GO TO GET NEXT CARD, DO NOT WRITE 00684000
  688. INCLUDE EQU * @VMT8660 00685000
  689. OI SWS,INCL SET INCLUDE SWITCH @VA04662 00686000
  690. B WRCRD GO WRITE IT @VMT8660 00687000
  691. EJECT P3128 00688000
  692. ALIASRT EQU * 00689000
  693. ALIASTST L R1,OPEND POINT TO POSS ALIAS NAME @VMT3234 00690000
  694. LA R1,1(,R1) BUMP TO THE NEXT POSIT FOR SCAN 00691000
  695. BAL R14,SCANOP SCAN THE CARD FOR OPERAND 00692000
  696. B *+4(R15) BRANCH ON R.C. 00693000
  697. B ALIASFND R.C. 0, BLANK DELIMITER 00694000
  698. B ALIASFND R.C. 4, COMMA DELIMITER 00695000
  699. B ALIASRET R.C. 8, LONG OPERAND IS NO GOOD 00696000
  700. B ALIASRET R.C. 12, NOT FOUND 00697000
  701. ALIASFND EQU * 00698000
  702. L R3,LASTSAVE LOAD ADDR OF LAST ALIAS ENTRY 00699000
  703. LA R3,8(,R3) BUMP TO NEXT POSIT 00700000
  704. C R3,ALIASMAX CHECK IF TOO MANY 00701000
  705. BH ALIASRET IF SO IGNORE 00702000
  706. ST R3,LASTSAVE SAVE LAST ENTRY ADDR 00703000
  707. MVC 0(8,R3),OPERAND SET THE OPERAND 00704000
  708. LTR R15,R15 CHECK IF END OF STRING(BLANK DELIM.) 00705000
  709. BZ RDCRD IF SO GET NEXT RECORD 00706000
  710. B ALIASRT LOOP THRU CARD FOR ALIAS'. LOOP 00707000
  711. * WILL BE TERM. BY R.C. FROM SCAN 00708000
  712. * 00709000
  713. ALIASRET EQU * 00710000
  714. OI SWS,FLUSH SET SW TO FLUSH THIS TEXT DECK @VA04662 00711000
  715. MVC MSG56RTP(5),ALIASOP SET MSG RCD TYPE TO ALIAS 00712000
  716. B RDCRD GET NEXT CARD, DO NOT WRITE 00713000
  717. SETSSI EQU * P3098 00714000
  718. L R1,OPEND GET ADDR OF LAST CHAR IN OPERAND P3098 00715000
  719. LA R1,1(,R1) BUMP TO NEXT CHAR. P3098 00716000
  720. BAL R14,SCANOP GET THE SSI INFO. P3098 00717000
  721. LTR R15,R15 IS THERE ANY VALID DATA P3098 00718000
  722. BNZ RDCRD ANY ERRORS AT ALL, IGNORE P3098 00719000
  723. MVC LDTSSI,OPERAND MOVE THE DATA INTO THE LDT CARD P3098 00720000
  724. B RDCRD GET NEXT RECORD P3098 00721000
  725. EJECT 00722000
  726. SCANOP EQU * 00723000
  727. LA R3,BUFFEND LOAD THE ADDR. OF LAST POSIT IN CARD 00724000
  728. SR R3,R1 R1 CONTAINS 1ST CHAR., GET DIFFERENCE 00725000
  729. BNP OPNFND IF NOT, SET R.C. AND RETURN 00726000
  730. LA R15,0 INITIALIZE R.C. TO FOUND 00727000
  731. SCAN EQU * 00728000
  732. CLI 0(R1),C' ' CHECK FOR BLANK 00729000
  733. BNE OPFND IF NON-BLANK, IT'S BEGINING OF FIELD 00730000
  734. LA R1,1(,R1) BUMP TO NEXT POSIT. IN CARD 00731000
  735. BCT R3,SCAN LOOP THROUGH CARD FOR FIELD 00732000
  736. * NO FIELD FOUND 00733000
  737. B OPNFND NP MORE OPERANDS FOUND IN CARD 00734000
  738. OPFND EQU * 00735000
  739. ST R1,OPBEGIN SAVE STARTING LOCATION OF OPERAND 00736000
  740. LA R1,1(,R1) BUMP POINTER TO NEXT LOC. 00737000
  741. BCTR R3,0 DECREMENT CARD COUNT TOO 00738000
  742. SCANBLNK EQU * 00739000
  743. CLI 0(R1),C' ' CHECK FOR NEXT BLANK CHAR. 00740000
  744. BE ENDOP IF FOUND, IT IS END OF FIELD 00741000
  745. CLI 0(R1),C',' CHECK FOR COMMA 00742000
  746. BE DELFND IT IS A VALID DELIM., BUT DIF. R.C. 00743000
  747. LA R1,1(,R1) BUMP TO NEXT CHARACTER 00744000
  748. BCT R3,SCANBLNK LOOP THROUGH CARD 00745000
  749. * NO BREAK FOUND FOR REMAINING OPERAND 00746000
  750. B OPNFND TREAT IT AS THOUGH IT WAS NOT FOUND 00747000
  751. DELFND EQU * 00748000
  752. LA R15,4 SET R.C. TO INDICATE A COMMA DELIMITER 00749000
  753. ENDOP EQU * 00750000
  754. ST R1,OPEND SAVE ENDING POSIT. OF OPERAND 00751000
  755. L R3,OPBEGIN GET BEGINING OF ITEM 00752000
  756. SR R1,R3 GET THE LENGTH OF OPERAND 00753000
  757. CH R1,MAXLEN COMP. TO MAXIMUM ALLOWABLE LENGTH 00754000
  758. BH OPNFND IF OPERAND TOO LARGE, IT'S N.G. 00755000
  759. MVC OPERAND(MAXSIZ),OPERINIT INITIALIZE OPERAND FIELD 00756000
  760. BCTR R1,R0 REDUCE COUNT FOR EXECUTE 00757000
  761. EX R1,MOVOPER MOVE OPERAND FOUND TO SET FIELD 00758000
  762. CLI OPERAND+8,C' ' CHECK FOR G.T. EIGHT CHARACTERS P0929 00759000
  763. BE RCODESET IF EIGHT OR LESS, RCODE OK P0929 00760000
  764. LA R15,8 ELSE SET COND CODE FOR LONG OPERAND P0929 00761000
  765. RCODESET EQU * P0929 00762000
  766. LA R0,1(,R1) SET R0 EQ TO ORIG. LENGTH 00763000
  767. LR R1,R3 CONVENTIONS OF R0= LENG., R1= ADDR. 00764000
  768. BR R14 RETURN TO CALLER 00765000
  769. OPNFND LA R15,12 SET CONDITION CODE TO NOT FOUND 00766000
  770. BR R14 RETURN TO CALLER 00767000
  771. MOVOPER MVC OPERAND(1),0(R3) EXECUTED TO MOVE OPERAND FOUND 00768000
  772. EJECT 00769000
  773. WRCRD EQU * 00770000
  774. LA R5,1(0,R5) INCREMENT ITEM NUMBER AND 00771000
  775. STH R5,LIBITEM STORE IN LIB P LIST 00772000
  776. LA R1,WRLIB WRITE CARD ON LIBRARY 00773000
  777. SVC X'CA' ... 00774000
  778. DC AL4(WRERR) ... 00775000
  779. L R1,BUFF GET CARD TYPE 00776000
  780. CL R1,XLDT "LDT" CONTROL CARD? 00777000
  781. BE PLDT YES. 00778000
  782. CL R1,XEND IS IT AN END CARD 00779000
  783. BE PEND IF SO GO PROCESS END CARD 00780000
  784. CLI BUFF,X'02' IS CARD A A VALID TEXT CARD 00781000
  785. BNE RDCRD IF NOT GET NEXT CARD 00782000
  786. TM SWS,LDT HAS AN LDT CARD BEEN READ? @VA04662 00783000
  787. BO EPDICT IF SO, IT'S A CMS-TYPE DECK @VA04662 00784000
  788. CL R1,XESD IS IT AN ESD CARD P3098 00785000
  789. BE PESD IF SO, PROCESS IT P3098 00786000
  790. B RDCRD ELSE GET NEXT RECORD P3098 00787000
  791. EJECT P3128 00788000
  792. EPDICT EQU * 00789000
  793. * 00790000
  794. * IF AN END CARD HAS BEEN READ, AND A TEXT CARD OTHER THAN A 00791000
  795. * LDT OR END CARD IS READ, ALL ENTRY POINTS ARE 00792000
  796. * PUT INTO THE DICTIONARY, PER THE CMS MODE. 00793000
  797. * THE EXCEPTION BEING IF ALIAS CARDS(I.E. 00794000
  798. * OS TYPE TEXT DECK) HAVE BEEN INCLUDED. THEN THE DECK IS 00795000
  799. * REJECTED. 00796000
  800. * 00797000
  801. ********************************************************************** 00798000
  802. L R3,LASTSAVE GET PTR SAVE FOR ALIAS TABLE 00799000
  803. LA R1,ALIASTBL-8 GET INITIAL LOCATION OF PTR 00800000
  804. SR R3,R1 CHECK IF THERE ARE ANY ENTRIES 00801000
  805. BNP GOODTYPE HAVE A NAME CARD FOR A TERMINATOR 00802000
  806. OI SWS,FLUSH SET SWITCH TO FLUSH IT @VA04662 00803000
  807. MVC MSG56RTP(5),=CL5'NAME' SET 'NAME' AS INVALID CARD 00804000
  808. B NAMENG GO TO PRINT MSG AND RESET 00805000
  809. GOODTYPE EQU * 00806000
  810. STH R5,LIBITEM SET WRITE POINTER IN P-LIST 00807000
  811. LA R1,LDTAREA GET ADDR OF LDT WORK AREA 00808000
  812. ST R1,LIBADD SET I/O AREA IN P-LIST 00809000
  813. LA R1,WRLIB GET ADDR OF WRITE P-LIST 00810000
  814. SVC 202 WRITE OVER CURRENT RCD, IT IS REWRITTEN 00811000
  815. DC AL4(WRERR) 00812000
  816. LA R1,EOFMARK GET ADDR OF EOF INDICATOR 00813000
  817. ST R1,LIBADD SET WRITE ADDR PTR TO EOF INDIC. 00814000
  818. LA R5,1(,R5) BUMP ITEM POINTER 00815000
  819. STH R5,LIBITEM SET POINTER TO NEXT RCD. 00816000
  820. LA R1,WRLIB GET ADDR OF WRITE P-LIST 00817000
  821. SVC 202 WRITE RECORD 00818000
  822. DC AL4(WRERR) 00819000
  823. LA R1,BUFF RESET THE WRITE ADDR 00820000
  824. ST R1,LIBADD IN WRBUFF P-LIST 00821000
  825. L R3,EPEND GET ENTRY POINT TABLE PTR 00822000
  826. LA R1,EPTBL-8 GET INITIAL TABLE PTR 00823000
  827. SR R3,R1 FIND DIFFERENCE 00824000
  828. SRA R3,3 DIVIDE BY 8 FOR COUNT OF ENTRIES 00825000
  829. CLI FIRSTSD,C' ' CHECK IF ANY ENTRIES 00826000
  830. BNE GOTEPS IF SD IN DECK, IT'S GOOD 00827000
  831. OI SWS,FLUSH FOR RECORD, SET TO FLUSH DECK @VA04662 00828000
  832. MVC MSG56RTP(5),=CL5'ESD' SET RECORD TYPE 00829000
  833. B NAMENG GO TO MSG/RESET RTNE. 00830000
  834. EJECT P3128 00831000
  835. GOTEPS EQU * 00832000
  836. TM SWS,FLUSH CHECK IF ERRORS PREV ENCOUNTERED @VA04662 00833000
  837. BO NAMENG IF SO, SEND MSG AND RESET @VA04662 00834000
  838. LA R7,INDEXL(,R7) BUMP TO NEXT SLOT IN DICT. 00835000
  839. C R7,ATBL2 CHECK IF MORE THAN MAX ALLOWABLE 00836000
  840. BNL OVRFLO IF SO, SCRAP THIS DECK AND SALVAGE 00837000
  841. MVC INDXNAME(8),FIRSTSD START DICT. OFF WITH FIRST SD 00838000
  842. STH R6,INDXADDR SET STARTING ITEM OF MEMBER 00839000
  843. MVI INDXCBYT,ALIASID FLAG AS ALIAS 00840000
  844. MVI INDXSPAR,X'00' ZAP SPARE BYTE 00841000
  845. LTR R3,R3 CHECK IF ANY OTHER ENTRIES 00842000
  846. BNP OLDEND IF NOT, DECK IS FINISHED 00843000
  847. LA R1,8(,R1) SET PTR TO BEGINNING OF TABLE 00844000
  848. OLDLOOP EQU * 00845000
  849. LA R7,INDEXL(,R7) BUMP DICT. INDEX TO NEXT POSIT. 00846000
  850. C R7,ATBL2 CHECK IF MORE THAN MAX ALLOWABLE 00847000
  851. BNL OVRFLO IF SO, SCRAP THIS DECK AND SALVAGE 00848000
  852. MVC INDXNAME,0(R1) MOVE NAME INTO DICTIONARY 00849000
  853. STH R6,INDXADDR STORE FIRST ITEM OF MEMBER IN DICT. 00850000
  854. MVI INDXCBYT,ALIASID FLAG ESD ENTRIES AS ALIAS'S 00851000
  855. MVI INDXSPAR,X'00' ZAP THE SPARE POSIT 00852000
  856. LA R1,8(,R1) BUMP TO NEXT ENTRY POINT 00853000
  857. BCT R3,OLDLOOP PUT ALL ENTRY POINTS IN TABLE 00854000
  858. OLDEND EQU * 00855000
  859. LA R6,1(,R5) SET FWD. PTR. TO NEXT ITEM TO BE WRITTEN 00856000
  860. B RESET WHEN FINISHED, RESET FOR NEXT 00857000
  861. SPACE 2 00858000
  862. EOFCHK LA R1,12 SEE IF ERROR IS END OF FILE 00859000
  863. CR 15,1 IS IT? 00860000
  864. BNE RDERR NO, GO TYPE ERROR MESSAGE 00861000
  865. TM SWS,END CHECK IF LAST FILE COMPLETED @VA04662 00862000
  866. BZ CLOSNGO IF END CARD PROCESSED, IT'S OK @VA04662 00863000
  867. OI SWS,EOD INDICATE SITUATION @VA04662 00864000
  868. LA R5,1(,R5) BUMP ITEM POINTER FOR LDT 00865000
  869. B EPDICT IF END CARD READ, TREAT AS CMS TEXT LIB 00866000
  870. CLOSNGO EQU * 00867000
  871. CLI FIRSTSD,C' ' CHECK IF A DECK HAS BEEN STARTED P3098 00868000
  872. BE NODECK IF NO SD, THEN NOTHING VALID P3098 00869000
  873. MVC MSG56RTP(5),=CL5'END' OTHERWISE, A PARTIAL DECK P3098 00870000
  874. OI SWS,EOD SET FOR RESET TO HANDLE SITUATION@VA04662 00871000
  875. B NAMENG PUT OUT ERROR MESSAGE P3098 00872000
  876. NODECK EQU * P3098 00873000
  877. BAL R8,CLOSEIN EOF, CLOSE INPUT FILE 00874000
  878. B FILCHK LOOK FOR ANOTHER FILE 00875000
  879. EJECT 00876000
  880. PLDT EQU * 00877000
  881. OI SWS,LDT INDICATE LDT CARD IN INPUT STREAM@VA04662 00878000
  882. BCTR R5,0 FORGET THAT IT WAS WRITTEN P3098 00879000
  883. B RDCRD READ NEXT CARD 00880000
  884. SPACE 2 00881000
  885. PEND EQU * 00882000
  886. OI SWS,END SET END CARD READ @VA04662 00883000
  887. B RDCRD FOR NOW JUST SET SW AND RET 00884000
  888. SPACE 2 00885000
  889. PESD LA R9,BUFF+16 GET NAME OF ENTRY 00886000
  890. LA R10,16 SETUP BXLE FOR CARD 00887000
  891. LA R11,BUFF ... 00888000
  892. AH R11,BUFF+10 ADD NUM OF BYTES ON CARD 00889000
  893. TSTESD TM 8(R9),X'0E' IS IT ESD 0 OR 1 00890000
  894. BNZ NXTESD NO, LOOK AT NEXT 00891000
  895. L R3,EPEND LOAD ADDR OF LAST TABLE ITEM 00892000
  896. LA R3,8(,R3) BUMP TO NEXT TABLE ELEMENT 00893000
  897. LA R1,EPTBLEND LOAD ADDR OF EP TABLE 00894000
  898. CR R3,R1 CHECK IF OUT OF SPACE 00895000
  899. BNH ESDOK IF MORE, INSERT IT 00896000
  900. OI SWS,FLUSH SET TO FLUSH DECK @VA04662 00897000
  901. MVC MSG56RTP(5),=CL5'ESD' ASSEM LIMIT OF 255 EP'S, DECK 00898000
  902. B RDCRD IS BAD. READ THROUGH THE DECK 00899000
  903. ESDOK EQU * 00900000
  904. ST R3,EPEND UPDATE TABLE POINTER 00901000
  905. MVC 0(8,R3),0(R9) MOVE NAME INTO TABLE 00902000
  906. TM 8(R9),SDFLAG CHECK IF SD ENTRY 00903000
  907. BNZ NXTESD IF NOT GO ON TO NEXT ENTRY 00904000
  908. CLI FIRSTSD,C' ' CHECK IF PREVIOUS SD ENCOUNTERED 00905000
  909. BNE NXTESD IF ALREADY INIT.,GO ON TO NEXT 00906000
  910. MVC FIRSTSD(8),0(R9) ELSE INIT. WITH FIRST SD ENTRY 00907000
  911. S R3,=F'8' BACK OFF LAST ENTRY TABLE ITEM 00908000
  912. ST R3,EPEND AND UPDATE PTR TO IGNORE FIRST SD 00909000
  913. NXTESD BXLE R9,R10,TSTESD BACK FOR ANOTHER, OR... 00910000
  914. B RDCRD DONE, GET ANOTHER CARD 00911000
  915. EJECT 00912000
  916. WRDICT EQU * @VA04662 00913000
  917. TM FLAGS,STFD IS TXTLIB NULL? @VA04662 00914000
  918. BO DICTOK IF EXISTENT, WRITE OUT DICT @VA04662 00915000
  919. L R3,SAVEREG+4 GET ADDR OF P-LIST FROM REG SAVE 00916000
  920. CLI 8(R3),C'G' CHECK TO MAKE SURE THAT IT IS GEN 00917000
  921. BNE FINISH IF NOT, DON'T PUT OUT MSG, LIB IS SAME 00918000
  922. NOLIBGEN EQU * 00919000
  923. MVC MSG213NM(8),LIBNAM SET LIBRARY FILE NAME 00920000
  924. DMSERR MF=(E,ERLIST),NUM=MSG213ID,LET=W,TEXTA=MSG213 00921000
  925. MVI RETCODE,MSG213RC SET RETURN CODE 00922000
  926. B FINISH 00923000
  927. EJECT P3128 00924000
  928. DICTOK EQU * 00925000
  929. LR R5,R6 GET NEXT AVAILABLE ITEM 00926000
  930. STH R5,HITEM PUT IN HEADER 00927000
  931. LA R9,TABLE SET FOR BXLE 00928000
  932. LR R11,R7 SET COMP REG FOR BXLE 00929000
  933. LA R7,INDEXL(,R7) BUMP FOR NEG. ORIGIN 00930000
  934. WRDICT3 EQU * ENTRY FROM DELETE @VA04662 00931000
  935. XC 0(80,R7),0(R7) ZAP THE NEXT 80 BYTES FOR CONSIST. 00932000
  936. SR R7,R9 GET DISPLACEMENT FOR HLST 00933000
  937. ST R7,HLST PUT IN HEADER 00934000
  938. LA R10,DICRCDL LOAD NO. OF CHARS. USED PER RCD. 00935000
  939. STH R5,LIBITEM SET ITEM NUMBER 00936000
  940. LA R1,WRLIB ADDRESS OF SVC P LIST 00937000
  941. WRTAB ST R9,LIBADD ADDRESS TO WRITE FROM 00938000
  942. SVC X'CA' WRITE ENTRYS 00939000
  943. DC AL4(WRERR) ... 00940000
  944. LA R5,1(0,R5) UPDATE ITEMNO 00941000
  945. STH R5,LIBITEM ... 00942000
  946. BXLE R9,R10,WRTAB BACK FOR ANOTHER 00943000
  947. SR R2,R2 CLEAR REG FOR H/W INSERTION @VA08982 00943500
  948. ICM R2,M3,HITEM GET FIRST DICT RECORD @VA08982 00944000
  949. SR R5,R2 NUM OF ITEMS WRITTEN @VA08982 00944500
  950. ST R5,HITEMNO PUT IN HEADER 00945000
  951. MH R5,=H'12' GET NUM DBL WRDS USED 00946000
  952. ST R5,NUMFREE PUT IN HEADER 00947000
  953. LA R5,1 SET TO WRITE HEADER 00948000
  954. STH R5,LIBITEM ... 00949000
  955. MVC HNAME,=C'DMSLIB' MOVE DATA SET I.D. INTO HEADER 00950000
  956. MVI BUFF+20,X'40' BLANK OUT REMAINDER OF BUFFER @VA05059 00951000
  957. MVC BUFF+21(59),BUFF+20 @VA05059 00952000
  958. MVC LIBADD(4),=AL4(BUFF) ADDRESS OF BUFF TO P 00953000
  959. SVC X'CA' WRITE HEADER 00954000
  960. DC AL4(WRERR) .... 00955000
  961. L R2,PPP 00956000
  962. CLI 0(R2),C'D' 00957000
  963. BE DUMERASE 00958000
  964. CLOSE STD FINIS,WRLIB SET TO CLOSE LIBE FILE 00959000
  965. LA R1,WRLIB ... 00960000
  966. CLOSE2 EQU * 00961000
  967. SVC X'CA' FINIS IT 00962000
  968. DC AL4(*+4) ... 00963000
  969. FINISH EQU * 00964000
  970. TM FLAGS,KEYSET WAS DMSKEY NUCLEUS DONE @VA05571 00965000
  971. BNO CLRELPAG NO. SKIP RESET,THEN @VA05571 00966000
  972. DMSKEY RESET @VA05571 00967000
  973. CLRELPAG DMSEXS OI,MISFLAGS,RELPAGES @VA05571 00968000
  974. SR R15,R15 ZAP REGISTER FOR RETURN 00969000
  975. IC R15,RETCODE SET RETURN CODE 00970000
  976. LM R0,R14,SAVEREG RESTORE REGS 00971000
  977. * 00972000
  978. BR 14 RETURN TO CALLER 00973000
  979. EJECT 00974000
  980. LIBMOD STD STATE,WRLIB SEE IF LIBE FILE EXISTS 00975000
  981. MVC LMODE(2),SETMODE ... 00976000
  982. LA R1,WRLIB ... 00977000
  983. SVC X'CA' ... 00978000
  984. DC AL4(NOLIBE) ... 00979000
  985. L R10,FSTLOCL ... 00980000
  986. CLI 0(R2),C'M' MAP REQUESTED? @VA04791 00981000
  987. BE ROEXTOK YES - R/O DISK IS OK @VA04791 00982000
  988. TM 31(R10),X'40' READ ONLY EXT? @VA04531 00983000
  989. BO RODISK YES, INDICATE R/O MSG37 @VA11614 00984000
  990. ROEXTOK EQU * @VA04791 00985000
  991. MVC XMODE(2),FMODE(R10) GET CORRECT MODE FOR SPACE @VA04531 00986000
  992. * CHECK 00987000
  993. CLC FSIZE(4,R10),RSIZE IS THE LRECL 80 BYTES 00988000
  994. BNE BADLIBR IF NOT REJECT IT 00989000
  995. CLI FFORM(R10),C'F' CHECK IF FIXED LENGTH RECORDS 00990000
  996. BE LIBROK IF SO, CONTINUE PROCESSING 00991000
  997. BADLIBR MVC MSG56NME,LIBNAM MOVE LIBRARY NAME INTO MSG 00992000
  998. MVC MSG56TYP,LTYPE MOVE IN LIBR FILE TYPE 00993000
  999. MVC MSG56RTP(5),MSG56RTP-1 BLANK OUT RECORD TYPE 00994000
  1000. B BADFORM TYPE OUT MSG 00995000
  1001. LIBROK EQU * 00996000
  1002. MVC LMODE(2),FMODE(R10) ... 00997000
  1003. STD RDBUF,WRLIB RESET CALL TO RDBUF 00998000
  1004. MVC LIBADD(4),=AL4(BUFF) RESET BUFF ADDRESS 00999000
  1005. SVC X'CA' READ HEADER 01000000
  1006. DC AL4(RDERROP) ... 01001000
  1007. CLC BUFF(6),=C'DMSLIB' CHECK THE LIBRARY IDENTIFIER @VA04662 01002000
  1008. BNE BADLIBR IF NOT REJECT FILE P0929 01003000
  1009. L R7,HLST SET REGS FROM HEADER 01004000
  1010. LA R7,TABLE(R7) ... 01005000
  1011. ST R7,ENDDIC SAVE END ON OLD DICT. 01006000
  1012. S R7,INDXLCON SET PTR TO LAST ENTRY 01007000
  1013. SR R5,R5 CLEAR REG FOR H/W INSERTION @VA08982 01007600
  1014. ICM R5,M3,HITEM GET FIRST DICT RECORD @VA08982 01008200
  1015. LR R6,R5 SAVE POINTER TO 1ST AVAIL. RCD 01009000
  1016. L R10,GETSIZE ... 01010000
  1017. ST R10,LIBLENG ... 01011000
  1018. LA R9,DICRCDL GET NO. OF CHARS. PER RCD. 01012000
  1019. SR R10,R10 ZAP EVEN REG 01013000
  1020. L R11,HLST GET NO. OF BYTES IN DICTIONARY 01014000
  1021. DR R10,R9 FIND OUT HOW MANY WHOLE RCDS FOR DICT. 01015000
  1022. LTR R10,R10 CHECK IF ANY LEFT OVER 01016000
  1023. BZ USEASIS IF NOT DICT. IS AN EVEN NO. OF RCDS. 01017000
  1024. LA R11,1(,R11) IF NOT, ADD ONE FO RESIDUAL 01018000
  1025. EJECT P3128 01019000
  1026. USEASIS LR R10,R11 SET UP FOR LOOP CTL. 01020000
  1027. LA R9,TABLE ADDRESS OF DICTIONARY TABLE 01021000
  1028. DICTLOOP EQU * 01022000
  1029. STH R5,LIBITEM SET ITEM # IN P LIST 01023000
  1030. ST R9,LIBADD SET ADDRESS TO READ LIBE 01024000
  1031. SVC X'CA' READ LIBE DICT 01025000
  1032. DC AL4(RDERROP) ... 01026000
  1033. LA R5,1(,R5) BUMP ITEM POINTER 01027000
  1034. LA R9,DICRCDL(R9) BUMP I/O ADDR BY LENGTH OF DICT READ 01028000
  1035. BCT R10,DICTLOOP READ IN ENTIRE DICTIONARY 01029000
  1036. LA R9,1 RESET NUM ITEMS TO 1 01030000
  1037. STH R9,LIBNOIT ... 01031000
  1038. LA R9,80 RESET BUFFER SIZE TO 80 01032000
  1039. ST R9,LIBLENG ... 01033000
  1040. CLI 0(R2),C'D' COMMAND STARTS WITH 'D'? 01034000
  1041. BE TDSTART YES, GO DELETE 01035000
  1042. LR R5,R6 RESET FILE POINTER TO 1ST AVAIL. RCD 01036000
  1043. BCTR R5,0 GET NEW ITEM # FOR WRITE 01037000
  1044. STH R5,LIBITEM ... 01038000
  1045. STD FINIS,WRLIB CLOSE FILE AFTER READING 01039000
  1046. SVC X'CA' ... 01040000
  1047. DC AL4(*+4) ... 01041000
  1048. CLI 0(R2),C'A' WAS ADDLIB CALLED? 01042000
  1049. BNE LIBLIST NO, TRY LIBLIST. 01043000
  1050. MVC WRLIB(5),WRSET SET TO WRITE ON LIBE FILE 01044000
  1051. B GENGO RETURN TO GENERATION ROUTINE 01045000
  1052. SPACE 2 01046000
  1053. EJECT 01047000
  1054. * 01048000
  1055. * CHECK FOR ABSENCE OF CSECTNAMES 01049000
  1056. * 01050000
  1057. TDSTART EQU * 01051000
  1058. CLI 16(R2),X'FF' END OF PLIST? 01052000
  1059. BNE DUMGEN NO, OK ... CARRY ON 01053000
  1060. MVC MSG01NME(5),=CL5'CSECT' SET NAME DESCRIPTOR 01054000
  1061. SHRTLIST EQU * 01055000
  1062. * THIS ERROR ROUTINE IS USED WHEN NO TEXT FILES ARE SPECIFIED 01056000
  1063. * IN ADDITION TO THE ABOVE IN-LINE USE 01057000
  1064. DMSERR MF=(E,ERLIST),NUM=MSG01ID,LET=E,TEXTA=MSG01 01058000
  1065. MVI RETCODE,MSG01RC SET RETURN CODE 01059000
  1066. B CLOSE CLOSE FILE 01060000
  1067. EJECT P3128 01061000
  1068. DUMGEN EQU * @VA04662 01062000
  1069. SPACE 1 01063000
  1070. * PHASE 1 OF TEXT LIBRARY DICTIONARY ENTRY DELETION: 01064000
  1071. * THIS ROUTINE WILL CYCLE THROUGH THE OLD DICTIONARY 01065000
  1072. * IN SEARCH OF NAMES CORRESPONDING TO THE GIVEN 01066000
  1073. * P-LIST TOKENS. IF IT FINDS A MATCHING ENTRY, IT 01067000
  1074. * REPLACES ITS NAME (AS WELL AS ITS ALIASES' NAMES) 01068000
  1075. * WITH A ZERO. IF NO ENTRY IS FOUND, AN ERROR 01069000
  1076. * MESSAGE IS SCHEDULED. 01070000
  1077. * 01071000
  1078. SLR R0,R0 CLEAR A REGISTER FOR ZERO @VA04662 01072000
  1079. LA R2,16(,R2) SET PTR TO FIRST DEL NAME @VA04662 01073000
  1080. LA R4,INDEXL SET DICTIONARY ENTRY WIDTH @VA04662 01074000
  1081. L R5,ENDDIC SET END OF DICTIONARY MARKER @VA04662 01075000
  1082. SLR R5,R4 ADDRESS VERY LAST ENTRY @VA04662 01076000
  1083. L R6,MAXHW MASK FOR CLEARING TOP HALF @VA04662 01077000
  1084. NI FLAGS,X'FF'-DOCOPY NOT COPYING @VA04662 01078000
  1085. USING ODICTDS,R8 ESTABLISH ADDRESSABILITY @VA04662 01079000
  1086. SPACE 1 01080000
  1087. MAINPH1 EQU * @VA04662 01081000
  1088. LA R8,TABLE ADDRESS THE OLD DICTIONARY @VA04662 01082000
  1089. NI FLAGS,X'FF'-CONT NOT CONTINUING @VA04662 01083000
  1090. SPACE 1 01084000
  1091. TOP EQU * @VA04662 01085000
  1092. LH R7,ODICADDR SAVE (NEXT) ITEM NUMBER @VA04662 01086000
  1093. NR R7,R6 CLEAR PROPAGATION @VA04662 01087000
  1094. CLC ODICNAME,0(R2) DOES NAME IN P-LIST MATCH ENTRY? @VA04662 01088000
  1095. BNE NOTFOUND NO, BUT LET'S KEEP TRYING @VA04662 01089000
  1096. OI FLAGS,CONT+DOCOPY MATCH, CONTINUE AND COPY @VA04662 01090000
  1097. SPACE 1 01091000
  1098. CLEARNAM EQU * @VA04662 01092000
  1099. ST R0,ODICNAME CLEAR THIS DIRECTORY ENTRY @VA04662 01093000
  1100. SPACE 1 01094000
  1101. NOTFOUND EQU * @VA04662 01095000
  1102. BXH R8,R4,CHECKER ADVANCE TO NEXT @VA04662 01096000
  1103. SPACE 1 01097000
  1104. LH R9,ODICADDR CHECK PREVIOUS VS THIS OFFSET @VA12858 01098000
  1105. NR R9,R6 (CLEAR PROPAGATION) @VA12858 01098100
  1106. CR R7,R9 (CHECK) @VA12858 01098200
  1107. BNE CHEKCONT MATCH, BRANCH DEP ON CONT FLAG @VA04662 01099000
  1108. TM FLAGS,CONT NEW NAME, WERE WE ZAPPING? @VA04662 01100000
  1109. BZ NOTFOUND NO, GO GET NEXT DICTIONARY ENTRY @VA04662 01101000
  1110. B CLEARNAM YES, THEN MUST CLEAR THIS NAME @VA04662 01102000
  1111. SPACE 1 01103000
  1112. CHEKCONT EQU * @VA04662 01104000
  1113. TM FLAGS,CONT WERE WE ZAPPING? @VA04662 01105000
  1114. BZ TOP NO, GO SEE IF THIS IS ON THE LIST@VA04662 01106000
  1115. B NEXTP FINISHED THIS P-LIST TOKEN; MORE?@VA04662 01107000
  1116. EJECT 01108000
  1117. CHECKER EQU * @VA04662 01109000
  1118. TM FLAGS,CONT WERE WE ZAPPING? @VA04662 01110000
  1119. BO NEXTP RARE CASE: DELETED LAST DECK @VA04662 01111000
  1120. BAL R9,MEMNTFND GO SEND ERROR MSG NOW @VA04662 01112000
  1121. SPACE 2 01113000
  1122. NEXTP EQU * @VA04662 01114000
  1123. LA R2,8(,R2) BUMP TO NEXT TOKEN @VA04662 01115000
  1124. CLI 0(R2),X'FF' WAS THAT THE LAST TOKEN? @VA04662 01116000
  1125. BNE MAINPH1 NOPE, MORE TO GO @VA04662 01117000
  1126. SPACE 1 01118000
  1127. * ENTER SECOND DELETE PHASE 01119000
  1128. EJECT 01120000
  1129. * PHASE 2 OF DELETE PROCESS 01121000
  1130. * 01122000
  1131. * SIMULTANEOUSLY CREATE NEW LIBRARY AND DIRECTORY 01123000
  1132. * 01124000
  1133. TM FLAGS,DOCOPY ANYTHING WORTH COPYING? @VA04662 01125000
  1134. BZ DUMERASE NO, WE DIDN'T DELETE ANYTHING @VA04662 01126000
  1135. SPACE 1 01127000
  1136. * INITIALIZATION 01128000
  1137. * 01129000
  1138. LA R8,TABLE ADDRESS START OF DIRECTORY @VA04662 01130000
  1139. L R7,ATBL2 ADDRESS THE NEW DIRECTORY @VA04662 01131000
  1140. ST R0,DISPLACE SET ADJUSTMENT FACTOR TO ZERO @VA04662 01132000
  1141. MVC ONXTADDR-ODICTDS(2,R5),HITEM FAKE LAST+1 ENTRY @VA04662 01133000
  1142. LA R1,2 FIRST RECORD OF TEXT DATA @VA04662 01134000
  1143. LR R2,R1 SAVE IN A COUNTER REG (2) @VA04662 01135000
  1144. STH R1,RITEM INITIALIZE AS FIRST ITEM TO WRITE@VA04662 01136000
  1145. STH R1,LIBITEM INITIALIZE AS FIRST ITEM TO READ @VA04662 01137000
  1146. L R1,ABUFFER GET THE BUFFER ADDRESS @VA04662 01138000
  1147. ST R1,LIBADD STASH IT IN INPUT P-LIST @VA04662 01139000
  1148. ST R1,RADD ALSO IN OUTPUT P-LIST @VA04662 01140000
  1149. MVC RNAME(16),DUMMYSET SET WORK FILE NAME, TYPE @VA04662 01141000
  1150. MVC RMODE(2),LMODE GET CORRECT MODE @VA04662 01142000
  1151. MVC RDISK(8),WRSET SET TO DO WRBUF @VA04662 01143000
  1152. LA R9,PH2RESET SET THE RETURN ADDRESS @VA04662 01144000
  1153. LA R10,10 DET DEFAULT BLOCKING FACTOR @VA04662 01145000
  1154. DMSKEY NUCLEUS PROCEED WITH EXTREME CAUTION @VA04662 01146000
  1155. OI FLAGS,KEYSET SIGNAL DMSKEY NUCLEUS DONE @VA05571 01147000
  1156. SPACE 1 01148000
  1157. MAINPH2 EQU * @VA04662 01149000
  1158. CL R0,ODICNAME WAS THIS ENTRY DELETED? @VA04662 01150000
  1159. BNE PH2NDEL NO, SO COPY IT @VA04662 01151000
  1160. SPACE 1 01152000
  1161. * CALCULATE THE DISPLACEMENT FOR FUTURE VALID ENTRIES. 01153000
  1162. * 01154000
  1163. L R3,DISPLACE GET CURRENT DISPLACEMENT @VA04662 01155000
  1164. SLR R1,R1 CLEAR A SCRATCH REGISTER @VA04662 01156000
  1165. ICM R1,B'0011',ONXTADDR GET NEXT ADDR @VA04662 01157000
  1166. ALR R3,R1 DETERMINE END OF GAP @VA04662 01158000
  1167. ICM R1,B'0011',ODICADDR @VA04662 01159000
  1168. SLR R3,R1 LESS START OF GAP @VA04662 01160000
  1169. ST R3,DISPLACE THIS IS NEW DISPLACEMENT @VA04662 01161000
  1170. SPACE 1 01162000
  1171. PH2RESET EQU * @VA04662 01163000
  1172. BXLE R8,R4,MAINPH2 LOOP @VA04662 01164000
  1173. SPACE 1 01165000
  1174. DMSKEY RESET RETURN TO NORMALCY @VA04662 01166000
  1175. NI FLAGS,X'FF'-KEYSET SIGNAL DMSKEY RESET DONE @VA05571 01167000
  1176. EJECT 01168000
  1177. * WE HAVE ENDED THE SCAN OF THE DICTIONARY, AND 01169000
  1178. * MUST NOW APPEND IT TO THE FILE. 01170000
  1179. * 01171000
  1180. * FIRST, WE MUST ENSURE THAT THE NEW LIBRARY CONTAINS 01172000
  1181. * SOME MEMBERS. 01173000
  1182. * 01174000
  1183. LA R1,2 GET A TWO @VA04662 01175000
  1184. CLR R1,R2 DID WE COPY ANYTHING? @VA04662 01176000
  1185. BNE PH3PASS YES, SET UP TO APPEND DICTIONARY @VA04662 01177000
  1186. SPACE 1 01178000
  1187. MVC WRLIB(5),ERASET NO, THEN ERASE THE NULL LIB @VA04662 01179000
  1188. LA R1,WRLIB ADDRESS THE PARMS @VA04662 01180000
  1189. SVC X'CA' DOITTOIT @VA04662 01181000
  1190. B NOLIBGEN GO ISSUE ERROR MESSAGE @VA04662 01182000
  1191. SPACE 1 01183000
  1192. PH3PASS EQU * @VA04662 01184000
  1193. MVC RNAME(18),LIBNAM SWAP PLISTS @VA04229 01185000
  1194. MVC WRLIB(5),WRSET SET UP TO WRITE 01186000
  1195. MVC LIBNAM(16),DUMMYSET PUT IN WORK FILE NAME AND TYPE 01187000
  1196. L R9,ATBL2 01188000
  1197. LR R5,R2 COPY THE COUNTER @VA04662 01189000
  1198. STH R5,HITEM SET THE ITEM COUNT IN HEADER @VA04662 01190000
  1199. LR R11,R7 @VA04662 01191000
  1200. LA R1,BUFF GET BUFFER ADDRESS @VA04662 01192000
  1201. ST R1,LIBADD STORE INTO P-LIST @VA04662 01193000
  1202. LA R1,80 80-BYTE RECORD @VA04662 01194000
  1203. ST R1,LIBLENG SET IN P-LIST @VA04662 01195000
  1204. LA R1,1 ONE ITEM AT A TIME @VA04662 01196000
  1205. STH R1,LIBNOIT SET NUMBER TO 1 IN LIST @VA04662 01197000
  1206. B WRDICT3 TIME TO SUMMARIZE @VA04662 01198000
  1207. SPACE 3 01199000
  1208. DUMERASE EQU * 01200000
  1209. LA R1,WRLIB MAKE SURE JS 01201000
  1210. STD FINIS,0(R1) NEW TXTLIB FILE JS 01202000
  1211. SVC X'CA' IS CLOSED JS 01203000
  1212. DC AL4(*+4) (NO PROBLEM IF CLOSED ALREADY) 01204000
  1213. MVC RDISK(5),ERASET ERASE 01205000
  1214. LA R1,RDISK USE PLIST1 01206000
  1215. SVC X'CA' ERASE OLD TXTLIB FILE 01207000
  1216. DC AL4(*+4) IGNORE ERRORS 01208000
  1217. TM FLAGS,DOCOPY DID WE COPY THE FILE? @VA04662 01209000
  1218. BZ FINISH NO WORK, LET'S GO HOME @VA04662 01210000
  1219. MVC LIBLENG(18),RNAME SWAP ROLES OF PLISTS 01211000
  1220. MVC WRLIB,ALTERSET RENAME THE FILE @VA12799 01212000
  1221. MVI RNMFENCE,X'FF' SET UP THE FENCE FOR RENAME 01213000
  1222. MVC RNMFENCE+1(7),RNMFENCE PROPAGATE FOR DOUBLE WD. 01214000
  1223. LA R1,WRLIB USE SECOND PLIST 01215000
  1224. SVC X'CA' ALTER .DUMMY TO FILENAME 01216000
  1225. DC AL4(ALTERBAD) 01217000
  1226. EJECT P3128 01218000
  1227. * 01219000
  1228. * NOW PREPARE TO FINIS TXTLIB FILE 01220000
  1229. * 01221000
  1230. CLOSE1 EQU * 01222000
  1231. STD FINIS,RDISK 01223000
  1232. LA R1,RDISK 01224000
  1233. B CLOSE2 GO TO FINIS 01225000
  1234. CLOSEIN EQU * 01226000
  1235. LA R1,RDISK 01227000
  1236. STD FINIS,RDISK FINIS INPUT FILE 01228000
  1237. SVC X'CA' ... 01229000
  1238. DC AL4(*+4) ... 01230000
  1239. STD RDBUF,RDISK RESET READ 01231000
  1240. BR R8 BACK TO CALLER 01232000
  1241. EJECT 01233000
  1242. PH2NDEL EQU * @VA04662 01234000
  1243. SPACE 1 01235000
  1244. * COPY THAT PORTION OF THE OLD DIRECTORY WHICH HAS NOT 01236000
  1245. * BEEN DELETED TO THE NEW DIRECTORY. 01237000
  1246. * 01238000
  1247. MVC DICTDS(12),ODICTDS COPY THE DICTIONARY ENTRY @VA04662 01239000
  1248. SPACE 1 01240000
  1249. * THE FOLLOWING SECTION OF CODE UPDATES THE POINTERS 01241000
  1250. * FOUND IN THE NEW DIRECTORY TO REFLECT THE ACTUAL 01242000
  1251. * STARTING ITEM NUMBER FOR EACH OF THE MEMBERS. 01243000
  1252. * 01244000
  1253. L R3,DISPLACE GET DIFF BETWEEN OLD AND NEW @VA04662 01245000
  1254. LH R1,ODICADDR GET OLD ADDR @VA04662 01246000
  1255. NR R1,R6 CLEAR PROLIFERATION @VA04662 01247000
  1256. SR R1,R3 ADJUST FOR COMPRESSION @VA04662 01248000
  1257. STH R1,INDXADDR SET NEW ADDRESS @VA04662 01249000
  1258. LA R7,INDEXL(,R7) ADVANCE NEW DICTIONARY CURSOR @VA04662 01250000
  1259. SPACE 1 01251000
  1260. * SEE IF SUBSEQUENT ENTRIES REFER TO THE SAME CSECT 01252000
  1261. * 01253000
  1262. CLC ODICADDR,ONXTADDR DO ADDRS MATCH? @VA04662 01254000
  1263. BNE PH2NSAME NO, NOW GO MOVE MEMBER @VA04662 01255000
  1264. SPACE 1 01256000
  1265. LA R8,INDEXL(,R8) ADVANCE OLD DICT POINTER @VA04662 01257000
  1266. B PH2NDEL TAKE IT FROM TOP @VA04662 01258000
  1267. SPACE 1 01259000
  1268. PH2NSAME EQU * @VA04662 01260000
  1269. SPACE 1 01261000
  1270. * COMPUTE THE NUMBER OF ITEMS TO COPY FROM THE OLD 01262000
  1271. * TEXT LIBRARY TO THE NEW ONE. WE MUST ALSO GET 01263000
  1272. * THE OLD LIBRARY STARTING RECORD NUMBER. 01264000
  1273. * 01265000
  1274. LH R1,ODICADDR @VA04662 01266000
  1275. NR R1,R6 CLEAR PROPAGATION @VA04662 01267000
  1276. STH R1,LIBITEM SET THE STARTING READ ITEM NUMBER@VA04662 01268000
  1277. LH R3,ONXTADDR DETERMINE LENGTH OF MEMBER @VA04662 01269000
  1278. NR R3,R6 CLEAR PROLIFERATION @VA04662 01270000
  1279. SLR R3,R1 NUMBER OF ITEMS TO COPY @VA04662 01271000
  1280. BAL R11,WRITER GO PUT OUT TEXT RECORDS @VA04662 01272000
  1281. BR R9 @VA04662 01273000
  1282. EJECT 01274000
  1283. WRITER EQU * @VA04662 01275000
  1284. SPACE 1 01276000
  1285. * THIS SUBROUTINE IS USED TO MOVE DATA FROM ONE FILE 01277000
  1286. * TO ANOTHER. IT DOES SO IN BLOCKS OF TEN IN ORDER TO 01278000
  1287. * CAPITALIZE ON THE CMS FILE CHARACTERISTICS. 01279000
  1288. * 01280000
  1289. * INPUTS: 01281000
  1290. * INPUT P-LIST HAS STARTING ITEM NUMBER IN IT. 01282000
  1291. * OUTPUT P-LIST HAS STARTING ITEM NUMBER IN IT. 01283000
  1292. * R3 - NUMBER OF ITEMS TO COPY (MUST BE POSITIVE) 01284000
  1293. * R6 - MASK FOR CLEAR TOP HALFWORD (0000FFFF) 01285000
  1294. * R10 - DEFAULT BLOCKING FACTOR (USU 10) 01286000
  1295. * R11 - RETURN ADDRESS 01287000
  1296. * 01288000
  1297. MORETODO EQU * @VA04662 01289000
  1298. LR R1,R10 ASSUME AT LEAST 10 ITEMS LEFT @VA04662 01290000
  1299. CLR R3,R10 FULL BUFFER? @VA04662 01291000
  1300. BNL SETTORD AT LEAST! @VA04662 01292000
  1301. LR R1,R3 NOT QUITE @VA04662 01293000
  1302. SPACE 1 01294000
  1303. SETTORD EQU * @VA04662 01295000
  1304. STH R1,LIBNOIT STORE THE NUMBER OF ITEMS TO READ@VA04662 01296000
  1305. STH R1,RNOIT ALSO NUMBER OF ITEMS TO WRITE @VA04662 01297000
  1306. ALR R2,R1 KEEP AN ACCURATE COUNT @VA04662 01298000
  1307. MH R1,H80 MULTIPLY BY LRECL @VA04662 01299000
  1308. ST R1,LIBLENG STASH THE BUFFER LENGTH @VA04662 01300000
  1309. ST R1,RMORE SET ALSO IN WRITE P-LIST @VA04662 01301000
  1310. LA R1,WRLIB ADDRESS THE READ P-LIST @VA04662 01302000
  1311. L R15,ARDBUF GET RDBUF ROUTINE ADDRESS @VA04662 01303000
  1312. BALR R14,R15 ISSUE RDBUF @VA04662 01304000
  1313. BNZ RDERR ERROR RETURN AND ANALYSIS @VA04662 01305000
  1314. LA R1,RDISK WRITE P-LIST @VA04662 01306000
  1315. L R15,AWRBUF GET WRBUF ROUTINE ADDRESS @VA04662 01307000
  1316. BALR R14,R15 ISSUE WRBUF @VA04662 01308000
  1317. BNZ WRERR ERROR RETURN AND ANALYSIS @VA04662 01309000
  1318. L R1,LIBITEM-2 GET LAST STARTING ITEM NUMBER @VA04662 01310000
  1319. L R15,LIBNOIT-2 GET NUMBER JUST WRITTEN @VA04662 01311000
  1320. ALR R1,R15 ADD TO DETERMINE NEXT @VA04662 01312000
  1321. NR R1,R6 CLEAR HIGH BITS @VA04662 01313000
  1322. STH R1,LIBITEM RESET THE STARTING ITEM NUMBER @VA04662 01314000
  1323. STH R2,RITEM RESTORE NEW ITEM NUMBER @VA04662 01315000
  1324. SR R3,R10 DETERMINE THE RESIDUAL ITEM COUNT@VA04662 01316000
  1325. BP MORETODO POSITIVE, GO DO MORE @VA04662 01317000
  1326. SPACE 1 01318000
  1327. * BEFORE RETURNING TO THE CALLER, WE SET UP THE NEXT 01319000
  1328. * ITEM NUMBER TO BE WRITTEN TO BE A NON-MULTIPLE 01320000
  1329. * OF 256 FOR OS MACRO SIMULATION CONSIDERATIONS. 01321000
  1330. * 01322000
  1331. CLI RITEM+1,X'00' ON NON-READABLE ITEM? @VA04662 01323000
  1332. BNER R11 LET'S RETURN @VA04662 01324000
  1333. LA R2,1(,R2) REFLECT ADJUSTMENT IN COUNTER @VA04662 01325000
  1334. MVI RITEM+1,X'01' NEXT ITEM OK @VA04662 01326000
  1335. L R15,DISPLACE GET DIFFERENCE @VA05154 01327000
  1336. BCTR R15,0 SET FOR BYPASSED RECORD @VA05154 01328000
  1337. ST R15,DISPLACE AND RESTORE IT @VA05154 01329000
  1338. BR R11 AND RETURN @VA05154 01330000
  1339. EJECT 01331000
  1340. MEMNTFND EQU * @VA04662 01332000
  1341. SPACE 1 01333000
  1342. * THIS ROUNTINE SENDS AN ERROR MESSAGE TO THE USER 01334000
  1343. * INDICATING THOSE MEMBER NAMES SPECIFIED IN HIS 01335000
  1344. * COMMAND LINE WHICH DID NOT EXIST IN THE TEXT LIBRARY 01336000
  1345. * DIRECTORY. 01337000
  1346. * 01338000
  1347. MVC MEMBNME(8),0(R2) MOVE MEM NAME INTO MSG @VA04662 01339000
  1348. MVC MSG13NME(8),LIBNAM SET FILE NAME IN MESSAGE @VA04662 01340000
  1349. DMSERR MF=(E,ERLIST),NUM=MSG13ID,LET=E,TEXTA=MSG13 @VA04662 01341000
  1350. MVI RETCODE,MSG13RC SET RETURN CODE @VA04662 01342000
  1351. BR R9 RETURN TO CALLER @VA04662 01343000
  1352. EJECT 01344000
  1353. LIBLIST EQU * @VA07183 01345000
  1354. LA R2,16(,R2) BUMP TO BEGINNING OF OPTIONS @VA07183 01346000
  1355. CLI 0(R2),C'(' OPTIONS SPECIFIED @VA07183 01347000
  1356. BE CKOPTS IF LEFT PAREN, CHECK OPTIONS @VA07183 01348000
  1357. CLI 0(R2),X'FF' CHECK TO ENSURE A FENCE @VA07183 01349000
  1358. BNE FORMODD IF NOT WHO KNOWS WHAT IT IS @VA07183 01350000
  1359. LA R5,0 SET REG TO INDICATE DEFAULT @VA07183 01351000
  1360. B SETDISK SET UP DEFAULT OF DISK @VA07183 01352000
  1361. CKOPTS EQU * @VA07183 01353000
  1362. LA R2,8(,R2) BUMP TO OPTION @VA07183 01354000
  1363. CLI 0(R2),X'FF' CHECK FOR FENCE @VA07183 01355000
  1364. BE SETDISK IF SO, DEFAULT @VA07183 01356000
  1365. LA R5,OPTLIST GET ADDR OF OPTION LIST @VA07183 01357000
  1366. LA R3,OPTLCT GET NO. OF ENTRIES IN LIST @VA07183 01358000
  1367. USING OPTBLDS,R5 ADDR FOR DSECT @VA07183 01359000
  1368. OPTLOOP EQU * @VA07183 01360000
  1369. CLC OPNAME(8),0(R2) COMP FULL OPTION @VA07183 01361000
  1370. BE OPRTNAD IF EQ. GO TO PROCESSING RTNE @VA07183 01362000
  1371. LA R5,12(,R5) BUMP TO NEXT OPTION @VA07183 01363000
  1372. BCT R3,OPTLOOP CHECK ALL OPTIONS @VA07183 01364000
  1373. B FORMODD IF IT ISN'T THERE, TELL USER @VA07183 01365000
  1374. SETTYPE LA R3,0 TYPE CODE IS 0 @VA07183 01366000
  1375. B MAPFIND GO FIND MAP FILE (IF THERE) @VA07183 01367000
  1376. SETDISK LA R3,4 CODE FOR DISK=4 @VA07183 01368000
  1377. B MAPFIND GO FIND MAP FILE (IF THERE) @VA07183 01369000
  1378. SETPRINT LA R3,8 PRINT CODE= 8 @VA07183 01370000
  1379. EJECT 1 @VA07183 01371000
  1380. MAPFIND EQU * @VA07183 01372000
  1381. MVC LTYPE,MAP SET LISTING FILE TYPE @VA07183 01373000
  1382. MVC LMODE,MODESET RESET MODE IN PLIST @VA07183 01374000
  1383. DMSKEY NUCLEUS SET NUCLEUS KEY @VA07183 01375000
  1384. L R15,AADTLKP GET DMSLAD ADDRESS @VA07183 01376000
  1385. BALR R14,R15 AND GO SEARCH ADT FOR DISK @VA07183 01377000
  1386. DMSKEY RESET RESTORE USERS KEY @VA07183 01378000
  1387. LTR R15,R15 WERE THERE ANY ERRORS? @VA07183 01379000
  1388. BZ MAPERASE BRANCH IF NOT @VA07183 01380000
  1389. LTR R3,R3 DO WE NEED DISK? @VA07183 01381000
  1390. BZ MAPLIST BRANCH IF NOT @VA07183 01382000
  1391. B RDERROP BRANCH IF NEEDED @VA07183 01383000
  1392. MAPERASE EQU * @VA07183 01384000
  1393. USING ADTSECT,R1 @VA07183 01385000
  1394. TM ADTFLG1,ADTFRW IS IT A R/W DISK? @VA07183 01386000
  1395. BO SETPLIST BRANCH IF YES @VA07183 01387000
  1396. LTR R3,R3 DO WE NEED R/W DISK? @VA07183 01388000
  1397. BZ MAPLIST BRANCH IF NOT @VA07183 01389000
  1398. TM ADTFLG1,ADTFRO IS DISK R/O? @VA07183 01390000
  1399. BZ NODISK BRANCH IF NOT ATTACHED @VA07183 01391000
  1400. B RODISK INDICATE R/O @VA07183 01392000
  1401. DROP R1 @VA07183 01393000
  1402. SETPLIST EQU * @VA07183 01394000
  1403. LA R1,WRLIB POINT TO PLIST @VA07183 01395000
  1404. MVC WRLIB,ERASET ERASE PREVIOUS LIB MAP @VA07183 01396000
  1405. SVC X'CA' ... 01397000
  1406. DC AL4(*+4) ... 01398000
  1407. MAPLIST EQU * @VA07183 01399000
  1408. MVC WRLIB(5),WRSET RESET CALL TO WRBUF 01400000
  1409. SR R6,R6 ZERO ENTRY COUNT @VA07183 01401000
  1410. STH R6,LIBITEM ZERO ITEM NUMBER @VA07183 01402000
  1411. ST R6,LSTWRD ZERO LSTWRD @VA07183 01403000
  1412. LA R10,30 SET ITEM LENG TO 30 01404000
  1413. ST R10,LIBLENG ... 01405000
  1414. ST R10,TYPLIN+12 ... 01406000
  1415. MVI TYPLIN+12,C'B' TYPE IN BLACK 01407000
  1416. LA R9,BUFF SET BUFFER ADDRESS 01408000
  1417. ST R9,LIBADD ... 01409000
  1418. ST R9,TYPLIN+8 ... 01410000
  1419. MVI TYPLIN+8,X'01' RESET CONSOLE NUM 01411000
  1420. LA R9,TABLE SET BXLE 01412000
  1421. USING ODICTDS,R9 01413000
  1422. LA R10,INDEXL ... 01414000
  1423. LR R11,R7 ... 01415000
  1424. SPACE 01416000
  1425. MVC BUFF(24),SETHDR WRITE HEADER 01417000
  1426. DISK1 LA R1,WRLIB DISK PARAMETER LIST 01418000
  1427. LTR R3,R3 TERM REQUEST? @VA07183 01419000
  1428. BNZ DSKHDR BRANCH IF NOT @VA07183 01420000
  1429. LA R1,TYPLIN SET UP THE SVC POINTER @VA07183 01421000
  1430. DSKHDR EQU * 01422000
  1431. LTR R5,R5 IS IT A DEFAULT SETTING 01423000
  1432. BZ WRTHDR YES, DON'T BOTHER CHECKING AFTERMATH 01424000
  1433. LA R2,8(,R2) BUMP PLIST PTR TO NEXT POSITION 01425000
  1434. CLI 0(R2),X'FF' CHECK FOR A FENCE 01426000
  1435. BE WRTHDR IF SO, IT'S O. K. 01427000
  1436. CLI 0(R2),C')' CHECK FOR RIGHT PAREN 01428000
  1437. BNE FORMODD IF NEITHER, IT'S JUNK, SO ERROR 01429000
  1438. WRTHDR EQU * 01430000
  1439. SVC X'CA' WRITE HEADER 01431000
  1440. DC AL4(*+4) ... 01432000
  1441. BAL R14,MAPERROR CHECK FOR ANY ERRORS @VA04699 01433000
  1442. EJECT 01434000
  1443. SPACE 01435000
  1444. FORBUF MVC BUFF+1(24),BUFF ... 01436000
  1445. MVC BUFF+2(8),ODICNAME PUR NAME IN OUTPUT BUFFER 01437000
  1446. LA R6,1(0,R6) INCREMENT COUNT 01438000
  1447. CLC ODICADDR(2),LSTWRD CHECK TO SEE IF NEW CSECT 01439000
  1448. BE DSKWRT NO - WRITE NAME ONLY 01440000
  1449. MVC LSTWRD(2),ODICADDR PUT NEW PARAMS IN LSTWRD 01441000
  1450. MVC BUFF+10(7),PATTERN EDIT PATTERN INTO BUFF 01442000
  1451. SR R5,R5 SET REG TO ZERO @VA11805 01442400
  1452. ICM R5,3,ODICADDR CONVERT ITEM TO DECIMAL @VA11805 01442800
  1453. CVD R5,PDOUT ... 01444000
  1454. ED BUFF+10(7),PDOUT+5 EDIT ITEM NO. 01445000
  1455. SPACE 01446000
  1456. DSKWRT SVC X'CA' EITHER WRITE OR TYPE 01447000
  1457. DC AL4(*+4) DON'T ADMOT ERRORS 01448000
  1458. BAL R14,MAPERROR CHECK FOR ANY ERRORS @VA04699 01449000
  1459. BXLE R9,R10,FORBUF 01450000
  1460. SPACE 01451000
  1461. MVC BUFF+9(20),CNTMESS PRINT ENTRY COUNT 01452000
  1462. MVC BUFF+2(7),PATTERN ... 01453000
  1463. CVD R6,PDOUT ... 01454000
  1464. ED BUFF+2(7),PDOUT+5 ... 01455000
  1465. SVC X'CA' ... 01456000
  1466. DC AL4(*+4) ... 01457000
  1467. BAL R14,MAPERROR CHECK FOR ANY ERRORS @VA04699 01458000
  1468. SRL R3,3 SHIFT SO THAT '8' BIT LEFT 01459000
  1469. LTR R3,R3 CHECK IF BIT IS ON 01460000
  1470. BP OFFPRT IF SO OFFLINE PRINT FILE 01461000
  1471. ENDOK SR R14,R14 SHOW NO ERRORS 01462000
  1472. B CLOSE DONE, BACK TO CALLER 01463000
  1473. OFFPRT EQU * 01464000
  1474. STD FINIS,WRLIB SET FOR CLOSE 01465000
  1475. SVC 202 TO CMS 01466000
  1476. DC AL4(*+4) 01467000
  1477. MVC WRLIB(8),=CL8'PRINT' SET TO PRINT 01468000
  1478. MVI LMODE,X'FF' START FENCE FOR ERASE 01469000
  1479. MVC LMODE+1(7),LMODE PROPAGATE FENCE 01470000
  1480. SVC 202 01471000
  1481. DC AL4(*+4) 01472000
  1482. MVC WRLIB(8),=CL8'ERASE' ERASE THE MAP FILE 01473000
  1483. SVC 202 01474000
  1484. DC AL4(*+4) 01475000
  1485. B ENDOK 01476000
  1486. SPACE 1 01477000
  1487. MAPERROR LTR R15,R15 WAS RETURN-CODE = ZERO? @VA04699 01478000
  1488. BZR R14 YES. THERE WERE NO ERRORS @VA04699 01479000
  1489. LTR R3,R3 IS A MAP FILE BEING WRITTEN? @VA04699 01480000
  1490. BZR R14 NO. TERMINAL OUTPUT @VA04699 01481000
  1491. LR R14,R15 DON'T RETURN; SAVE RETURN CODE @VA04699 01482000
  1492. MVC WRLIB(8),=CL8'ERASE' ERASE THE MAP FILE @VA04699 01483000
  1493. SVC 202 @VA04699 01484000
  1494. DC AL4(*+4) @VA04699 01485000
  1495. LR R15,R14 RESTORE RETURN CODE @VA04699 01486000
  1496. B WRERR PRINT DISK ERROR MESSAGE @VA04699 01487000
  1497. EJECT 01488000
  1498. NOFILE EQU * 01489000
  1499. MVC MSGFNAME(8),0(R2) MOVE FILE NAME INTO NOT FND. MSG. 01490000
  1500. DMSERR MF=(E,ERLIST),NUM=MSG2ID,LET=W,TEXTA=MSG002 01491000
  1501. MVI RETCODE,MSG2RC SET RETURN CODE 01492000
  1502. B FILCHK GO TO CHECK THE NEXT FILE 01493000
  1503. ERLIST DMSERR MF=L 01494000
  1504. SPACE 2 01495000
  1505. NOLIBE EQU * 01496000
  1506. MVC MSGFNAM2(8),LIBNAM MOVE LIBRARY NAME INTO MSG 01497000
  1507. DMSERR MF=(E,ERLIST),NUM=MSG2EID,LET=E,TEXTA=MSG002E 01498000
  1508. MVI RETCODE,MSG2ERC SET RETURN CODE 01499000
  1509. B FINISH TERMINATE PROGRAM 01500000
  1510. EJECT P3128 01501000
  1511. BADSIZE EQU * 01502000
  1512. MVC MSG56NME(8),0(R2) SET FILE NAME 01503000
  1513. BADFORM EQU * 01504000
  1514. DMSERR MF=(E,ERLIST),NUM=MSG56ID,LET=E,TEXTA=MSG56 01505000
  1515. MVI RETCODE,MSG56RC SET RETURN CODE 01506000
  1516. B CLOSE END PROCESSING 01507000
  1517. SPACE 2 01508000
  1518. OVRFLO EQU * 01509000
  1519. MVC MSG106NM(8),FIRSTSD SET FIRST SD ENTRY AS NAME 01510000
  1520. DMSERR MF=(E,ERLIST),NUM=MSG106ID,LET=E,TEXTA=MSG106 01511000
  1521. MVI RETCODE,MSG106RC SET ERROR CODE 01512000
  1522. BAL R8,CLOSEIN CLOSE INPUT FILE @VA07118 01513000
  1523. LM R6,R7,SAVE RESTORE POINTERS 01514000
  1524. B WRDICT SAVE WHATEVER IS POSSIBLE 01515000
  1525. EJECT P3128 01516000
  1526. RDERROP EQU * 01517000
  1527. MVC MSG104NM(8),LIBNAM IN SPECIAL CASE READ IS FROM WRITE 01518000
  1528. MVC MSG104TP(8),LTYPE P-LIST, SO GET ID FROM THERE 01519000
  1529. B RDERMSG BYPASS NORMAL MOVE 01520000
  1530. RDERR EQU * 01521000
  1531. MVC MSG104NM(8),RNAME SET FILE NAME 01522000
  1532. MVC MSG104TP(8),RTYPE SET FILE TYPE 01523000
  1533. RDERMSG EQU * 01524000
  1534. CVD R15,DOUBLE CONVERT RETURN CODE V0314 01525000
  1535. OI DOUBLE+7,X'0F' SET ZONE V0314 01526000
  1536. UNPK MSG104NO(4),DOUBLE(8) PUT RC IN MSG V0314 01527000
  1537. DMSERR MF=(E,ERLIST),NUM=MSG104ID,LET=S,TEXTA=MSG104 01528000
  1538. MVI RETCODE,MSG104RC SET ERROR CODE P3128 01529000
  1539. B CLOSE END PROCESSING 01530000
  1540. WRERRA EQU * @VA03771 01531000
  1541. OI FLAGS,NOROOM SET NO ROOM BIT @VA04662 01532000
  1542. LA R15,13 @VA03771 01533000
  1543. SPACE 2 01534000
  1544. WRERR EQU * 01535000
  1545. MVC MSG105NM(8),LIBNAM SET FILE NAME 01536000
  1546. MVC MSG105TP(8),LTYPE 01537000
  1547. CVD R15,DOUBLE SET MSG RETURN CODE 01538000
  1548. OI DOUBLE+7,X'0F' SET ZONE 01539000
  1549. UNPK MSG105NO(4),DOUBLE(8) PUT RC IN MSG 01540000
  1550. DMSERR MF=(E,ERLIST),NUM=MSG105ID,LET=S,TEXTA=MSG105 01541000
  1551. MVI RETCODE,MSG105RC SET RETURN CODE 01542000
  1552. TM FLAGS,NOROOM OUT OF ROOM? @VA04662 01543000
  1553. BO WRDICT YES, TRF @VA04662 01544000
  1554. B CLOSE END JOB 01545000
  1555. EJECT P3128 01546000
  1556. ALTERBAD EQU * 01547000
  1557. STC R15,RETCODE SET RETURN ERROR CODE FROM RENAME 01548000
  1558. B CLOSE1 END JOB 01549000
  1559. SPACE 2 01550000
  1560. FORMODD EQU * 01551000
  1561. MVC MSG03OPT(8),0(R2) SET BAD OPTION 01552000
  1562. DMSERR MF=(E,ERLIST),NUM=MSG03ID,LET=E,TEXTA=MSG03 01553000
  1563. MVI RETCODE,MSG03RC SET RETURN CODE 01554000
  1564. B CLOSE END THE JOB 01555000
  1565. EJECT 1 @VA07183 01556000
  1566. NODISK EQU * @VA07183 01557000
  1567. LA R5,LMODE POINT TO DISK MODE @VA07183 01558000
  1568. DMSERR TEXT='DISK ''..'' NOT ACCESSED',NUM=69, X01559000
  1569. LET=E,SUB=(CHARA,((R5),1)) @VA07183 01560000
  1570. MVI RETCODE,MSG069RC SET RETURN CODE @VA07183 01561000
  1571. B CLOSE AND GO FINISH UP @VA07183 01562000
  1572. MSG069RC EQU 36 @VA07183 01563000
  1573. SPACE 1 @VA07183 01564000
  1574. RODISK EQU * @VA07183 01565000
  1575. LA R5,LMODE POINT TO DISK MODE @VA07183 01566000
  1576. DMSERR TEXT='DISK ''..'' IS READ/ONLY',NUM=37, X01567000
  1577. LET=E,SUB=(CHARA,((R5),1)) @VA07183 01568000
  1578. MVI RETCODE,MSG037RC SET RETURN CODE @VA07183 01569000
  1579. B CLOSE AND GO FINISH UP @VA07183 01570000
  1580. MSG037RC EQU 36 @VA07183 01571000
  1581. EJECT 01572000
  1582. LTORG 01573000
  1583. EJECT P3128 01574000
  1584. DS 0D 01575000
  1585. SETFREE DC CL8'TYPLIN' 01576000
  1586. DC AL1(1) 01577000
  1587. DC AL3(0) 01578000
  1588. DC C'R' 01579000
  1589. DC AL3(0) 01580000
  1590. RDSET DC CL8'RDBUF' 01581000
  1591. FINISET DC CL8'FINIS' 01582000
  1592. DC CL8'TEXT' 01583000
  1593. SETMODE DC CL2' ' 01584000
  1594. DC H'0' 01585000
  1595. DC AL4(0) 01586000
  1596. RSIZE DC AL4(80) 01587000
  1597. DC CL2'F' 01588000
  1598. DC H'1' 01589000
  1599. DC F'0' 01590000
  1600. DS 0D 01591000
  1601. WRSET DC CL8'WRBUF' 01592000
  1602. STSET DC CL8'STATE' 01593000
  1603. DC CL8'TXTLIB' 01594000
  1604. MODESET DC CL2'A1' 01595000
  1605. DC H'1' 01596000
  1606. DC AL4(0) 01597000
  1607. DC AL4(80) 01598000
  1608. DC CL2'F' 01599000
  1609. DC H'1' 01600000
  1610. DC F'0' 01601000
  1611. MAP DC CL8'MAP' @VA07183 01602000
  1612. ERASET DC CL8'ERASE' @VA07183 01603000
  1613. DUMMYSET DC CL8'TXTLIB' 01604000
  1614. DUMTYPE DC CL8'CMSUT1' 01605000
  1615. ALTERSET DC CL8'RENAME' 01606000
  1616. TBUFF DS D TYPE FROM HERE 01607000
  1617. EJECT P3128 01608000
  1618. DS 0F 01609000
  1619. XESD DC X'02' 01610000
  1620. DC C'ESD' 01611000
  1621. XEND DC X'02' 01612000
  1622. DC C'END' 01613000
  1623. XLDT DC X'02' 01614000
  1624. DC C'LDT' 01615000
  1625. SPACE 2 01616000
  1626. GETSIZE DC A(ENDFREE-FREEST) SIZE OF GETMAIN AREA IN BYTES 01617000
  1627. TBLSIZE EQU 1000 MAX NUMBER OF ENTRIES IN LIBE 01618000
  1628. TBLSZ DC A(12*TBLSIZE) SIZE OF TABLE IN BYTES 01619000
  1629. SPACE 2 01620000
  1630. SETHDR DC C' ENTRY INDEX ' 01621000
  1631. CNTMESS DC CL20' ENTRIES IN LIBRARY' 01622000
  1632. PATTERN DC X'4040202020202040' 01623000
  1633. TOTAL DC F'0' TOTAL DISK SPACE SAVE AREA @VA03771 01624000
  1634. XLIST DS 0D @VA03771 01625000
  1635. XXLIST DC CL24' ' @VA03771 01626000
  1636. XMODE DC CL2'A1' @VA03771 01627000
  1637. SPACE 2 01628000
  1638. FLAGS DC X'00' CONTROL FLAGS FOR DMSLBT @VA04662 01629000
  1639. * 01630000
  1640. * BITS DEFINED IN FLAGS: 01631000
  1641. NOROOM EQU X'01' INDICATES DISK FULL CONDITION @VA04662 01632000
  1642. DOCOPY EQU X'02' INDICATES SOME CSECTS DELETED @VA04662 01633000
  1643. SPACE EQU X'04' INDICATES SPACE COND DETERMINED @VA04662 01634000
  1644. STFD EQU X'08' INDICATES NON-ERROR FROM STATE @VA04662 01635000
  1645. CONT EQU X'10' INDS SCAN'G FOR UNIQUE DIR ENTR'S@VA04662 01636000
  1646. KEYSET EQU X'20' @VA05571 01637000
  1647. SPACE 2 01638000
  1648. H80 DC H'80' HALFWORD 80 @VA05571 01639000
  1649. MAXHW DC F'65535' 16 UNSIGNED BITS @VA05571 01640000
  1650. EJECT P3128 01641000
  1651. ********************************************************************** 01642000
  1652. * 01643000
  1653. * 01644000
  1654. EOFMARK DC X'61FFFF61' END OF FILE MARKER 01645000
  1655. LDTAREA DS 0CL80 01646000
  1656. LDTID DC X'02' 01647000
  1657. DC C'LDT' 01648000
  1658. DC CL12' ' 01649000
  1659. LDTNAME DC CL8' ' NAME BEGINS IN COL 17, PER LOADER(DMSLDR 01650000
  1660. DC CL1' ' P3098 01651000
  1661. LDTSSI DC CL8' ' SETSSI DATA IF PRESENT P3098 01652000
  1662. DC CL47' ' P3098 01653000
  1663. OPERINIT DC CL1' ' INITIALIZING FIELD FOR 'OPERAND' 01654000
  1664. OPERAND DC CL11' ' OPERAND RETURNED FROM SCAN 01655000
  1665. OPBEGIN DS F BEGINNING OF OPERAND FOUND BY SCAN 01656000
  1666. OPEND DS F END OF OPERAND FOUND BY SCAN 01657000
  1667. EPEND DS F END OF ENTRY POINT TABLE 01658000
  1668. LASTSAVE DS F POINTER TO LAST ELEMENT IN ALIAS TBL 01659000
  1669. DISPLACE DS F DISPLACEMENT APPLIED TO ODICADDRS@VA04662 01660000
  1670. INDXLCON DC AL4(INDEXL) CONSTANT FULL WORD FOR INDEX LGTH 01661000
  1671. ALIASTBL DS 16D ALIAS TABLE, MAX. 16 ENTRIES 01662000
  1672. ALIASMAX DC AL4(*-8) LAST ELEMENT IN TABLE P0929 01663000
  1673. FIRSTSD DC CL8' ' NAME OF FIRST CSECT NAME IN DECK 01664000
  1674. MAXLEN DC H'11' MAXIMUM LENGTH OF OPERAND 01665000
  1675. * 01666000
  1676. BLANKS DC CL11' ' BLANK AREA 01667000
  1677. OPTBL DS 0F 01668000
  1678. NAMEOP DC CL8'NAME' NAME OPERATOR 01669000
  1679. B NAME PROCESSING ROUTINE 01670000
  1680. ALIASOP DC CL8'ALIAS' ALIAS OPERATOR 01671000
  1681. B ALIASRT PROCESSING ROUTINE 01672000
  1682. ENTRYOP DC CL8'ENTRY' ENTRY OPERATOR 01673000
  1683. B ENTRY PROCESSING ROUTINE 01674000
  1684. SSIOP DC CL8'SETSSI' P3098 01675000
  1685. B SETSSI P3098 01676000
  1686. INCLOP DC CL8'INCLUDE' @VMT8660 01677000
  1687. B INCLUDE @VMT8660 01678000
  1688. OPTBLEND EQU * 01679000
  1689. OPTBLQTY EQU (OPTBLEND-OPTBL)/12 01680000
  1690. * 01681000
  1691. * OPTION TABLE 01682000
  1692. * 01683000
  1693. OPTLIST DS 0F 01684000
  1694. DC CL8'DISK' 01685000
  1695. B SETDISK PROCESSING ROUTINE BR. INSTR. 01686000
  1696. DC CL8'PRINT' 01687000
  1697. B SETPRINT 01688000
  1698. DC CL8'TERM' 01689000
  1699. B SETTYPE 01690000
  1700. ENDOPLST DS 0CL1 01691000
  1701. OPTLCT EQU ((ENDOPLST-OPTLIST)/12) NO. OF ELEMENTS IN LIST 01692000
  1702. DOUBLE DS D USED FOR CONV. TO DECIMAL 01693000
  1703. EJECT P3128 01694000
  1704. * 01695000
  1705. * SWITCHES 01696000
  1706. * 01697000
  1707. SWS DC X'00' SWITCHES FOR TEXT DECK PROCESSING@VA04662 01698000
  1708. * 01699000
  1709. * BITS DEFINED IN SWS: 01700000
  1710. END EQU X'01' INDICATES END CARD READ @VA04662 01701000
  1711. ENTR EQU X'02' INDICATES ENTRY CARD READ @VA04662 01702000
  1712. INCL EQU X'04' INDICATES INCLUDE CARD READ @VA04662 01703000
  1713. LDT EQU X'08' INDICATES LDT CARD READ @VA04662 01704000
  1714. EOD EQU X'10' INDICATES END OF FILE ENCOUNTERED@VA04662 01705000
  1715. FLUSH EQU X'80' IND'S ERROR SITUATION, DROP DECK @VA04662 01706000
  1716. EJECT 01707000
  1717. * ERROR MESSAGES 01708000
  1718. * 01709000
  1719. ********************************************************************** 01710000
  1720. SPACE 2 01711000
  1721. MSG002 DC AL1(MSG2L-1) LENGTH BYTE 01712000
  1722. DC C'FILE '' ' 01713000
  1723. MSGFNAME DC CL8' ' FILE NAME OF TEXT FILE NOT FND. 01714000
  1724. DC C' TEXT '' NOT FOUND' 01715000
  1725. MSG2FIN DS 0CL1 END OF MSG 01716000
  1726. MSG2L EQU (MSG2FIN-MSG002) LENGTH OF MESSAGE 01717000
  1727. MSG2ID EQU 2 MSG I. D. 01718000
  1728. MSG2RC EQU 4 MSG. R. C. 01719000
  1729. * 01720000
  1730. SPACE 01721000
  1731. * 01722000
  1732. MSG002E DC AL1(MSG2EL-1) LENGTH BYTE 01723000
  1733. DC C'FILE '' ' 01724000
  1734. MSGFNAM2 DC CL8' ' NAME OF LIBRARY FILE NOT FOUND 01725000
  1735. DC C' TXTLIB '' NOT FOUND' 01726000
  1736. MSG2EFIN DS 0CL1 END OF MESSAGE 01727000
  1737. MSG2EL EQU (MSG2EFIN-MSG002E) LENGTH OF MESSAGE 01728000
  1738. MSG2EID EQU 2 MSG I.D. 01729000
  1739. MSG2ERC EQU 28 MSG R.C. 01730000
  1740. * 01731000
  1741. MSG01 DC AL1(MSG01L-1) LENGTH BYTE 01732000
  1742. DC C'NO ' 01733000
  1743. MSG01NME DC CL5' ' EITHER 'FILE' OR 'CSECT' DEP ON OPER 01734000
  1744. DC C' NAMES SPECIFIED' 01735000
  1745. MSG01FIN DS 0CL1 END OF MSG 01736000
  1746. MSG01L EQU (MSG01FIN-MSG01) LENGTH OF MSG 01737000
  1747. MSG01ID EQU 1 MSG I. D. 01738000
  1748. MSG01RC EQU 24 01739000
  1749. * 01740000
  1750. * 01741000
  1751. MSG03 DC AL1(MSG03L-1) LENGTH BYTE 01742000
  1752. DC C'INVALID OPTION '' ' 01743000
  1753. MSG03OPT DC CL8' ' OPTION THAT IS INVALID 01744000
  1754. DC C' '' ' 01745000
  1755. MSG03FIN DS 0CL1 END OF MSG 01746000
  1756. MSG03L EQU (MSG03FIN-MSG03) LENGTH OF MSG 01747000
  1757. MSG03ID EQU 3 MSG I. D. 01748000
  1758. MSG03RC EQU 24 01749000
  1759. EJECT P3128 01750000
  1760. * 01751000
  1761. * 01752000
  1762. MSG13 DC AL1(MSG13L-1) LENGTH BYTE 01753000
  1763. DC C'MEMBER '' ' 01754000
  1764. MEMBNME DC CL8' ' MISSING MEMBER NAME 01755000
  1765. DC C' '' NOT FOUND IN FILE ''' 01756000
  1766. MSG13NME DC CL8' ' FILE NAME OF TXTLIB 01757000
  1767. DC C' TXTLIB''' 01758000
  1768. MSG13FIN DS 0CL1 END OF MSG 01759000
  1769. MSG13L EQU (MSG13FIN-MSG13) LENGTH OF MSG 01760000
  1770. MSG13ID EQU 13 MSG I. D. 01761000
  1771. MSG13RC EQU 32 MSG RET. CODE @VA02968 01762000
  1772. * 01763000
  1773. * 01764000
  1774. MSG14 DC AL1(MSG14L-1) LENGTH BYTE 01765000
  1775. DC C'INVALID FUNCTION ''' @VA05070 01766000
  1776. MSG14FCT DC CL8' ' 01767000
  1777. DC C'''' 01768000
  1778. MSG14FIN DS 0CL1 END OF MSG 01769000
  1779. MSG14L EQU (MSG14FIN-MSG14) LENGTH OF MSG 01770000
  1780. MSG14ID EQU 14 MSG I.D. 01771000
  1781. MSG14RC EQU 24 MSG RET. CODE 01772000
  1782. * 01773000
  1783. * 01774000
  1784. MSG46 DC AL1(MSG46L-1) LENGTH BYTE 01775000
  1785. DC C'NO LIBRARY NAME SPECIFIED' 01776000
  1786. MSG46FIN DS 0CL1 END OF MSG 01777000
  1787. MSG46L EQU (MSG46FIN-MSG46) LENGTH OF MSG 01778000
  1788. MSG46ID EQU 46 MSG I.D. 01779000
  1789. MSG46RC EQU 24 RET. CODE 01780000
  1790. * 01781000
  1791. * 01782000
  1792. MSG47 DC AL1(MSG47L-1) LENGTH BYTE 01783000
  1793. DC C'NO FUNCTION SPECIFIED' 01784000
  1794. MSG47FIN DS 0CL1 END OF MSG 01785000
  1795. MSG47L EQU (MSG47FIN-MSG47) LENGTH OF MSG 01786000
  1796. MSG47ID EQU 47 MSG I.D. 01787000
  1797. MSG47RC EQU 24 MSGRET.CODE 01788000
  1798. * 01789000
  1799. * 01790000
  1800. MSG56 DC AL1(MSG56L-1) LENGTH BYTE 01791000
  1801. DC C'FILE ''' 01792000
  1802. MSG56NME DC CL8' ' FILE NAME 01793000
  1803. DC CL1' ' 01794000
  1804. MSG56TYP DC CL8' ' FILE TYPE 01795000
  1805. DC C''' CONTAINS INVALID ' 01796000
  1806. MSG56RTP DC CL5' ' TYPE OF RECORD IN ERROR 01797000
  1807. DC C' RECORD FORMATS' 01798000
  1808. MSG56FIN DS 0CL1 END OF MSG 01799000
  1809. MSG56L EQU (MSG56FIN-MSG56) LENGTH OF MSG 01800000
  1810. MSG56ID EQU 56 MSG I.D. 01801000
  1811. MSG56RC EQU 32 01802000
  1812. MSG56RCW EQU 4 RET. CODE FOR WARNING MESSAGES P3098 01803000
  1813. EJECT P3128 01804000
  1814. * 01805000
  1815. * 01806000
  1816. MSG104 DC AL1(MSG104L-1) LENGTH BYTE 01807000
  1817. DC C'ERROR ''' V0314 01808000
  1818. MSG104NO DC CL4' ' V0314 01809000
  1819. DC C''' READING FILE ''' V0314 01810000
  1820. MSG104NM DC CL8' ' FILE NAME 01811000
  1821. DC CL1' ' 01812000
  1822. MSG104TP DC CL8' ' FILE TYPE 01813000
  1823. DC C''' FROM DISK' 01814000
  1824. MSG104FN DS 0CL1 END OF MSG 01815000
  1825. MSG104L EQU (MSG104FN-MSG104) MSG LENGTH 01816000
  1826. MSG104ID EQU 104 01817000
  1827. MSG104RC EQU 100 RET. CODE. 01818000
  1828. * 01819000
  1829. * 01820000
  1830. MSG105 DC AL1(MSG105L-1) LENGTH BYTE 01821000
  1831. DC C'ERROR ''' 01822000
  1832. MSG105NO DC CL4' ' 01823000
  1833. DC C''' WRITING FILE ''' 01824000
  1834. MSG105NM DC CL8' ' FILE NAME 01825000
  1835. DC CL1' ' 01826000
  1836. MSG105TP DC CL8' ' FILE TYPE 01827000
  1837. DC C''' TO DISK' 01828000
  1838. MSG105FN DS 0CL1 END OF MSG 01829000
  1839. MSG105L EQU (MSG105FN-MSG105) LENGTH OF MSG 01830000
  1840. MSG105ID EQU 105 MSG I.D. 01831000
  1841. MSG105RC EQU 100 MSG. R.C. 01832000
  1842. * 01833000
  1843. * 01834000
  1844. MSG106 DC AL1(MSG106L-1) LENGTH BYTE 01835000
  1845. DC C'NUMBER OF MEMBER NAMES EXCEED MAX ''' 01836000
  1846. MSG106CT DC CL4'1000' DICTIONARY MAXIMUM CAPACITY 01837000
  1847. DC C'''. FILE ''' 01838000
  1848. MSG106NM DC CL8' ' FILE NAME 01839000
  1849. DC CL1' ' 01840000
  1850. DC C'TEXT'' NOT ADDED' 01841000
  1851. MSG106FN DS CL1 END OF MSG 01842000
  1852. MSG106L EQU (MSG106FN-MSG106) LENGTH OF MSG 01843000
  1853. MSG106ID EQU 106 MSG. I.D. 01844000
  1854. MSG106RC EQU 88 MSG R.C. 01845000
  1855. * 01846000
  1856. * 01847000
  1857. MSG213 DC AL1(MSG213L-1) LENGTH BYTE 01848000
  1858. DC C'LIBRARY ''' 01849000
  1859. MSG213NM DC CL8' ' FILE NAME 01850000
  1860. DC C' TXTLIB'' NOT CREATED, OR ERASED IF EMPTY.' @VA13116 01851000
  1861. MSG213FN DS 0CL1 END OF MSG 01852000
  1862. MSG213L EQU (MSG213FN-MSG213) LENGTH OF MSG 01853000
  1863. MSG213ID EQU 213 MSG I. D. 01854000
  1864. MSG213RC EQU 4 MSG R.C. 01855000
  1865. EJECT P3128 01856000
  1866. * 01857000
  1867. * 01858000
  1868. FUNCTAB EQU * 01859000
  1869. DC CL8'DEL' 01860000
  1870. DC CL8'GEN' 01861000
  1871. DC CL8'ADD' 01862000
  1872. DC CL8'MAP' 01863000
  1873. FUNCTABE DS 0CL1 01864000
  1874. FUNCTABC EQU ((FUNCTABE-FUNCTAB)/8) 01865000
  1875. RETCODE DC X'00' P3128 01866000
  1876. * 01867000
  1877. EPTBL DS 255D ENTRY POINT TABLE, MAX ENTRIES 255 01868000
  1878. EPTBLEND EQU * 01869000
  1879. * 01870000
  1880. *EQUATES 01871000
  1881. MAXSIZ EQU 11 MAX SIZE OF OPERAND IN SCAN 01872000
  1882. SDFLAG EQU X'01' SD INDICATOR ON ESD CARD 01873000
  1883. ALIASID EQU X'80' ALIAS INDIC. IN QUANTITY FIELD 01874000
  1884. INDEXL EQU 12 LENGTH OF INDEX BUCKET 01875000
  1885. HFF DC X'FF' @VA04072 01876000
  1886. M1 EQU 1 MASK FOR CLM @VA04072 01877000
  1887. M3 EQU 3 MASK FOR ICM @VA08982 01877500
  1888. * 01878000
  1889. EJECT 01879000
  1890. ********************************************************************** 01880000
  1891. * 01881000
  1892. * 01882000
  1893. * I/O WORK SECTION 01883000
  1894. * 01884000
  1895. FREEST EQU * 01885000
  1896. BUFF DS 0D I/O BUFFER 01886000
  1897. HNAME DS CL6 HEADER I.D., FOR HEADER ONLY 01887000
  1898. HITEM DS CL2 POINTER TO FIRST DICT RCD 01888000
  1899. HLST DS CL4 NUMBER OF BYTES IN DICTIONARY 01889000
  1900. HITEMNO DS CL4 NUMBER OF RECORD ITEMS IN DICTIONARY 01890000
  1901. NUMFREE DS CL4 NUMBER OF DOUBLE WORDS IN DICT (N.A.) 01891000
  1902. DS CL60 REMAINDER OF I/O BUFFER 01892000
  1903. BUFFEND EQU BUFF+72 LAST DIGIT TO BE SEARCHED BY SCAN 01893000
  1904. LSTWRD EQU BUFF+76 USED AS SAVE AREA FOR LIB. LIST 01894000
  1905. TYPLIN DS 2D 01895000
  1906. DICRCDL EQU 72 LENGTH OF 80 BYTE RCD USED BY DICT 01896000
  1907. SPACE 1 01897000
  1908. RDISK DS D 01898000
  1909. RNAME DS D 01899000
  1910. RTYPE DS D 01900000
  1911. RMODE DS H 01901000
  1912. RITEM DS H 01902000
  1913. FSTLOC EQU * 01903000
  1914. RADD DS F 01904000
  1915. RMORE DS F @VA04662 01905000
  1916. DS H @VA04662 01906000
  1917. RNOIT DS H @VA04662 01907000
  1918. SAVRET DS F 01908000
  1919. SPACE 1 01909000
  1920. WRLIB DS D 01910000
  1921. LIBNAM DS D 01911000
  1922. LTYPE DS D 01912000
  1923. LMODE DS H 01913000
  1924. LIBITEM DS H 01914000
  1925. FSTLOCL EQU * 01915000
  1926. LIBADD DS F 01916000
  1927. LIBLENG DS F 01917000
  1928. LIBFLAG DS H 01918000
  1929. LIBNOIT DS H 01919000
  1930. LIBIRD DS F 01920000
  1931. DS 3H SPACE USED BY ALTER 01921000
  1932. RNMFENCE DS 2F FENCE FOR RENAME PLIST 01922000
  1933. SPACE 1 01923000
  1934. PPP DS F POINTER TO COMMAND TYPE 01924000
  1935. ENDDIC DS F 01925000
  1936. SAVE DS 2F POINTERS FOR OVERFLOW 01926000
  1937. ABUFFER DC A(BUFFER) @VA04662 01927000
  1938. PDOUT DS 0D 01928000
  1939. ATBL2 DS F ADDRESS OF TABLE2 01929000
  1940. TABLE DS (TBLSIZE)XL12 12-BYTES PER ENTRY 01930000
  1941. TABLE2 DS (TBLSIZE)XL12 ... 01931000
  1942. BUFFER DS CL800 LARGE BUFFER FOR BLOCKED I/O @VA04662 01932000
  1943. ENDFREE DS 0D 01933000
  1944. EJECT P3128 01934000
  1945. DICTDS DSECT 01935000
  1946. INDXNAME DS CL8 NEW INDEX MEMBER NAME 01936000
  1947. INDXADDR DS CL2 STARTING ITEM NUMBER 01937000
  1948. INDXSPAR DS CL1 RESERVED 01938000
  1949. INDXCBYT DS CL1 C-BYTE 01939000
  1950. * 01940000
  1951. * 01941000
  1952. ODICTDS DSECT 01942000
  1953. ODICNAME DS CL8 OLD DICTIONARY MEMBER NAME 01943000
  1954. ODICADDR DS CL2 STARTING ITEM NUMBER 01944000
  1955. ODICSPAR DS CL1 RESERVED 01945000
  1956. ODICCBYT DS CL1 C-BYTE 01946000
  1957. ONXTADDR EQU ODICADDR+INDEXL NEXT INDEX ADDR FIELD @VA04662 01947000
  1958. * 01948000
  1959. * 01949000
  1960. OPTBLDS DSECT DSECT FOR OPERAND BRANCH TABLE 01950000
  1961. OPNAME DS CL8 OPERATOR NAME 01951000
  1962. OPRTNAD DS CL4 BRANCH INSTR. FOR PROC. RTNE 01952000
  1963. * 01953000
  1964. * 01954000
  1965. EJECT 01955000
  1966. SPACE 2 01956000
  1967. REGEQU 01957000
  1968. ADT @VA07183 01958000
  1969. NUCON 01959000
  1970. STATE EQU 0 01960000
  1971. RDBUF EQU 2 01961000
  1972. FINIS EQU 4 01962000
  1973. FILE EQU 6 01963000
  1974. SPACE 2 01964000
  1975. FMODE EQU 24 01965000
  1976. FSIZE EQU 32 01966000
  1977. FFORM EQU 30 FST OFFSET FOR THE FILE FORMAT 01967000
  1978. SPACE 3 01968000
  1979. END 01969000