Table of Contents

DMSXCP Source

References

Source Listing

DMSXCP.ASSEMBLE.txt
  1. XCP TITLE 'DMSXCP (CMS) VM/370 - RELEASE 6' 00001000
  2. SPACE 2 00002000
  3. *. 00003000
  4. * MODULE NAME 00004000
  5. * 00005000
  6. * DMSXCP ( EXCP ROUTINE ) 00006000
  7. * 00007000
  8. * FUNCTION 00008000
  9. * 00009000
  10. * PROVIDE THE FACILITY TO SIMULATE THE DOS/VS 00010000
  11. * EXCP (SVC 0) UNDER THE CMS/DOS ENVIRONMENT. 00011000
  12. * EXCP (EXECUTE CHANNEL PROGRAM) REQUESTS THE 00012000
  13. * INITIATION OF AN I/O OPERATION TO A SPECIFIC 00013000
  14. * LOGICAL UNIT. 00014000
  15. * 00015000
  16. * ATTRIBUTES 00016000
  17. * 00017000
  18. * CMSDOS SEGMENT RESIDENT MODULE 00018000
  19. * REENTRANT 00019000
  20. * 00020000
  21. * ENTRY POINTS 00021000
  22. * 00022000
  23. * DMSXCP 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS 00025000
  26. * 00026000
  27. * THIS ROUTINE IS CALLED BY DMSDOS VIA BALR R14,R15 00027000
  28. * 00028000
  29. * R14 = RETURN ADDRESS 00029000
  30. * R15 = ENTRY POINT 00030000
  31. * R11 = EXCP WORK AREA ADDRESS 00031000
  32. * R1 = CCB (COMMAND CONTROL BLOCK) POINTER 00032000
  33. * 00033000
  34. * DS XL2 RESIDUAL COUNT 00034000
  35. * DS XL1 COMMUNICATIONS BYTE 1 00035000
  36. * DS XL1 COMMUNICATIONS BYTE 2 00036000
  37. * DS XL1 CSW STATUS BYTE 1 00037000
  38. * DS XL1 CSW STATUS BYTE 2 00038000
  39. * DS XL2 SYMBOLIC (LOGICAL) UNIT 00039000
  40. * DS XL4 CCW ADDRESS 00040000
  41. * DS XL4 CCW ADDRESS IN CSW OR 00041000
  42. * DOSCB POINTER IF I/O TO DISK 00042000
  43. * 00043000
  44. * EXIT CONDITIONS 00044000
  45. * 00045000
  46. * RETURN TO CALLER WITH RETURN CODE IN R15 00046000
  47. * 00047000
  48. * RETURN CODES AND MESSAGES: 00048000
  49. * 00049000
  50. * 36 - SPECIFIED TAPE IS FILE PROTECTED 00050000
  51. * 100 - SPECIFIED DEVICE IS NOT ATTACHED 00051000
  52. * 100 - INPUT|OUTPUT ERROR ON SYSXXX 00052000
  53. * 100 - ERROR READING CMS FILE FROM DISK 00053000
  54. * 100 - ERROR WRITING CMS FILE TO DISK 00054000
  55. * 100 - UNEXPECTED ERROR ON SYSXXX 00055000
  56. * 00056000
  57. * CALLS TO OTHER ROUTINES 00057000
  58. * 00058000
  59. * DMSFRE, DMSPIO, DMSCIO, DMSCRD, DMSCWR 00059000
  60. * DMSBRD, DMSBWR, DMSFNS, DMKGIO, DMSERR 00060000
  61. * 00061000
  62. * EXTERNAL REFERENCES 00062000
  63. * 00063000
  64. * NUCON, BGCOM, ADT, CMSAVE, MAPPUB 00064000
  65. * 00065000
  66. * TABLES/WORK AREAS 00066000
  67. * 00067000
  68. * DMSCCB, IOCCW 00068000
  69. * CNCODES, CDCODES, SDCODES 00069000
  70. * 00070000
  71. * NOTES 00071000
  72. * 00072000
  73. * SUPPORT CODE FOR DMSXCP ROUTINE = @V305001 00073000
  74. * EXCEPT FOR THE 'IKQLAB HANDLER' SECTION. 00074000
  75. * SUPPORT CODE FOR IKQLAB SECTION = @V305132 00075000
  76. * 00076000
  77. * REGISTER USAGE 00077000
  78. * 00078000
  79. * R0 NUCON ADDRESSABILITY & FREE/FERT REGISTER 00079000
  80. * R1 WORK & FREE/FRET REGISTER 00080000
  81. * R2 CCB POINTER 00081000
  82. * R3 CURRENT CCW POINTER 00082000
  83. * R4 WORK & INTERNAL LINKAGE 00083000
  84. * R5 WORK 00084000
  85. * R6 WORK 00085000
  86. * R7 WORK & INTERNAL LINKAGE 00086000
  87. * R8 WORK 00087000
  88. * R9 WORK & INTERNAL LINKAGE 00088000
  89. * R10 IOCCW (PLIST WORK) POINTER 00089000
  90. * R11 DOSCB POINTER 00090000
  91. * R12 DMSXCP ADDRESSABILITY 00091000
  92. * R13 DMSXCP ADDRESSABILITY 00092000
  93. * R14 EXTERNAL LINKAGE & RETURN REGISTER 00093000
  94. * R15 ADDRESS OF EXTERNAL LINKAGE & RETURN CODE 00094000
  95. * 00095000
  96. * OPERATION 00096000
  97. * 00097000
  98. * 1. SET UP NECESSARY ADDRESSABILITIES AND SAVE 00098000
  99. * SOME REGISTERS IN THE EXCP WORK AREA. CHECK 00099000
  100. * IF THE SPECIFIED CCW ADDRESS IN THE CCB IS 00100000
  101. * NOT ZERO. 00101000
  102. * 00102000
  103. * 2. DETERMINE IF THE SPECIFIED LOGICAL UNIT IN 00103000
  104. * THE CCB IS ASSIGNED. IF IT IS ASSIGNED, USE 00104000
  105. * THE PUB DEVICE TYPE TO INDEX AND BRANCH TO 00105000
  106. * THE ONE INTERNAL ROUTINE THAT WILL PROCESS 00106000
  107. * THAT SPECIFIC DEVICE. IF THE LOGICAL UNIT IS 00107000
  108. * ASSIGNED TO IGNORE, ANOTHER ROUTINE IS GIVEN 00108000
  109. * CONTROL. 00109000
  110. * 00110000
  111. * 3. LOGICAL UNIT ASSIGNED TO 'IGNORE'. 00111000
  112. * 00112000
  113. * VERIFY THAT ALL THE CCW'S SPECIFIED ARE VALID. 00113000
  114. * SEARCH THROUGH CCW CHAIN LOOKING FOR ANY READS. 00114000
  115. * IF NO READ CCW IS FOUND, THE CCB IS POSTED WITH 00115000
  116. * THE NORMAL C.E. + D.E. . IF A READ CCW IS FOUND, 00116000
  117. * ASIDE FROM THE NORMAL C.E. + D.E., THE CCB IS 00117000
  118. * POSTED FOR EOF. 00118000
  119. * 00119000
  120. * 4. LOGICAL UNIT ASSIGNED TO 'PRINTER'. 00120000
  121. * 00121000
  122. * A 4 DOUBLE WORD WORK AREA IS ACQUIRED FROM FREE 00122000
  123. * STORAGE TO BUILD THE DMSPIOSI PLIST. THE PLIST IS 00123000
  124. * INITIALIZED WITH THE COMMAND NAME AND THE BUFDATA 00124000
  125. * POINTER. THE FIRST USER CCW IS MOVED TO 'BUFDATA', 00125000
  126. * AND A NO-OP CCW IS MOVED AFTER IT. IF THE CCW IS 00126000
  127. * CHAINED, AN INTERNAL FLAG IS SET TO REMEBER THERE 00127000
  128. * ARE MORE CCW'S TO EXECUTE. IF CCW IS NOT CHAINED, 00128000
  129. * IT IS CHAINED TO THE NO-OP CCW. AN SVC 202 IS MADE 00129000
  130. * TO DMSPIOSI TO EXECUTE THIS CCW. UPON RETURN, IF 00130000
  131. * THERE ARE MORE CCWS, THE OPERATION IS REPEATED AS 00131000
  132. * BEFORE. OTHERWISE, THE CCB IS POSTED ACCORDINGLY. 00132000
  133. * 00133000
  134. * 5. LOGICAL UNIT ASSIGNED TO 'READER' OR 'PUNCH'. 00134000
  135. * 00135000
  136. * CHECK IF CCW CODE IS VALID. TURN STACKER SELECT 00136000
  137. * AND DATA MODE BITS OFF (IF ON) AND PASS CCW CODE 00137000
  138. * THROUGH TABLE OF SUPPORTED CCWS. ONCE A MATCH IS 00138000
  139. * FOUND (WILL MATCH ON READ, WRITE, OR NO-OP), THE 00139000
  140. * PLIST FOR DMSCIO IS BUILT, AND AN SVC 202 IS MADE 00140000
  141. * TO CARDRD OR CARDPH (READ OR WRITE) TO PERFORM 00141000
  142. * THE I/O OPERATION. UPON RETURN (OR IF THE CCW IS 00142000
  143. * TO BE NO-OPED), IF THE CCW IS CHAINED, THE OPERA- 00143000
  144. * TION IS REPEATED AS BEFORE. OTHERWISE, THE CCB IS 00144000
  145. * POSTED ACCORDINGLY. 00145000
  146. * 00146000
  147. * 6. LOGICAL UNIT ASSIGNED TO 'TERMINAL'. 00147000
  148. * 00148000
  149. * CHECK IF CCW CODE IS VALID BY PASSING CCW THROUGH 00149000
  150. * A TABLE OF SUPPORTED CCWS. ONCE A MATCH IS FOUND 00150000
  151. * (WILL MATCH ON READ, WRITE, OR NO-OP), THE PLIST 00151000
  152. * FOR DMSCRD OR DMSCWR IS BUILT. IF READING, A 160 00152000
  153. * BYTE BUFFER IS ACQUIRED FROM FREE STORAGE TO HOLD 00153000
  154. * THE INPUT LINE. AN SVC 202 IS ISSUED TO CONREAD OR 00154000
  155. * TYPLIN TO PERFORM THE I/O OPERATION. UPON RETURN, 00155000
  156. * IF THE CCW IS CHAINED, THE OPERATION IS REPEATED 00156000
  157. * AS BEFORE. OTHERWISE, THE CCB IS POSTED ACCORDINGLY. 00157000
  158. * IF A READ WAS ISSUED, THE NUMBER OF BYTES SPECIFIED 00158000
  159. * IN THE CCW ARE MOVED TO THE USER'S BUFFER. THEN THE 00159000
  160. * ACQUIRED FREE STORAGE AREA IS FREED. 00160000
  161. * 00161000
  162. * 7. LOGICAL UNIT ASSIGNED TO 'TAPE'. 00162000
  163. * 00163000
  164. * THE VIRTUAL DEVICE ADDRESS IS DECODED INTO A HEX 00164000
  165. * ( EBCDIC ) REPRESENTATION FOR ANY POSSIBLE ERROR 00165000
  166. * MESSAGE SUBSTITUTION. 00166000
  167. * TWO DUMMY CCWS (MODESET AND TIC) ARE MOVED TO THE 00167000
  168. * EXCP WORK AREA. A TEST IS MADE TO DETERMINE IF THE 00168000
  169. * PUB CONTAINS A MODE SET VALUE. IF NOT, THE DEFAULT 00169000
  170. * VALUE X'B3' IS USED. THE USER CCW CHAIN ADDRESS IS 00170000
  171. * STORED INTO THE ADDRESS PORTION OF THE TIC CCW AND 00171000
  172. * A CALL IS MADE TO DIAGNOSE THE CCW CHAIN TO CP. 00172000
  173. * RETURN IS ONLY MADE IF AN I/O ERROR IS RETURNED BY 00173000
  174. * CP (EXCLUDING UNIT EXCEPTION OR INCORRECT LENGTH). 00174000
  175. * IF AN I/O ERROR OCCURED, THE SENSE BYTES ARE TESTED 00175000
  176. * TO DIFFERENTIATE BETWEEN FILE PROTECTED TAPE OR I/O 00176000
  177. * ERROR. OTHERWISE, THE CCW IS POSTED ACCORDINGLY. 00177000
  178. * 00178000
  179. * 8. LOGICAL UNIT ASSIGNED TO 'DISK'. 00179000
  180. * 00180000
  181. * FIRST A CHECK IS MADE TO DETERMINE IF I/O IS TO CMS 00181000
  182. * FORMATTED DISK, OR TO O/S OR DOS FORMATTED DISK. IF 00182000
  183. * THE I/O IS TO A CMS FORMATTED DISK, THE CCW IS CHECKED 00183000
  184. * FOR VALIDITY. IF THE CCW IS 'TIC', THE NEXT CCW IN THE 00184000
  185. * CHAIN IS PROCESSED. IF THE CCW IS VALID AND NOT 'TIC', 00185000
  186. * THE CCW IS PASSED THROUGH THE TABLE OF SUPPORTED CCW 00186000
  187. * CODES. ONCE A MATCH IS FOUND, CONTROL WILL PASS TO THE 00187000
  188. * ROUTINE TO PROCESS THAT CCW CODE. SUPPORTED CCW CODES 00188000
  189. * UNDER CMS/DOS ARE: READ DATA, WRITE DATA, SEARCH ID, 00189000
  190. * WRITE COUNT KEY & DATA, READ COUNT KEY & DATA, READ KEY 00190000
  191. * AND DATA, AND READ COUNT. ALL OTHER VALID CCWS ARE NO- 00191000
  192. * OPED. ONCE THE CCW HAS BEEN PROCESSED SUCCESSFULLY, A 00192000
  193. * CHECK IS MADE TO DETERMINE IF THE CCW IS CHAINED. IF 00193000
  194. * SO, THE NEXT CCW IS PROCESSED AS BEFORE, OTHERWISE, THE 00194000
  195. * CCB IS POSTED ACCORDINGLY. 00195000
  196. * 00196000
  197. * IF THE DISK IS NOT A CMS FORMATTED DISK, A CHECK IS 00197000
  198. * MADE TO DETERMINE IF THE DISK IS O/S OR DOS FORMATTED. 00198000
  199. * THE CCW CHAIN IS THEN PASSED THROUGH A TEST TO FIND OUT 00199000
  200. * IF THERE ARE ANY WRITE CCWS. IF A WRITE CCW IS FOUND, 00200000
  201. * THE DISK IS CHECKED FOR WRITE MODE. IF THE DISK IS R/O 00201000
  202. * THE CHANNEL PROGRAM IS NOT EXECUTED. NOW, THE CHANNEL 00202000
  203. * PROGRAM IS DIAGNOSED TO CP FOR EXECUTION. UPON RETURN 00203000
  204. * FROM THE CP DIAGNOSE, THE CCB IS POSTED ACCORDINGLY. 00204000
  205. *. 00205000
  206. EJECT 00206000
  207. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00207000
  208. * * 00208000
  209. * INITALIZATION... SAVE SOME REGISTERS IN EXCP WORK AREA. * 00209000
  210. * CHECK IF CHANNEL PROGRAMS SUPPLIED WITH CCB. * 00210000
  211. * * 00211000
  212. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00212000
  213. PUNCH 'SPB' @VA06270 00213000
  214. SPACE 2 00214000
  215. DMSXCP CSECT @V305001 00215000
  216. USING NUCON,R0 ADDRESSABILITY @V305001 00216000
  217. USING IOCCW,R10 ... @V305001 00217000
  218. USING DOSSECT,R11 ... @V305001 00218000
  219. USING DMSXCP,R12 ... @V305001 00219000
  220. STM R12,R1,DOSSAVE SAVE SOME REGISTERS @V305001 00220000
  221. LR R12,R15 ESTABLISH BASE @V305001 00221000
  222. LA R13,2048(,R12) GET 2ND PAGE OF ADDRESSABILITY @V305001 00222000
  223. LA R13,2048(,R13) ... @V305001 00223000
  224. USING DMSXCP+4096,R13 ... @V305001 00224000
  225. LR R2,R1 SAVE CCB POINTER @V305001 00225000
  226. USING DMSCCB,R2 REFERENCE "CCB" DSECT @V305001 00226000
  227. ICM R3,7,CCBCCW GET CCW ADDRESS FROM CCB @V305001 00227000
  228. BZ NOCCWA IF NONE, ERROR @V305001 00228000
  229. EJECT 00229000
  230. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00230000
  231. * * 00231000
  232. * DETERMINE IF UNIT IS ASSIGNED. IF UNIT ASSIGNED, * 00232000
  233. * USE THE PUB DEVTYPE TO BRANCH TO CORRESPONDING * 00233000
  234. * I/O ROUTINE. * 00234000
  235. * * 00235000
  236. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00236000
  237. SPACE 2 00237000
  238. BAL R4,GETPUB GET DEVICE PUB ADDR @V305001 00238000
  239. USING PUBADR,R5 @V305001 00239000
  240. SR R1,R1 CLEAR @V305001 00240000
  241. IC R1,PUBDEVT GET PUB DEVICE TYPE @V305001 00241000
  242. SRL R1,4 ... @V305001 00242000
  243. CH R1,=H'6' EXCEEDS MAX ALLOWED ? @V305001 00243000
  244. BH UNSUPP YES, ERROR @V305001 00244000
  245. SLL R1,2 ... @V305001 00245000
  246. B IORTN(R1) BRANCH TO CORRECT RTNE @V305001 00246000
  247. DROP R5 @V305001 00247000
  248. SPACE 1 00248000
  249. IORTN B IOCON CONSOLE @V305001 00249000
  250. B IORDR READER @V305001 00250000
  251. B IOPCH PUNCH @V305001 00251000
  252. B UNSUPP ERROR @V305001 00252000
  253. B IOPRT PRINTER @V305001 00253000
  254. B IOTAP TAPE @V305001 00254000
  255. B IODSK DISK @V305001 00255000
  256. EJECT 00256000
  257. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00257000
  258. * * 00258000
  259. * I/O ROUTINE TO PROCESS UNIT ASSIGNED TO IGNORE. * 00259000
  260. * * 00260000
  261. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00261000
  262. SPACE 2 00262000
  263. IODUM SR R5,R5 ... @V305001 00263000
  264. DUMLOOP TM 0(R3),VALCCW VALID CCW CODE? @V305066 00264000
  265. BZ INVCCW NO, ERROR @V305001 00265000
  266. TM 0(R3),CONTROL CONTROL CCW @V305066 00266000
  267. BO DUMNXT YES, GET NEXT CCW @V305001 00267000
  268. BM DUMRW POSSIBLE READ/WRITE @V305001 00268000
  269. TM 0(R3),RDBKCCW READ BACK CCW ? @V305066 00269000
  270. BO DUMRD YES, BRANCH @V305001 00270000
  271. TM 0(R3),TICCCW TIC CCW ? @V305066 00271000
  272. BZ DUMTIC YES, BRANCH @V305001 00272000
  273. DUMNXT TM 4(R3),CC CCW CHAINED ? @V305001 00273000
  274. BZ DUMEND NO, GET OUT @V305001 00274000
  275. DUMNXT2 LR R6,R3 SAVE THIS CCW ADDRESS @V305001 00275000
  276. LA R3,8(,R3) GET NEXT CCW ADDRESS @V305001 00276000
  277. B DUMLOOP GO PROCESS THIS ONE @V305001 00277000
  278. SPACE 00278000
  279. DUMTIC TM 0(R6),STATMOD WAS LAST CCW A STATUS MODIFIER? @V305066 00279000
  280. BZ DUMTIC2 NO, USE TIC ADDRESS TO CONTINUE @V305001 00280000
  281. TM 0(R6),STATMOD2 STILL LOOKS LIKE STATUS MODIFIER @V305066 00281000
  282. BZ DUMTIC2 NO, GO USE TIC ADDRESS @V305001 00282000
  283. B DUMNXT2 ASSUME STATUS MODIFIER BEFORE TIC@V305001 00283000
  284. DUMTIC2 L R3,0(,R3) GET TIC TRANSFER TO ADDRESS @V305001 00284000
  285. LA R3,0(,R3) CLEAR HI ORDER BYTE (CCW CODE) @V305001 00285000
  286. B DUMLOOP CONTINUE SEARCH FOR READ CCW @V305001 00286000
  287. SPACE 1 00287000
  288. DUMRW TM 0(R3),WRITECCW IS CCW FOR WRITE? @V305066 00288000
  289. BO DUMNXT YES, BRANCH @V305001 00289000
  290. DUMRD LA R5,READSW SET READ SWITCH @V305066 00290000
  291. B DUMNXT GO GET NEXT CCW @V305001 00291000
  292. SPACE 1 00292000
  293. DUMEND XC CCBCNT(2),CCBCNT CLEAR RESIDUAL COUNT @V305001 00293000
  294. NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 00294000
  295. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 00295000
  296. LTR R5,R5 WERE WE READING ? @V305001 00296000
  297. BZ EXCPEND NO, ALL DONE @V305001 00297000
  298. LH R4,6(,R3) GET DATA COUNT FROM CCW @V305001 00298000
  299. STH R4,CCBCNT SAVE RESIDUAL COUNT @V305001 00299000
  300. OI CCBCOM1,CCBEOF SET BYTE 2 CCB FOR EOF @V305001 00300000
  301. OI CCBCOM2,CCBEOC+CCBVER SET BYTE 3 CCB FOR EOF @V305001 00301000
  302. OI CCBCSW1,CCBUE SET BYTE 1 CSW FOR EOF @V305001 00302000
  303. B EXCPEND ALL DONE @V305001 00303000
  304. EJECT 00304000
  305. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00305000
  306. * * 00306000
  307. * I/O ROUTINE TO PROCESS UNIT ASSIGNED TO PRINTER. * 00307000
  308. * * 00308000
  309. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00309000
  310. SPACE 2 00310000
  311. IOPRT EQU * @V305001 00311000
  312. LA R0,DWS4 GET NO. DOUBLE WORDS @V305066 00312000
  313. DMSFREE DWORDS=(0),TYPE=NUCLEUS,TYPCALL=BALR @V305001 00313000
  314. ST R1,DOSOP+8 SAVE WORK IN DOS @V305001 00314000
  315. XC 0(16,R1),0(R1) ZERO OUT FIRST 16 BYTES @V305001 00315000
  316. LA R10,16(,R1) POINT TO BUFDATA @V305001 00316000
  317. MVC DOSOP(8),PIOSI SET COMMAND NAME @V305001 00317000
  318. OI DOSFLAGS,EIGHT IF UC/UE IND. BREAK CCW CHAIN @V305066 00318000
  319. PRNEXT MVC IOCCW(8),0(R3) MOVE CCW TO BUFDATA @V305001 00319000
  320. MVC IOCCW+8(8),NOOP MOVE NO-OP CCW TOO @V305001 00320000
  321. LA R5,CHAINON SET CHAIN SWITCH ON @V305066 00321000
  322. TM 4(R10),CC IS CCW CHAINED ? @V305001 00322000
  323. BO PRCALL YES, JUST CALL PIO @V305001 00323000
  324. OI 4(R10),CC TURN CHAIN BIT ON @V305001 00324000
  325. SR R5,R5 SET CHAIN SWITCH OFF @V305001 00325000
  326. PRCALL LA R1,DOSOP GET ADDR PLIST @V305001 00326000
  327. SVC 202 CALL DMSPIOSI @V305001 00327000
  328. DC AL4(PRERR) ERROR EXIT @V305001 00328000
  329. LTR R5,R5 WAS CCW CHAINED ? @V305001 00329000
  330. BZ PREXIT NO, EXIT @V305001 00330000
  331. LA R3,8(,R3) BUMP TO NEXT CCW @V305001 00331000
  332. B PRNEXT PROCESS NEXT ONE @V305001 00332000
  333. SPACE 1 00333000
  334. PREXIT LA R0,DWS4 GET NO. OF DOUBLE WORDS @V305066 00334000
  335. L R1,DOSOP+8 GET WORK ADDRESS @V305001 00335000
  336. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @V305001 00336000
  337. NI DOSFLAGS,F7 TURN OFF PRINTER INDICATOR @V305066 00337000
  338. B IODONE2 ALL DONE @V305001 00338000
  339. EJECT 00339000
  340. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00340000
  341. * * 00341000
  342. * PROCESS I/O ERRORS TO PRINTER. ONLY ERRORS RETURNED * 00342000
  343. * TO USER ARE CHANNEL 9/12 SENSED CONDITIONS. * 00343000
  344. * * 00344000
  345. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00345000
  346. SPACE 2 00346000
  347. PRERR NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 00347000
  348. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 00348000
  349. NI DOSFLAGS,F7 TURN OFF PRINTER INDICATOR @V305066 00349000
  350. LH R3,CSW+6 GET RESIDUAL COUNT FROM CSW @V305001 00350000
  351. STH R3,CCBCNT SAVE IN CCB @V305001 00351000
  352. LR R3,R15 SAVE RETURN CODE @V305001 00352000
  353. LA R0,DWS4 NO. DWORDS TO FREE @V305066 00353000
  354. L R1,DOSOP+8 AREA ADDR TO FREE @V305001 00354000
  355. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @V305001 00355000
  356. CH R3,=H'100' DEVICE NOT ATTACHED ? @V305001 00356000
  357. BE CANCEL YES, ERROR @V305001 00357000
  358. CH R3,=H'2' CHANNEL 12 SENSED ? @V305001 00358000
  359. BE PRCH12 YES, GO POST IT @V305001 00359000
  360. LR R15,R3 ERROR CODE TO R15 @V305001 00360000
  361. BL OUTERR NO, ERROR @V305001 00361000
  362. CH R3,=H'3' CHANNEL 9 SENSED ? @V305001 00362000
  363. BH OUTERR NO, ERROR @V305001 00363000
  364. PRCH9 OI CCBCOM2,CCBVER POST CHANNEL 9 IN CCB @V305001 00364000
  365. B EXCPEND GET OUT @V305001 00365000
  366. PRCH12 OI CCBCSW1,CCBUE POST CHANNEL 12 IN CCB @V305001 00366000
  367. B EXCPEND GET OUT @V305001 00367000
  368. EJECT 00368000
  369. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00369000
  370. * * 00370000
  371. * I/O ROUTINE TO PROCESS UNIT ASSIGNED TO CARD. * 00371000
  372. * NO STACKER SELECT OR COLUMN BINARY IS ALLOWED. * 00372000
  373. * * 00373000
  374. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00374000
  375. SPACE 2 00375000
  376. IORDR EQU * @V305001 00376000
  377. IOPCH EQU * @V305001 00377000
  378. LA R10,DOSOP+8 GET IOCCW ADDRESS @V305001 00378000
  379. CDNEXT MVC IOCCW(8),0(R3) MOVE CCW TO WORK @V305001 00379000
  380. TM IOCCW,READCCW IS CCW CODE FOR READ? @V305066 00380000
  381. BO CDCCOK YES, GOOD SO FAR @V305001 00381000
  382. NI IOCCW,255-STACKOFF TURN STACKER OFF @V305066 00382000
  383. CDCCOK NI IOCCW,255-DATAOFF TURN DATA MODE OFF @V305066 00383000
  384. LA R4,CDCODES GET CCW CODES LIST @V305001 00384000
  385. LA R5,ENDCDC GET NUMBER CODES IN LIST @V305001 00385000
  386. B IOSRCH FIND PROPER ROUTINE @V305001 00386000
  387. SPACE 1 00387000
  388. CDREAD LA R4,CARDRD GET COMMAND NAME @V305001 00388000
  389. B CDCOMM GO TO COMMON CODE @V305001 00389000
  390. CDPUNCH LA R4,CARDPH GET COMMAND NAME @V305001 00390000
  391. CDCOMM MVC DOSOP(8),0(R4) MOVE COMMAND NAME @V305001 00391000
  392. MVC IOLEN1(2),IOLEN2 MOVE DATA LENGTH @V305001 00392000
  393. MVI IOSW,OFF .... @V305066 00393000
  394. LA R1,DOSOP GET PLIST ADDRESS @V305001 00394000
  395. SVC 202 GO TO CARDRD OR CARDPH @V305001 00395000
  396. DC AL4(CDERR) ERROR EXIT @V305001 00396000
  397. CDEXIT TM 4(R3),CC CCW CHAINED ? @V305001 00397000
  398. BZ CDDONE NO, SET RESIDUAL COUNT @V305001 00398000
  399. LA R3,8(,R3) BUMP TO NEXT CCW @V305001 00399000
  400. B CDNEXT GO PROCESS IT @V305001 00400000
  401. SPACE 1 00401000
  402. CDDONE CLC DOSOP(8),CARDRD WHERE WE DOING READS ? @V305001 00402000
  403. BNE IODONE2 NO, SET RESIDUAL COUNT TO ZERO @V305001 00403000
  404. LH R4,IOLEN1 GET USER DATA LENGTH @V305001 00404000
  405. LH R5,IOLEN2 GET NUMBER BYTES READ @V305001 00405000
  406. SR R4,R5 COMPUTE RESIDUAL COUNT @V305001 00406000
  407. BP CDCOUNT BRANCH IF POSITIVE @V305001 00407000
  408. SR R4,R4 NEGATIVE - ZERO COUNT @V305001 00408000
  409. CDCOUNT STH R4,CCBCNT SAVE COUNT IN CCB @V305001 00409000
  410. B IODONE ALL DONE @V305001 00410000
  411. EJECT 00411000
  412. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00412000
  413. * * 00413000
  414. * PROCESS I/O ERRORS TO CARD. ONLY ERRORS RETURNED * 00414000
  415. * TO USER ARE INCORRECT LENGTH OR END-OF-FILE. * 00415000
  416. * * 00416000
  417. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00417000
  418. SPACE 2 00418000
  419. CDERR NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 00419000
  420. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 00420000
  421. CH R15,=H'100' DEVICE NOT ATTACHED ? @V305001 00421000
  422. BE CANCEL YES, ERROR @V305001 00422000
  423. CH R15,=H'3' UNKNOWN ERROR ? @V305001 00423000
  424. BE INERR YES, BRANCH @V305001 00424000
  425. BL CDEOF MUST BE END-OF-FILE @V305001 00425000
  426. OI CCBCSW2,CCBILEN SET INCORRECT LENGTH @V305001 00426000
  427. XC CCBCNT(2),CCBCNT CLEAR RESIDUAL COUNT @V305001 00427000
  428. B EXCPEND GET OUT @V305001 00428000
  429. CDEOF OI CCBCOM1,CCBEOF SET BYTE 2 CCB FOR EOF @V305001 00429000
  430. OI CCBCOM2,CCBEOC+CCBVER SET BYTE 3 CCB FOR EOF @V305001 00430000
  431. OI CCBCSW1,CCBUE SET BYTE 1 CSW FOR EOF @V305001 00431000
  432. LH R4,IOLEN1 GET DATA COUNT @V305001 00432000
  433. STH R4,CCBCNT SAVE AS RESIDUAL COUNT @V305001 00433000
  434. B EXCPEND GET OUT @V305001 00434000
  435. EJECT 00435000
  436. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00436000
  437. * * 00437000
  438. * I/O ROUTINE TO PROCESS UNIT ASSIGNED TO CONSOLE. * 00438000
  439. * * 00439000
  440. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00440000
  441. SPACE 2 00441000
  442. IOCON EQU * @V305001 00442000
  443. LA R10,DOSOP+8 GET IOCCW ADDRESS @V305001 00443000
  444. LA R6,UPCASE SET UP DEFAULT UPCASE @V305066 00444000
  445. USING PUBADR,R5 @V305001 00445000
  446. TM PUBTAPM1,LOWCHK USER WANTS LOWER CASE? @V305066 00446000
  447. BZ CNNEXT NO, USE DEFAULT UPPER CASE @V305001 00447000
  448. LA R6,LOWCASE SET UP LOWCASE FLAG @V305066 00448000
  449. DROP R5 @V305001 00449000
  450. CNNEXT MVC IOCCW(8),0(R3) MOVE CCW TO WORK @V305001 00450000
  451. LA R4,CNCODES GET CCW CODES LIST @V305001 00451000
  452. LA R5,ENDCNC GET NUMBER CODES IN LIST @V305001 00452000
  453. B IOSRCH FIND PROPER ROUTINE @V305001 00453000
  454. SPACE 1 00454000
  455. CNREAD LA R4,CONRD GET COMMAND NAME @V305001 00455000
  456. STC R6,IOLEN1 SET UPPER/LOWER CASE @V305001 00456000
  457. LA R0,DWS20 GET BUFFER @V305066 00457000
  458. DMSFREE DWORDS=(0),TYPCALL=BALR @V305001 00458000
  459. STCM R1,MASK7,IOBUF SAVE BUFFER ADDR @V305066 00459000
  460. B CNCOMM GO TO COMMON CODE @V305001 00460000
  461. CNWRITE1 MVI IOLEN1+1,CARRRET SET CARRIAGE RETURN @V305066 00461000
  462. B CNWRITE GO TO COMMON WRITE CODE @V305001 00462000
  463. CNWRITE2 MVI IOLEN1+1,NOCARRET SET NO CARR RETURN @V305066 00463000
  464. CNWRITE LA R4,CONWR GET COMMAND NAME @V305001 00464000
  465. MVI IOLEN1,B SET CODE @V305066 00465000
  466. EJECT 00466000
  467. CNCOMM MVC DOSOP(8),0(R4) MOVE COMMAND TO PLIST @V305001 00467000
  468. MVI IOSW,ON JUST A FLAG @V305066 00468000
  469. LA R1,DOSOP GET PLIST ADDRESS @V305001 00469000
  470. SVC 202 GO TO CONSOLE I/O @V305001 00470000
  471. CLC DOSOP(8),CONRD DOING READS ? @V305001 00471000
  472. BNE CNEXIT NO, CHECK NEXT CCW @V305001 00472000
  473. TM 4(R3),SKIP SKIP BIT ON IN CCW? @VA08352 00473000
  474. * IE. NO TRANSFER OF DATA 00474000
  475. BO CNEXIT IF NOTDATA THEN DON'T MVC @VA08352 00475000
  476. LH R4,6(,R3) GET DATA LENGTH @V305001 00476000
  477. CLC IOLEN1+2,=H'0' ANYTHING READ ? @V305001 00477000
  478. BE CNEOF NO, SET UP FOR EOF... @V305001 00478000
  479. LR R5,R4 SAVE LENGTH @VA05628 00479000
  480. SH R5,IOLEN2 DETERMINE RESIDUAL COUNT @VA05628 00480000
  481. STH R5,CCBCNT STORE IT IN CCB @VA05628 00481000
  482. BCTR R4,R0 LENGTH LESS ONE FOR MVC @V305066 00482000
  483. ICM R5,MASK7,1(R3) GET USER'S BUFFER ADDR @V305066 00483000
  484. ICM R1,MASK7,IOBUF GET OUR BUFFER ADDR @V305066 00484000
  485. EX R4,CNMOVE MOVE FROM OURS TO HIS @V305001 00485000
  486. LA R0,DWS20 GET BUFFER LENGTH @V305066 00486000
  487. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @V305001 00487000
  488. TM 4(R3),CC IS CCW CHAINED ? @VA05628 00488000
  489. BZ IODONE NO, GET OUT ! @VA05628 00489000
  490. CNEXIT TM 4(R3),CC CCW CHAINED ? @V305001 00490000
  491. BZ IODONE2 NO, GET OUT @V305001 00491000
  492. LA R3,8(,R3) GET NEXT CCW @V305001 00492000
  493. B CNNEXT GO PROCESS IT @V305001 00493000
  494. SPACE 1 00494000
  495. CNEOF OI CCBCOM2,CCBEOC+CCBVER SET BYTE 3 CCB FOR EOF @V305001 00495000
  496. OI CCBCSW1,CCBUE SET BYTE 1 CSW FOR EOF @V305001 00496000
  497. STH R4,CCBCNT SAVE RESIDUAL COUNT @V305001 00497000
  498. B EXCPEND GET OUT @V305001 00498000
  499. SPACE 1 00499000
  500. CNMOVE MVC 0(0,R5),0(R1) MVC EXECUTED @V305001 00500000
  501. EJECT 00501000
  502. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00502000
  503. * * 00503000
  504. * I/O ROUTINE TO PROCESS UNIT ASSIGNED TO TAPE. * 00504000
  505. * * 00505000
  506. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00506000
  507. SPACE 2 00507000
  508. IOTAP EQU * @V305001 00508000
  509. LR R10,R11 GET IOCCW ADDRESS @V305001 00509000
  510. USING PUBADR,R5 PUB ADDRESSABILITY @V305001 00510000
  511. XC DOSDSMD(8),DOSDSMD ZERO WORK @V305001 00511000
  512. LH R4,PUBCUU GET UNIT ADDRESS @V305001 00512000
  513. SLL R4,4 1/2 BYTE TO LEFT @V305001 00513000
  514. ST R4,DOSDSMD+4 SAVE IN WORK @V305001 00514000
  515. OI DOSDSMD+7,H0C DUMMY A SIGN @V305066 00515000
  516. UNPK DOSTAPID(4),DOSDSMD+4(4) UNPACK UNIT ADDRESS @V305001 00516000
  517. OI DOSTAPID+3,ZONE ZONE IT AND ALL DONE @V305066 00517000
  518. MVC IOCCW(16),MDSET MOVE DUMMY CCWS TO WORKAREA @V305001 00518000
  519. CLI PUBTAPM1,USERMODE USER SPECIFIED MODE? @V305066 00519000
  520. BE IOTAP2 NO, BRANCH AROUND @V305001 00520000
  521. MVC IOSW,PUBTAPM1 SET USER TAPE MODE SET @V305001 00521000
  522. DROP R5 @V305001 00522000
  523. IOTAP2 STCM R3,MASK7,IOCCW+9 PT. TIC TO USER'S CCW CHAIN @V305066 00523000
  524. BAL R9,CHKWRCCW CHECK IF ANY WRITE CCW ON CHAIN @V305001 00524000
  525. LR R1,R10 GET CHANNEL PROG. ADDRESS @V305001 00525000
  526. LA R6,TAPE ERROR MSG SUBSTITUTION @V305001 00526000
  527. BAL R9,DIAGCON GO DIAGNOSE THE I/O @V305001 00527000
  528. SPACE 2 00528000
  529. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00529000
  530. * * 00530000
  531. * THE ONLY I/O ERROR RETURNED TO USER IS END-OF-FILE * 00531000
  532. * OR INCORRECT LENGTH. * 00532000
  533. * ALL OTHER I/O ERRORS WILL BE CONSIDERED TERMINAL. * 00533000
  534. * * 00534000
  535. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00535000
  536. SPACE 2 00536000
  537. TM DOSSENSE+1,FILEPROT TAPE FILE PROTECTED? @V305066 00537000
  538. BO ERR43E YES, GIVE ERROR MSG @V305001 00538000
  539. LA R15,THREE ERROR MSG SUBSTITUTION @V305066 00539000
  540. B ERR411S PERM I/O ERROR THEN @V305066 00540000
  541. EJECT 00541000
  542. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00542000
  543. * * 00543000
  544. * I/O ROUTINE TO PROCESS UNIT ASSIGNED TO DISK. * 00544000
  545. * * 00545000
  546. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00546000
  547. SPACE 2 00547000
  548. IODSK LR R10,R11 SAVE WORK AREA POINTER @V305001 00548000
  549. ICM R11,MASK7,CCBCSW GET POSSIBLE DOSCB ADDRESS @V305066 00549000
  550. BZ CHKDSK NO DOSCB, CHECK DASD @V305001 00550000
  551. CLC DOSCBID,=CL4'DLBL' IS THIS GOOD DLBL ? @V305001 00551000
  552. BNE CHKDSK NO, LOOKS LIKE NOT-CMS DISK @V305001 00552000
  553. CLI DOSDEV,DOSDSK CHECK SOME MORE IN DOSCB @V305001 00553000
  554. BNE CHKDSK SHOULD BE EQUAL FOR DOSCB @V305001 00554000
  555. MVC INDEX(24,R11),INDEX(R10) MVE SAVD REGS->NEW AREA@V305001 00555000
  556. SR R4,R4 CLEAR.. @V305001 00556000
  557. C R4,DOSOSFST IS I/O TO NON-CMS DISK ? @V305001 00557000
  558. BNE CHKDSK2 BRANCH IF NOT CMS DISK @V305001 00558000
  559. LA R10,DOSBUFF GET IOCCW ADDRESS @V305001 00559000
  560. USING PUBADR,R5 @V305001 00560000
  561. SPACE 00561000
  562. * INDEX IS USED TO PICKUP PROPER TRK/CYL FOR THE SPECIFIED 00562000
  563. * DASD DEVICE. CON2314 WILL BE INDEX 0, ETC. 00563000
  564. SPACE 00564000
  565. SR R8,R8 SET INDEX TO 0 @V305001 00565000
  566. CLI PUBDEVT,T2314 2314 DASD ? @V305001 00566000
  567. BE SDNEXT YES, BRANCH @V305001 00567000
  568. LA R8,INDEX2 SET INDEX TO 2 @V305066 00568000
  569. CLI PUBDEVT,T3330 3330 DASD ? @V305001 00569000
  570. BE SDNEXT YES, BRANCH @V305001 00570000
  571. CLI PUBDEVT,T333B 3330-11 DASD ? @V505098 00571000
  572. BE SDNEXT YES, BRANCH @V505098 00572000
  573. LA R8,INDEX4 SET INDEX TO 4 @V305066 00573000
  574. TM PUBDEVT,T3340 IS IT 3340 (69 OR 6A) @VA08259 00574000
  575. BO SDNEXT IF YES BR, IF NOT TST NXT @VA08259 00575000
  576. LA R8,INDEX6 SET INDEX TO 6 @V505098 00576000
  577. DROP R5 @V305001 00577000
  578. SDNEXT MVC IOCCW(8),0(R3) MOVE CCW TO WORK @V305001 00578000
  579. SR R4,R4 CLEAR @VA08678 00579050
  580. IC R4,IOSW GET CCW CODE @VA08678 00579100
  581. A R4,ASDCODES DISPLACE INTO CODES LIST @VA08678 00579150
  582. SR R5,R5 CLEAR @VA08678 00579200
  583. IC R5,0(0,R4) GET ROUTINE ID @VA08678 00579250
  584. B DSKRTN(R5) BRANCH TO PROPER ROUTINE @VA08678 00579300
  585. DSKRTN DS 0H @VA08678 00579350
  586. B INVCCW 00 INVALID CCW CODE @VA08678 00579400
  587. B SDEXIT 04 NO-OP @VA08678 00579450
  588. B SDSRCHID 08 SEARCH ID @VA08678 00579500
  589. B SDRDCNT 0C READ COUNT @VA08678 00579550
  590. B SDREAD 10 READ KEY AND DATA @VA08678 00579600
  591. B SDRDCKD 14 READ COUNT, KEY AND DATA @VA08678 00579650
  592. B SDWRCKD 18 WRITE COUNT,KEY AND DATA @VA08678 00579700
  593. B SDWRITE 1C WRITE, KEY AND DATA @VA08678 00579750
  594. B SDEXIT2 20 TIC CCW @VA08678 00579800
  595. EJECT 00586000
  596. SDREAD LA R4,RDBUF GET COMMAND NAME @V305001 00587000
  597. TM 4(R3),SKIP SKIP FLAG ON ? @V305001 00588000
  598. BO SDEXIT YES, DON'T BOTHER THEN.. @V305001 00589000
  599. B SDCOMM GO TO COMMON CODE @V305001 00590000
  600. SDWRITE LA R4,WRBUF GET COMMAND NAME @V305001 00591000
  601. CLC CCBSYMU,=H'2' WRITING TO SYSPCH ? @V305001 00592000
  602. BNE SDCOMM NO, CONTINUE AS NORMAL @V305001 00593000
  603. LA R9,EIGHTY1 PREPARE TO CHECK IF WRITING 81 @V305066 00594000
  604. CH R9,DOSBYTE+2 WRITING 81 BYTES? @V305001 00595000
  605. BNE SDCOMM NO, MUST NOT BE TEXT DECK @V305001 00596000
  606. BCTR R9,R0 DECREMENT TO 80 @V305066 00597000
  607. STH R9,DOSBYTE+2 STORE NEW LENGTH IN PLIST @V305001 00598000
  608. L R9,DOSBUFF ADDRESS I/O BUFFER @V305001 00599000
  609. LA R9,1(,R9) POINT TO 2ND POSITION IN BUFFER @V305001 00600000
  610. STCM R9,7,DOSBUFF+1 STORE NEW ADDRESS IN PLIST @V305001 00601000
  611. SDCOMM LA R1,DOSOP GET PLIST ADDRESS @V305001 00602000
  612. CLC DOSOP(8),0(R4) DOING SAME OPER AS BEFORE ? @V305001 00603000
  613. BE SDCOMM2 YES, DO NOT FINIS @V305001 00604000
  614. L R15,AFINIS GET DMSFNS ADDRESS @V305001 00605000
  615. BALR R14,R15 FINIS THIS FILE @V305001 00606000
  616. SDCOMM2 MVC DOSOP(8),0(R4) MOVE COMMAND NAME @V305001 00607000
  617. XC DOSBYTE(2),DOSBYTE CLEAR 1ST HALF LENGTH @V305001 00608000
  618. MVI DOSBUFF,OFF CLEAR 1ST BYTE BUFF ADD @V305066 00609000
  619. MVC DOSCOUT(2),=H'1' SET ITEM COUNT TO 1 @V305001 00610000
  620. CLC DOSITEM,=H'1' ITEM LESS THAN ONE ? @V305001 00611000
  621. BNL SDCOMM3 NO, BRANCH @V305001 00612000
  622. MVC DOSITEM,=H'1' SET ITEM NUMBER TO 1 @V305001 00613000
  623. SDCOMM3 LA R1,DOSOP GET PLIST ADDRESS @V305001 00614000
  624. L R15,ARDBUF GET RDBUF ADDRESS @V305001 00615000
  625. CLC DOSOP,RDBUF DOING READS ? @V305001 00616000
  626. BE SDCOMM4 YES, BRANCH AROUND @V305001 00617000
  627. L R15,AWRBUF GET WRBUF ADDRESS @V305001 00618000
  628. SDCOMM4 BALR R14,R15 GO DO I/O @V305001 00619000
  629. BNZ SDERR BRANCH IF ERRORS ... @V305001 00620000
  630. SDEXIT TM 4(R3),CC CCW CHAINED ? @V305001 00621000
  631. BZ SDDONE NO, CHECK RESIDUAL COUNT @V305001 00622000
  632. SDEXIT2 LA R3,8(,R3) BUMP TO NEXT CCW @V305001 00623000
  633. B SDNEXT GO PROCESS IT @V305001 00624000
  634. EJECT 00625000
  635. SDDONE CLI 20(R2),DTFSD IS THIS SD DTF? @VM03081 00626000
  636. BNE SDDONE2 NO, JUST EXIT @V305001 00627000
  637. TM 21(R2),SDWORK IS THIS DTFSD WORKFILE? @VM03081 00628000
  638. BNO SDDONE1 @V305066 00629000
  639. XC 30(2,R2),30(R2) ZERO TRACK CAPACITY @V305001 00630000
  640. L R14,DOSSAVE+4 RECOVER R13 AT INPUT @V305001 00631000
  641. USING SSAVE,R14 REFERENCE SAVE AREA BRIEFLY @V305001 00632000
  642. CLC EGPR5(4),=F'19069' TRACK CAPACITY JUNK ? @V505098 00633000
  643. BH SDDONE2 NO, BRANCH @V305001 00634000
  644. XC EGPR5(4),EGPR5 ZERO TRACK CAPACITY @V305001 00635000
  645. DROP R14 @V305001 00636000
  646. SDDONE2 CLC DOSOP(8),RDBUF WHERE WE DOING READS ? @V305001 00637000
  647. BE SDRDBUF YES, COMPUTE RESIDUAL COUNT @V305066 00638000
  648. CLI 20(R2),DTFSD IS THIS DTFSD? @VM03081 00639000
  649. BNE IODONE2 NO @VM03081 00640000
  650. TM 21(R2),SDWORK SD WORKFILE ? @VM03081 00641000
  651. BO IODONE2 YES @VM03081 00642000
  652. TM 21(R2),BLOCK BLOCKED DTFSD FILE? @VM03081 00643000
  653. BNO IODONE2 NO, SKIP NEXT INST @VM03081 00644000
  654. XC 154(2,R2),154(R2) ZERO TRK CAP FOR TRUNCS @V305066 00645000
  655. B IODONE2 BR TO SET RESIDUAL COUNT @V305066 00646000
  656. SDRDBUF EQU * @VA06022 00647000
  657. * ELIMINATE WLR ON VAR RECORDS 00648000
  658. CLC DOSFORM(L'VAR),VAR FIXED FILE? @VA06022 00649000
  659. BNE SDRDBUF1 YES CONTINUE NORMALLY @VA06022 00650000
  660. TM 100(2),FIXED FIXED @VA06022 00651000
  661. BZ SDNORES NO, NO LENGTH CHECK @VA08357 00652000
  662. SDRDBUF1 EQU * @VA06022 00653000
  663. CLI 0(R3),VSRDCNT IS CURRENT CCW A READ COUNT @VA10745 00653100
  664. BNE VSROK1 NO-FORGET RD CNT AFTER READ @VA10745 00653200
  665. ICM R4,15,DOSREAD SEE IF EOF ON READCNT @VA10745 00653300
  666. BZ SDNORES YES-IN THIS CASE NO RESID CNT @VA10745 00653400
  667. VSROK1 EQU * CONTINUE TO TEST FOR RESID CNT @VA10745 00653500
  668. L R4,DOSBYTE GET USERS DATA LENGTH @VA06022 00654000
  669. L R5,DOSREAD GET NUMBER BYTES READ @V305001 00655000
  670. SR R4,R5 COMPUTE RESIDUAL COUNT @V305001 00656000
  671. BP SDCOUNT BRANCH IF COUNT POSITIVE @V305001 00657000
  672. SDNORES EQU * @VA06022 00658000
  673. SR R4,R4 SET COUNT TO ZERO @V305001 00659000
  674. STH R4,CCBCNT STORE COUNT IN CCB @VA05550 00660000
  675. B IODONE AND FINISH UP @VA05550 00661000
  676. SDCOUNT STH R4,CCBCNT SAVE COUNT IN CCB @V305001 00662000
  677. OI CCBCSW2,CCBILEN INDICATE INCORRECT LENGTH @VA05550 00663000
  678. NC CCBERMAP(4),NOPIOCS TURN OFF PIOS BITS @VA05550 00664000
  679. B IODONE2 I/O COMPLETE @VA12870 00665000
  680. SDDONE1 CLI 104(R2),CPSD DTFCP CONVERTED TO DTFSD? @VA04510 00666000
  681. BE SDDONE2 YES, SKIP DTF MODIFICATION @VA04510 00667000
  682. * FIX DTF CORE OVERLAY ON VAR READ 00668000
  683. TM 21(R2),INP INPUT FILE? @VA06022 00669000
  684. BO SDDONE2 YES - NO MODIFICATION @VA06022 00670000
  685. TM 100(R2),FIXED FIXED LENGTH RECORDS? @VA04411 00671000
  686. BO SDDONE2 YES, NO DTF MODIFICATION @V305066 00672000
  687. TM 100(R2),UNDEF UNDEFINED OUTPUT? @V305066 00673000
  688. BZ SDDONE3 NO, NO DTF MODIFICATION @V305066 00674000
  689. MVC 160(2,R2),82(R2) MOVE TRK CAP TO DTF FIELD @V305066 00675000
  690. B SDDONE2 @V305066 00676000
  691. SDDONE3 EQU * @VA06022 00677000
  692. XC 164(2,R2),164(R2) CLEAR TRACK CAP ON VARBLK OP @V305066 00678000
  693. B SDDONE2 CONTINUE . . . @V305066 00679000
  694. EJECT 00680000
  695. SDSRCHID L R4,0(R3) GET CCHHR ADDRESS @V305001 00681000
  696. LA R4,0(,R4) ... @V305001 00682000
  697. SR R5,R5 CLEAR REG 5 @VA15315 00683000
  698. ICM R5,B'0011',0(R4) LOAD CC INTO REG 5 @VA15315 00683500
  699. MH R5,CON2314(R8) COMPUTE RELATIVE TRACK @V305001 00684000
  700. AH R5,2(,R4) ADD HH TO RELATIVE TRACK @V305001 00685000
  701. SR R6,R6 ... @V305001 00686000
  702. IC R6,4(,R4) GET R NUMBER @V305001 00687000
  703. AR R5,R6 ADD RECORD NUMBER @V305001 00688000
  704. STH R5,DOSITEM SAVE AS NEW DOSITEM @V305001 00689000
  705. B SDEXIT @V305001 00690000
  706. SPACE 1 00691000
  707. SDWRCKD LH R4,DOSITEM GET ITEM NO. (FROM LAST SEARCH) @V305001 00692000
  708. LA R4,1(,R4) UP BY ONE @V305001 00693000
  709. STH R4,DOSITEM SAVE NEW ITEM NUMBER @V305001 00694000
  710. L R4,DOSBUFF GET BUFFER ADDRESS @V305001 00695000
  711. SR R1,R1 ZERO CONSTANT @V305001 00696000
  712. CH R1,6(,R4) IS DATA LENGTH ZERO ? @V305001 00697000
  713. BE SDEXIT YES, TRY NEXT CCW @V305001 00698000
  714. LA R4,8(,R4) BYPASS COUNT FIELD @V305001 00699000
  715. ST R4,DOSBUFF SAVE NEW BUFFER ADDRESS @V305001 00700000
  716. LH R4,DOSBYTE+2 GET DATA LENGTH @V305001 00701000
  717. SH R4,=H'8' LESS COUNT LENGTH @V305001 00702000
  718. STH R4,DOSBYTE+2 SAVE NEW DATA LENGTH @V305001 00703000
  719. BNZ SDWRITE IF MORE DATA, GO TO WRITE @V305001 00704000
  720. TM 4(R3),CD IS CCW DATA CHAINED ? @V305001 00705000
  721. BZ SDEXIT NO, THEN TRY NEXT CCW @V305001 00706000
  722. LA R3,8(,R3) POINT TO NEXT CCW @V305001 00707000
  723. MVC IOCCW(8),0(R3) MOVE NEW CCW TO WORK @V305001 00708000
  724. B SDWRITE GO PERFORM DATA WRITE @V305001 00709000
  725. SPACE 1 00710000
  726. SDRDCKD BAL R7,SDRDCNT1 GO READ COUNT FIRST @V305001 00711000
  727. TM 4(R3),CD IS CCW DATA CHAINED ? @V305001 00712000
  728. BO SDRDKD YES, GO READ FROM NEXT CCW @V305001 00713000
  729. LH R4,6(,R3) GET CCW DATA LENGTH @V305001 00714000
  730. SH R4,=H'8' LESS COUNT LENGTH @V305001 00715000
  731. STH R4,DOSBYTE+2 SAVE NEW DATA LENGTH @V305001 00716000
  732. BZ SDEXIT IF DATA LENGTH 0, EXIT @V305001 00717000
  733. LR R4,R6 GET CCW BUFFER ADDRESS @V305001 00718000
  734. LA R4,8(,R4) BUMP PAST COUNT READ @V305001 00719000
  735. ST R4,DOSBUFF SAVE NEW BUFFER ADDRESS @V305001 00720000
  736. B SDREAD GO READ KEY & DATA @V305001 00721000
  737. SDRDKD LA R3,8(,R3) BUMP TO NEXT CCW @V305001 00722000
  738. MVC IOCCW(8),0(R3) MOVE NEW CCW TO WORK @V305001 00723000
  739. B SDREAD GO READ KEY & DATA @V305001 00724000
  740. EJECT 00725000
  741. SDRDCNT LA R7,SDEXIT SET RETURN ADDRESS @V305001 00726000
  742. OI 0(R3),MT INSURE MULTI TRACK OPERATION @VA05969 00727000
  743. * (PROTECTS AGAINST LOST RECORDS) @VA05969 00728000
  744. SDRDCNT1 TM 4(R3),SKIP SKIP FLAG ON ? @V305001 00729000
  745. BO SDEXIT YES, DON'T BOTHER @V305001 00730000
  746. LH R4,DOSITEM GET ITEM NUMBER @V305001 00731000
  747. LA R4,1(,R4) POINT TO NEXT ITEM @V305001 00732000
  748. STH R4,DOSITEM SAVE IN PLIST @V305001 00733000
  749. * ELIMINATE DROP VAR RECORDS ON READ 00734000
  750. CLC DOSOP,RDBUF READ ? @VA06022 00735000
  751. BNE SDRDCNT4 NO - CONTINUE NORMALLY @VA06022 00736000
  752. CLC DOSDSTYP(THREE),SYS IS IT A SYSTEM WORK FILE @VA07764 00737000
  753. BE SDRDCNT5 YES - GO GET MAX RECLEN OR EOF @VA07764 00738000
  754. TM 100(2),FIXED VARIABLE TYPE RECORD? @VA06022 00739000
  755. BO SDRDCNT4 NO - CONTINUE NORMALLY @VA06022 00740000
  756. TM 21(R2),INP INPUT FILE? @VA10244 00740250
  757. BO SDBYPASS BYPASS OUTPUT TEST @VA10244 00740500
  758. TM 100(2),UNDEF VARIABLE FILE? @VA06022 00741000
  759. BZ SDRDCNT4 NO - HANDLE NORMALLY @VA06022 00742000
  760. SDBYPASS EQU * @VA10244 00742500
  761. CLC DOSFORM(L'VAR),VAR VARIABLE FILE? @VA06022 00743000
  762. BNE SDRDCNT4 NO - GO UPDATE @VA06022 00744000
  763. TM 21(2),SDWORKF WORK FILE? @VA06022 00745000
  764. BO SDRDCNT4 YES - HANDLE NORMALLY @VA06022 00746000
  765. NI 73(2),255-2 RESET NEXT HEAD FLAG @VA06022 00747000
  766. SDRDCNT4 EQU * @VA06022 00748000
  767. LA R1,DOSOP POINT TO FILE'S FILEID @V305001 00749000
  768. L R15,AFINIS GET FINIS ADDRESS @V305001 00750000
  769. BALR R14,R15 TEMP. CLOSE THIS FILE @V305001 00751000
  770. L R15,VCFSTLKP GET FST LOOKUP ROUTINE ADDR. @VM03093 00752000
  771. BALR R14,R15 GO FIND FST... @V305001 00753000
  772. BNZ SDRDCNT3 NOT FOUND OR ERROR..BRANCH @V305001 00754000
  773. L R1,32(,R1) GET MAX ITEM LENGTH @V305001 00755000
  774. ST R1,DOSBYTE SAVE IN PLIST AS LENGTH @V305001 00756000
  775. MVC DOSOP(8),RDBUF PREPARE TO READ ITEM @V305001 00757000
  776. LA R1,7(,R1) PREPARE TO ROUND @V305001 00758000
  777. SRL R1,3 TO DOUBLE WORD @V305001 00759000
  778. LR R0,R1 NOW MOVE IT TO R0.. @V305001 00760000
  779. DMSFREE DWORDS=(0),TYPCALL=BALR @V305001 00761000
  780. ST R1,DOSBUFF AND SAVE BUFFER ADDR IN PLIST @V305001 00762000
  781. XC DOSBYTE(2),DOSBYTE MAKE SURE LENGTH OK @V305001 00763000
  782. MVI DOSBUFF,OFF AND BUFFER IS LEGAL @V305066 00764000
  783. MVC DOSCOUT(2),=H'1' SET ITEM COUNT TO 1 @V305001 00765000
  784. LA R1,DOSOP GET PLIST ADDRESS @V305001 00766000
  785. L R15,ARDBUF GET RDBUF ADDRESS @V305001 00767000
  786. BALR R14,R15 GO READ ... @V305001 00768000
  787. LR R5,R15 SAVE RET CODE TEMPORARILY @V305001 00769000
  788. L R1,DOSBYTE GET BUFFER LENGTH @V305001 00770000
  789. LA R1,7(,R1) PREPARE TO ROUND @V305001 00771000
  790. SRL R1,3 TO DOUBLE WORD BOUNDARY @V305001 00772000
  791. LR R0,R1 MOVE TO REG. 0 @V305001 00773000
  792. L R1,DOSBUFF GET FREE AREA LOCATION @V305001 00774000
  793. DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR @V305001 00775000
  794. LTR R15,R5 RESTORE RETURN CODE @V305001 00776000
  795. BZ SDRDCNT2 IF ZERO, BRANCH @V305001 00777000
  796. CH R15,=H'8' INCORRECT LENGTH ? @V305001 00778000
  797. BE SDRDCNT2 YES, BRANCH @V305001 00779000
  798. CH R15,=H'12' END-OF-FILE ? @V305001 00780000
  799. BNE ERR104S NO, GIVE ERROR MSG @V305001 00781000
  800. SDRDCNT3 XC DOSREAD(4),DOSREAD ZERO BYTES READ IF HERE.. @V305001 00782000
  801. EJECT 00783000
  802. SDRDCNT2 LH R6,CON2314(R8) GET DEVICE CONSTANT @V305001 00784000
  803. LR R5,R4 SET UP FOR DIVIDE @V305001 00785000
  804. BCTR R5,R0 ITEM NO. - 1 TO ACCOUNT FOR R1 @V305066 00786000
  805. SR R4,R4 ... @V305001 00787000
  806. DR R4,R6 COMPUTE CYL & TRK NOS. @V305001 00788000
  807. L R6,0(,R3) POINT TO USER'S BUFFER @V305001 00789000
  808. LA R6,0(,R6) ... @V305001 00790000
  809. STH R4,2(,R6) SUPPLY TRACK NUMBER @V305001 00791000
  810. STH R5,0(,R6) SUPPLY CYLINDER NUMBER @V305001 00792000
  811. MVI 4(R6),REC1 AND RECORD NUMBER TO 1 @V305066 00793000
  812. L R4,DOSREAD GET NUMBER BYTES READ @V305001 00794000
  813. STCM R4,MASK7,5(R6) SUPPLY KL &DL @V305066 00795000
  814. BR R7 ALL DONE @V305001 00796000
  815. SPACE 00797000
  816. SDRDCNT5 DS 0H @VA07764 00798000
  817. LR R5,R4 LOAD RECORD NUMBER PLUS ONE @VA07764 00799000
  818. BCTR R5,R0 RECORD NUMBER TO BE PROCESSED @VA07764 00800000
  819. STH R5,DOSITEM SAVE IN PLIST @VA07764 00801000
  820. LA R1,DOSOP ADDR OF PLIST FOR FST FILE LKUP @VA07764 00802000
  821. L R15,ASTATE PREPARE TO CALL STATE @VA07764 00803000
  822. BALR R14,R15 DOES FILE EXIST @VA07764 00804000
  823. BNZ SDRDCNT3 NO - ZERO OUT BYTES READ @VA07764 00805000
  824. L R5,DOSBUFF GET ADDRESS OF I/O BUFFER @VA07764 00806000
  825. USING FSTSECT,R5 ADDRESS FST @VA07764 00807000
  826. CH R4,FSTIC HAVE WE READ LAST RECORD @VA07764 00808000
  827. BH SDRDCNT3 YES - ZERO OUT BYTES READ @VA07764 00809000
  828. MVC DOSREAD,FSTIL NUMBER OF BYTES TO BE READ @VA07764 00810000
  829. B SDRDCNT2 COMPUTE CYL/TRACK AND EXIT @VA07764 00811000
  830. EJECT 00812000
  831. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00813000
  832. * * 00814000
  833. * THE ONLY I/O ERRORS RETURNED TO THE USER IS END-OF-FILE * 00815000
  834. * OR INCORRECT LENGTH. ALL OTHER I/O ERRORS WILL BE CON- * 00816000
  835. * SIDERED TERMINAL. * 00817000
  836. * * 00818000
  837. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00819000
  838. SPACE 2 00820000
  839. SDERR NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 00821000
  840. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 00822000
  841. CLC DOSOP(8),WRBUF DOING WRITES ? @V305001 00823000
  842. BE ERR105S YES, GIVE ERROR MSG @V305001 00824000
  843. CH R15,=H'12' WAS IT END-OF-FILE ? @V305001 00825000
  844. BE SDEOF YES, BRANCH @V305001 00826000
  845. CH R15,=H'8' WAS IT INCORRECT LENGTH ? @V305001 00827000
  846. BNE ERR104S NO, GIVE ERROR MSG @V305001 00828000
  847. TM 4(R3),SILI SUPP. I.L. SPECIFIED ? @V305001 00829000
  848. BO SDEXIT YES, IGNORE ERROR THEN.. @V305001 00830000
  849. OI CCBCSW2,CCBILEN SET IL FLAG IN CCB @V305001 00831000
  850. L R4,DOSBYTE GET USER DATA LENGTH @V305001 00832000
  851. L R5,DOSREAD GET NUMBER BYTES READ @V305001 00833000
  852. SR R4,R5 COMPUTE RESIDUAL COUNT @V305001 00834000
  853. B SDERR2 GO BELOW.... @V305001 00835000
  854. SDEOF OI CCBCOM1,CCBEOF SET BYTE 2 CCB FOR EOF @V305001 00836000
  855. OI CCBCOM2,CCBEOC+CCBVER SET BYTE 3 CCB FOR EOF @V305001 00837000
  856. OI CCBCSW1,CCBUE SET BYTE 1 CSW FOR EOF @V305001 00838000
  857. L R4,DOSBYTE GET USER DATA LENGTH @V305001 00839000
  858. SDERR2 STH R4,CCBCNT SAVE RESIDUAL COUNT IN CCB @V305001 00840000
  859. B EXCPEND GET OUT @V305001 00841000
  860. EJECT 00842000
  861. USING PUBADR,R5 @V305001 00843000
  862. USING ALTWORK,R10 @V305001 00844000
  863. CHKDSK LR R11,R10 GET DMSXCP WORK IN R11 @V305001 00845000
  864. CHKDSK2 LA R1,PUBDSKM POINT TO DISK MODE IN PUB @V305001 00846000
  865. SH R1,=H'24' PREPARE ADTLKP PLIST @V305001 00847000
  866. L R15,VCADTLKP GET ADTLKP ADDRESS @VM03093 00848000
  867. BALR R14,R15 GO FIND ADT @V305001 00849000
  868. BC 2,NOADT NO ADT FOUND, ERROR @V305001 00850000
  869. USING ADTSECT,R1 @V305001 00851000
  870. TM ADTFLG2,ADTFROS+ADTFDOS DOS OR O/S DISK ? @V305001 00852000
  871. BZ NOTDOSOS NO, I DON'T KNOW WHAT'S HAPP'NG @V305001 00853000
  872. LA R9,CHKEND INITIALIZE FOR LOOP EXIT @V305001 00854000
  873. CHKWRCCW SR R4,R4 CLEAR... @V305001 00855000
  874. CHKLUP TM 0(R3),VALCCW LET'S LOOK AT CCW'S @V305066 00856000
  875. BZ INVCCW IF INVALID CCW, ERROR @V305001 00857000
  876. TM 0(R3),TICCCW IS IT TIC CCW? @V305066 00858000
  877. BZ CHKTIC YES, BRANCH TO GET NEXT ADDRESS @V305001 00859000
  878. TM 0(R3),CONTROL CHECK FOR CONTROL/READ/WRITE @V305066 00860000
  879. BZ CHKNXT BRANCH IF NONE OF ABOVE @V305001 00861000
  880. BO CHKNXT BRANCH FOR CONTROL @V305001 00862000
  881. CHKWRT TM 0(R3),WRITECCW IS IT WRITE CCW? @V305066 00863000
  882. BZ CHKNXT NO, BRANCH @V305001 00864000
  883. TM 0(R3),CCWE0 IS IT WRITE CCW? @V305066 00865000
  884. BNZ CHKNXT NO, BRANCH @V305001 00866000
  885. LA R4,WRITEFLG SET WRITE FLAG @V305066 00867000
  886. CHKNXT TM 4(R3),CC CCW CHAINED ? @V305001 00868000
  887. BZR R9 NO, ALL DONE WITH CHECK @V305001 00869000
  888. CHKNXT2 LR R6,R3 SAVE THIS CCW ADDRESS @V305001 00870000
  889. LA R3,8(,R3) BUMP TO NEXT CCW IN CHAIN @V305001 00871000
  890. B CHKLUP KEEP CHECKING @V305001 00872000
  891. SPACE 00873000
  892. CHKTIC TM 0(R6),STATMOD WAS LAST CCW A STATUS MODIFIER? @V305066 00874000
  893. BZ CHKTIC2 NO, USE ADDR OF TIC TO CONTINUE @V305001 00875000
  894. TM 0(R6),STATMOD2 STILL LOOKS LIKE STATUS MODIFIER @V305066 00876000
  895. BZ CHKTIC2 NO, USE ADDRESS IN TIC CCW @V305001 00877000
  896. B CHKNXT2 ASSUME STATUS MODIFIER BEFORE TIC@V305001 00878000
  897. CHKTIC2 L R3,0(,R3) GET TIC TRANSFER TO ADDRESS @V305001 00879000
  898. LA R3,0(,R3) CLEAR HI ORDER BYTE (CCW CODE) @V305001 00880000
  899. B CHKLUP CONTINUE SEARCH FOR R/W CCW @V305001 00881000
  900. SPACE 00882000
  901. CHKEND LTR R4,R4 ATTEMPTING TO WRITE ? @V305001 00883000
  902. BZ DIAGCP NO, THEN CHANNEL PGMS OK @V305001 00884000
  903. TM ADTFLG3,ADTFRW IS DISK ACCESSED FOR WRITES ? @V305001 00885000
  904. BZ NOTRW NO, THEN WON'T LET WRITE @V305001 00886000
  905. DROP R1 @V305001 00887000
  906. EJECT 00888000
  907. DIAGCP DS 0H LET 'CP' DO THE I/O: @V305001 00889000
  908. LA R6,DISK GET 'DISK' MSG SUBSTITUTION @V305001 00890000
  909. LA R9,DIAGCON1 GET RETURN FROM DIAGNOSE @V305001 00891000
  910. L R14,DOSSAVE+4 RECOVER "R13 AT INPUT" @V305001 00892000
  911. USING SSAVE,R14 AND REF. THE SAVE AREA BRIEFLY @V305001 00893000
  912. L R15,CALLER GET ADDR OF 'CALLER'(LIKE OLDPSW)@V305001 00894000
  913. CL R15,ADIKQLAB IS HE PERCHANCE 'IKQLAB' ? @V305001 00895000
  914. BL DIAGIO NO - FORGET IT - CONTINUE. @V305001 00896000
  915. CL R15,NDIKQLAB LOOKS PROMISING - CHECK FURTHER: @V305001 00897000
  916. BL IKQLAB YES - MUST HANDLE SPECIALLY. @V305001 00898000
  917. DROP R14 NO - CONTINUE: @V305001 00899000
  918. DIAGIO ICM R1,MASK7,CCBCCW GET CHANNEL PGMS @V305066 00900000
  919. DIAGCON LH R0,PUBCUU GET VIRTUAL DEVICE ADDRESS @V305001 00901000
  920. XC CSW,CSW ZERO OUT CSW @V305001 00902000
  921. DC X'83010020' DIAGNOSE I/O TO CP @V305001 00903000
  922. LM R7,R8,CSW GET CSW TO REGS. 7 AND 8 @V305001 00904000
  923. STH R8,CCBCNT PASS RESIDUAL COUNT @VA12729 00905000
  924. BZ IODONE GOOD I/O, EXIT @VA12729 00905250
  925. BM ERR113S DEVICE NOT ATTACHED EXIT @V305001 00906000
  926. BP DIAGCON3 CHECK EOF (UNIT EXCEPTION) @V305001 00907000
  927. STH R1,DOSSENSE SAVE STATUS INFORMATION @V305001 00908000
  928. BR R9 RETURN TO CALLER @V305001 00909000
  929. SPACE 1 00910000
  930. DIAGCON1 TM DOSSENSE,F5 ONLY TRACK OR DATA CHECK ALLOWED @V305066 00911000
  931. BNZ IOERR NO, ERROR @V305001 00912000
  932. TM DOSSENSE+1,HEX17 ANYMORE NOT ALLOWED @V305066 00913000
  933. BNZ IOERR YES, ERROR @V305001 00914000
  934. TM DOSSENSE,TRACK TRACK CONDITION? @V305066 00915000
  935. BO ALTRACK YES, HANDLE ALTERNATE TRACK @V305001 00916000
  936. DIAGCON2 NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 00917000
  937. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 00918000
  938. STCM R8,MASK12,CCBCSW1 CSW STATUS TO CCB @V305066 00919000
  939. STH R8,CCBCNT SAVE RESIDUAL COUNT @V305001 00920000
  940. OC CCBCOM2(1),DOSSENSE+1 SET TRANSMISION OF SENSE @V305001 00921000
  941. STCM R7,MASK7,CCBCSW CSW ADDRESS IN CSW TO CCB @V305066 00922000
  942. TM DOSSENSE,DATACHK ANY DATA CHECK? @V305066 00923000
  943. BZ EXCPEND NO, GET OUT @V305001 00924000
  944. OI CCBCOM2,CCBDC POST DATA CHECK IN CCB @V305001 00925000
  945. B EXCPEND GET OUT @V305001 00926000
  946. SPACE 1 00927000
  947. DIAGCON3 NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 00928000
  948. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 00929000
  949. CH R15,=H'2' IS ERROR UNIT EXCEPTION ? @V305001 00930000
  950. BE DIAGCON4 YES, PROCESS AS EOF @V305001 00931000
  951. OI CCBCSW2,CCBILEN SET BYTE 2 CSW FOR I.L. @V305001 00932000
  952. B DIAGCON6 CONTINUE BELOW.. @V305001 00933000
  953. DIAGCON4 LTR R4,R4 WERE ANY WRITES DONE ? @V305001 00934000
  954. BNZ DIAGCON5 YES, DO NOT SET CCBEOF @V305001 00935000
  955. CLC CCBSYMU,IPTLUB IS UNIT EXCEPTION ON SYSIPT ? @VM03090 00936000
  956. BE IODONE2 YES, DON'T REFLECT ERROR IN CCB @VM03090 00937000
  957. OI CCBCOM1,CCBEOF SET BYTE 2 CCB FOR EOF @V305001 00938000
  958. DIAGCON5 OI CCBCOM2,CCBEOC+CCBVER SET BYTE 3 CCB FOR EOF @V305001 00939000
  959. OI CCBCSW1,CCBUE SET BYTE 1 CSW FOR EOF @V305001 00940000
  960. DIAGCON6 STCM R7,MASK7,CCBCSW CCW ADDRESS IN CSW TO CCB @V305066 00941000
  961. STH R8,CCBCNT SAVE RESIDUAL COUNT IN CCB @V305001 00942000
  962. B EXCPEND GET OUT @V305001 00943000
  963. EJECT 00944000
  964. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00945000
  965. * * 00946000
  966. * ALTERNATE TRACK ROUTINE. SWITCHES FROM PRIME TRACK * 00947000
  967. * TO ALTERNATE TRACK AND FROM ALTERNATE TO PRIME. * 00948000
  968. * * 00949000
  969. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00950000
  970. SPACE 2 00951000
  971. ALTRACK MVC EDCCW0(ALTWLEN),ALTCCWS INITIALIZE WORK AREA @V305001 00952000
  972. LA R1,EDNH GET SEEK BBCCHHR AREA @V305001 00953000
  973. STCM R1,7,EDCCW0+1 INITIALIZE CCW0 BUFFER @V305001 00954000
  974. LA R1,EDHA GET HOME ADDRESS AREA @V305001 00955000
  975. STCM R1,7,EDCCW1+1 INITIALIZE CCW1 BUFFER @V305001 00956000
  976. STCM R1,7,EDCCW6+1 INITIALIZE CCW6 BUFFER @V305001 00957000
  977. LA R1,EDR0 GET RECORD ZERO AREA @V305001 00958000
  978. STCM R1,7,EDCCW2+1 INITIALIZE CCW2 BUFFER @V305001 00959000
  979. STCM R1,7,EDCCW4+1 INITIALIZE CCW4 BUFFER @V305001 00960000
  980. LA R1,EDSA GET SEEK RECORD ZERO AREA @V305001 00961000
  981. STCM R1,7,EDCCW3+1 INITIALIZE CCW3 BUFFER @V305001 00962000
  982. LA R1,EDCCW4 GET TIC TO CCW4 ADDRESS @V305001 00963000
  983. STCM R1,7,EDCCW5+1 INITIALIZE CCW5 BUFFER @V305001 00964000
  984. SH R7,=H'8' POINT TO CCW IN ERROR @V305001 00965000
  985. STCM R7,7,EDCCW7+1 SET TIC TO CCW IN ERROR @V305001 00966000
  986. ICM R3,7,CCBCCW GET CCW CHAIN START @V305001 00967000
  987. ALTLUP TM 0(R3),TICCCW IS IT TIC CCW? @V305066 00968000
  988. BZ ALTTIC YES, BRANCH TO GET NEXT ADDRESS @V305001 00969000
  989. TM 0(R3),CONTROL CHECK FOR CONTROL/READ/WRITE @V305066 00970000
  990. BZ ALTNXT BRANCH IF NONE OF ABOVE @V305001 00971000
  991. BM ALTNXT BRANCH IF POSSIBLE WRITE @V305001 00972000
  992. TM 0(R3),HF0 LOOKS LIKE CONTROL CCW? @V305066 00973000
  993. BNZ ALTNXT NO, BRANCH @V305001 00974000
  994. TM 0(R3),H0C LAST TEST FOR CONTROL @V305066 00975000
  995. BZ ALTNXT NO, BRANCH (IT IS NO-OP) @V305001 00976000
  996. CLM R3,7,EDCCW7+1 IS CONTROL BEFORE CCW IN ERROR ? @V305001 00977000
  997. BNL ALTEND NO, STOP HERE (FOUND ALREADY) @V305001 00978000
  998. ICM R8,7,1(R3) GET CONTROL BBCCHH ADDRESS @V305001 00979000
  999. LH R1,2(,R8) LOAD CC PORTION OF ADDRESS @V305001 00980000
  1000. STH R1,EDNH+2 SAVE CC PORTION IN OUR AREA @V305001 00981000
  1001. LH R1,4(,R8) LOAD HH PORTION OF ADDRESS @V305001 00982000
  1002. LA R1,1(,R1) UP HEAD BY ONE @V305001 00983000
  1003. STH R1,EDNH+4 AND SAVE THE NEW HH PORTION @V305001 00984000
  1004. ALTNXT TM 4(R3),CC CCW CHAINED ? @V305001 00985000
  1005. BZ ALTEND NO, ALL DONE WITH CHECK @V305001 00986000
  1006. ALTNXT2 LR R6,R3 GET ADDRESS CURRENT CCW @V305001 00987000
  1007. LA R3,8(,R3) BUMP TO NEXT CCW @V305001 00988000
  1008. B ALTLUP KEEP CHECKING @V305001 00989000
  1009. EJECT 00990000
  1010. ALTTIC TM 0(R6),STATMOD WAS LAST CCW A STATUS MODIFIER? @V305066 00991000
  1011. BZ ALTTIC2 NO, USE TIC ADDRESS TO CONTINUE @V305001 00992000
  1012. TM 0(R6),STATMOD2 STILL LOOKS LIKE STATUS MODIFIER?@V305066 00993000
  1013. BZ ALTTIC2 NO, USE TIC ADDRESS THEN @V305001 00994000
  1014. B ALTNXT2 ASSUME STATUS MODIFIER BEFORE TIC@V305001 00995000
  1015. ALTTIC2 L R3,0(,R3) GET TIC TRANSFER TO ADDRESS @V305001 00996000
  1016. LA R3,0(,R3) CLEAR HI ORDER BYTE (CCW CODE) @V305001 00997000
  1017. B ALTLUP CONTINUE SEARCH FOR CONTROL @V305001 00998000
  1018. SPACE 00999000
  1019. ALTEND LH R0,PUBCUU GET VIRTUAL DEVICE ADDRESS @V305001 01000000
  1020. LH R0,PUBCUU GET VIRTUAL DEVICE ADDRESS @V305001 01001000
  1021. LA R1,EDCCW1 GET READ HOME ADDR & REC 0 CHAIN @V305001 01002000
  1022. TM 0(R7),MT IS CCW IN ERROR MT CCW ? @V305001 01003000
  1023. BZ ALTIO NO MULTIPLE TRACK, BRANCH @V305001 01004000
  1024. LA R1,EDCCW0 GET SEEK CHANNEL PROGRAM @V305001 01005000
  1025. ALTIO XC CSW,CSW ZERO OUT CSW @V305001 01006000
  1026. DC X'83010020' DIAGNOSE I/O TO CP @V305001 01007000
  1027. TM EDHA,ALT IS IT ALTERNATE TRACK? @V305066 01008000
  1028. BZ EXITC NO, DEFECTIVE TRACK THEN @V305001 01009000
  1029. CLI PUBDEVT,T3350 IS IT A 3350 ? @V505098 01010000
  1030. BNE CONTINUE NO, CONTINUE WITH ORGINAL LOGIC @V505098 01011000
  1031. CLI EDR0+3,HEAD30 IS HEAD LARGER THAN 30 CYLINDERS @V505098 01012000
  1032. BNL CYLEND YES, CYLINDER END THEN @V505098 01013000
  1033. B NOT3340 CAN'T BE A 3340 @V505098 01014000
  1034. CONTINUE CLI EDR0+3,HEAD19 IS HEAD LARGER THAN 19 ? @V505098 01015000
  1035. BNL CYLEND YES, CYLINDER END THEN @V305001 01016000
  1036. TM PUBDEVT,T3340 IS IT A 3340 ? @V305001 01017000
  1037. BNO NOT3340 NO, THEN BRANCH @V305001 01018000
  1038. CLI EDR0+3,HEAD11 IS HEAD LARGER THAN 11? @V305066 01019000
  1039. BNL CYLEND YES, CYLINDER END THEN @V305001 01020000
  1040. NOT3340 LH R1,EDR0+2 GET ADDRESS OF DEFECTIVE TRACK @V305001 01021000
  1041. LA R1,1(,R1) PLUS ONE @V305001 01022000
  1042. STH R1,EDR0+2 FOR NEW SEEK ADDRESS @V305001 01023000
  1043. EXITC LA R1,EDCCW3 GET NEW CCW CHAIN @V305001 01024000
  1044. B DIAGCON AND REISSUE THE I/O @V305001 01025000
  1045. SPACE 1 01026000
  1046. CYLEND OI CCBCOM2,ENDCYL SET UP CYLINDER END @V305066 01027000
  1047. OC CCBCOM2,DOSSENSE+1 POST TRACK OVERRUN OR EOC @V305001 01028000
  1048. B EXCPEND GET OUT NOW.. @V305001 01029000
  1049. DROP R5,R10 @V305001 01030000
  1050. USING IOCCW,R10 @V305001 01031000
  1051. SPACE 1 01032000
  1052. ALTCCWS CCW SEEK,0,CC,SIX SEEK TO NEW HEAD @V305066 01033000
  1053. CCW RDHOME,0,CC+SILI,FIVE READ HOME ADDRESS @V305066 01034000
  1054. CCW RDREC0,0,SILI,FOUR READ RECORD ZERO @V305066 01035000
  1055. SPACE 1 01036000
  1056. CCW SEEK,0,CC,SIX SEEK TO HOME ADDRESS @V305066 01037000
  1057. CCW SHHA,0,CC+SILI,FOUR SEARCH HOME ADDRESS EQUAL @V305066 01038000
  1058. CCW TIC,0,0,0 TIC TO SEARCH @V305001 01039000
  1059. CCW RDHOME,0,CC+SKIP,FIVE READ HOME ADDRESS @V305066 01040000
  1060. CCW TIC,0,0,0 TIC TO USER CCW CHAIN @V305001 01041000
  1061. SPACE 1 01042000
  1062. ALTBUFS DC 3H'0' SEEK TO NEW HEAD BBCCHHR @V305001 01043000
  1063. DC 3H'0' READ HOME ADDRESS AREA @V305001 01044000
  1064. DC 1H'0' BBCCHHR TO SEEK HOME ADDR @V305001 01045000
  1065. DC 2H'0' READ RECORD ZERO AREA @V305001 01046000
  1066. SPACE 1 01047000
  1067. ALTWLEN EQU (*-ALTCCWS) LENGTH OF WORK AREA @V305001 01048000
  1068. EJECT 01049000
  1069. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01050000
  1070. * * 01051000
  1071. * IKQLAB HANDLER. PERFORMS SIMULATION OF I/O UTILIZING * 01052000
  1072. * DATA AVAILABLE IN DOSCB BLOCK(S) FROM 'DLBL' CALLS BY USER. * 01053000
  1073. * * 01054000
  1074. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01055000
  1075. SPACE 01056000
  1076. * NOTE: "SUPPORT CODE" FOR THIS SECTION = @V305132 01057000
  1077. SPACE 01058000
  1078. USING DMSCCB,R2 REMINDER: STILL IN EFFECT @V305001 01059000
  1079. SPACE 01060000
  1080. * NOTE: R0, R1, R4, R5, R6, R7, R8, R14 AND R15 OK FOR WORK REGISTERS 01061000
  1081. SPACE 01062000
  1082. IKQLAB SR R4,R4 HNDL 'EXCP' ISSUED BY 'IKQLAB'PRG@V305001 01063000
  1083. ICM R4,7,CCBCCW POINT TO CCW-STRING @V305001 01064000
  1084. SR R7,R7 CLEAR FOR ICM USE @V305001 01065000
  1085. SR R8,R8 ... @V305001 01066000
  1086. LA R14,CON5 5 INTO R14 TO CK READ COUNT CCW @V305066 01067000
  1087. LA R15,16(,R2) POINT TO CCB + 16 @V305001 01068000
  1088. CR R4,R15 DOES CCW-STRING START AT CCB+16? @V305001 01069000
  1089. BNE IKQXTENT NO - MUST BE OF "SDCCWS" FORM. @V305001 01070000
  1090. LR R4,R2 YES - PURPOSELY SET R4=R2 (N.B.),@V305001 01071000
  1091. * NOTE: THIS MEANS "VSAM" 01072000
  1092. USING LBLCCW,R4 AND REFERENCE "LBLCCW" CCW-STRING@V305001 01073000
  1093. LA R15,CON512 LOOK FOR BYTE COUNT OF 512 @V305066 01074000
  1094. CH R15,LBLCCW5+6 IS READ BYTE-COUNT "CORRECT" ? @V305001 01075000
  1095. BNE IKQLABNG IF NOT, SOMEBODY GOOFED. @V305001 01076000
  1096. CH R14,LBLCCW6+6 & BYTE-CNT OF READ-CNT CCW = 05? @V305001 01077000
  1097. BNE IKQLABNG AN ERROR SOMEWHERE IF NOT. @V305001 01078000
  1098. L R5,LBLCCW3 PICK UP "SEARCH KEY EQUAL" CCW @V305001 01079000
  1099. ICM R7,7,LBLCCW5+1 GET ADDR OF 512-BYTE LABEL RCD, @V305001 01080000
  1100. ICM R8,7,LBLCCW6+1 AND ADDRESS OF 5-BYTE COUNT @V305001 01081000
  1101. LR R14,R7 ADDR OF 512-BYTE RECORD INTO R14 @V305001 01082000
  1102. SR R1,R1 CLEAR R1; R0 IMMATERIAL; R15=512 @V305001 01083000
  1103. MVCL R14,R0 CLEAR 512-BYTE LABEL RECORD @V305001 01084000
  1104. XC 0(5,R8),0(R8) ALSO CLEAR 5-BYTE COUNT @V305001 01085000
  1105. * REMEMBER: R4 = R2. 01086000
  1106. USING LABXTREC,R7 REFERENCE LABEL INFORMATION RCD @V305001 01087000
  1107. IKQLABJN LR R14,R11 START WITH DOSCB GIVEN BY CALLER @V305001 01088000
  1108. USING DOSSECT,R14 ... @V305001 01089000
  1109. CLC 0(7,R5),DOSDD DDNAME (E.G. AT 'X48') MATCH ? @V305001 01090000
  1110. BE DOSCBFND YES - WE'RE "RIGHT THERE". @V305001 01091000
  1111. LH R0,DOSNUM NO - HAVE TO DO IT THE HARD WAY. @V305001 01092000
  1112. LTR R0,R0 WE SHOULD HAVE AT LEAST ONE @V305001 01093000
  1113. BNP IKQLABNF 'NOT FOUND' IF NO DOSCB BLOCKS @V305001 01094000
  1114. L R14,DOSFIRST GET ADDRESS OF FIRST DOSCB BLOCK @V305001 01095000
  1115. CHKDOSCB CLC 0(7,R5),DOSDD DDNAME (E.G. AT 'X48') MATCH ? @V305001 01096000
  1116. BE DOSCBFND YES - FOUND RIGHT DOSCB BLOCK. @V305001 01097000
  1117. ICM R14,MASK7,DOSNEXT+1 NO - GET ADDR OF NEXT BLOCK @V305001 01098000
  1118. BCT R0,CHKDOSCB & SEARCH ALL REMAINING DOSCB BLKS@V305001 01099000
  1119. DROP R11,R14 @V305001 01100000
  1120. B IKQLABNF 'NOT FOUND' IF NOT FOUND ANYWHERE@V305001 01101000
  1121. DOSCBFND EQU * CORRECT DOSCB BLOCK FOUND: @V305001 01102000
  1122. LR R5,R14 REF. DOSCB VIA R5 FROM NOW ON @V305001 01103000
  1123. USING DOSSECT,R5 ... @V305001 01104000
  1124. * FILL IN APPROPRIATE DATA FROM DOSCB BLOCK (EXCEPT FOR EXTENT DATA): 01105000
  1125. MVC XT001,DOSDD DDNAME @V305001 01106000
  1126. MVI XT053,ID1 FORMAT ID = NUMERIC 1 @V305066 01107000
  1127. MVI XT060+1,VOLSEQ1 VOLUME SEQ NO. ALWAYS = X'00 @V305066 01108000
  1128. MVC XT070(1),DOSTYPE SET OPEN CODE TO 'A' OR 'S' @V305066 01109000
  1129. * SET XTUCNAM AND XTBUFSP TO SAME DEFAULT VALUES AS SET BY IKQOPN: 01110000
  1130. MVC XTUCNAM,=CL8' ' BLANK VSAM USER CATALOG DDNAME @V305001 01111000
  1131. MVC XTBUFSP,=F'-1' SET BUFFER-SPACE TO -1 (X'FF'S)@V305001 01112000
  1132. CLI DOSUCNAM,BINZERO WAS USER CATALOG DDNAME GIVEN? @V305066 01113000
  1133. BE CHKBUFSP NO - CHECK BUFFER-SPACE FIELD. @V305001 01114000
  1134. MVC XTUCNAM,DOSUCNAM YES-STOR VSAM USER CATLG DDNAME@V305001 01115000
  1135. CHKBUFSP ICM R15,15,DOSBUFSP GET SIZE OF VSAM I/O BUFFER(S) @V305001 01116000
  1136. BZ *+8 IF EMPTY, LEAVE DEFAULT VALUE @V305001 01117000
  1137. ST R15,XTBUFSP STORE SIZE OF VSAM I/O BUFFR(S)@V305001 01118000
  1138. * OTHER FIELDS = 00 (AND ARE ALREADY CLEAR) 01119000
  1139. ICM R6,15,DOSOSDSN GET ADDR OF DATASET-NAME(IF ANY)@V305001 01120000
  1140. BZ GETEXTTB IF NONEXISTENT, FORGET IT. @V305001 01121000
  1141. MVC XT009(44),0(R6) STORE FILE-ID = DATA-SET-NAME @V305001 01122000
  1142. * NOW FILL IN APPROPRIATE EXTENT INFORMATION FROM DOSCB BLOCK: 01123000
  1143. GETEXTTB SR R0,R0 INITIALIZE TO ZERO. @V305066 01124000
  1144. ICM R6,15,DOSEXTTB GET DOS EXTENT BLOCK @V305066 01125000
  1145. IC R0,DOSEXTNO (GET NUMBER DOS EXTENT ENTRIES) @V305066 01126000
  1146. LA R9,ELEVEN (SET EXTENT BLOCK LENGTH) @V305066 01127000
  1147. BNZ EXTMULTB IF IT EXISTS, BRANCH @V305066 01128000
  1148. ICM R6,15,DOSVOLTB GET DOS MULTI-VOL BLOCK @V305066 01129000
  1149. IC R0,DOSVOLNO (GET NUMBER MULTI-VOL ENTRIES) @V305066 01130000
  1150. LA R9,THREE (SET MULTI-VOL BLOCK LENGTH) @V305066 01131000
  1151. BZ GETMINDT IF NEITHER, GET MINIMUM DATA. @V305066 01132000
  1152. EXTMULTB STC R0,XT000 SAVE NUMBER OF EXTENT/MULT BLOCKS@V305066 01133000
  1153. CLR R2,R4 ARE WE DOING 'VSAM' PROCESSING ? @V305066 01134000
  1154. BE XTNTSET8 YES - PROCESS ALL RECORDS. @V305001 01135000
  1155. SR R15,R15 NO, ("SEQUENTIAL DISK" NON-VSAM) @V305001 01136000
  1156. IC R15,DOSEXTCX GET OLD "CURR.EXTENT" (MAY BE 0) @V305001 01137000
  1157. LA R15,1(,R15) ADD ONE, @V305001 01138000
  1158. STC R15,DOSEXTCX AND STORE UPDATED VALUE. @V305001 01139000
  1159. CR R15,R0 EXCEED TOTAL NUMBER OF EXTENTS? @V305001 01140000
  1160. BH XTNTNOMO IF YES, NO "MO" EXTENTS LEFT. @V305001 01141000
  1161. XTNTSET8 LA R8,XT084 PT. TO 1ST BLK OF EXTENT ENTRIES @V305001 01142000
  1162. USING XT084,R8 AND REFERENCE VIA R8 @V305001 01143000
  1163. * NOTE: CMS EXTENT BLOCK IS 11-BYTES EACH, IN THE FOLLOWING FORMAT: 01144000
  1164. * BYTE 0: DISK MODE LETTER 01145000
  1165. * BYTES 1-2: 2-BYTE LUB 01146000
  1166. * BYTES 3-6: STARTING TRACK NUMBER 01147000
  1167. * BYTES 7-10: NUMBER OF TRACKS 01148000
  1168. * LOOP TO PUT CMS EXTENT INFORMATION INTO THE DOS EXTENT RECORD: 01149000
  1169. XTNTLOOP LR R1,R6 PT. TO 1ST ENTRY IN DMS EXT. BLK @V305001 01150000
  1170. SH R1,=H'24' (-24) - LOOKING AT A MODE-LETTER @V305001 01151000
  1171. L R15,VCADTLKP FIND THE DISK IT'S ON @VM03093 01152000
  1172. BALR R14,R15 ... @V305001 01153000
  1173. BNZ STRXT090 IF NOT FOUND, DON'T STORE VOLID @V305001 01154000
  1174. USING ADTSECT,R1 REFERENCE ADT BRIEFLY @V305001 01155000
  1175. MVC XT084,ADTID STORE VOLUME SERIAL NUMBER @V305001 01156000
  1176. DROP R1 @V305001 01157000
  1177. STRXT090 MVI XT090,EXTYP STORE EXTENT TYPE AS FLAG X'01' @V305066 01158000
  1178. SR R1,R1 GET TOTAL NO. OF EXTENTS AGAIN @V305001 01159000
  1179. IC R1,XT000 ... @V305001 01160000
  1180. SR R1,R0 MINUS NO. EXTENTS LEFT TO PROCESS@V305001 01161000
  1181. LA R1,1(,R1) PLUS 1 = NUMBER OF "THIS" EXTENT @V305001 01162000
  1182. CLR R2,R4 ARE WE DOING "VSAM" PROCESSING ? @V305001 01163000
  1183. BE XTNTSTC YES - PROCESS ALL RECORDS. @V305001 01164000
  1184. CLM R1,MASK1,DOSEXTCX IS THIS THE ONE WE WANT? @V305066 01165000
  1185. BL XTNTNEXT NOPE - KEEP LOOKING TILL FIND IT @V305001 01166000
  1186. XTNTSTC STC R1,XT091 STORE "EXTENT NUMBER" (WHEW) @V305001 01167000
  1187. MVC XT100,1(R6) NOW SAVE THE LUB ENTRY @V305001 01168000
  1188. CH R9,=H'3' PROCESSING MULTI-VOL BLOCKS ? @V305066 01169000
  1189. BE XTNTNOEX YES, BYPASS EXTENT INFORMATION @V305066 01170000
  1190. LM R14,R15,3(R6) GET START TRACK NO. & NO. TRACKS @V305001 01171000
  1191. STH R14,XT092 STORE EXTENT LOWER- AND @V305001 01172000
  1192. STH R15,XT094 THE LENGTH OF THE EXTENT @V305001 01173000
  1193. XTNTNOEX CLR R2,R4 ARE WE DOSING 'VSAM' PROCESSING? @V305066 01174000
  1194. BNE XTNTDONE NO - WE'RE ALL DONE HERE. @V305001 01175000
  1195. LA R8,20(,R8) ADV TO NEXT VOL. SERIAL NO. ETC. @V305001 01176000
  1196. XTNTNEXT LA R6,0(R9,R6) AND ADVANCE TO NEXT BLOCK RECORD @V305066 01177000
  1197. BCT R0,XTNTLOOP & GET NEXT BLK OF EXTENT INFO @V305001 01178000
  1198. DROP R8 WHEN ALL EXTENTS PROCESSED ... @V305001 01179000
  1199. XTNTDONE MVC XT054,XT084 FILE SERIAL NO. = 1ST VOL SER NO.@V305001 01180000
  1200. B IODONE2 ALL FINISHED; SET SUCCESS & EXIT @V305001 01181000
  1201. SPACE 01182000
  1202. XTNTNOMO MVI DOSEXTCX,OFF CLEAR CURRENT EXTENT @V305066 01183000
  1203. B IKQLABNF GO SET BITS = "NOT FOUND". @V305001 01184000
  1204. SPACE 01185000
  1205. * NO EXTENT BLOCK - STORE MINIMUM AMOUNT OF DATA WE CAN GET ALONG WITH: 01186000
  1206. GETMINDT MVC XT100,DOSYSXXX STORE THE 2-BYTE "LUB", @V305001 01187000
  1207. CLI DOSDEV,DOSDUM IS THIS DOSCB FOR A DUMMY FILE? @V305066 01188000
  1208. BNE CALLADTL NO, MUST BE DISK THEN.. @V305066 01189000
  1209. MVC XT084,=CL6'DUMMY' SUPPLY A DUMMY LABEL, @V305066 01190000
  1210. MVI XT070,T INDICATE TLBL, @V305066 01191000
  1211. B XTNTDONE AND WE ARE ALL DONE. @V305066 01192000
  1212. CALLADTL LA R1,DOSDSMD-24 POINT TO MODE LETTER @V305066 01193000
  1213. L R15,VCADTLKP FIND THE DISK IT'S ON @VM03093 01194000
  1214. BALR R14,R15 ... @V305001 01195000
  1215. BNZ IODONE2 IF NOT THERE, DON'T STORE VOLID @V305001 01196000
  1216. USING ADTSECT,R1 REFERENCE ADT BRIEFLY @V305001 01197000
  1217. MVC XT084,ADTID STORE VOLUME SERIAL NUMBER @V305001 01198000
  1218. DROP R1 @V305001 01199000
  1219. MVI XT000,EXT1 SHOW ONE EXTENT FOR VSAM @V305066 01200000
  1220. CLI XT070,SAM SEQUENTIAL (SAM) FILE ? @V305066 01201000
  1221. BNE XTNTDONE NO, WE'RE ALL DONE @V305066 01202000
  1222. MVI XT000,LASTEXT X'40' = LAST EXTENT FOR THIS FILE@V305066 01203000
  1223. B XTNTDONE AND WE'RE ALMOST DONE. @V305001 01204000
  1224. SPACE 01205000
  1225. DROP R5 THRU WITH DOSCB HERE. @V305001 01206000
  1226. SPACE 01207000
  1227. IKQXTENT DS 0H CCW-STRING IS OF "SDCCWS" FORM: @V305001 01208000
  1228. * NOTE: R4 NOT EQUAL TO R2. 01209000
  1229. * THIS MEANS "SEQUENTIAL DISK" (NON-VSAM) 01210000
  1230. USING CCWSD1,R4 REF. CCWSD1 AND FOLLOWING CCW'S: @V305001 01211000
  1231. LA R15,HUNDRED4 LOOK FOR BYTE COUNT OF 104 @V305066 01212000
  1232. CH R15,CCWSD8+6 IS READ BYTE-COUNT "CORRECT" ? @V305001 01213000
  1233. BNE IKQLABNG IF NOT, SOMEBODY GOOFED. @V305001 01214000
  1234. CH R14,CCWSD9+6 BYTE-COUNT OF READ-COUNT CCW=05? @V305001 01215000
  1235. BNE IKQLABNG AN ERROR SOMEWHERE IF NOT. @V305001 01216000
  1236. L R5,CCWSD6 PICK UP "SEARCH KEY EQUAL" CCW @V305001 01217000
  1237. ICM R7,MASK7,CCWSD8+1 GET ADDR OF 104 BYTE EXT. RCD @V305066 01218000
  1238. ICM R8,MASK7,CCWSD9+1 AND ADDRESS OF 5 BYTE COUNT @V305066 01219000
  1239. LR R14,R7 ADDR OF 104-BYTE RECORD INTO R14 @V305001 01220000
  1240. SR R1,R1 CLEAR R1; R0 IMMATL; R15 = 104 @V305001 01221000
  1241. MVCL R14,R0 CLEAR 104-BYTE LABEL RECORD @V305001 01222000
  1242. XC 0(5,R8),0(R8) ALSO CLEAR 5-BYTE COUNT @V305001 01223000
  1243. * REMEMBER: R4 IS NOT EQUAL TO R2 01224000
  1244. B IKQLABJN JOIN REGULAR PATH. @V305001 01225000
  1245. SPACE 01226000
  1246. IKQLABNG EQU * CCW-STRING DOESN'T LOOK CORRECT: @V305001 01227000
  1247. SPACE 01228000
  1248. IKQLABNF NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 01229000
  1249. OC CCBERMAP(4),=X'80000C00' SET CCBWAIT+(CE+DE)BITS@V305001 01230000
  1250. DROP R4 @V305066 01231000
  1251. USING LBLCCW,R4 @V305066 01232000
  1252. TM LBLCCW3,MT IS THIS 'MULTI-TRACK' SEARCH ? @V305066 01233000
  1253. BO IKQMTON YES, POST END-OF-CYLINDER THEN...@V305066 01234000
  1254. OI CCBCOM2,CCBNOREC SIGNAL 'NO-RECORD-FOUND' @V305001 01235000
  1255. B EXCPEND AND GET OUT. @V305001 01236000
  1256. IKQMTON OI CCBCOM2,CCBEOC SIGNAL 'END-OF-CYLINDER' @V305066 01237000
  1257. B EXCPEND AND GET OUT. @V305066 01238000
  1258. SPACE 01239000
  1259. DROP R4,R7 DROP LOCAL USAGE; @V305001 01240000
  1260. USING DOSSECT,R11 RESTORE NORMAL DOSCB ADDR'BLITY @V305001 01241000
  1261. EJECT 01242000
  1262. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01243000
  1263. * * 01244000
  1264. * THIS ROUTINE SEARCHES PROPER COMMAND CODE TABLE AND * 01245000
  1265. * GIVES CONTROL TO THE ROUTINE THAT WILL SIMULATE * 01246000
  1266. * THAT I/O REQUEST. * 01247000
  1267. * * 01248000
  1268. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01249000
  1269. SPACE 2 01250000
  1270. IOSRCH CLC IOCCW(1),0(R4) DO WE HAVE A MATCH ? @V305001 01251000
  1271. BE IOFND YES, GO GET ROUTINE @V305001 01252000
  1272. LA R4,4(,R4) BUMP TO NEXT CODE @V305001 01253000
  1273. BCT R5,IOSRCH KEEP LOOKING @V305001 01254000
  1274. B NOCCWC ERROR IF HERE @V305001 01255000
  1275. IOFND L R4,0(,R4) GET ROUTINE ADDRESS @V305001 01256000
  1276. BR R4 GO TO IT @V305001 01257000
  1277. SPACE 2 01258000
  1278. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01259000
  1279. * * 01260000
  1280. * ROUTINE TO CONVERT THE 2-BYTE LOGICAL UNIT IN THE * 01261000
  1281. * CCB TO AN EBCDIC SYSXXX LITERAL. * 01262000
  1282. * * 01263000
  1283. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01264000
  1284. SPACE 2 01265000
  1285. CONVERT SR R5,R5 CLEAR @V305001 01266000
  1286. IC R5,CCBSUNUM GET UNIT NUMBER @V305001 01267000
  1287. TM CCBSUCLS,PROG IS IT PROGRAMMER UNIT? @V305066 01268000
  1288. BO CNVPROG YES, BRANCH @V305001 01269000
  1289. SLL R5,2 MULTIPLY BY 4 @V305001 01270000
  1290. LA R5,SYSTAB(R5) INDEX TO CORRECT XXX @V305001 01271000
  1291. MVC DOSWORK+3(3),0(R5) MOVE XXX TO AREA @V305001 01272000
  1292. CONVERT2 MVC DOSWORK(3),=CL3'SYS' MOVE THE SYS TO AREA @V305001 01273000
  1293. BR R4 RETURN TO CALLER @V305001 01274000
  1294. CNVPROG CVD R5,DOSOSDSN CONVERT UNIT NUMBER @V305001 01275000
  1295. UNPK DOSWORK(6),DOSOSDSN(8) UNPACK TO AREA @V305001 01276000
  1296. OI DOSWORK+5,ZONE SET LAST ZONE @V305066 01277000
  1297. B CONVERT2 GO TO MOVE SYS TO AREA @V305001 01278000
  1298. EJECT 01279000
  1299. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01280000
  1300. * * 01281000
  1301. * EXITS FROM DMSXCP. * 01282000
  1302. * * 01283000
  1303. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01284000
  1304. SPACE 2 01285000
  1305. IODONE2 XC CCBCNT(2),CCBCNT CLEAR RESIDUAL COUNT @V305001 01286000
  1306. IODONE NC CCBERMAP(4),=X'1F050000' TURN OFF PIOCS BITS @V305001 01287000
  1307. IODONE3 EQU * @VA05550 01288000
  1308. OC CCBERMAP(4),=X'80000C00' INIT CCB WITH GOOD I/O @V305001 01289000
  1309. EXCPEND SR R10,R10 ZERO RETURN CODE @V305001 01290000
  1310. XCPOUT LM R12,R1,DOSSAVE RESTORE SAVED REGS @V305001 01291000
  1311. LR R15,R10 RETURN CODE TO R15 @V305001 01292000
  1312. BR R14 RETURN TO DMSDOS @V305001 01293000
  1313. SPACE 2 01294000
  1314. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01295000
  1315. * * 01296000
  1316. * THIS ROUTINE WILL FIND THE PROPER LUB FOR THE UNIT * 01297000
  1317. * SPECIFIED IN THE CCB. IF THE LUB IS ASSIGNED TO * 01298000
  1318. * IGNORE, LABEL IODUM GETS CONTROL. IF THE UNIT IS * 01299000
  1319. * NOT ASSIGNED, AND ERROR MESSAGE IS ISSUED. * 01300000
  1320. * IF ASSIGNED, THE PROPER PUB IS FOUND, AND WE RETURN * 01301000
  1321. * WITH THE ADDRESS OF THE PUB IN R5. * 01302000
  1322. * * 01303000
  1323. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01304000
  1324. SPACE 2 01305000
  1325. GETPUB L R1,ASYSREF GET BGCOM ADDRESS @V305001 01306000
  1326. USING BGCOM,R1 ... @V305001 01307000
  1327. SR R5,R5 CLEAR @V305001 01308000
  1328. IC R5,CCBSUNUM GET LUB INDEX NO. @V305001 01309000
  1329. TM CCBSUCLS,PROG IS IT PROGRAMMER? @V305066 01310000
  1330. BNO SYSTEM NO, BRANCH @V305001 01311000
  1331. LH R6,NICLPT GET NICL POINTER @V305001 01312000
  1332. IC R6,0(,R6) GET NO. SYSTEM UNITS @V305001 01313000
  1333. N R6,=X'000000FF' ISOLATE LAST BYTE @V305001 01314000
  1334. AR R5,R6 ADD NICL TO LUB INDEX @V305001 01315000
  1335. SYSTEM AR R5,R5 LUB INDEX * 2 @V305001 01316000
  1336. AH R5,LUBPT INDEX TO CORRECT LUB @V305001 01317000
  1337. TM 0(R5),FF UNIT ASSIGNED? @V305066 01318000
  1338. BO UNASSGN NO, ERROR @V305001 01319000
  1339. TM 0(R5),FE ASSIGNED TO IGNORE @V305066 01320000
  1340. BO IODUM YES, GO PROCESS @V305001 01321000
  1341. LH R5,0(,R5) LUB ENTRY TO R5 @V305001 01322000
  1342. SRL R5,8 ISOLATE PUB POINTER @V305001 01323000
  1343. SLL R5,3 MULTIPLY BY 8 @V305001 01324000
  1344. AH R5,PUBPT INDEX TO CORRECT PUB @V305001 01325000
  1345. BR R4 RETURN TO CALLER @V305001 01326000
  1346. DROP R1 @V305001 01327000
  1347. EJECT 01328000
  1348. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01329000
  1349. * * 01330000
  1350. * EQUATES AND CONSTANTS * 01331000
  1351. * * 01332000
  1352. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01333000
  1353. SPACE 1 01334000
  1354. * 01335000
  1355. * IMPORTANT CCW FLAGS 01336000
  1356. * 01337000
  1357. CD EQU X'80' @V305001 01338000
  1358. CC EQU X'40' @V305001 01339000
  1359. SILI EQU X'20' @V305001 01340000
  1360. SKIP EQU X'10' @V305001 01341000
  1361. * 01342000
  1362. SPACE 2 01343000
  1363. * ADDITIONAL EQUATES 01344000
  1364. SPACE 2 01345000
  1365. ELEVEN EQU 11 @V305066 01346000
  1366. THREE EQU 3 @V305066 01347000
  1367. T EQU C'T' @V305066 01348000
  1368. EXT1 EQU X'01' @V305066 01349000
  1369. SAM EQU C'S' @V305066 01350000
  1370. LASTEXT EQU X'40' @V305066 01351000
  1371. VSRDCNT EQU X'92' READ COUNT CCW (VSAM SPECIAL) @VA10745 01351500
  1372. VALCCW EQU X'0F' @V305066 01352000
  1373. CONTROL EQU X'03' @V305066 01353000
  1374. RDBKCCW EQU X'0C' @V305066 01354000
  1375. TICCCW EQU X'07' @V305066 01355000
  1376. STATMOD EQU X'60' @V305066 01356000
  1377. STATMOD2 EQU X'01' @V305066 01357000
  1378. WRITECCW EQU X'01' @V305066 01358000
  1379. READSW EQU 1 @V305066 01359000
  1380. DWS4 EQU 4 @V305066 01360000
  1381. CHAINON EQU 1 @V305066 01361000
  1382. READCCW EQU X'C0' @V305066 01362000
  1383. STACKOFF EQU X'C0' @V305066 01363000
  1384. DATAOFF EQU X'20' @V305066 01364000
  1385. OFF EQU X'00' @V305066 01365000
  1386. UPCASE EQU X'E4' @V305066 01366000
  1387. LOWCHK EQU X'08' @V305066 01367000
  1388. LOWCASE EQU X'E2' @V305066 01368000
  1389. DWS20 EQU 20 @V305066 01369000
  1390. MASK7 EQU B'0111' @V305066 01370000
  1391. CARRRET EQU X'00' @V305066 01371000
  1392. NOCARRET EQU 128 @V305066 01372000
  1393. B EQU C'B' @V305066 01373000
  1394. ON EQU X'01' @V305066 01374000
  1395. H0C EQU X'0C' @V305066 01375000
  1396. ZONE EQU X'F0' @V305066 01376000
  1397. USERMODE EQU X'00' @V305066 01377000
  1398. FILEPROT EQU X'02' @V305066 01378000
  1399. INDEX2 EQU 2 LOCATES TRK/CYL FOR 3330'S @V505098 01379000
  1400. INDEX4 EQU 4 LOCATES TRK/CYL FOR 3340'S @V505098 01380000
  1401. INDEX6 EQU 6 LOCATES TRK/CYL FOR 3350 @V505098 01381000
  1402. EIGHTY1 EQU 81 @V305066 01382000
  1403. FIXED EQU X'02' @V305066 01383000
  1404. UNDEF EQU X'04' @V305066 01384000
  1405. INP EQU X'02' @V305066 01385000
  1406. REC1 EQU 1 @V305066 01386000
  1407. CCWE0 EQU X'E0' @V305066 01387000
  1408. WRITEFLG EQU 1 @V305066 01388000
  1409. F5 EQU X'F5' @V305066 01389000
  1410. HEX17 EQU X'17' @V305066 01390000
  1411. TRACK EQU X'02' @V305066 01391000
  1412. MASK12 EQU B'1100' @V305066 01392000
  1413. DATACHK EQU X'08' @V305066 01393000
  1414. HF0 EQU X'F0' @V305066 01394000
  1415. HEX0C EQU X'0C' @V305066 01395000
  1416. ALT EQU X'01' @V305066 01396000
  1417. HEAD30 EQU 30 @V505098 01397000
  1418. HEAD19 EQU 19 @V305066 01398000
  1419. HEAD11 EQU 11 @V305066 01399000
  1420. ENDCYL EQU X'20' @V305066 01400000
  1421. SIX EQU 6 @V305066 01401000
  1422. FIVE EQU 5 @V305066 01402000
  1423. FOUR EQU 4 @V305066 01403000
  1424. CON5 EQU 5 @V305066 01404000
  1425. CON512 EQU 512 @V305066 01405000
  1426. ID1 EQU C'1' @V305066 01406000
  1427. VOLSEQ1 EQU X'01' @V305066 01407000
  1428. BINZERO EQU X'00' @V305066 01408000
  1429. EXTYP EQU X'01' @V305066 01409000
  1430. MASK1 EQU B'0001' @V305066 01410000
  1431. HUNDRED4 EQU 104 @V305066 01411000
  1432. PROG EQU X'01' @V305066 01412000
  1433. FF EQU X'FF' @V305066 01413000
  1434. FE EQU X'FE' @V305066 01414000
  1435. ONE EQU 1 @V305066 01415000
  1436. CON179 EQU 179 @V305066 01416000
  1437. DTFSD EQU X'20' DTFSD FILE @VM03081 01417000
  1438. SDWORK EQU X'24' DTFSD OPEN WORKFILE @VM03081 01418000
  1439. BLOCK EQU X'40' BLOCKED FILE @VM03081 01419000
  1440. CPSD EQU X'08' DTFCP HAS TIC CCW IN DTF @VA04510 01420000
  1441. IPTLUB DC H'1' LUB VALUE FOR SYSIPT @VM03090 01421000
  1442. SDWORKF EQU X'20' SD WORK FILE BIT ONLY @VA06022 01422000
  1443. VAR DC C'V' COMPARE CONSTANT FOR DOSFORM @VA06022 01423000
  1444. EJECT 01424000
  1445. * 01425000
  1446. * TRACKS / CYLINDER FOR SUPPORTED DASD DEVICES 01426000
  1447. * 01427000
  1448. CON2314 DC H'20' TRACKS/CYL @V305001 01428000
  1449. CON3330 DC H'19' TRACKS/CYL (3330 & 3330-11) @V505098 01429000
  1450. CON3340 DC H'12' TRACKS/CYL @V305001 01430000
  1451. CON3350 DC H'30' TRACKS/CYL @V505098 01431000
  1452. * 01432000
  1453. T2314 EQU X'62' 2314 DASD TYPE @V305001 01433000
  1454. T3330 EQU X'63' 3330 DASD TYPE @V305001 01434000
  1455. T3340 EQU X'68' 3340 DASD TYPE @V305001 01435000
  1456. T333B EQU X'65' 3330-11 DASD TYPE @V505098 01436000
  1457. T3350 EQU X'67' 3350 DASD TYPE @V505098 01437000
  1458. * 01438000
  1459. EIGHT EQU X'08' DOS PRINTER INDICATOR @V305066 01439000
  1460. F7 EQU X'F7' MASK TO CLEAR DOS PRT FLAG @VM03055 01440000
  1461. * 01441000
  1462. NOPIOCS DC X'1F050040' ALLOW INCORRECT LENGTH @VA05550 01442000
  1463. * 01443000
  1464. * COMMANDS AND FUNCTIONS FOR CMS PLISTS 01444000
  1465. * 01445000
  1466. PIOSI DC CL8'DMSPIOSI' COMMANDS @V305001 01446000
  1467. CARDRD DC CL8'CARDRD' COMMANDS @V305001 01447000
  1468. CARDPH DC CL8'CARDPH' COMMANDS @V305001 01448000
  1469. CONRD DC CL8'CONREAD' COMMANDS @V305001 01449000
  1470. CONWR DC CL8'TYPLIN' COMMANDS @V305001 01450000
  1471. RDBUF DC CL8'RDBUF' COMMANDS @V305001 01451000
  1472. WRBUF DC CL8'WRBUF' COMMANDS @V305001 01452000
  1473. SYS DC CL8'SYS' SYSTEM WORK FILE TYPE @VA07764 01453000
  1474. * 01454000
  1475. * ERROR MESSAGE CONSTANTS 01455000
  1476. * 01456000
  1477. TAPE DC CL8'TAPE' ... @V305001 01457000
  1478. DISK DC CL8'DISK' ... @V305001 01458000
  1479. INPUT DC CL8'INPUT' ... @V305001 01459000
  1480. OUTPUT DC CL8'OUTPUT' ... @V305001 01460000
  1481. READING DC CL8'READING' ... @V305001 01461000
  1482. WRITING DC CL8'WRITING' ... @V305001 01462000
  1483. EJECT 01463000
  1484. * 01464000
  1485. * SYSXXX CONSTANTS FOR SYSTEM LOGICAL UNITS 01465000
  1486. * 01466000
  1487. SYSTAB DS 0H @V305001 01467000
  1488. DC CL4'RDR' 00 @V305001 01468000
  1489. DC CL4'IPT' 01 @V305001 01469000
  1490. DC CL4'PCH' 02 @V305001 01470000
  1491. DC CL4'LST' 03 @V305001 01471000
  1492. DC CL4'LOG' 04 @V305001 01472000
  1493. DC CL4'LNK' 05 @V305001 01473000
  1494. DC CL4'RES' 06 @V305001 01474000
  1495. DC CL4'SLB' 07 @V305001 01475000
  1496. DC CL4'RLB' 08 @V305001 01476000
  1497. DC CL4'USE' 09 @V305001 01477000
  1498. DC CL4'REC' 0A @V305001 01478000
  1499. DC CL4'CLB' 0B @V305001 01479000
  1500. DC CL4'VIS' 0C @V305001 01480000
  1501. DC CL4'CAT' 0D @V305001 01481000
  1502. SPACE 2 01482000
  1503. * 01483000
  1504. * DUMMY CCWS 01484000
  1505. * 01485000
  1506. NOOP CCW NOP,0,SILI,ONE NO-OP FOR DMSPIOSI CALL @V305066 01486000
  1507. MDSET CCW CON179,0,CC+SILI,ONE DEFAULT MODE SET CCW @V305066 01487000
  1508. CCW TIC,0,0,0 TIC TO USER CCW CHAIN @V305001 01488000
  1509. EJECT 01489000
  1510. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01490000
  1511. * * 01491000
  1512. * CONSOLE CCW CODES * 01492000
  1513. * * 01493000
  1514. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01494000
  1515. SPACE 2 01495000
  1516. CNCODES DC AL1(10),AL3(CNREAD) - READ INQUIRY @V305001 01496000
  1517. DC AL1(2),AL3(CNREAD) - READ READER 2 @V305001 01497000
  1518. DC AL1(9),AL3(CNWRITE1) - WRITE, AUTO CARR @V305001 01498000
  1519. DC AL1(1),AL3(CNWRITE2) - WRITE, NO AUTO CARR @V305001 01499000
  1520. DC AL1(3),AL3(CNEXIT) - NO-OP @V305001 01500000
  1521. DC AL1(4),AL3(CNEXIT) - SENSE @V305001 01501000
  1522. DC AL1(11),AL3(CNEXIT) - ALARM @V305001 01502000
  1523. ENDCNC EQU (*-CNCODES)/4 @V305001 01503000
  1524. SPACE 2 01504000
  1525. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01505000
  1526. * * 01506000
  1527. * CARD / PUNCH CCW CODES * 01507000
  1528. * * 01508000
  1529. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01509000
  1530. SPACE 2 01510000
  1531. CDCODES DC AL1(2),AL3(CDREAD) CARD - READ, FEED, SS @V305001 01511000
  1532. DC AL1(10),AL3(CDREAD) CARD - READ, FEED, SS @V305001 01512000
  1533. DC AL1(1),AL3(CDPUNCH) CARD PUNCH,FEED,SS @VA08678 01512100
  1534. DC AL1(4),AL3(CDEXIT) CARD - SENSE @V305001 01513000
  1535. DC AL1(17),AL3(CDEXIT) CARD - WRITE RCE @V305001 01514000
  1536. DC AL1(49),AL3(CDEXIT) CARD - WRITE OMR @V305001 01515000
  1537. DC AL1(194),AL3(CDREAD) CARD - READ @V305001 01516000
  1538. DC AL1(204),AL3(CDREAD) CARD - READ @V305001 01517000
  1539. DC AL1(210),AL3(CDREAD) CARD - READ, FEED @V305001 01518000
  1540. DC AL1(3),AL3(CDEXIT) CARD - FEED, SS @V305001 01519000
  1541. DC AL1(11),AL3(CDEXIT) CARD - FEED, SS @V305001 01520000
  1542. DC AL1(9),AL3(CDEXIT) CARD - PNCH,FEED,SS,READ@V305001 01521000
  1543. ENDCDC EQU (*-CDCODES)/4 LENGTH OF CDCODES @VA08678 01523100
  1544. ASDCODES DC A(SDCODES) ADDRESS OF SDCODES TABLE @VA08678 01523200
  1545. EJECT 01524000
  1546. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01525000
  1547. * * 01526000
  1548. * DASD CCW CODES * 01527000
  1549. * * 01528000
  1550. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01529000
  1551. SPACE 2 01530000
  1552. * 0 1 2 3 4 5 6 7 8 9 A B C D E F 01531100
  1553. SDCODES DC X'00,18,04,04,04,1C,10,04,20,00,00,04,00,1C,10,04' 00 01531200
  1554. DC X'00,04,0C,04,00,04,04,04,20,04,04,04,00,18,14,04' 10 01531300
  1555. DC X'00,00,04,04,04,04,00,04,20,04,00,04,00,04,00,00' 20 01531400
  1556. DC X'00,08,00,00,00,04,00,00,20,04,00,00,00,00,00,00' 30 01531500
  1557. DC X'00,00,00,00,04,04,00,00,20,04,00,00,00,04,00,00' 40 01531600
  1558. DC X'00,08,00,04,00,04,00,00,20,00,00,00,00,00,00,00' 50 01531700
  1559. DC X'00,00,00,00,00,04,00,00,20,04,00,00,00,04,00,00' 60 01531800
  1560. DC X'00,00,00,04,00,04,00,00,20,00,00,00,00,00,00,00' 70 01531900
  1561. * 0 1 2 3 4 5 6 7 8 9 A B C D E F 01532000
  1562. DC X'00,00,00,08,00,00,10,04,20,00,00,00,00,00,10,00' 80 01532100
  1563. DC X'00,00,0C,00,04,00,04,00,20,00,04,00,00,00,14,00' 90 01532200
  1564. DC X'00,00,00,00,04,04,00,00,20,04,00,00,00,04,00,00' A0 01532300
  1565. DC X'00,08,00,00,04,04,00,00,20,04,00,00,00,00,00,00' B0 01532400
  1566. DC X'00,00,00,00,00,04,00,00,20,04,00,00,00,04,00,00' C0 01532500
  1567. DC X'00,08,00,00,00,04,00,00,20,00,00,00,00,00,00,00' D0 01532600
  1568. DC X'00,00,00,00,00,04,00,00,20,04,00,00,00,04,00,00' E0 01532700
  1569. DC X'00,08,00,00,00,04,00,00,20,00,00,00,00,00,00,00' F0 01532800
  1570. * 0 1 2 3 4 5 6 7 8 9 A B C D E F 01532900
  1571. EJECT 01608000
  1572. LTORG @V305001 01609000
  1573. EJECT 01610000
  1574. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01611000
  1575. * * 01612000
  1576. * ERROR MESSAGES * 01613000
  1577. * * 01614000
  1578. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01615000
  1579. SPACE 2 01616000
  1580. ERR43E BAL R4,GETPUB GO FIND PUB FOR THIS UNIT @V305001 01617000
  1581. USING PUBADR,R5 @V305001 01618000
  1582. LH R7,PUBCUU GET CUU FOR THIS UNIT @V305001 01619000
  1583. DROP R5 @V305001 01620000
  1584. DMSERR TEXT='TAPE (....) IS FILE PROTECTED',NUM=43,LET=E, *01621000
  1585. SUB=(HEX,(R7)) @V305001 01622000
  1586. LA R10,36 RETURN CODE @V305001 01623000
  1587. B XCPOUT CANCEL THE JOB @V305001 01624000
  1588. EJECT 01625000
  1589. USING ADTSECT,R1 @VM03127 01626000
  1590. NOTRW LA R6,ADTM @VM03127 01627000
  1591. L R7,ADTDTA @VM03127 01628000
  1592. LH R7,0(,R7) @VM03127 01629000
  1593. DMSERR TEXT='OUTPUT DISK ''.. (...)'' IS READ/ONLY', @VM03127*01630000
  1594. LET=E,NUM=37,SUB=(CHARA,((R6),1),HEX,(R7)),MF=(E,'SYS') 01631000
  1595. LA R10,36 @VM03127 01632000
  1596. B XCPOUT @VM03127 01633000
  1597. DROP R1 @VM03127 01634000
  1598. EJECT 01635000
  1599. ERR113S LR R15,R6 SAVE SUB. 1 FOR NOW... @VM03055 01636000
  1600. BAL R4,GETPUB GO FIND PUB FOR THIS UNIT @VM03055 01637000
  1601. LR R6,R15 RESTORE SUB. 1 POINTER. @VM03055 01638000
  1602. USING PUBADR,R5 @V305001 01639000
  1603. LH R7,PUBCUU GET CUU FOR THIS UNIT @V305001 01640000
  1604. DROP R5 @V305001 01641000
  1605. DMSERR TEXT='.... (....) NOT ATTACHED',NUM=113,LET=S, @V305001*01642000
  1606. MF=(E,'SYS'),SUB=(CHARA,(R6),HEX,(R7)) @V305001 01643000
  1607. CANCEL LA R10,100 RETURN CODE @V305001 01644000
  1608. B XCPOUT CANCEL THE JOB @V305001 01645000
  1609. EJECT 01646000
  1610. ERR104S LA R8,READING ERR MSG OPERATION @V305001 01647000
  1611. LA R9,104 ERR MSG NUMBER @V305001 01648000
  1612. B ERRCOMM GO TYPE MSG @V305001 01649000
  1613. ERR105S LA R8,WRITING ERR MSG OPERATION @V305001 01650000
  1614. LA R9,105 ERR MSG NUMBER @V305001 01651000
  1615. ERRCOMM LR R6,R15 SAVE RDBUF/WRBUF RETURN CODE @V305001 01652000
  1616. LA R7,DOSDSNAM POINT TO FILEID @V305001 01653000
  1617. DMSERR TEXT='ERROR ''..'' ........ FILE ''....................*01654000
  1618. '' ON DISK',NUM=(R9),LET=S,MF=(E,'SYS'), @V305001*01655000
  1619. SUB=(DEC,(R6),CHARA,(R8),CHAR8A,(R7)) @V305001 01656000
  1620. B CANCEL CANCEL THE JOB @V305001 01657000
  1621. EJECT 01658000
  1622. IOERR LA R6,INPUT MSG SUBSTITUTION @V305001 01659000
  1623. LTR R4,R4 DOING READ ? @V305001 01660000
  1624. BZ ERR411S YES, BRANCH @V305066 01661000
  1625. B OUTERR IS WRITING THEN... @V305001 01662000
  1626. INERR LA R6,INPUT MSG SUBSTITUTION @V305001 01663000
  1627. CLC DOSOP(8),CARDRD DOING CARDIO READ ? @V305001 01664000
  1628. BE ERR411S YES, BRANCH @V305066 01665000
  1629. OUTERR LA R6,OUTPUT MSG SUBSTITUTION @V305001 01666000
  1630. ERR411S LR R7,R15 CODE 'NN' TO R7 @V305066 01667000
  1631. BAL R4,CONVERT GET SYSXXX LITERAL @V305001 01668000
  1632. DMSERR TEXT='........ ERROR CODE ''..'' ON ''......''', *01669000
  1633. NUM=411,LET=S,MF=(E,'SYS'), @V305066*01670000
  1634. SUB=(CHARA,(R6),DEC,(R7),CHARA,DOSWORK) @V305001 01671000
  1635. B CANCEL CANCEL THE JOB @V305001 01672000
  1636. EJECT 01673000
  1637. NOCCWA LA R6,1 NN CODE @V305001 01674000
  1638. B ERRMSG TYPE MSG @V305001 01675000
  1639. UNASSGN LA R6,2 NN CODE @V305001 01676000
  1640. L R14,DOSSAVE+4 RECOVER 'R13' AT INPUT @V305001 01677000
  1641. USING SSAVE,R14 AND REFERENCE SAVE AREA BRIEFLY @V305001 01678000
  1642. L R15,CALLER GET ADDR OF 'CALLER' (AS OLDPSW) @V305001 01679000
  1643. CL R15,ADIKQLAB IS HE PERCHANCE 'IKQLAB' ? @V305001 01680000
  1644. BL ERRMSG NO, ISSUE ERROR MSG THEN... @V305001 01681000
  1645. CL R15,NDIKQLAB LOOKS PROMISING, CHECK FURTHER: @V305001 01682000
  1646. BL IKQLAB YES, MUST HANDLE SPECIALLY. @V305001 01683000
  1647. DROP R14 NO, CONTINUE: @V305001 01684000
  1648. B ERRMSG TYPE MSG @V305001 01685000
  1649. UNSUPP LA R6,3 NN CODE @V305001 01686000
  1650. B ERRMSG TYPE MSG @V305001 01687000
  1651. INVCCW LA R6,4 NN CODE @V305001 01688000
  1652. B ERRMSG TYPE MSG @V305001 01689000
  1653. NOADT LA R6,5 NN CODE @V305001 01690000
  1654. B ERRMSG TYPE MSG @V305001 01691000
  1655. NOTUSED LA R6,6 (THIS CODE OPEN FOR FUTURE USE) @VM03127 01692000
  1656. B ERRMSG TYPE MSG @V305001 01693000
  1657. NOCCWC LA R6,7 NN CODE @V305001 01694000
  1658. B ERRMSG TYPE MSG @V305001 01695000
  1659. NOTDOSOS LA R6,8 NN CODE @V305001 01696000
  1660. SPACE 1 01697000
  1661. ERRMSG BAL R4,CONVERT CONVERT 2 BYTE UNIT @V305001 01698000
  1662. DMSERR TEXT='UNEXPECTED ERROR CODE ''..'' ON ''......''', *01699000
  1663. NUM=161,LET=S,MF=(E,'SYS'),SUB=(DEC,(R6),CHARA,DOSWORK) 01700000
  1664. B CANCEL CANCEL THE JOB @V305001 01701000
  1665. EJECT 01702000
  1666. LTORG @V305001 01703000
  1667. EJECT 01704000
  1668. DMSCCB , DSECT TO MAP A CCB: @V305001 01705000
  1669. EJECT 01706000
  1670. * FORM OF CHANNEL PROGRAMS USED BY 'IKQLAB': 01707000
  1671. SPACE 01708000
  1672. LBLCCW DSECT , CCW-STG TO FIND LABEL INFO RECORD BY KEY: @V305001 01709000
  1673. DS 2D CCB IMMED PRECEDES THE CCW-STG: @V305001 01710000
  1674. LBLCCW1 CCW SEEK,X40,CC+SILI,6 SEEK TO CYLDR AND HEAD @V305001 01711000
  1675. LBLCCW2 CCW SHHA,X42,CC+SILI,4 SEARCH HOME ADDR F/MULT TRK @V305001 01712000
  1676. LBLCCW3 CCW SRCHK,X48,CC+SILI,8 SEARCH KEY EQUAL @V305001 01713000
  1677. LBLCCW4 CCW TIC,*-8,CC+SILI,1 TIC BACK TO SCHKE @V305001 01714000
  1678. LBLCCW5 CCW RDDT,*-*,CC+SILI,512 $ READ LABEL RECORD @V305001 01715000
  1679. LBLCCW6 CCW RDCNT+MT,XA8,SILI,5 $ READ CNT OF NEXT RCD(MT)@V305001 01716000
  1680. * 01717000
  1681. X40 DS 8X SEEK ARGUMENT @V305001 01718000
  1682. X42 EQU X40+2 SEARCH HOME ADDRESS ARGUMENT@V305001 01719000
  1683. X48 DS 8X SEARCH KEY EQUAL ARG = ACB NAME @V305001 01720000
  1684. ORG LBLCCW+X'A8' @V305001 01721000
  1685. XA8 DS 5X READ COUNT ARGUMENT @V305001 01722000
  1686. * 01723000
  1687. SEEK EQU X'07' $ FULL SEEK @V305001 01724000
  1688. SHHA EQU X'39' $ SEARCH HOME ADDRESS EQUAL @V305001 01725000
  1689. SRCHK EQU X'29' $ SEARCH KEY EQUAL @V305001 01726000
  1690. TIC EQU X'08' $ TIC @V305001 01727000
  1691. RDDT EQU X'06' $ READ DATA @V305001 01728000
  1692. RDCNT EQU X'12' $ READ COUNT @V305001 01729000
  1693. RDHOME EQU X'1A' $ READ HOME ADDRESS @V305001 01730000
  1694. RDREC0 EQU X'16' $ READ RECORD ZERO @V305001 01731000
  1695. MT EQU X'80' MULTI-TRACK BIT IN CMND CODE@V305001 01732000
  1696. SPACE 2 01733000
  1697. SDCCWS DSECT , CCW-STG TO READ IN AN EXTENT RCD:@V305001 01734000
  1698. DB104 DS 104X 104-BYTE DATA-BUFFER PRECEDES CCW-STG@V305001 01735000
  1699. CCWSD1 CCW SEEK,*-*,CC+SILI,6 (X40) SEEK TO CYL AND HEAD@V305001 01736000
  1700. CCWSD2 CCW SHHA,*-*,CC+SILI,4 (X42) SEARCH HOME ADDRESS @V305001 01737000
  1701. CCWSD3 CCW TIC,*-8,CC+SILI,1 TIC BACK TO SHHA @V305001 01738000
  1702. CCWSD4 CCW SIDE,*-*,CC+SILI,8 (X42) SEARCH ID EQUAL @V305001 01739000
  1703. CCWSD5 CCW TIC,*-8,CC+SILI,1 TIC BACK TO SEARCH ID EQUAL @V305001 01740000
  1704. CCWSD6 CCW SRCHK,*-*,CC+SILI,8 (X48) SEARCH KEY EQUAL @V305001 01741000
  1705. CCWSD7 CCW TIC,*-8,CC+SILI,1 TIC BACK TO SEARCH KEY EQUAL@V305001 01742000
  1706. CCWSD8 CCW RDDT,DB104,CC+SILI,104 $ READ EXTENT RECORD @V305001 01743000
  1707. CCWSD9 CCW RDCNT+MT,*-*,SILI,5 (XA8) $ READ CNT OF NXT RCD @V305001 01744000
  1708. CCW NOP,0,SILI,1 NO-OP @V305001 01745000
  1709. CCW NOP,0,SILI,1 NO-OP @V305001 01746000
  1710. * 01747000
  1711. SIDE EQU X'31' SEARCH ID EQUAL @V305001 01748000
  1712. NOP EQU X'03' NO-OP COMMAND CODE @V305001 01749000
  1713. SPACE 01750000
  1714. * '$' IS A REMINDER THAT DATA IS READ INTO CALLER'S STORAGE BY THIS CCW 01751000
  1715. EJECT 01752000
  1716. LABXTREC DSECT , CONTENTS OF LABEL INFO OR EXTENT RCD: @V305001 01753000
  1717. * FIRST 84 BYTES: 01754000
  1718. XT000 DS XL1 DLBL EXTENT FLAG BYTE @V305001 01755000
  1719. XT001 DS CL7 FILENAME @V305001 01756000
  1720. XT008 DS XL1 DAM/ISAM SWITCH @V305001 01757000
  1721. XT009 DS CL44 FILE ID @V305001 01758000
  1722. XT053 DS XL1 FORMAT ID @V305001 01759000
  1723. XT054 DS XL6 FILE SERIAL NUMBER @V305001 01760000
  1724. XT060 DS XL2 VOLUME SEQUENCE NUMBER @V305001 01761000
  1725. XT062 DS XL3 CREATION DATE (4004 B.C. ?) @V305001 01762000
  1726. XT065 DS XL3 EXPIRATION DATE @V305001 01763000
  1727. XT068 DS XL2 RESERVED @V305001 01764000
  1728. XT070 DS XL1 OPEN CODE @V305001 01765000
  1729. XT071 DS XL13 SYSTEM CODE @V305001 01766000
  1730. ORG XT071 CONTENTS OF "SYSTEM CODE" FIELD: @V305001 01767000
  1731. XTUCNAM DS CL8' ' USER CATALOG NAME @V305001 01768000
  1732. DS XL1 RESERVED @V305001 01769000
  1733. XTBUFSP DS F'-1' BUFFER SPACE @V305001 01770000
  1734. * NEXT 20 BYTES (SEE NOTE BELOW): 01771000
  1735. XT084 DS CL6 VOLUME SERIAL NUMBER @V305001 01772000
  1736. XT090 DS XL1 EXTENT TYPE @V305001 01773000
  1737. XT091 DS XL1 EXTENT SEQUENCE NUMBER @V305001 01774000
  1738. XT092 DS XL2 EXTENT LOWER LIMIT (REL TRACK) @V305001 01775000
  1739. XT094 DS XL2 LENGTH OF THE EXTENT (NO. TRACKS)@V305001 01776000
  1740. XT096 DS XL4 EXTENT UPPER LIMIT @V305001 01777000
  1741. XT100 DS XL2 LOGICAL (SYMBOLIC) UNIT ADDRESS @V305001 01778000
  1742. XT102 DS XL1 2321 LOWER CELL @V305001 01779000
  1743. XT103 DS XL1 2321 UPPER CELL @V305001 01780000
  1744. SPACE 01781000
  1745. * NOTE: FOR SAM FILES, A COMPLETE 104-BYTE BLOCK IS REPEATED FOR 01782000
  1746. * EACH NEW EXTENT. FOR DAM, VSAM, AND ISAM FILES, ONLY THE 01783000
  1747. * FIELDS FROM THE VOLUME SERIAL NUMBER (XT084) THRU THE 01784000
  1748. * LOGICAL (SYMBOLIC) UNIT ADDRESS (XT100) ARE REPEATED. 01785000
  1749. EJECT 01786000
  1750. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01787000
  1751. * * 01788000
  1752. * DSECT TO MAP A CCW * 01789000
  1753. * * 01790000
  1754. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01791000
  1755. SPACE 2 01792000
  1756. IOCCW DSECT @V305001 01793000
  1757. IOSW DS X @V305001 01794000
  1758. IOBUF DS XL3 @V305001 01795000
  1759. IOLEN1 DS XL2 @V305001 01796000
  1760. IOLEN2 DS XL2 @V305001 01797000
  1761. SPACE 2 01798000
  1762. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01799000
  1763. * * 01800000
  1764. * DSECT TO MAP A PUB ENTRY * 01801000
  1765. * * 01802000
  1766. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01803000
  1767. SPACE 2 01804000
  1768. MAPPUB @V305001 01805000
  1769. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01806000
  1770. * * 01807000
  1771. * WORK AREA FOR ALTERNATE TRACK SUPPORT. * 01808000
  1772. * CONTAINS CCWS AND DATA AREAS TO READ * 01809000
  1773. * HOME ADDRESS AND RECORD ZERO. * 01810000
  1774. * * 01811000
  1775. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01812000
  1776. SPACE 2 01813000
  1777. ALTWORK DSECT @V305001 01814000
  1778. EDCCW0 CCW SEEK,0,CC,6 SEEK TO NEW HEAD @V305001 01815000
  1779. EDCCW1 CCW RDHOME,0,CC+SILI,5 READ HOME ADDRESS @V305001 01816000
  1780. EDCCW2 CCW RDREC0,0,SILI,4 READ RECORD ZERO @V305001 01817000
  1781. SPACE 1 01818000
  1782. EDCCW3 CCW SEEK,0,CC,6 SEEK TO HOME ADDRESS @V305001 01819000
  1783. EDCCW4 CCW SHHA,0,CC+SILI,4 SEARCH HOME ADDRESS EQUAL @V305001 01820000
  1784. EDCCW5 CCW TIC,0,0,0 TIC TO SEARCH @V305001 01821000
  1785. EDCCW6 CCW RDHOME,0,CC+SKIP,5 READ HOME ADDRESS @V305001 01822000
  1786. EDCCW7 CCW TIC,0,0,0 TIC TO USER CCW CHAIN @V305001 01823000
  1787. SPACE 1 01824000
  1788. EDNH DC 3H'0' SEEK TO NEW HEAD BBCCHHR @V305001 01825000
  1789. EDHA DC 3H'0' READ HOME ADDRESS AREA @V305001 01826000
  1790. EDSA DC 1H'0' BBCCHHR TO SEEK HOME ADDRESS@V305001 01827000
  1791. EDR0 DC 2H'0' READ RECORD ZERO AREA @V305001 01828000
  1792. EJECT 01829000
  1793. NUCON @V305001 01830000
  1794. DOSCB @V305001 01831000
  1795. BGCOM @V305001 01832000
  1796. ADT @V305001 01833000
  1797. FSTB @VA07764 01834000
  1798. CMSAVE @V305001 01835000
  1799. REGEQU @V305001 01836000
  1800. DMSXCP CSECT @V305001 01837000
  1801. INDEX EQU (DOSSAVE-DOSINIT) @V305001 01838000
  1802. LTORG @V305001 01839000
  1803. END 01840000