Table of Contents

DMSPUN Source

References

Source Listing

DMSPUN.ASSEMBLE.txt
  1. PUN TITLE 'DMSPUN (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. *. 00003000
  4. * MODULE NAME: DMSPUN 00004000
  5. * 00005000
  6. * FUNCTION: TO PUNCH CMS FILES TO THE VIRTUAL CARD PUNCH 00006000
  7. * 00007000
  8. * ATTRIBUTES: DISK RESIDENT, TRANSIENT, SERIALLY REUSABLE 00008000
  9. * NOTE: PUNCH MUST BE GENMOD'D WITH THE SYSTEM OPTION 00008100
  10. * 00009000
  11. * ENTRY POINT: DMSPUN(PUNCH) 00010000
  12. * 00011000
  13. * ENTRY CONDITIONS: UPON ENTRY, R13 POINTS TO A 24-FULLWORD SAVE 00012000
  14. * AREA PROVIDED BY DMSITS, AND R1 POINTS TO A PARAMETER LIST 00013000
  15. * IN THE FOLLOWING FORMAT: 00014000
  16. * DS 0F 00015000
  17. * PLIST DC CL8'PUNCH' 00016000
  18. * DC CL8'FILENAME' MUST BE GIVEN 00017000
  19. * DC CL8'FILETYPE' MUST BE GIVEN 00018000
  20. * <DC CL8'FILEMODE'> IF NOT GIVEN, 'A ' IS USED 00019000
  21. * <DC CL8'('> NEEDED IF OPTIONS GIVEN 00020000
  22. * <DC CL8'OPTION 1'> (OPTIONS IN SUCCESSIVE 00021000
  23. * <DC CL8'OPTION N'> 'CL8' GROUPS) 00022000
  24. * <DC CL8')'> OPTION END - NOT REQUIRED 00023000
  25. * DC 8X'FF' FENCE - END OF PLIST 00024000
  26. * 00025000
  27. * THE VALID OPTIONS ARE: 00026000
  28. * HEADER OR H - THE FIRST CARD PUNCHED WILL BE A 00027000
  29. * HEADER CARD THAT DESCRIBES THE FILE. THE 00028000
  30. * HEADER CARD IS A VALID READ CONTROL CARD. 00029000
  31. * THE HEADER OPTION IS THE DEFAULT. 00030000
  32. * NOHEADER OR NOH - NO HEADER CARD IS PUNCHED. 00031000
  33. * MEMBER OR MEM - A 'MACLIB' OR 'TXTLIB' FILE IS TO 00032000
  34. * BE SEARCHED, AND ONE OR ALL MEMBERS ARE TO 00033000
  35. * BE PUNCHED. (MUST BE FOLLOWED BY THE MEMBER 00034000
  36. * NAME OR '*') 00035000
  37. * 00036000
  38. * EXIT CONDITIONS: AT EXIT R15 CONTAINS ONE OF THE FOLLOWING CODES: 00037000
  39. * CODE MEANING 00038000
  40. * 0 NO ERROR - NORMAL COMPLETION 00039000
  41. * 20 ILLEGAL * IN FILEID (FN AND FT MUST BE GIVEN) 00040000
  42. * 24 OPTION ERROR, INCOMPLETE FILEID 00041000
  43. * 28 FILE NOT FOUND 00042000
  44. * 32 LIBRARY ERROR, RECORD TOO LONG 00043000
  45. * 36 PUNCH DEVICE NONEXISTENT OR NOT SUPPORTED 00044000
  46. * 36 TARGET DISK NOT ACCESSED @VA12416 00044500
  47. * 100 DISK ERROR, PUNCH ERROR 00045000
  48. * 00046000
  49. * CALLS TO OTHER ROUTINES: DMSSTT - GET FST COPY 00047000
  50. * DMSBRD - READ NEXT RECORD FROM FILE 00048000
  51. * DMSCPF - CLOSE PUNCH 00049000
  52. * DMSFNS - CLOSE FILE 00050000
  53. * DMSFRE - GET, RELEASE FREE STORAGE 00051000
  54. * DMSCIOSI- PUNCH THE BUFFERED RECORDS 00052000
  55. * DMSERR - PROCESS ERROR MESSAGES 00053000
  56. * 00054000
  57. EJECT 00055000
  58. * 00056000
  59. * EXTERNAL REFERENCES: NUCON, ADTSECT 00057000
  60. * 00058000
  61. * TABLES/WORKAREAS: R13 AREA PROVIDED BY DMSITS 00059000
  62. * (USED WITH UIOSECT DSECT) 00060000
  63. * 00061000
  64. * REGISTER USAGE: 00062000
  65. * R1 PLIST POINTER AT ENTRY 00063000
  66. * R2 PLIST POINTER SAVE 00064000
  67. * R5 INTERNAL RETURN REGISTER 00065000
  68. * R11 BASE REG IN BUFFER 00066000
  69. * R12 BASE REG IN CODE 00067000
  70. * R13 BASE REG IN UIOSECT 00068000
  71. * R14 RETURN REG AT ENTRY 00069000
  72. * R15 RETURN CODE 00070000
  73. * 00071000
  74. * NOTES: DMSPUN PROVIDES A 4096-BYTE BUFFER ON A PAGE BOUNDARY FOR 00072000
  75. * PUNCHING. DMSPUN FILLS THIS BUFFER WITH CHAINED PUNCH CCWS, 00073000
  76. * TIC CCWS, AND DATA. DMSCIOSI IS CALLED TO ISSUE A START I/O 00074000
  77. * AGAINST THE CCW CHAIN IN THE BUFFER. THIS PROCEDURE IS MUCH 00075000
  78. * MORE EFFICIENT THAN ISSUING A SEPARATE START I/O FOR EACH 00076000
  79. * RECORD TO BE PUNCHED. DMSPUN EXECUTES IN THE TRANSIENT AREA, 00077000
  80. * WHICH IS TWO PAGES LONG. THE EXECUTABLE CODE OCCUPIES THE 00078000
  81. * FIRST PAGE, AND THE BUFFER OCCUPIES THE SECOND PAGE. 00079000
  82. * 00080000
  83. * OPERATION: 00081000
  84. * SETUP - 00082000
  85. * 1. CHECK TO ENSURE THAT A VIRTUAL PUNCH IS AVAILABLE. 00083000
  86. * 2. SCAN OPTIONS AND SET SWITCHES. 00084000
  87. * 3. CALL DMSSTT(STATE) TO VERIFY EXISTENCE OF FILE. 00085000
  88. * 4. CHECK RECORD LENGTH AGAINST 80, THE ALLOWABLE MAXIMUM. 00086000
  89. * 00087000
  90. * HEADER ROUTINE - 00088000
  91. * 5. IF HEADER WANTED, BUILD THE HEADER CARD IN THE BUFFER. 00089000
  92. * 00090000
  93. * LIBRARY LOOKUP ROUTINE - 00091000
  94. * 6. IF MEMBER OPTION, READ LIBRARY DICTIONARY POINTER AND 00092000
  95. * CALL DMSFRE TO GET FREE STORAGE FOR THE DICTIONARY. READ 00093000
  96. * THE DICTIONARY AND LOCATE THE FIRST, OR ONLY, MEMBER 00094000
  97. * TO BE PUNCHED. 00095000
  98. * 00096000
  99. * MAIN LOOP - 00097000
  100. * 7. CONSTRUCT PUNCH AND TIC CCWS IN THE NEXT AVAILABLE 00098000
  101. * BUFFER LOCATION. 00099000
  102. * 8. CALL DMSBRD(RDBUF) TO READ A RECORD FROM THE FILE INTO 00100000
  103. * THE BUFFER. IF END-OF-FILE RETURNED, GO TO 11. 00101000
  104. * 9. IF BUFFER IS FULL, CALL DMSCIOSI TO PUNCH IT. 00102000
  105. * 10. GO TO 7. 00103000
  106. * 00104000
  107. EJECT 00105000
  108. * 00106000
  109. * RETURNS - 00107000
  110. * 11. IF BUFFER IS NOT EMPTY, CALL DMSCIOSI TO PUNCH IT. 00108000
  111. * 12. CALL CP CLOSE TO CLOSE THE PUNCH. 00109000
  112. * 13. CALL DMSFNS TO CLOSE THE FILE. 00110000
  113. * 14. IF MEMBER OPTION, CALL DMSFRE TO RELEASE FREE STORAGE. 00111000
  114. * 15. RETURN TO CMS. 00112000
  115. * 00113000
  116. * NOTE: IF AN ERROR IS DETECTED, DMSERR IS CALLED TO PROCESS 00114000
  117. * AN ERROR MESSAGE, AND THEN THE 'RETURNS' SECTION IS ENTERED 00115000
  118. * AT AN APPROPRIATE POINT TO CLOSE ONLY THOSE THINGS THAT HAS 00116000
  119. * BEEN OPENED AT THE TIME OF THE ERROR. 00117000
  120. *. 00118000
  121. ********************************************************************** 00119000
  122. EJECT 00120000
  123. ********************************************************************** 00121000
  124. * 00122000
  125. * START OF PROGRAM 00123000
  126. * 00124000
  127. ********************************************************************** 00125000
  128. SPACE 1 00126000
  129. DMSPUN START X'E000' 00127000
  130. ENTRY PUNCH 00128000
  131. PUNCH EQU DMSPUN 00129000
  132. USING *,R12,R11 00130000
  133. USING NUCON,0 NUCON ADDRESSABILITY @V305066 00130100
  134. LR R12,R15 ESTABLISH ADDRESSABILITY 00131000
  135. L R11,=A(PUNCH+4096) 00132000
  136. USING UIOSECT,R13 00133000
  137. ST R14,UIOSAVE SAVE RETURN ADDRESS 00134000
  138. LA R3,BUFDATA SET COUNTER TO BEGINNING OF BUFFER 00135000
  139. SR R4,R4 AND ZERO BATCTR 00136000
  140. STM R3,R4,BUFCTR ... 00137000
  141. SPACE 1 00138000
  142. LA R2,13 ASSUME DEVICE '00D' 00139000
  143. DC X'83',X'23',XL2'0024' ISSUE DEVICE TYPE DIAGNOSE 00140000
  144. BC 1,ERR008A DEVICE NOT ATTACHED - ERROR 8 00141000
  145. ST R3,UIODIAG RESULTS STORED 00142000
  146. CLI UIOVTYPC,CLASURO UNIT RECORD OUTPUT CLASS? 00143000
  147. BNE ERR008 NO, ERROR 8 00144000
  148. TM UIOVTYPE,TYPPUN IS IT A PUNCH? 00145000
  149. BZ ERR008 NO, ERROR 8 00146000
  150. SPACE 1 00147000
  151. DEVOK LR R2,R1 SAVE PLIST POINTER TO FREE R1 00148000
  152. MVI SWS,HEAD CLEAR SWITCHES TO HEADING DEFAULT 00149000
  153. LM R8,R10,SCANFO R8=X'FF', R9=C'*', R10=C'(' 00150000
  154. LM R3,R7,8(R2) REGS 3-7 CONTAIN GIVEN FILEID 00151000
  155. CLR R3,R8 NO FILEID GIVEN? 00152000
  156. BE ERR054 INCOMPLETE FILEID 00153000
  157. CLR R3,R9 FILENAME GIVEN AS '*'? 00154000
  158. BE ERR062 ILLEGAL * 00155000
  159. CLR R3,R10 OPTION START? 00156000
  160. BE ERR054 INCOMPLETE FILEID 00157000
  161. CLR R5,R8 NO FILETYPE GIVEN? 00158000
  162. BE ERR054 INCOMPLETE FILEID 00159000
  163. CLR R5,R9 FILETYPE GIVEN AS '*'? 00160000
  164. BE ERR062 ILLEGAL * 00161000
  165. CLR R5,R10 OPTION START? 00162000
  166. BE ERR054 INCOMPLETE FILEID 00163000
  167. LR R9,R7 SAVE 24(PLIST) IN R9 00164000
  168. CLR R7,R8 FILEMODE NOT GIVEN? 00165000
  169. BE MODEA ASSUME FM = A 00166000
  170. CLR R7,R10 OPTION START? 00167000
  171. BE MODEA MODE NOT GIVEN - ASSUME FM = A 00168000
  172. ICM R7,B'0011',BITS FILEMODE GIVEN - USE IT 00169000
  173. B SETLIST 00170000
  174. SPACE 1 00171000
  175. MODEA L R7,AMODE ASSUME FILEMODE OF 'A ' 00172000
  176. SETLIST STM R3,R7,FILENAME SET FILE SYSTEM PLIST WITH FILEID 00173000
  177. L R1,BITS INITIALIZE OTHER FIELDS TO '0001' 00174000
  178. STH R1,FILENOIT ... 00175000
  179. MVC FILE(8),=CL8'STATE' SET FILE PLIST FOR STATE CALL 00176000
  180. SPACE 1 00177000
  181. *** SCAN OPTIONS, SET APPROPRIATE SWITCHES 00178000
  182. SPACE 1 00179000
  183. CLR R9,R8 24(PLIST) = X'FF'? 00180000
  184. BE CKEXIST IF SO, END OF PLIST 00181000
  185. CLR R9,R10 24(PLIST) = C'('? 00182000
  186. BNE SCAN4 IF NOT, FILEMODE WAS GIVEN 00183000
  187. LA R9,32(,R2) POINT TO OPTIONS 00184000
  188. SPACE 1 00185000
  189. SCAN1 CLI 0(R9),C')' END OF OPTIONS? 00186000
  190. BE CKEXIST YES 00187000
  191. CLI 0(R9),X'FF' END OF PLIST? 00188000
  192. BE CKEXIST YES 00189000
  193. CLC 0(8,R9),=CL8'HEADER' 00190000
  194. BE SCAN1A BRANCH IF HEADER WANTED 00191000
  195. CLC 0(8,R9),=CL8'H' 00192000
  196. BNE SCAN2 GO CHECK NEXT POSSIBILITY 00193000
  197. SPACE 1 00194000
  198. SCAN1A OI SWS,HEAD TURN ON HEADER WANTED SWITCH 00195000
  199. NI SWS,255-NOHDR TURN OFF NOHEADER SWITCH, IF ON @VA02870 00195100
  200. LA R9,8(,R9) INCREMENT R9 TO NEXT OPTION 00196000
  201. B SCAN1 00197000
  202. SPACE 1 00198000
  203. SCAN2 CLC 0(8,R9),=CL8'NOHEADER' 00199000
  204. BE SCAN2A BRANCH IF NOHEADER WANTED 00200000
  205. CLC 0(8,R9),=CL8'NOH' 00201000
  206. BNE SCAN3 GO CHECK NEXT POSSIBILITY 00202000
  207. SPACE 1 00203000
  208. SCAN2A OI SWS,NOHDR TURN ON NOHEADER WANTED SWITCH 00204000
  209. LA R9,8(,R9) INCREMENT R9 TO NEXT OPTION 00205000
  210. B SCAN1 00206000
  211. SPACE 1 00207000
  212. SCAN3 CLC 0(8,R9),=CL8'MEM' 00208000
  213. BE SCAN3A 00209000
  214. CLC 0(8,R9),=CL8'MEMBER' 00210000
  215. BNE ERR003 OPTION NOT RECOGNIZED - ERROR 00211000
  216. SCAN3A OI SWS,MEMB TURN ON MEMBER SWITCH 00212000
  217. CLC 8(8,R9),=CL8'*' ALL MEMBERS WANTED? 00213000
  218. BE SCAN3B BRANCH IF SO 00214000
  219. CLI 8(R9),C')' END OF OPTIONS? 00215000
  220. BE ERR029 ERROR IF SO 00216000
  221. CLI 8(R9),X'FF' END OF PLIST? 00217000
  222. BE ERR029 ERROR IF SO 00218000
  223. MVC NAME1(8),8(R9) SINGLE MEMBER WANTED - SAVE ITS NAME 00219000
  224. OI SWS,NAME SIGNAL SINGLE MEMBER 00220000
  225. SPACE 1 00221000
  226. SCAN3B LA R9,16(,R9) POINT TO NEXT OPTION 00222000
  227. B SCAN1 GO SCAN IT 00223000
  228. SPACE 1 00224000
  229. SCAN4 CLI 32(R2),X'FF' END OF PLIST? 00225000
  230. BE CKEXIST YES, NO (MORE) OPTIONS TO SCAN 00226000
  231. CLI 32(R2),C'(' BEGINNING OF OPTIONS? 00227000
  232. BNE SCAN4A IF NOT, DON'T KNOW WHAT IT IS 00228000
  233. LA R9,40(,R2) POINT R9 TO BEGINNING OF OPTIONS 00229000
  234. B SCAN1 AND START SCANNING 00230000
  235. SPACE 1 00231000
  236. SCAN4A LA R9,32(,R2) POINT R9 TO UNKNOWN OPTION 00232000
  237. B ERR003 AND SIGNAL ERROR 00233000
  238. SPACE 1 00234000
  239. EJECT 00235000
  240. ********************************************************************* 00236000
  241. * 00237000
  242. * CHECK EXISTENCE OF FILE, CHECK SWITCHES TO DETERMINE 00238000
  243. * THE ORDER IN WHICH ROUTINES WILL BE PERFORMED 00239000
  244. * 00240000
  245. ********************************************************************* 00241000
  246. SPACE 1 00242000
  247. CKEXIST TM SWS,NOHDR RESOLVE CONFLICTING SWITCHES 00243000
  248. BZ CK1 NO PROBLEM, BRANCH 00244000
  249. NI SWS,255-HEAD NOHEADER TAKES EFFECT IF SPECIFIED 00245000
  250. SPACE 1 00246000
  251. CK1 LA R1,FILE SET FOR CMS CALL 00247000
  252. L R15,ASTATE STATE @V305066 00248100
  253. BALR R14,R15 ... @V305066 00248200
  254. BNZ STATERR ERROR RETURN @V305066 00248300
  255. L R3,FILEBUFF GET LOCATION OF FST COPY 00250000
  256. MVC FILEMODE(2),24(R3) SET ACTUAL FILEMODE 00251000
  257. MVC FILECOMM(8),=CL8'RDBUF' SET FILE PLIST FOR READ 00252000
  258. L R4,32(,R3) RECORD LENGTH IN R4 00253000
  259. ST R4,FILESIZE SET INTO FILE PLIST 00254000
  260. LA R5,80 MAX LENGTH IN R5 00255000
  261. CR R4,R5 IS LENGTH OK? 00256000
  262. BH ERR044 RECORD TOO LONG - ERROR 00257000
  263. ST R3,PUNFST SAVE A(FST) FOR LATER @VA01108 00258000
  264. LA R5,MAINRD SET LOOP ADDRESS @VA01108 00258100
  265. TM SWS,MEMB PUNCHING FROM A LIBRARY? @VA01108 00258200
  266. BO MEMBS YES, LOOK UP MEMBER @VA01108 00258300
  267. EJECT 00265000
  268. ********************************************************************** 00266000
  269. * 00267000
  270. * ROUTINE TO SET UP HEADER CARD 00268000
  271. * 00269000
  272. ********************************************************************** 00270000
  273. SPACE 1 00271000
  274. HEADSET TM SWS,HEAD IS A HEADING CARD WANTED? @VA01108 00272000
  275. BCR 8,R5 NO, 'BZ' RETURN @VA01108 00272100
  276. LM R9,R10,BUFCTR R9= NEXT BUFFER LOCATION @VA01108 00272200
  277. LA R6,16(,R9) R6= DATA LOCATION 00273000
  278. LA R8,96(,R9) R8= FUTURE NEXT BUFFER LOCATION 00274000
  279. L R7,CCWCNT R7= RIGHT HALF WRITE CCW 00275000
  280. STM R6,R8,0(R9) FORM CCWS 00276000
  281. MVI 0(R9),X'41' INSERT PUNCH COMMAND 00277000
  282. MVI 8(R9),X'08' INSERT TIC COMMAND 00278000
  283. LA R10,1(,R10) INCREMENT BATCH COUNT 00279000
  284. ST R8,BUFCTR UPDATE BUFCTR 00280000
  285. ST R10,BATCTR AND BATCTR 00281000
  286. MVC 0(80,R6),BBUF CLEAR BUFFER AREA 00282000
  287. SPACE 1 00283000
  288. MVC 0(5,R6),PCHDR SET COLS 1-5 OF HEADER CARD 00284000
  289. TM SWS,MEMB PUNCHING FROM A LIBRARY? @VA01108 00285000
  290. BZ HEADSET1 BRANCH IF NOT - 'NORMAL' HEADER @VA01108 00285100
  291. MVC 7(8,R6),0(R1) MOVE IN MEMBER NAME @VA01108 00285200
  292. CLC FILETYPE(3),=CL3'MAC' IS IT A MACLIB? 00288000
  293. BE MACHEAD 00289000
  294. MVC 16(8,R6),=CL8'TEXT' MUST BE TXTLIB - MAKE FT= TEXT 00290000
  295. B HEADSET2 00291000
  296. MACHEAD MVC 16(8,R6),=CL8'MEMBER' MAKE FILETYPE= MEMBER 00292000
  297. B HEADSET2 00293000
  298. SPACE 1 00294000
  299. HEADSET1 MVC 7(8,R6),FILENAME MOVE IN FILENAME 00295000
  300. MVC 16(8,R6),FILETYPE MOVE IN FILETYPE 00296000
  301. HEADSET2 MVC 25(2,R6),FILEMODE AND FILEMODE 00297000
  302. L R3,PUNFST GET A(FST) FOR THIS FILE @VA01108 00297100
  303. L R14,FVSFSTAD-STATEFST(R3) GET A(ADT THIS FILE) 00298000
  304. USING ADTSECT,R14 TEMP BASE REG 00299000
  305. MVC 28(6,R6),ADTID MOVE IN DISK LABEL 00300000
  306. DROP R14 00301000
  307. CLC 18(2,R3),BITS IS TIME IN FST= ZERO? 00302000
  308. BE NOTIME YES 00303000
  309. CLI 18(R3),X'24' VALID TIME? 00304000
  310. BH NOTIME NO 00305000
  311. MVC 44(6,R6),TPAT MOVE IN TIME EDIT PATTERN 00306000
  312. ED 44(6,R6),18(R3) 00307000
  313. NOTIME MVI 40(R6),C'/' INSERT SLASH 00308000
  314. MVC 41(2,R6),38(R3) MOVE IN YEAR 00309000
  315. CLC 16(2,R3),BITS IS DATE IN FST=ZERO? 00310000
  316. BE NODATE 00311000
  317. CLI 16(R3),X'01' VALID DATE? 00312000
  318. BL NODATE 00313000
  319. CLI 16(R3),X'12' CHECK MORE... 00314000
  320. BH NODATE 00315000
  321. MVC 34(6,R6),DPAT MOVE IN DATE EDIT PATTERN 00316000
  322. ED 34(6,R6),16(R3) 00317000
  323. NODATE C R8,LIMIT IS BUFFER GETTING FULL? 00318000
  324. BNL PUNCHER YES 00319000
  325. BR R5 00320000
  326. EJECT 00321000
  327. ********************************************************************** 00322000
  328. * READ AND CHECK FOR 'LIB' LIBRARY. GET STORAGE AND READ DICTIONARY 00323000
  329. * INTO IT. IF MEMBER NAME WANTED SEARCH FOR IT AND SET REGS. 00324000
  330. * R4-DICTIONARY LOCATION OF CURRENT NAME. 00325000
  331. * DICTIONARY FORM- 00326000
  332. * CL8'NAME' 00327000
  333. * CL2'INDEX' 00328000
  334. * CL2'LENGTH' 00329000
  335. * 00330000
  336. ********************************************************************** 00331000
  337. SPACE 1 00332000
  338. MEMBS EQU * 00333000
  339. LA R7,MEMBUF POINT TO BUFFER 00334000
  340. ST R7,FILEBUFF SET IN PLIST 00335000
  341. LA R6,1 00336000
  342. STCM R6,3,FILEITNO SET ITEM NO. TO 1ST RECORD 00337000
  343. LA R1,FILE READ DICTIONARY POINTER 00338000
  344. L R15,ARDBUF RDBUF @V305066 00339000
  345. BALR R14,R15 ... @V305066 00339100
  346. BNZ LIBRERR ERROR RETURN @V305066 00339200
  347. CLC 3(3,R7),=CL3'LIB' IS IT A LIBRARY FILE 00341000
  348. BNE ERR033 NOT A LIB FILE 00342000
  349. SR R0,R0 CLEAR REG 0 @VA07196 00343000
  350. ICM R0,B'0011',10(R7) GET LENGTH OF DICTIONARY @VA07196 00343500
  351. ST R0,DICTLEN SAVE 00344000
  352. LTR R0,R0 IF LENGTH IS ZERO... 00345000
  353. BZ ERR039 THERE ARE NO ENTRIES IN LIBRARY 00346000
  354. LA R1,60 FIX FOR MINIMUM NUMBER DOUBLE WORDS 00347000
  355. AR R0,R1 * 00348000
  356. SRL R0,3 * 00349000
  357. ST R0,STRLEN SAVE AMOUNT REQUESTED 00350000
  358. DMSFREE DWORDS=(0) 00351000
  359. ST R1,STRADR SAVE ADDRESS 00352000
  360. ST R1,DICTADR SAVE STORAGE START 00353000
  361. L R6,DICTLEN GET BUF AREA ADDR 00354000
  362. LA R3,0(R1,R6) SET END 00355000
  363. LA R2,72 SET INDEX FACTOR 00356000
  364. ST R3,DICTEND SAVE END OF DICTIONARY 00357000
  365. BCTR R3,R0 DECR FOR BXLE 00358000
  366. LH R4,6(R7) GET INDEX FOR READ 00359000
  367. LR R6,R1 00360000
  368. * 00361000
  369. RDLOOP STH R4,FILEITNO SET ITEM NO 00362000
  370. LA R1,FILE READ PARM LIST 00363000
  371. L R15,ARDBUF RDBUF @V305066 00364000
  372. BALR R14,R15 ... @V305066 00364100
  373. BNZ READERR ERROR RETURN @V305066 00364200
  374. MVC 0(72,R6),0(R7) MOVE TO DICTIONARY 00366000
  375. LA R4,1(,R4) INCR INDEX 00367000
  376. BXLE R6,R2,RDLOOP GET EVERY ONE 00368000
  377. * 00369000
  378. L R3,DICTEND END OF DICTIONARY 00370000
  379. L R4,DICTADR GET START ADDR 00371000
  380. LA R2,12 00372000
  381. BCTR R3,0 DECREMENT FOR BXLE 00373000
  382. RDLOOP1 CLI 0(R4),X'00' NULL ENTRY? 00374000
  383. BNZ NAMLOOP2 NO 00375000
  384. BXLE R4,R2,RDLOOP1 LOOK AGAIN 00376000
  385. B ERR039A ERROR NO ENTRIES 00377000
  386. * 00378000
  387. NAMLOOP2 ST R4,DICTADR 00379000
  388. TM SWS,NAME ONLY ONE MEMBER WANTED? 00380000
  389. BNO NAMLOOP1 NO,THEN WE CAN START 00381000
  390. LA R2,12 00382000
  391. NAMLOOP CLC 0(8,R4),NAME1 IS IT NAME 00383000
  392. BE NAMLOOP1 YES, FOUND IT 00384000
  393. BXLE R4,R2,NAMLOOP LOOK AT NEXT 00385000
  394. B ERR013 NAME NOT FOUND 00386000
  395. * 00387000
  396. NAMLOOP1 ST R4,DICTADR ENSURE DICTADR IS UP TO DATE @VA01108 00388000
  397. CLC 0(2,R4),BITS IS FIRST SLOT EMPTY? @VA01108 00388100
  398. BNE NAMLOOP3 NO 00389000
  399. LA R4,12(R4) POINT TO NEXT IF FIRST EMPTY 00390000
  400. B NAMLOOP2 00391000
  401. NAMLOOP3 EQU * 00392000
  402. L R4,DICTADR SET DICTADR BACK 12 FOR CORRECT..@VA01108 00393000
  403. S R4,=F'12' ...ENTRY INTO PUNCHING LOOP @VA01108 00393100
  404. ST R4,DICTADR ... @VA01108 00393200
  405. B MEMFIND ENTER PUNCH LOOP @VA01108 00393300
  406. EJECT 00396000
  407. ********************************************************************** 00397000
  408. * 00398000
  409. * MAIN PROCESSING LOOP 00399000
  410. * 00400000
  411. ********************************************************************** 00401000
  412. SPACE 1 00402000
  413. MAINLOOP EQU * 00403000
  414. LA R5,MEMLOOP SET RETURN ADDR IN CASE MEMBER OPTION 00404000
  415. TM SWS,MEMB PUNCHING A LIBRARY MEMBER? 00405000
  416. BO MEMLOOP YES 00406000
  417. LA R5,MAINRD NO, CHANGE RETURN LOOP ADDRESS 00407000
  418. BR R5 AND GO READ A RECORD 00408000
  419. SPACE 1 00409000
  420. MEMLOOP L R1,FILEBUFF POINT TO LAST RECORD READ 00410000
  421. CLC 0(4,R1),=X'61FFFF61' END OF MEMBER RECORD? 00411000
  422. BE MEMEND BRANCH IF SO 00412000
  423. LA R4,1(,R4) INCREMENT RECORD NUMBER 00413000
  424. STH R4,FILEITNO AND SET IN FILE PLIST 00414000
  425. B MAINRD READ NEXT RECORD 00415000
  426. SPACE 1 00416000
  427. MEMEND LA R15,12 SIMULATE EOF IN CASE FINISHED 00417000
  428. TM SWS,NAME MEMBER NAME GIVEN? 00418000
  429. BO READERR 00419000
  430. SPACE 1 00420000
  431. MEMFIND L R1,DICTADR PREPARE TO LOCATE NEXT MEMBER 00421000
  432. LA R1,12(,R1) POINT TO NEXT DICTIONARY ENTRY 00422000
  433. C R1,DICTEND END OF ALL MEMBERS? 00423000
  434. BNL READERR YES, END 00424000
  435. ST R1,DICTADR NO,STORE NEW ADDRESS 00425000
  436. CLI 0(R1),X'00' NULL DICTIONARY ENTRY? 00426000
  437. BE MEMFIND IF SO, LOOK AGAIN 00427000
  438. LH R4,8(,R1) IF NOT, GET STARTING LOCATION 00428000
  439. STH R4,FILEITNO AND SET IT IN PLIST @VA01108 00428100
  440. BAL R5,HEADSET PUNCH HEADER FOR THIS MEMBER @VA01108 00428200
  441. LA R5,MEMLOOP SET LOOP ADDRESS @VA01108 00428300
  442. BYALIAS L R1,DICTADR CHECK IF NEXT ENTRY IS AN ALIAS @VA01108 00428400
  443. LA R1,12(,R1) POINT TO NEXT DICTIONARY ENTRY @VA01108 00428500
  444. C R1,DICTEND IS IT THE END? @VA01108 00428600
  445. BNL MAINRD YES, NO ALIAS PROBLEM @VA01108 00428700
  446. LH R2,8(,R1) INDEX OF NEXT MEMBER @VA01283 00428800
  447. CH R2,FILEITNO IS IT THE SAME AS THIS MEMBER? @VA01283 00428900
  448. BNE MAINRD NO, READ NEXT RECORD @VA01108 00429000
  449. ST R1,DICTADR DON'T REPUNCH SAME MEM NEXT TIME @VA01108 00429200
  450. B BYALIAS NOW CHECK IF NEW NEXT IS AN ALIAS@VA01108 00429300
  451. SPACE 1 00429400
  452. SPACE 1 00430000
  453. MAINRD EQU * 00431000
  454. LM R9,R10,BUFCTR R9= NEXT BUFFER LOCATION 00432000
  455. LA R6,16(,R9) R6= DATA LOCATION 00433000
  456. LA R8,96(,R9) R8= FUTURE NEXT BUFFER LOCATION 00434000
  457. L R7,CCWCNT R7= RIGHT HALF WRITE CCW 00435000
  458. STM R6,R8,0(R9) FORM CCWS 00436000
  459. MVI 0(R9),X'41' INSERT PUNCH CCW 00437000
  460. MVI 8(R9),X'08' INSERT TIC COMMAND 00438000
  461. LA R10,1(,R10) INCREMENT BATCH COUNT 00439000
  462. MVC 0(80,R6),BBUF CLEAR BUFFER AREA 00440000
  463. SPACE 1 00441000
  464. ST R6,FILEBUFF SET BUFFER ADDRESS IN FILE PLIST 00442000
  465. LA R1,FILE SET TO READ RECORD 00443000
  466. L R15,ARDBUF RDBUF @V305066 00444000
  467. BALR R14,R15 ... @V305066 00444100
  468. BNZ READERR ERROR RETURN @V305066 00444200
  469. ST R8,BUFCTR UPDATE BUFCTR 00446000
  470. ST R10,BATCTR AND BATCTR 00447000
  471. C R8,LIMIT IS BUFFER GETTING FULL? 00448000
  472. BNL PUNCHER YES, GO EMPTY IT 00449000
  473. BR R5 NO, GO BACK TO PROCESS NEXT RECORD 00450000
  474. EJECT 00451000
  475. ********************************************************************* 00452000
  476. * 00453000
  477. * ROUTINE TO CALL DMSCIOSI TO PUNCH BUFFERED CCW CHAIN 00454000
  478. * 00455000
  479. ********************************************************************* 00456000
  480. SPACE 1 00457000
  481. PUNCHER EQU * 00458000
  482. L R9,BUFCTR GET NEXT BUFFER LOCATION 00459000
  483. LM R6,R7,CCWNOP SET NOP AT END OF BUFFER 00460000
  484. STM R6,R7,0(R9) ... 00461000
  485. LA R1,BUFPUN SET FOR DMSCIOSI CALL 00462000
  486. SVC 202 00463000
  487. DC AL4(BUFERR) 00464000
  488. LA R6,BUFDATA RESTORE BUFCTR TO BEGINNING OF BUFFER 00465000
  489. SR R7,R7 AND ZERO BATCTR 00466000
  490. STM R6,R7,BUFCTR ... 00467000
  491. BR R5 RETURN TO PROCESS NEXT RECORD 00468000
  492. EJECT 00469000
  493. ********************************************************************** 00470000
  494. * 00471000
  495. * ERROR MESSAGES 00472000
  496. * 00473000
  497. ********************************************************************** 00474000
  498. SPACE 1 00475000
  499. ERRMSG1 LA R0,FILENAME 00476000
  500. DMSERR MF=(E,'SYS'),LET=S,NUM=(4),TEXTA=(3), *00477000
  501. SUB=(DEC,(15),CHAR8A,(0)) 00478000
  502. BR R5 00479000
  503. SPACE 1 00480000
  504. LIBRERR NI SWS,255-MEMB CONSIDER AS NOT MEMB, FREE STG NOT GOT 00481000
  505. READERR CH R15,H12 IS IT EOF? 00482000
  506. BE NORMRET YES, ALL DONE 00483000
  507. SPACE 1 00484000
  508. ERR104 LA R3,BRDERR 00485000
  509. LA R4,104 00486000
  510. BAL R5,ERRMSG1 00487000
  511. LA R15,100 00488000
  512. B CLOSRET 00489000
  513. SPACE 1 00490000
  514. BUFERR EQU * 00491000
  515. ERR118 C R15,=F'100' MSG GIVEN BY DMSCIO? 00492000
  516. BE CLOSRET1 BRANCH IF SO 00493000
  517. LA R3,CIOERR 00494000
  518. LA R4,123 00495000
  519. BAL R5,ERRMSG1 00496000
  520. LA R15,100 00497000
  521. B CLOSRET1 00498000
  522. ERRMSG36 EQU * @VA12416 00498150
  523. LA R0,FILEMODE POINT TO MODE LETTER @VA12416 00498300
  524. DMSERR TEXT='DISK ''..'' NOT ACCESSED',NUM=69, X00498450
  525. LET=E,SUB=(CHARA,((R0),1)),TYPCALL=SVC @VA12416 00498600
  526. LA R15,36 GIVE RETCODE @VA12416 00498750
  527. B ERRET AND GO RETURN TO CALLER @VA12416 00498900
  528. SPACE 1 00499000
  529. ERRMSG2 LA R0,FILENAME 00500000
  530. DMSERR MF=(E,'SYS'),LET=E,NUM=(4),TEXTA=(3), *00501000
  531. SUB=(CHAR8A,(0)) 00502000
  532. BR R5 00503000
  533. SPACE 1 00504000
  534. STATERR EQU * @VA12416 00505000
  535. C R15,=F'36' WAS DISK NOT ACCESSED? @VA12416 00505100
  536. BE ERRMSG36 GIVE MSG @VA12416 00505200
  537. C R15,=F'28' FILE NOT FOUND FROM STATE? @VA12416 00505300
  538. BNE ERRET NO, MESSAGE GIVEN BY STATE 00506000
  539. ERR002 LA R3,NOFILE 00507000
  540. LA R4,2 00508000
  541. BAL R5,ERRMSG2 00509000
  542. LA R15,28 00510000
  543. B ERRET 00511000
  544. SPACE 1 00512000
  545. ERR008 LA R3,UNS 00513000
  546. LA R4,8 00514000
  547. BAL R5,ERRMSG2 00515000
  548. LA R15,36 00516000
  549. B ERRET 00517000
  550. SPACE 1 00518000
  551. ERR008A LA R3,INV 00519000
  552. LA R4,8 00520000
  553. BAL R5,ERRMSG2 00521000
  554. LA R15,36 00522000
  555. B ERRET 00523000
  556. SPACE 1 00524000
  557. ERR039 NI SWS,255-MEMB 00525000
  558. ERR039A LA R3,NOMEMB 00526000
  559. LA R4,39 00527000
  560. BAL R5,ERRMSG2 00528000
  561. LA R15,32 00529000
  562. B FINRET 00530000
  563. SPACE 1 00531000
  564. ERR033 LA R3,NOTLIB 00532000
  565. LA R4,33 00533000
  566. BAL R5,ERRMSG2 00534000
  567. NI SWS,255-MEMB 00535000
  568. LA R15,32 00536000
  569. B FINRET 00537000
  570. SPACE 1 00538000
  571. ERR062 LA R3,ASTER 00539000
  572. LA R4,62 00540000
  573. BAL R5,ERRMSG2 00541000
  574. LA R15,20 00542000
  575. B ERRET 00543000
  576. SPACE 1 00544000
  577. ERR044 LA R3,EXCED 00545000
  578. LA R4,44 00546000
  579. BAL R5,ERRMSG2 00547000
  580. LA R15,32 00548000
  581. B ERRET 00549000
  582. SPACE 1 00550000
  583. ERR054 LA R3,INCID 00551000
  584. LA R4,54 00552000
  585. BAL R5,ERRMSG2 00553000
  586. LA R15,24 00554000
  587. B ERRET 00555000
  588. SPACE 1 00556000
  589. ERRMSG3 DMSERR MF=(E,'SYS'),LET=E,NUM=(4),TEXTA=(3), *00557000
  590. SUB=(CHARA,(9),CHARA,(6)) 00558000
  591. BR R5 00559000
  592. SPACE 1 00560000
  593. ERR003 LA R3,BADOPT 00561000
  594. LA R4,3 00562000
  595. BAL R5,ERRMSG3 00563000
  596. LA R15,24 00564000
  597. B ERRET 00565000
  598. SPACE 1 00566000
  599. ERR013 LA R9,NAME1 00567000
  600. LA R3,MEMNF 00568000
  601. LA R4,13 00569000
  602. BAL R5,ERRMSG3 00570000
  603. LA R15,32 00571000
  604. B FINRET 00572000
  605. SPACE 1 00573000
  606. ERR029 LR R6,R9 00574000
  607. LA R9,8(,R9) 00575000
  608. LA R3,BADPARM 00576000
  609. LA R4,29 00577000
  610. BAL R5,ERRMSG3 00578000
  611. LA R15,24 00579000
  612. B ERRET 00580000
  613. EJECT 00581000
  614. NOFILE DC AL1(L'NOFILEMS) 00582000
  615. NOFILEMS DC C'FILE ''....................'' NOT FOUND' 00583000
  616. SPACE 1 00584000
  617. NOMEMB DC AL1(L'NOMEMBMS) 00585000
  618. NOMEMBMS DC C'NO ENTRIES IN LIBRARY ''....................''' 00586000
  619. SPACE 1 00587000
  620. NOTLIB DC AL1(L'NOTLIBMS) 00588000
  621. NOTLIBMS DC C'FILE ''....................'' IS NOT A LIBRARY' 00589000
  622. SPACE 1 00590000
  623. INCID DC AL1(L'INCIDMS) 00591000
  624. INCIDMS DC C'INCOMPLETE FILEID SPECIFIED' 00592000
  625. SPACE 1 00593000
  626. EXCED DC AL1(L'EXCEDMS) 00594000
  627. EXCEDMS DC C'RECORD EXCEEDS ALLOWABLE MAXIMUM' 00595000
  628. SPACE 1 00596000
  629. ASTER DC AL1(L'ASTERMS) 00597000
  630. ASTERMS DC C'INVALID * IN FILEID' 00598000
  631. SPACE 1 00599000
  632. BRDERR DC AL1(L'BRDERRMS) 00600000
  633. BRDERRMS DC C'ERROR ''...'' READING FILE ''....................'' FR*00601000
  634. OM DISK' 00602000
  635. SPACE 1 00603000
  636. CIOERR DC AL1(L'CIOERRMS) 00604000
  637. CIOERRMS DC C'ERROR ''...'' PUNCHING FILE ''....................''' 00605000
  638. SPACE 1 00606000
  639. INV DC AL1(L'INVMS) 00607000
  640. INVMS DC C'DEVICE ''00D'' INVALID OR NONEXISTENT' 00608000
  641. SPACE 1 00609000
  642. UNS DC AL1(L'UNSMS) 00610000
  643. UNSMS DC C'DEVICE ''00D'' UNSUPPORTED DEVICE TYPE' 00611000
  644. SPACE 1 00612000
  645. BADOPT DC AL1(L'BADOPTMS) 00613000
  646. BADOPTMS DC C'INVALID OPTION ''........''' 00614000
  647. SPACE 1 00615000
  648. BADPARM DC AL1(L'BADPARMS) 00616000
  649. BADPARMS DC C'INVALID PARAMETER ''........'' IN THE OPTION ''.......*00617000
  650. .'' FIELD' 00618000
  651. SPACE 1 00619000
  652. MEMNF DC AL1(L'MEMNFMS) 00620000
  653. MEMNFMS DC C'MEMBER ''........'' NOT FOUND' 00621000
  654. EJECT 00622000
  655. ********************************************************************** 00623000
  656. * 00624000
  657. * RETURNS 00625000
  658. * 00626000
  659. ********************************************************************** 00627000
  660. SPACE 1 00628000
  661. NORMRET SR R15,R15 CLEAR RETURN FOR NORMAL END 00629000
  662. SPACE 1 00630000
  663. CLOSRET LR R6,R15 SAVE RETURN CODE IN R6 00631000
  664. L R8,BUFCTR ADDR OF NEXT LOC IN BUFFER 00632000
  665. LA R3,BUFDATA ADDR OF START OF BUFFER 00633000
  666. CR R3,R8 IS BUFFER EMPTY? 00634000
  667. BE BUFMT YES, NO RESIDUAL DATA TO PUNCH 00635000
  668. LM R3,R4,CCWNOP NO, PUT NOP AT END OF BUFFER 00636000
  669. STM R3,R4,0(R8) ... 00637000
  670. LA R1,BUFPUN ADDRESS OF PLIST TO PUNCH BUFFER 00638000
  671. SVC 202 00639000
  672. DC AL4(BUFERR) 00640000
  673. BUFMT LA R3,BUFDATA RESTORE COUNTER TO BUFFER BEGINNING 00641000
  674. SR R4,R4 AND ZERO BATCTR 00642000
  675. STM R3,R4,BUFCTR ... 00643000
  676. LR R15,R6 00644000
  677. SPACE 1 00645000
  678. CLOSRET1 LR R6,R15 SAVE RETURN CODE IN R6 00646000
  679. LA R1,CLOSIO SET UP TO CLOSE PRINTER 00647000
  680. MVC CLOSION(16),FILENAME NAME OF FILE BEING OUTPUT 00648000
  681. SVC 202 00649000
  682. DC AL4(*+4) IGNORE ERRORS 00650000
  683. LR R15,R6 00651000
  684. SPACE 1 00652000
  685. FINRET LR R6,R15 SAVE RETURN CODE IN R6 00653000
  686. MVC FILECOMM(8),=CL8'FINIS' SET TO CLOSE FILE 00654000
  687. LA R1,FILE ADDRESS OF FILE PLIST 00655000
  688. L R15,AFINIS FINIS @V305066 00656000
  689. BALR R14,R15 ... @V305066 00656100
  690. TM SWS,MEMB IF MEMBER OPTION, RELEASE STG 00658000
  691. BZ NOFRET 00659000
  692. L R1,STRADR ADDRESS OF MEMBER STG 00660000
  693. L R0,STRLEN LENGTH OF MEMBER STG 00661000
  694. DMSFRET DWORDS=(0),LOC=(1) 00662000
  695. SPACE 1 00663000
  696. NOFRET LR R15,R6 RESTORE RETURN CODE 00664000
  697. SPACE 1 00665000
  698. ERRET L R14,UIOSAVE RESTORE RETURN ADDRESS 00666000
  699. BR R14 00667000
  700. EJECT 00668000
  701. ********************************************************************** 00669000
  702. * 00670000
  703. * STORAGE AREAS AND PLISTS 00671000
  704. * 00672000
  705. ********************************************************************** 00673000
  706. SPACE 1 00674000
  707. FILE DS 0D 00675000
  708. FILECOMM DC CL8' ' FILE SYSTEM COMMAND 00676000
  709. FILENAME DC CL8' ' FILENAME 00677000
  710. FILETYPE DC CL8' ' FILETYPE 00678000
  711. FILEMODE DC CL2' ' FILEMODE 00679000
  712. FILEITNO DC H'0' RECORD NUMBER 00680000
  713. FILEBUFF DC A(*-*) BUFFER ADDRESS 00681000
  714. FILESIZE DC A(80) BUFFER SIZE 00682000
  715. FILEFV DC CL2'F' FIXED/VARIABLE FLAG 00683000
  716. FILENOIT DC H'1' NUMBER OF RECORDS 00684000
  717. FILENORD DC F'0' NUMBER OF BYTES READ 00685000
  718. DC 8X'FF' 00686000
  719. SPACE 1 00687000
  720. CLOSIO DS 0D 00688000
  721. DC CL8'CP' 00689000
  722. DC CL8'CLOSE' 00690000
  723. DC CL8'00D' 00691000
  724. DC CL8'NAME' 00692000
  725. CLOSION DS 16C 00693000
  726. DC 8X'FF' 00694000
  727. SPACE 1 00695000
  728. BUFPUN DC CL8'DMSCIOSI' 00696000
  729. DC A(BUFCTR) ADDRESS OF BUFFER FOR DMSCIOSI 00697000
  730. DC A(*-*) 00698000
  731. DC 8X'FF' 00699000
  732. SPACE 1 00700000
  733. CCWNOP CCW X'03',0,X'20',1 00701000
  734. CCWCNT DC XL4'60000050' RIGHT HALF OF WRITE CCW 00702000
  735. SPACE 1 00703000
  736. BBUF DC CL80' ' 00704000
  737. MEMBUF DS CL80 00705000
  738. MEMFILE DC A(1,MEMBUF) 00706000
  739. SPACE 1 00707000
  740. SCANFO DS 0F 00708000
  741. DC X'FFFFFFFF5C4040404D404040' WORDS OF FF,*,( 00709000
  742. AMODE DC X'C1400000' 00710000
  743. BITS DC F'1' 00711000
  744. H12 DC H'12' 00712000
  745. SWS DS 1C SWITCHES 00713000
  746. MEMB EQU X'08' PRINT LIBRARY MEMBER(S) 00714000
  747. NAME EQU X'04' MEMBER NAME GIVEN 00715000
  748. HEAD EQU X'02' HEADER CARD WANTED (DEFAULT) 00716000
  749. NOHDR EQU X'01' NO HEADER CARD WANTED 00717000
  750. SPACE 1 00718000
  751. NAME1 DS 8C NAME OF MEMBER 00719000
  752. DICTADR DS 1F 00720000
  753. DICTLEN DS 1F 00721000
  754. DICTEND DS 1F 00722000
  755. STRADR DS 1F 00723000
  756. STRLEN DS 1F 00724000
  757. SPACE 1 00725000
  758. PCHDR DC C':READ ' 00726000
  759. TPAT DC X'4021207A2020' 00727000
  760. DPAT DC X'402120612020' 00728000
  761. PUNFST DC A(*-*) ADDRESS OF FST FOR THIS FILE @VA01108 00728100
  762. SPACE 1 00729000
  763. LIMIT DC A(BUFCTR+3990) 00730000
  764. SPACE 1 00731000
  765. LTORG 00732000
  766. EJECT 00733000
  767. ORG PUNCH+4096 00734000
  768. PAGETWO EQU * 00735000
  769. BUFCTR DC A(BUFDATA) 00736000
  770. BATCTR DC A(*-*) 00737000
  771. DS 2F 00738000
  772. BUFDATA DS 500D 00739000
  773. EJECT 00740000
  774. ********************************************************************** 00741000
  775. * 00742000
  776. * DSECTS 00743000
  777. * 00744000
  778. ********************************************************************** 00745000
  779. SPACE 1 00746000
  780. UIOSECT DSECT 00747000
  781. UIOSAVE DS 1F RETURN REGISTER SAVE AREA 00748000
  782. UIODIAG DS 0F DIAGNOSE 24 STORAGE AREA 00749000
  783. UIOVTYPC DS 1C VIRTUAL DEVICE TYPE CLASS 00750000
  784. CLASURI EQU X'20' UNIT RECORD INPUT DEVICE 00751000
  785. CLASURO EQU X'10' UNIT RECORD OUTPUT DEVICE 00752000
  786. UIOVTYPE DS 1C VIRTUAL DEVICE TYPE 00753000
  787. TYPRDR EQU X'80' CARD READER 00754000
  788. TYPPUN EQU X'80' CARD PUNCH 00755000
  789. TYP1403 EQU X'41' PRINTER - 1403 00756000
  790. TYP3211 EQU X'42' PRINTER - 3211 00757000
  791. UIOVSTAT DS 1C VIRTUAL DEVICE STATUS 00758000
  792. UIOVFLAG DS 1C VIRTUAL DEVICE FLAGS 00759000
  793. EJECT 00760000
  794. FVS 00761000
  795. NUCON 00762000
  796. ADT 00763000
  797. REGEQU 00764000
  798. END 00765000