Table of Contents

DMKRSP Source

References

Source Listing

DMKRSP.ASSEMBLE.txt
  1. RSP TITLE 'DMKRSP (CP) VM/370 - RELEASE 6' 00001000
  2. *. 00002000
  3. * 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKRSP 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * TO MANAGE ALL SPOOLING OPERATIONS ON THE REAL SYSTEM UNIT 00010000
  11. * RECORD DEVICES, INCLUDING PRINTING AND PUNCHING USER-CREATED 00011000
  12. * SPOOL FILES AND READING AND QUEUEING UP READER FILES 00012000
  13. * FROM THE REAL CARD READER(S). 00013000
  14. * 00014000
  15. * ATTRIBUTES - 00015000
  16. * 00016000
  17. * RESIDENT, REENTRANT, ENTERED VIA GOTO 00017000
  18. * 00018000
  19. * ENTRY POINTS - 00019000
  20. * 00020000
  21. * DMKRSPEX - ENTERED VIA A GOTO WHEN DMKDSPCH UNSTACKS AN 00021000
  22. * IOBLOK WITH AN INTERRUPT FOR SPOOLING UNIT 00022000
  23. * RECORD DEVICE 00023000
  24. * DMKRSPUR - TO FORMAT ACTIVE FILE MESSAGE 00024000
  25. * DMKRSPER - ENTERED FROM DMKIOS FOR SPOOLING IO ERRORS 00025000
  26. * 00026000
  27. * ENTRY POINTS - DATA POINTERS 00027000
  28. * 00028000
  29. * DMKRSPRD - THE ANCHOR FOR THE CHAIN OF SFBLOKS FOR ALL 00029000
  30. * READER FILES WAITING TO BE PROCESSED 00030000
  31. * DMKRSPPR - THE ANCHOR FOR PRINTER FILE CHAIN 00031000
  32. * DMKRSPPU - THE ANCHOR FOR THE PUNCH FILE CHAIN 00032000
  33. * DMKRSPAC - THE ANCHOR FOR ALL ACCOUNTING CARD BUFFERS THAT 00033000
  34. * ARE WAITING TO BE PUNCHED 00034000
  35. * DMKRSPDL - THE ANCHOR FOR SPOOL FILE DELETE CHAIN 00035000
  36. * DMKRSPID - SPOOL FILE ID COUNTER 00036000
  37. * DMKRSPCV - TIME OF DAY CLOCK VALUE USED BY DMKCKP 00037000
  38. * DMKRSPHQ - THE ANCHOR FOR SYSTEM HOLD QUEUE 00038000
  39. * DMKRSP83 - RESET CCW FOR 3811 PRINTER CONTROL UNIT 00039000
  40. * DMKRSPMN - ACTIVE MONITOR SFBLOK ADDRESS 00039100
  41. * 00040000
  42. * ENTRY CONDITIONS - 00041000
  43. * 00042000
  44. * GPR10 = ADDRESS OF IOBLOK CONTAINING THE INTERRUPT 00043000
  45. * GPR12 = MODULE ADDRESSABILITY 00044000
  46. * 00045000
  47. * NOTE THAT SINCE DMKRSPEX IS ENTERED VIA A GOTO, NO STANDARD 00046000
  48. * SAVEAREA IS AVAILABLE AND THE ENTER AND EXIT MACROS 00047000
  49. * MAY NOT BE USED 00048000
  50. * 00049000
  51. * EXIT CONDITIONS - 00050000
  52. * 00051000
  53. * NORMAL - 00052000
  54. * DMKRSP IS COMPLETELY INTERRUPT DRIVEN, AND EXITS ONLY TO 00053000
  55. * DMKDSPCH VIA A GOTO TO AWAIT INTERRUPTS ASSOCIATED WITH 00054000
  56. * UNIT RECORD FILE PROCESSING, OR DEVICE ENDS ASSOCIATED WITH 00055000
  57. * DEVICES THAT ARE MADE READY FOR INPUT OR OUTPUT 00056000
  58. * 00057000
  59. * ERROR - 00058000
  60. * 00059000
  61. * SEE ERROR MESSAGES 00060000
  62. * 00061000
  63. EJECT 00062000
  64. * CALLS TO OTHER ROUTINES - 00063000
  65. * 00064000
  66. * DMKCSOSD - TO START A OTHER OUTPUT DEVICE FOR REQUEUE 00065000
  67. * DMKPGTSG - TO OBTAIN DASD PAGE RECORDS FOR READER FILES 00066000
  68. * DMKPGTVG - TO OBTAIN SPOOL BUFFER SPACE IN VIRTUAL MEMORY 00067000
  69. * DMKPGTVR - TO RELEASE VIRTUAL BUFFER SPACE 00068000
  70. * DMKUDRFU - TO VERIFY THE VALDITY OF THE USERID ON THE ID CARD 00069000
  71. * FOR THE REAL CARD READER 00070000
  72. * DMKSCNFD - TO LOCATE THE PARAMETERS ON THE USERID CARD 00071000
  73. * DMKSPLOR - TO PERFORM INPUT INITIALIZATION FOR READER FILES 00072000
  74. * DMKSPLCR - TO CLOSE OFF AND QUEUE UP READER FILES FOR VIRTUAL 00073000
  75. * MACHINE PROCESSING 00074000
  76. * DMKSCNRU - TO LOCATE THE RDEVBLOK FOR THE UNIT RECORD DEVICE 00075000
  77. * CAUSING THE INTERRUPT 00076000
  78. * DMKSPLDL - TO PURGE PARTIALLY COMPLETE FILES 00077000
  79. * DMKSEPSP - TO PRINT OUTPUT SEPARATOR PAGES 00078000
  80. * DMKRPAGT - TO READ SPOOL FILE PAGES INTO VIRTUAL MEMORY 00079000
  81. * DMKRPAPT - TO WRITE SPOOL FILE PAGES FROM VIRTUAL MEMORY TO 00080000
  82. * DASD SECONDARY STORAGE 00081000
  83. * DMKSTKCP - TO STACK A CPEXBLOK 00082000
  84. * DMKIOSQR - TO REQUEST SIO PROCESSING FOR THE UNIT RECORD 00083000
  85. * DEVICES 00084000
  86. * DMKSCNRD - TO GET DEVICE ADDRESS 00085000
  87. * DMKSCNRN - TO GET DEVICE NAME 00086000
  88. * DMKACOPU - PUNCH ACCOUNTING DATA 00087000
  89. * DMKERMSG - WRITE ERROR MESSAGES 00088000
  90. * DMKRSERR - SPOOLING ERROR ROUTINES 00089000
  91. * DMKFREE,DMKFRET,DMKCVTDT,DMKQCNWT,DMKCVTBD,DMKCVTBH 00090000
  92. * DMKCKSPL - CHECKPOINT THE SFBLOK 00091000
  93. * DMKTCSET - SET UP A 3800 PRINTER 00091300
  94. * DMKTCSCO - SET UP FOR MULTIPLE COPIES ON 3800 PRINTER 00091600
  95. * 00092000
  96. * EXTERNAL REFERENCES - 00093000
  97. * 00094000
  98. * DMKGRAWT - ADDRESS OF CONSOLE WRITE ROUTINE 00095000
  99. * DMKSYSOW - ADDRESS OF SYSTEM OWNLIST 00096000
  100. * DMKSYSTP - POINTER TO SYSTEM SYSRES DEVICE TYPE 00097000
  101. * DMKSYSWM - POINTER TO WARM START CYLINDER 00098000
  102. * DMKSYSOC - POINTER TO NUMBER OF ENTRIES IN OWNLIST 00099000
  103. * DMKTMRPT - POINTER TO VMVTIME CONVERT ROUTINE 00100000
  104. * DMKSYSRM - ADDRESS OF REAL STORAGE SIZE 00101000
  105. * DMKQNTBL - ANCHOR FOR 3800 NAMED SYSTEMS (IMAGLIBS) 00101100
  106. * 00102000
  107. * TABLES / WORKAREAS - 00103000
  108. * 00104000
  109. * NONE 00105000
  110. * 00106000
  111. * REGISTER USAGE - 00107000
  112. * 00108000
  113. * GPR2 = REAL ADDRESS OF SPOOLING PAGE BUFFER 00109000
  114. * GPR5 = INTERNAL SUBROUTINE LINKAGE REGISTER 00110000
  115. * GPR7 = ADDRESS OF SFBLOK 00111000
  116. * GPR8 = ADDRESS OF RDEVBLOK 00112000
  117. * GPR9 = ADDRESS OF RSPLCTL WORKAREA 00113000
  118. * GPR10 = ADDRESS OF IOBLOK 00114000
  119. * GPR11 = ADDRESS OF SYSTEM VMBLOK FOR CP PAGING 00115000
  120. * GPR12 = BASE REGISTER 00116000
  121. * GPR13 = 2ND BASE REGISTER 00117000
  122. * 00118000
  123. * NOTES - 00119000
  124. * 00120000
  125. * NONE 00121000
  126. * 00122000
  127. EJECT 00123000
  128. * OPERATION - 00124000
  129. * 00125000
  130. * 1. LOCATE THE RDEVBLOK FOR THE DEVICE CAUSING THE INTERRUPT 00126000
  131. * 00127000
  132. * 2. DETERMINE VIA THE DEVICE TYPE FLAGS WHETHER THE DEVICE 00128000
  133. * IS AN INPUT DEVICE (CARD READER) OR AN OUTPUT DEVICE 00129000
  134. * (PRINTER OR PUNCH). BRANCH TO HANDLE EACH TYPE 00130000
  135. * SEPARATELY. 00131000
  136. * 00132000
  137. * RESPONSE - 00133000
  138. * 00134000
  139. * RDR (RADDR) SPOOL CLS (1 TO 4 CLASSES) STARTED 00135000
  140. * PRT 00136000
  141. * PUN 00137000
  142. * 00138000
  143. * PUN (RADDR) START FOR OUTPUT 00139000
  144. * 00140000
  145. * (DEV) (RADDR) (FUNCTION) (USERID) FILE = (SPOOLID) 00141000
  146. * RECDS = (RECNT) COPY = (CNT) (CL) (TYPE) 00142000
  147. * WHERE THE ITEMS IN PARENS ARE: 00143000
  148. * (DEV) - RDR PRT PUN 00144000
  149. * (RADDR) - REAL DEVICE ADDRESS IN HEX - CCU 00145000
  150. * (FUNCTION) - OUTPUT OF, INPUT FOR, REPEATED, BACKSPACE, 00146000
  151. * FLUSHED, FILE HELD, PRINTING, PUNCHING, READING 00147000
  152. * (USERID) - USERID OF THE FILE OWNER 00148000
  153. * (SPOOLID) - SPOOL FILE NUMBER 00149000
  154. * (RECNT) - RECORD COUNT - LINES OR CARDS 00150000
  155. * (CNT) - NUMBER OF COPIES 00151000
  156. * (CL) - OUTPUT CLASS OF THE FILE 00152000
  157. * (TYPE) - FILE TYPE - PRT, PUN, RDR, CON 00153000
  158. * 00154000
  159. * FOR A RDR DEVICE ONLY THE DATA TO (SPOOLID) IS GIVEN 00155000
  160. * 00156000
  161. * ERROR MESSAGES - 00157000
  162. * 00158000
  163. * DMKRSP426E RDR (RADDR) SYSTEM SPOOL SPACE FULL; FILE PURGED 00159000
  164. * DMKRSP428E (TYPE) (RADDR) SPOOL ERROR; FILE HELD 00160000
  165. * DMKRSP428E (TYPE) (RADDR) SPOOL ERROR; FILE PURGED 00161000
  166. * DMKRSP430A (TYPE) (RADDR) FATAL I/O ERROR; NOW OFFLINE, 00162000
  167. * FILE HELD 00163000
  168. * DMKRSP431A RDR (RADDR) ID CARD MISSING OR INVALID 00164000
  169. * DMKRSP432A RDR (RADDR) ID CARD; (USERID) NOT IN CP DIRECTORY 00165000
  170. * DMKRSP433A RDR (RADDR) ID CARD; INVALID DATA - (DATA) 00166000
  171. * DMKRSP434A RDR (RADDR) FATAL I/O ERROR; FILE PURGED 00167000
  172. *. 00168000
  173. EJECT 00169000
  174. COPY OPTIONS 00170000
  175. COPY LOCAL OPTIONS 00171000
  176. EJECT 00172000
  177. DMKRSP CSECT LOADER CONTROL ONLY @V306638 00173000
  178. SPACE 3 00174000
  179. ENTRY DMKRSPEX,DMKRSPHQ,DMKRSPID,DMKRSPDL 00175000
  180. ENTRY DMKRSPRD,DMKRSPPR,DMKRSPPU,DMKRSPAC 00176000
  181. ENTRY DMKRSPUR @V200930 00177000
  182. ENTRY DMKRSPDP @V67CAH7 00177500
  183. ENTRY DMKRSPCV 00178000
  184. ENTRY DMKRSPMN 00178100
  185. EXTRN DMKPGTSG,DMKRSERR,DMKPGTVG,DMKPGTVR,DMKPGTSD @VA11232 00179000
  186. EXTRN DMKUDRFU,DMKSCNFD 00180000
  187. EXTRN DMKSTKCP @VA00701 00181000
  188. EXTRN DMKSPLOR,DMKSPLCR 00182000
  189. EXTRN DMKCSOSD 00183000
  190. EXTRN DMKSPLDL,DMKSEPSP,DMKSCNRU 00184000
  191. EXTRN DMKRPAGT,DMKRPAPT,DMKCVTDT 00185000
  192. EXTRN DMKSCNRD,DMKSCNRN @V200930 00186000
  193. EXTRN DMKACOPU,DMKIOSQR,DMKERMSG,DMKCVTBH,DMKCVTBD 00187000
  194. EXTRN DMKCKSPL @V304298 00188000
  195. EXTRN DMKQNTBL @VA09471 00188100
  196. EXTRN DMKTCSET,DMKTCSCO @V60B9BA 00188500
  197. SPACE 3 00189000
  198. USING PSA,R0 00190000
  199. USING SPLINK,R2 00191000
  200. USING SFBLOK,R7 00192000
  201. USING RDEVBLOK,R8 00193000
  202. USING RSPLCTL,R9 00194000
  203. USING IOBLOK,R10 00195000
  204. USING VMBLOK,R11 00196000
  205. SPACE 3 00197000
  206. SPACE 3 00198000
  207. DMKRSPEX DS 0H @V200930 00199000
  208. USING DMKRSP,R12 BASE @V200930 00200000
  209. LR R13,R12 SET SECOND BASE REG @V200930 00201000
  210. A R13,F4096 .. @V200930 00202000
  211. USING DMKRSP+4096,R13 @V200930 00203000
  212. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00203100
  213. LH R1,IOBRADD GET DEVICE ADDRESS @V200930 00204000
  214. CALL DMKSCNRU LOCATE RCH, RCU, RDEVBLOKS 00205000
  215. BNZ RSPLEXIT COULDN'T FIND ONE OR MORE BLOKS 00206000
  216. CLI RDEVTYPC,CLASURI INPUT UNIT RECORD DEVICE TYPE ?? 00207000
  217. BE RSPLIN YES -- 00208000
  218. SPACE 00209000
  219. TM RDEVTYPE,TYPPRT+TYPPUN IS IT AN OUTPUT DEVICE ?? 00210000
  220. BNZ RSPLOUT YES -- 00211000
  221. B RSPLEXIT EXIT 00212000
  222. ID DC CL8'DMKRSP' @V200930 00213000
  223. EJECT 00214000
  224. *. 00215000
  225. * 00216000
  226. * REAL CARD READER PROCESSING - 00217000
  227. * 00218000
  228. * 1. DETERMINE IF A FILE IS CURRENTLY ACTIVE ON THE DEVICE; IF 00219000
  229. * SO, GO TO STEP 5; OTHERWISE, CONTINUE 00220000
  230. * 00221000
  231. * 2. IF NO FILE IS ACTIVE AND THE READER IS AVAILABLE FOR SPOOL- 00222000
  232. * ING, CALL DMKSPLOR TO INITIALIZE THE BLOCKS NECESSARY 00223000
  233. * TO START PROCESSING 00224000
  234. * 00225000
  235. * 3. GET A TEMPORARY ID CARD BUFFER, AND BUILD THE CHANNEL 00226000
  236. * PROGRAM TO READ IN THE ID CARD 00227000
  237. * 00228000
  238. * 4. CALL DMKIOSQR TO START THE READER, AND GO TO DMKDSPCH TO 00229000
  239. * AWAIT THE INTERRUPT 00230000
  240. * 00231000
  241. * 5. AFTER CARDS HAVE BEEN READ, TEST TO SEE IF A USERID CARD 00232000
  242. * HAS BEEN READ. IF IT HAS, CONTINUE; OTHERWISE GO TO STEP 00233000
  243. * 7 TO VALIDATE THE ID CARD 00234000
  244. * 00235000
  245. * 6. SEE IF PHYSICAL END OF FILE ON THE READER HAS BEEN REACHED. 00236000
  246. * IF IT HAS, GO TO STEP 8; OTHERWISE, WRITE THE FULL BUFFER 00237000
  247. * TO DASD, OBTAIN A NEW BUFFER, AND CALL DMKIOSQR TO READ THE 00238000
  248. * NEXT BATCH OF CARDS. GOTO DMKDSPCH TO WAIT FOR THE INTER- 00239000
  249. * RUPT 00240000
  250. * 00241000
  251. * 7. IF THE CARD IS BLANK OR A PUNCH SEPARATOR CARD, 00242000
  252. * GO TO STEP 4. 00243000
  253. * IF VALID ID CARD, EXTRACT CLASS AND/OR NAME PARAMETERS, 00244000
  254. * AND SET UP TO FILL BUFFER AND GO TO STEP 4. 00245000
  255. * OTHERWISE, NOTIFY OPERATOR AND FLUSH THE FILE. 00246000
  256. * 00247000
  257. * 8. WHEN END OF FILE IS REACHED, WRITE THE FINAL BUFFER TO 00248000
  258. * DASD, CALL DMKSPLCR TO FINISH HOUSEKEEPING AND QUEUE THE 00249000
  259. * FILE FOR INPUT TO THE VIRTUAL USER, AND EXIT 00250000
  260. * 00251000
  261. *. 00252000
  262. SPACE 3 00253000
  263. RSPLIN EQU * 00254000
  264. * 00255000
  265. TM RDEVSTAT,RDEVDED IS THE DEVICE DEDICATED ?? 00256000
  266. BO RDRIOB YES - FRET IOB AND LEAVE 00257000
  267. L R9,RDEVSPL PICK UP ACTIVE FILE POINTER 00258000
  268. TM IOBCSW+4,CE+UE IS IT CHANNEL END OR UNIT EXCEPTION? 00259000
  269. BNZ RDRCARDS YES -- CARDS HAVE BEEN READ 00260000
  270. SPACE 3 00261000
  271. * HERE ON DEVICE END DUE TO READER BECOMING READY 00262000
  272. SPACE 00263000
  273. TM IOBSTAT,IOBFATAL FATAL IO ERROR ?? 00264000
  274. BO RDRCARDS YES -- 00265000
  275. TM RDEVFLAG,RDEVDRAN DEVICE DRAINED ?? 00266000
  276. BO RDRIOB YES - FRET IOB AND LEAVE 00267000
  277. TM IOBCSW+5,X'FF' ANY CHANNEL ERRORS WITH DEVICE @VA00701 00268000
  278. * END ? 00269000
  279. BNZ RDRCARDS YES -- FATAL I/O ERROR @VA00701 00270000
  280. LTR R9,R9 IS THERE ALREADY A FILE ?? 00271000
  281. * (ACTIVE FILE) 00272000
  282. BNZ RDRIOB YES -- IGNORE THE INTERRUPT 00273000
  283. IC R2,RDEVFLAG SAVE FLAG BYTE 00274000
  284. TM RDEVFLAG,X'01' OPEN ROUTINE IN CONTROL ?? 00275000
  285. BO RDRIOB YES -- FORGET THIS DEVICE END 00276000
  286. OI RDEVFLAG,X'01' INDICATE OPEN ROUTINE IN CONTROL 00277000
  287. CALL DMKSPLOR,AFFINITY @V4075A0 00278100
  288. STC R2,RDEVFLAG RESET FLAG BYTE TO NORMAL 00279000
  289. BZ MSG426E SYSTEM SPOOL SPACE FULL - 00280000
  290. L R2,RSPRPAGE GET ADDRESS OF PAGE BUFFER 00281000
  291. LA R0,BUFSIZE GET CORE FOR A 00282000
  292. CALL DMKFREE TEMPORARY ID CARD BUFFER 00283000
  293. USING BUFFER,R1 00284000
  294. ST R1,SPRMISC SAVE A POINTER TO THE BUFFER 00285000
  295. XC 0(BUFSIZE*8,R1),0(R1) CLEAR BUFFER AREA 00286000
  296. LM R3,R4,RDRCCWS PICK UP MODEL READER CCW 00287000
  297. ALR R3,R1 POINT DATA ADDRESS IN READ TO TEMP 00288000
  298. * BUFFER AREA 00289000
  299. ST R3,BUFNXT POINT TO FIRST CHARACTER IN CARD 00290000
  300. LA R0,80 GET LENGTH OF CARD 00291000
  301. ST R0,BUFCNT SAVE FOR DMKSCNFD 00292000
  302. LA R5,96(R1) SET UP TIC ADDRESS TO SENSE CCW 00293000
  303. STM R3,R5,0(R1) SAVE READ CCW AND HALF TIC IN BUFFER 00294000
  304. CLI RDEVTYPE,TYP2540R 2540 READER ?? 00295000
  305. BNE *+8 NO - LEAVE OP-CODE AS X'02' 00296000
  306. OI 0(R1),X'40' MAKE OP-CODE X'42' SS R2 00297000
  307. CLC IOBMISC(3),=C'CSO' IOB FROM START COMMAND ?? 00298000
  308. * MUST FIND OUT IF READER IS READY 00299000
  309. BNE CLRCSO NO -- CONTINUAL 00300000
  310. MVI 4(R1),SILI SET SILI FLAG ONLY 00301000
  311. MVI 0(R1),X'04' CHANGE OP-CODE TO SENSE 00302000
  312. CLRCSO ST R1,IOBMISC CLEAR 'CSO' 00303000
  313. MVC 96(8,R1),SENSECCW MOVE IN DUMMY SENSE CCW 00304000
  314. MVI 8(R1),8 MOVE IN TIC OP-CODE 00305000
  315. LA R2,SPSIZE(,R2) POINT R2 TO 1ST PAGE BUFFER CCW 00306000
  316. SETCCWS ST R1,IOBCAW ADDRESS OF STARTING CCW 00307000
  317. LM R3,R5,RDRCCWS RE-LOAD MODEL CCWS 00308000
  318. CLI RDEVTYPE,TYP2540R 2540 READER ?? 00309000
  319. BNE *+8 NO -- LEAVE OP-CODE AS X'02' 00310000
  320. O R3,=X'40000000' MAKE OP-CODE X'42' SS R2 00311000
  321. LA R14,96 SIZE OF READER RECORD,INCLUDING CCWS 00312000
  322. LA R15,41*96(,R2) POINTER TO LAST CCW TO BE BUILT 00313000
  323. ALR R3,R2 SET CORRECT DATA ADDRESSES IN 00314000
  324. ALR R5,R2 FIRST SET OF CCWS 00315000
  325. SPACE 2 00316000
  326. CCWLOOP STM R3,R5,0(R2) STORE CCWS IN BUFFER 00317000
  327. ALR R3,R14 INCREMENT DATA ADDRESSES 00318000
  328. ALR R5,R14 IN CCWS 00319000
  329. BXLE R2,R14,CCWLOOP AND LOOP THRU BUFFER,STORING CCWS 00320000
  330. MVC 0(8,R2),SENSECCW FORCE CE+DE BY FINISHING WITH A 00321000
  331. * PHONY SENSE COMMAND 00322000
  332. OI IOBFLAG,IOBCP FLAG AS CP-GENERATED IO 00323000
  333. B SIO AND GO CALL FOR SIO 00324000
  334. SPACE 3 00325000
  335. SENSECCW CCW 4,*-*,SKIP+SILI,1 DUMMY SENSE TO FORCE CE + DE 00326000
  336. PUNCCWS CCW X'41',12,CC+SILI,80 MODEL PUNCH CCW 00327000
  337. RDRCCWS DS 0XL12 SUPPLY A LENGTH FACTOR 00328000
  338. CCW 2,12,CC,80 READ, FEED, AND SS INTO R1 00329000
  339. DC AL1(8) TIC OP-CODE 00330000
  340. DC AL3(96) RELATIVE ADDRESS OF NEXT CCW 00331000
  341. EJECT 00332000
  342. RDRCARDS EQU * HERE TO HANDLE INTERRUPT AFTER CARDS HAVE BEEN READ 00333000
  343. SPACE 3 00334000
  344. LTR R9,R9 ACTIVE FILE ?????? 00335000
  345. BZ RDRIOB NO -- EXIT - CAREFULLY 00336000
  346. TM IOBSTAT,IOBFATAL FIRST, CHECK FOR FATAL IO ERROR 00337000
  347. BO RDRFLUSH FATAL ERROR - GO FLUSH THE FILE 00338000
  348. TM IOBCSW+5,255-IL PCI,CDC,CCC,ICC,PROT,PROG,CHAIN @VA03478 00339000
  349. BNZ RDRFLUSH YES, FATAL ERROR @VA03478 00340000
  350. ICM R15,B'1111',IOBCAW UNSOLICITED AND CE INTERRUPT @VA01299 00341000
  351. BZ RDRIOB YES - EXIT @VA01299 00342000
  352. TM IOBCSW+4,UE IS IT UNIT EXCEPTION? @VA03478 00343000
  353. BO KEEPGO YES, KEEP PROCESSING @VA03478 00344000
  354. TM IOBCSW+5,IL INCORRECT LENGTH? @VA03478 00345000
  355. BO RDRFLUSH YES, FATAL ERROR @VA03478 00346000
  356. KEEPGO L R7,RSPSFBLK GET PTR TO SPOOL FILE BLOK @VA03478 00347000
  357. L R2,RSPRPAGE AND REAL PAGE BUFFER 00348000
  358. CLI SFBUSER,0 HAS THE ID CARD BEEN PROCESSED YET? 00349000
  359. BE RDRGETID NO -- GO DO IT NOW 00350000
  360. SPACE 2 00351000
  361. RDREFTST EQU * HERE TO TEST FOR END OF FILE 00352000
  362. XC IOBRCNT,IOBRCNT CLEAR RETRY COUNT 00353000
  363. TM IOBCSW+4,UE IS UNIT EXCEPTION ON? 00354000
  364. BO RDREOF YES -- END-OF-FILE REACHED IN THIS 00355000
  365. * BUFFER 00356000
  366. SR R1,R1 CHECK IF SENSE IS LAST CCW @VA00701 00357000
  367. ICM R1,B'0111',IOBCSW+1 ADDRESS OF LAST CCW +8 @VA00701 00358000
  368. BZ RDRFLUSH LAST ADDRESS IS ZERO, FLUSH @VA03478 00359000
  369. S R1,F8 POINT TO LAST CCW @VA00701 00360000
  370. CLI 0(R1),X'04' SENSE OP CODE CCW ? @VA00701 00361000
  371. BNE RDRFLUSH NO, INCOMPLETE CHANNEL PROGRAM ? @VA03478 00362000
  372. LA R6,10 RETRY COUNT 00363000
  373. GETDASD CALL DMKPGTSG GO OBTAIN THE NEXT DASD PAGE BUFFER 00364000
  374. BZ MSG426E SYSTEM SPOOL SPACE FULL - 00365000
  375. ST R1,SPNXTPAG AND IN BUFFER LINKAGE FIELD 00367000
  376. LR R3,R1 SAVE ADDRESS OF NEXT PAGE @VA11232 00368000
  377. L R1,SFBSTART START CCPD @VA11232 00368050
  378. L R0,SPPREPAG IS THIS THE FIRST BUFFER ? @VA11232 00368100
  379. LTR R0,R0 IF BACK PTR = ZERO, IT IS @VA11232 00368150
  380. BNZ STSTRT WE ARE NOT REWRITING FIRST BUFFER@VA11232 00368200
  381. C R1,RSPDPAGE FIRST TIME WRITING FIRST BUFFER? @VA11232 00368250
  382. BE STSTRT YES, SFBSTART IS GOOD @VA11232 00368300
  383. L R1,RSPDPAGE GET NEW CCPD FOR FIRST BUFFER @VA11232 00368350
  384. ST R1,SFBSTART SAVE NEW START CCPD IN SFBSTART @VA11232 00368400
  385. ST R1,SFBLAST AND SFBLAST @VA11232 00368450
  386. STSTRT ST R1,SPRMISC SPRMISC CONTAINS START CCPD @VA11232 00368500
  387. LA R0,42 GET NUMBER OF CARDS IN A FULL BUFFER 00369000
  388. ST R0,SPRECNUM AND SAVE IN BUFFER 00370000
  389. A R0,SFBRECNO ADD NUMBER OF RECORDS IN THE 00371000
  390. * BUFFER TO 00372000
  391. ST R0,SFBRECNO TOTAL FOR THE FILE, AND SAVE IT 00373000
  392. LM R0,R1,RSPDPAGE GET VIRTUAL AND DASD BUFFER ADDRESS 00374000
  393. CALL DMKRPAPT,PARM=(SYSTEM) 00375000
  394. L R2,RSPRPAGE RESTORE REAL PAGE ADDRESS 00376000
  395. BZ WRGOOD SUCCESSFUL WRITE 00377000
  396. OI RSPFLAG2,RSPERR INDICATE WRITE ERROR @VA11232 00378000
  397. MVC RSPDPAGE(4),SPNXTPAG USE NEXT CCPD AS CURRENT @VA11232 00379000
  398. L R0,SFBRECNO GET TOTAL RECORD COUNT 00380000
  399. S R0,=F'42' AND RESTORE TO CORRECT VALUE 00381000
  400. ST R0,SFBRECNO .. 00382000
  401. BCT R6,GETDASD RETRY 10 TIMES 00383000
  402. B MSG428 LIMIT REACHED - PURGE FILE 00384000
  403. WRGOOD ST R3,RSPDPAGE SAVE ADDRESS OF NEXT BUFFER 00385000
  404. L R3,SPPREPAG SAVE CCPD OF BUFFER TO BE UPDATED 00386000
  405. ST R0,SPPREPAG SAVE ADDRESS OF PREVIOUS BUFFER 00387000
  406. SR R1,R1 CLEAR OUT 00388000
  407. ST R1,SPRECNUM RECORD COUNTER IN BUFFER 00389000
  408. TM RSPFLAG2,RSPERR STILL IN ERROR RECOVERY ? @VA11232 00390000
  409. BZ RDRSIO NO -- 00391000
  410. NI RSPFLAG2,X'FF'-RSPERR RESET ERROR FLAG @VA11232 00392000
  411. LTR R0,R3 ANY PREVIOUS BUFFERS ?? 00393000
  412. BZ RDRSIO NO PREVIOUS BUFFER TO UPDATE @VA11232 00394000
  413. SPACE 00397000
  414. * 00398000
  415. * HERE TO CORRECT FORWARD POINTER (SPNXTPAG) IN 00399000
  416. * PREVIOUS BUFFER 00400000
  417. * 00401000
  418. UPDTPNT LR R4,R2 SAVE ADDRESS OF STORAGE BUFFER 00402000
  419. CALL DMKPGTVG GET VIRTUAL BUFFER ADDRESS 00403000
  420. LTR R1,R1 VIRTUAL ADDRESS PRESENT ?? 00404000
  421. BZ MSG428A NO VIRTUAL ADDRESSES @VA11232 00405000
  422. ST R1,RSPVPG2 SAVE SEC. VIRTUAL BUFF FOR FRET @VA11232 00405500
  423. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=MSG428A @VA11232 00406000
  424. * BUFFER 00407000
  425. CALL DMKRPAGT,PARM=(SYSTEM+BRING+LOCK) GET BUFFER 00408000
  426. BNZ MSG428A ERROR READING PREVIOUS BUFFER @VA11232 00409000
  427. MVC SPNXTPAG(4),4(R4) UPDATE FORWARD POINTER IN PREVIOUS 00410000
  428. * BUFFER 00411000
  429. CALL DMKRPAPT,PARM=SYSTEM WRITE BUFFER OUT 00412000
  430. BNZ MSG428A BUFFER WRITE ERROR @VA11232 00413000
  431. LR R2,R4 RESTORE ORIGINAL BUFFER ADDRESS @VA11232 00413100
  432. L R0,SPPREPAG UPDATE SFBPNT AND SFBLAST @VA11232 00413200
  433. ST R0,SFBPNT ... @VA11232 00413300
  434. ST R0,SFBLAST SFBLAST ALSO @VA11232 00413400
  435. SLR R0,R0 RELEASE STORAGE PAGE @VA11232 00413500
  436. CALL DMKRPAGT,PARM=SYSTEM .. 00415000
  437. CALL DMKPGTVR RELEASE VIRTUAL BUFFER 00416000
  438. LR R2,R4 POINT TO ORIGINAL BUFFER @VA11232 00417000
  439. ST R0,RSPVPG2 CLEAR PTR TO SECOND VIRTUAL BUFF @VA11232 00417100
  440. B STARTIO CALL FOR SIO @VA11232 00417200
  441. RDRSIO MVC SFBLAST,SPPREPAG SAVE LAST GOOD BUFFER @VA11232 00417300
  442. RDRSIO2 MVC SFBPNT,SPPREPAG AND IN LAST TOO @VA11232 00417400
  443. STARTIO NI IOBFLAG,X'FF'-IOBRSTRT CLR RESTART FLAG @VA11232 00417500
  444. B SIO AND GO CALL FOR SIO 00419000
  445. EJECT 00420000
  446. RDRGETID EQU * HERE TO PROCESS CP USERID CARD 00421000
  447. SPACE 3 00422000
  448. L R9,SPRMISC POINT TO TEMPORARY BUFFER 00423000
  449. CLI 0(R9),X'04' SENSE OPERATION ?? 00424000
  450. BNE NOTSNSE NO -- 00425000
  451. CLI 12(R9),X'40' READER READY --?? 00426000
  452. BE FRETBUFF NO -- LEAVE 00427000
  453. MVI 0(R9),X'02' RESTORE READ OP-CODE 00428000
  454. CLI RDEVTYPE,TYP2540R 2540 READER ?? 00429000
  455. BNE *+8 NO -- LEAVE AS X'02' 00430000
  456. OI 0(R9),X'40' MAKE OP-CODE X'42' SS INTO R2 00431000
  457. MVI 4(R9),CC SET COMMAND CHAINING FLAG ONLY 00432000
  458. B BLKCARD GO READ ID CARD - 00433000
  459. SPACE 00434000
  460. NOTSNSE EQU * 00435000
  461. TM IOBCSW+4,UE UNIT EXCEPTION ?? 00436000
  462. BO FRETBUFF YES -- LEAVE 00437000
  463. CALL DMKSCNFD PICK UP FIRST FIELD 00438000
  464. BNZ BLKCARD BLANK CARD - SKIP IT 00439000
  465. CLC =C'USERID ',0(R1) USERID CARD ?? 00440000
  466. BE FINDUSR YES -- 00441000
  467. CLC =C'CP67USERID ',0(R1) CP67USERID ?? 00442000
  468. BE FINDUSR YES - 00443000
  469. CLC =C'ID ',0(R1) ID CARD ?? 00444000
  470. BE FINDUSR YES - 00445000
  471. CLC 85(7,R9),=XL7'04040404040404' SEPARATOR CARD ?? 00446000
  472. BNE MSG431A ID CARD MISSING OR INVALID 00447000
  473. BLKCARD LA R3,12(R9) SET SCAN POINTERS 00448000
  474. LR R1,R9 SET BASE FOR BUFFER 00449000
  475. ST R3,BUFNXT .. 00450000
  476. LA R3,80 .. 00451000
  477. ST R3,BUFCNT .. 00452000
  478. B RDRSIO2 GO READ NEXT CARD @VA11232 00453000
  479. SPACE 00454000
  480. FINDUSR EQU * 00455000
  481. CALL DMKSCNFD PICK UP THE USERID 00456000
  482. BNZ MSG431A ID CARD (USERID MISSING ) 00457000
  483. C R0,F8 USERID LENGTH GREATER THAN 8 ?? 00458000
  484. BH MSG432A USERID NOT IN CP DIRECTORY 00459000
  485. LR R14,R0 GET COUNT OF USERID 00460000
  486. MVI SFBCLAS,C'A' MOVE IN DEFAULT CLASS (A) 00461000
  487. MVC SFBUSER(8),BLANKS BLANK OUT SFBUSER 00462000
  488. BCTR R14,R0 -1 FOR MOVE 00463000
  489. EX R14,MOVEID MOVE USERID TO SFBLOK 00464000
  490. MVC SFBORIG(8),SFBUSER FILL IN SFBORIG 00465000
  491. SR R2,R2 CLEAR PARM REG 00466000
  492. CALL DMKUDRFU VERIFY USERID IN CP DIRECTORY 00467000
  493. BNZ MSG432A USERID NOT IN CP DIRECTORY 00468000
  494. SPACE 00469000
  495. GETARG EQU * HERE TO GET ADDITIONAL OPTIONS 00470000
  496. CALL DMKSCNFD 00471000
  497. BNZ IDMSG NONE GIVEN 00472000
  498. CLC =C'CLASS ',0(R1) IS IT CLASS ?? 00473000
  499. BE GETCLASS YES - 00474000
  500. CLC =C'NAME ',0(R1) IS IT A FILE NAME ?? 00475000
  501. BE GETNAME YES -- GET FNAME AND FTYPE 00476000
  502. CLI 2(R1),C'/' IS IT DATE ?? 00477000
  503. BE IDMSG YES -- LEAVE NAME BLANK 00478000
  504. B MSG433A ID CARD INVALID DATA 00479000
  505. SPACE 00480000
  506. GETNAME EQU * HERE TO LOCATE FNAME AND FTYPE 00481000
  507. CALL DMKSCNFD GET THE FILE NAME 00482000
  508. BNZ IDMSG NONE -- LEAVE BLANK 00483000
  509. LA R5,SFBFNAME POINT TO NAME FIELD -- 00484000
  510. BAL R4,MOVENAME AND MOVE IN THE NAME 00485000
  511. CALL DMKSCNFD IS A TYPE GIVEN ?? 00486000
  512. BNZ IDMSG NO -- 00487000
  513. CLI 2(R1),C'/' DATE STAMP ?? 00488000
  514. BE IDMSG YES -- 00489000
  515. CLI SFBFNAME+8,C' ' DSNAME ?? 00490000
  516. BNE MSG433A YES -- INVALID DATA 00491000
  517. C R0,F8 FTYPE OVER 8 BYTES ?? 00492000
  518. BH MSG433A YES -- INVALID DATA 00493000
  519. LA R5,SFBFTYPE POINT TO TYPE FIELD 00494000
  520. BAL R4,MOVENAME AND MOVE IN THE NEW TYPE 00495000
  521. B GETARG GO GET NEXT ARG, IF ANY 00496000
  522. SPACE 2 00497000
  523. MOVEID MVC SFBUSER(0),0(R1) MOVE ID TO SFBLOK 00498000
  524. SPACE 00499000
  525. MOVENAME EQU * HERE TO MOVE FILE NAME AND TYPE 00500000
  526. SPACE 00501000
  527. CLI 2(R1),C'/' IS IT DATE ?? 00502000
  528. BE IDMSG LEAVE NAME BLANK 00503000
  529. LR R15,R0 GET LENGTH OF FIELD 00504000
  530. BCTR R15,0 DECREMENT FOR MOVE 00505000
  531. C R0,F24 OVER MAX. LENGTH FOR DSNAME 00506000
  532. BH MSG433A YES -- ERROR MSG DMKRSP433A 00507000
  533. CLI 0(R5),C' ' 'TO' FIELD BLANK ?? 00508000
  534. BNE MSG433A NO - INVALID DATA 00509000
  535. EX R15,MOVE MOVE IN DESIRED FIELD 00510000
  536. BR R4 AND RETURN TO CALLER 00511000
  537. SPACE 00512000
  538. MOVE MVC 0(*-*,R5),0(R1) EXECUTED.. 00513000
  539. SPACE 2 00514000
  540. GETCLASS CALL DMKSCNFD LOCATE CLASS ARG 00515000
  541. BNZ IDMSG NONE GIVEN 00516000
  542. CLI 0(R1),C'A' BINARY VALUE BELOW 'A' ?? 00517000
  543. BL MSG433A ID CARD - INVALID CLASS 00518000
  544. LR R5,R1 SAVE ADDRESS OF CLASS 00519000
  545. TRT 0(1,R1),ALPHANUM TEST FOR VALID CLASS 00520000
  546. LR R1,R5 RESTORE ADDRESS OF CLASS 00521000
  547. BNH MSG433A ID CARD - INVALID CLASS 00522000
  548. STC R2,SFBCLAS MOVE CLASS TO SFBLOK 00523000
  549. B GETARG 00524000
  550. SPACE 2 00525000
  551. MSG433A EQU * HERE IF ID CARD HAS INVALID DATA FOR 00526000
  552. * CLASS OR FNAME OR FTYPE 00527000
  553. LR R2,R0 SAVE COUNT AND 00528000
  554. LR R6,R1 ADDRESS OF INVALID DATA 00529000
  555. BAL R5,TYPERADD GET TYPE AND DEVICE ADDRESS 00530000
  556. XC 8(24,R3),8(R3) CLEAR DATA AREA 00531000
  557. C R2,F24 COUNT OVER 24 BYTES ?? 00532000
  558. BNH *+8 NO -- 00533000
  559. LA R2,24 YES - FORCE TO 24 00534000
  560. BCT R2,*+10 -1 FOR MOVE 00535000
  561. MVCDATA MVC 8(0,R3),0(R6) MOVE INVALID DATA TO MESSAGE AREA 00536000
  562. EX R2,MVCDATA EXCUTE MOVE OF DATA 00537000
  563. LA R0,28 LENGTH OF MESSAGE 00538000
  564. LA R2,433 ERROR MSG DMKRSP433A 00539000
  565. ICM R2,B'0100',=C'A' ACTION CODE 00540000
  566. BAL R5,RSPMSG WRITE MESSAGE TO OPERATOR 00541000
  567. B FRETBUFF CLEAN UP AND EXIT 00542000
  568. SPACE 2 00543000
  569. MSG431A EQU * HERE IF ID CARD IS MISSING OR INVALID 00544000
  570. BAL R5,TYPERADD GET TYPE AND REAL DEVICE ADDRESS 00545000
  571. LA R2,431 ERROR MSG DMKRSP431A 00546000
  572. ICM R2,B'0100',=C'A' ACTION CODE 00547000
  573. BAL R5,RSPMSG WRITE ERROR MESSAGE 00548000
  574. B FRETBUFF CLEAN UP AND EXIT 00549000
  575. SPACE 2 00550000
  576. SPACE 00551000
  577. MSG432A EQU * HERE IF USERID NOT IN CP DIRECTORY 00552000
  578. BAL R5,TYPERADD GET TYPE AND REAL ADDRESS 00553000
  579. MVC 8(8,R3),SFBUSER MOVE USERID TO MESSAGE 00554000
  580. LA R0,28 LENGTH OF MESSAGE DATA 00555000
  581. LA R2,432 ERROR MSG DMKRSP432A 00556000
  582. ICM R2,B'0100',=C'A' ACTION CODE 00557000
  583. BAL R5,RSPMSG WRITE ERROR MSG 00558000
  584. B FRETBUFF GO - FRET BUFFER 00559000
  585. SPACE 00560000
  586. IDMSG LA R2,80 FUNCTION INDEX @V200930 00561000
  587. BAL R6,SETMSG SETUP MESSAGE @V200930 00562000
  588. CALL DMKQCNWT,PARM=OPERATOR+NORET @V200930 00563000
  589. SR R3,R3 INDICATE ID CARD COMPLETE 00564000
  590. B *+6 GO FRET ID BUFFER AND CONTINUAL 00565000
  591. SPACE 00566000
  592. FRETBUFF EQU * HERE TO FREE TEMPORARY BUFFER 00567000
  593. LR R3,R12 INDICATE ID CARD NOT COMPLETE 00568000
  594. LR R1,R9 POINT TO IT 00569000
  595. LA R0,BUFSIZE GET ITS SIZE 00570000
  596. CALL DMKFRET AND FRET IT 00571000
  597. SPACE 00572000
  598. L R9,RDEVSPL GET RSPLCTL CONTROL BLOCK @VA11232 00573000
  599. L R2,RSPRPAGE GET REAL BUFFER ADDRESS @VA11232 00573100
  600. SLR R15,R15 CLEAR @VA11232 00573200
  601. ST R15,SPRMISC RESET TO ZERO FOR NOW @VA11232 00573300
  602. * BLOK 00574000
  603. LTR R3,R3 ID CARD COMPLETE AND CORRECT 00575000
  604. BNZ RDREXIT2 NO FLUSH FILE @VA03478 00576000
  605. SPACE 00577000
  606. LA R1,SPSIZE(,R2) POINT TO FIRST CCW IN BUFFER 00579000
  607. ST R1,IOBCAW SAVE ADDRESS 00580000
  608. B RDRSIO2 FILL BUFFER @VA11232 00581000
  609. SPACE 2 00582000
  610. EJECT 00583000
  611. RDREOF EQU * HERE FOR PHYSICAL END OF FILE ON CARD READER 00584000
  612. SPACE 3 00585000
  613. SR R1,R1 CLEAR GPR1 00586000
  614. TM IOBSTAT,IOBCC1 CSW STORED ?? 00587000
  615. BO EMPTYBUF YES -- BUFFER EMPTY 00588000
  616. ICM R1,B'0111',IOBCSW+1 ADDR OF LAST USED CCW+8 @VA01863 00589000
  617. BZ EMPTYBUF BRANCH IF 0 CSW ADDRESS @VA01863 00590000
  618. SR R1,R2 GET DISPLACEMENT FROM START OF 00591000
  619. * BUFFER 00592000
  620. SR R0,R0 CLEAR HIGH-ORDER WORD OF DIVIDEND 00593000
  621. D R0,=F'96' DIVIDE BY LOGICAL RECORD LENGTH 00594000
  622. EMPTYBUF L R0,RSPDPAGE RESTORE ADDRESS OF DASD PAGE 00595000
  623. SPACE 3 00596000
  624. RDRCLOSE EQU * 00597000
  625. ST R1,SPRECNUM STORE RECORD COUNT FOR THIS BUFFER 00598000
  626. A R1,SFBRECNO ADD NUMBER OF RECORDS IN LAST BUFFER 00599000
  627. ST R1,SFBRECNO AND SAVE IT 00600000
  628. LTR R1,R1 EMPTY FILE ?? 00601000
  629. BZ RDRFLUSH YES -- FLUSH FILE 00602000
  630. LA R5,10 RETRY COUNT OF 10 00603000
  631. CLWRITE L R1,SFBSTART GET ORIGINAL START CCPD @VA11232 00604000
  632. L R6,SPPREPAG SEE IF FIRST PAGE IS BEING @VA11232 00604100
  633. LTR R6,R6 RE-WRITTEN @VA11232 00604200
  634. BNZ USESTRT NO, USE SFBSTART @VA11232 00604300
  635. C R1,RSPDPAGE RE-WRITTEN IN SAME SPOT ? @VA11232 00604400
  636. BE USESTRT YES, USE SFBSTART @VA11232 00604500
  637. L R1,RSPDPAGE SPRMISC MUST EQUAL NEW START @VA11232 00604600
  638. ST R1,SFBSTART SAVE NEW START CCPD @VA11232 00604700
  639. ST R1,SFBLAST MAKE IT LAST TOO @VA11232 00604800
  640. USESTRT ST R1,SPNXTPAG CHAIN TAIL TO HEAD @VA11232 00604900
  641. ST R1,SPRMISC SAVE IN SPRMISC ALSO @VA11232 00605000
  642. LM R0,R1,RSPDPAGE GET BUFF ADDRESS AND SLOT @VA11232 00605100
  643. CALL DMKRPAPT,PARM=(SYSTEM) WRITE OUT BUFFER 00606000
  644. L R2,RSPRPAGE RESTORE BUFFER ADDRESS @VA11232 00607000
  645. BZ RDRGOOD BUFFER WRITE SUCCESSFUL @VA11232 00607100
  646. OI RSPFLAG2,RSPERR INDICATE WRITE ERROR @VA11232 00607200
  647. CALL DMKPGTSG GET DASD BUFFER ADDRESS 00609000
  648. BZ MSG426E SPOOL SPACE FULL 00610000
  649. ST R1,RSPDPAGE SAVE CCPD 00611000
  650. BCT R5,CLWRITE RETRY UP TO TEN TIMES 00612000
  651. B MSG428 LIMIT REACHED - PURGE FILE 00613000
  652. RDRGOOD TM RSPFLAG2,RSPERR IN ERROR RECOVERY ? @VA11232 00614000
  653. BZ CHFILE NO - CONT 00617000
  654. NI RSPFLAG2,X'FF'-RSPERR RESET ERROR INDICATOR @VA11232 00618000
  655. LR R4,R2 SAVE BUFFER ADDRESS @VA11232 00618100
  656. L R1,RSPVPAGE GET VIRTUAL BUFFER ADDRESS 00619000
  657. ICM R15,B'1111',SPPREPAG GET PREVIOUS BUFFER ADDRESS 00620000
  658. BZ CHFILE CHAIN FILE @VA11232 00621000
  659. UPDPREV LR R0,R15 GET LAST BUFFER ADDRESS @VA11232 00621100
  660. CALL DMKRPAGT,PARM=(SYSTEM+BRING+LOCK) GET BUFFER 00623000
  661. BNZ BUFFERR PAGE READ ERROR @VA11232 00624000
  662. WRLAST MVC SPNXTPAG(4),RSPDPAGE UPDATE FORWARD POINTER @VA11232 00625000
  663. CALL DMKRPAPT,PARM=SYSTEM WRITE BUFFER OUT 00626000
  664. BZ CHFILE CHAIN COMPLETED SPOOL FILE @VA11232 00627000
  665. BUFFERR LR R2,R4 RE-ESTABLISH BUFFER @VA11232 00627100
  666. MVC SPNXTPAG(4),RSPDPAGE UPDATE FORWARD POINTER @VA11232 00627200
  667. B MSG428B DEALLOCATE BUFFER @VA11232 00627300
  668. EJECT 00628000
  669. CHFILE EQU * HERE TO CHAIN THE COMPLETED SPOOL FILE BLOCK 00629000
  670. L R2,RSPDPAGE RESTORE REAL BUFFER CCPD @VA11232 00629100
  671. ST R2,SFBLAST MAKE IT LAST CCPD @VA11232 00629200
  672. SPACE 00630000
  673. CALL DMKSPLCR CALL THE FILE CLOSE ROUTINE 00631000
  674. TM RDEVFLAG,RDEVDRAN DEVICE TO BE DRAINED ?? 00632000
  675. BZ RDREXIT4 NO - 00633000
  676. BAL R6,DRAINMSG TYPE DRAIN MESSAGE @V200930 00634000
  677. B RDREXIT4 AND LEAVE 00635000
  678. SPACE 2 00636000
  679. MSG426E EQU * HERE SYSTEM INPUT SPOOLING SPACE IS FULL 00637000
  680. L R0,SFBSTART ANY BUFFERS IN THE FILE ?? 00638000
  681. LTR R0,R0 ?? 00639000
  682. BZ MSG426 NO -- NO BUFFERS TO DELETE 00640000
  683. SPACE 00641000
  684. BAL R5,DELETE GO DELETE SPOOL FILE 00642000
  685. SPACE 00643000
  686. MSG426 BAL R5,TYPERADD GET TYPE AND REAL ADDRESS 00644000
  687. LA R2,426 ERROR MSG DMKRSP426E 00645000
  688. BAL R5,RSPMSG WRITE ERROR MSG 00646000
  689. B RDREXIT3 EXIT 00647000
  690. SPACE 00647100
  691. MSG428A EQU * @VA11232 00647200
  692. XC RSPSWAP(8),RSPSWAP PREPARE DUMMY SWAPTABLE @VA11232 00647300
  693. LR R2,R4 RESTORE ORIGINAL BUFFER @VA11232 00647400
  694. L R4,SPPREPAG FIRST OF TWO CCPDS TO RELEASE @VA11232 00647500
  695. ST R4,RSPSWAP+4 SAVE IN DUMMY SWAPTABLE ENTRY @VA11232 00647600
  696. LA R5,RSPSWAP POINT TO DUMMY SWAPTABLE ENTRY @VA11232 00647700
  697. CALL DMKPGTSD RELEASE SLOT @VA11232 00647800
  698. B MSG428C GO DEALLOCATE SECOND SLOT @VA11232 00647900
  699. MSG428B XC RSPSWAP(8),RSPSWAP CLEAR DUMMY SWAPTABLE @VA11232 00648000
  700. LR R2,R4 RE-ESTABLISH BUFFER PTR. @VA11232 00648100
  701. LA R5,RSPSWAP POINT TO DUMMY SWAPTABLE ENTRY @VA11232 00648200
  702. MSG428C L R4,SPNXTPAG NEXT CCPD TO DEALLOCATE @VA11232 00648300
  703. XC RSPSWAP(8),RSPSWAP CLEAR DUMMY SWAPTABLE ENTRY @VA11232 00648400
  704. ST R4,RSPSWAP+4 STORE IN DUMMY SWAPTABLE ENTRY @VA11232 00648500
  705. CALL DMKPGTSD DEALLOCATE PAGE @VA11232 00648600
  706. SPACE 00648700
  707. MSG428 EQU * HERE FOR SPOOL PAGING ERROR 00649000
  708. ICM R0,B'1111',SFBPNT BUFFER ADDRESS OF LAST GOOD WRITE 00650000
  709. ST R0,SFBLAST SET UP LAST ADDRESS FOR FILE PURGE 00651000
  710. BZ *+8 PURGE BUFFERS OF FILE - NO 00652000
  711. BAL R5,DELETE PURGE BUFFERS AND SFBLOK 00653000
  712. BAL R5,TYPERADD GET TYPE AND ADDRESS FOR MSG 00654000
  713. LA R2,428 SET UP DATA FOR MESSAGE 00655000
  714. LA R0,16 LENGTH 00656000
  715. LR R1,R3 ADDRESS OF MSG DATA 00657000
  716. BAL R5,RSPMSG WRITE ERROR MSG 00658000
  717. B RDREXIT3 NOW EXIT 00659000
  718. SPACE 3 00660000
  719. DELETE EQU * HERE TO DELETE SPOOL FILE 00661000
  720. L R7,RSPSFBLK ADDRESS OF SPOOL BLOK 00662000
  721. LTR R7,R7 ONE PRESENT ?? 00663000
  722. BCR 8,R5 NO - RETURN TO CALLER 00664000
  723. NI RSPFLAG2,X'FF'-RSPERR RESET BUFFER ERROR FLAG @VA11232 00665000
  724. LA R0,CPEXSIZE LENGTH OF BLOK @VA00701 00666000
  725. CALL DMKFREE GET STORAGE @VA00701 00667000
  726. USING CPEXBLOK,R1 @VA00701 00668000
  727. XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR BLOK @VA00701 00669000
  728. BAL R15,DELSTK SET UP ENTRY POINT AND STACK @VA00701 00670000
  729. CALL DMKSPLDL CALL FILE DELETER @VA00701 00671000
  730. GOTO DMKDSPCH EXIT @VA00701 00672000
  731. SPACE 00673000
  732. DELSTK STM R15,R13,CPEXADD SAVE REGS AND ENTRY POINT @VA00701 00674000
  733. CALL DMKSTKCP STACK CPEXBLOK @VA00701 00675000
  734. SR R7,R7 CLEAR SFBLOK REG @VA00701 00676000
  735. ST R7,RSPSFBLK AND POINTER @VA00701 00677000
  736. BR R5 RETURN TO CALLER @VA00701 00678000
  737. SPACE 2 00679000
  738. SPACE 1 00680000
  739. RDRFLUSH EQU * HERE TO FLUSH AND DELETE PARTIALLY COMPLETE FILE 00681000
  740. BAL R5,DELETE DELETE FILE 00682000
  741. BAL R5,TYPERADD GET TYPE AND REAL ADDRESS 00683000
  742. LA R2,434 ERROR MSG DMKRSP434A 00684000
  743. * RDR FATAL I/O ERROR FILE PURGED 00685000
  744. ICM R2,B'0100',=C'A' ACTION CODE 00686000
  745. BAL R5,RSPMSG WRITE ERROR MSG 00687000
  746. B RDREXIT3 00688000
  747. RDREXIT2 BAL R5,DELETE FLUSH FILE @VA03478 00689000
  748. SPACE 2 00690000
  749. EJECT 00691000
  750. RDREXIT3 EQU * @V4075A0 00692100
  751. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00692200
  752. NI RDEVSTAT,X'FF'-RDEVNRDY RESET NOT READY FLAG @V4075A0 00692300
  753. LTR R1,R7 POINT TO SPOOL FILE BLOK 00693000
  754. BZ RDREXIT4 NONE PRESENT 00694000
  755. LA R0,SFBSIZE SIZE OF BLOK 00695000
  756. CALL DMKFRET FRET SFBLOK IF FILE NO GOOD 00696000
  757. SPACE 00697000
  758. RDREXIT4 EQU * HERE FOR NORMAL EXIT AT END OF FILE 00698000
  759. ICM R9,B'1111',RDEVSPL RSP CONTROL BLOK PRESENT ? @VA00701 00699000
  760. BZ RDRIOB NO -- 00700000
  761. L R1,RSPVPAGE GET VIRUAL PAGE ADDRESS 00701000
  762. SR R0,R0 DUMMY PAGE ADDRESS 00702000
  763. CALL DMKRPAGT,PARM=(SYSTEM) HERE TO FREE CORE PAGE 00703000
  764. CALL DMKPGTVR RELEASE VIRTUAL ADDRESS SPACE 00704000
  765. L R1,RSPVPG2 SECOND VIRTUAL BUFFER ADDRESS @VA11232 00705000
  766. LTR R1,R1 IS THERE ONE ? @VA11232 00705100
  767. BZ NOBUFF2 NO, NOTHING TO RELEASE @VA11232 00705200
  768. CALL DMKRPAGT,PARM=SYSTEM RELEASE CORE PAGE @VA11232 00705300
  769. CALL DMKPGTVR AND RELEASE VIRTUAL BUFFER @VA11232 00705400
  770. NOBUFF2 LR R1,R9 PTR TO RSPLCTL WORKAREA @VA11232 00705500
  771. LA R0,RSPSIZE AND ITS SIZE FOR 00706000
  772. CALL DMKFRET CALL TO FRET 00707000
  773. SR R9,R9 CLEAR ACTIVE 00708000
  774. ST R9,RDEVSPL POINTER IN DEVICE BLOK 00709000
  775. RDRIOB LA R0,IOBSIZE SIZE OF IOBLOK -- 00710000
  776. LR R1,R10 AND ITS ADDRESS 00711000
  777. CALL DMKFRET FREE IT 00712000
  778. B RSPLEXIT AND EXIT 00713000
  779. SPACE 3 00714000
  780. ORG *-193 00715000
  781. ALPHANUM EQU * TRT TABLE TO VALIDATE THE 36 LEGAL CLASSES 00716000
  782. ORG 00717000
  783. DC C'ABCDEFGHI' VALID CLASSES 00718000
  784. DC 7X'00' ILLEGAL CLASSES 00719000
  785. DC C'JKLMNOPQR' VALID CLASSES 00720000
  786. DC 8X'00' ILLEGAL CLASSES 00721000
  787. DC C'STUVWXYZ' VALID CLASSES 00722000
  788. DC 6X'00' ILLEGAL CLASSES 00723000
  789. DC C'0123456789' VALID CLASSES 00724000
  790. DC 6X'00' ILLEGAL CLASSES 00725000
  791. DS 0H 00726000
  792. EJECT 00727000
  793. *. 00728000
  794. * 00729000
  795. * REAL PRINTER AND PUNCH HANDLING - 00730000
  796. * 00731000
  797. * 1. DETERMINE IF A FILE IS ALREADY ACTIVE ON THE DEVICE. IF 00732000
  798. * SO, GO TO STEP 6; OTHERWISE, CONTINUE 00733000
  799. * 00734000
  800. * 2. IF THE DEVICE IS AVAILABLE, BUILD THE CONTROL BLOKS NEC- 00735000
  801. * ESSARY TO PROCESS A FILE, AND ATTEMPT TO LOCATE AN SFBLOK 00736000
  802. * ON THE PROPER FILE CHAIN (DMKRSPPR OR DMKRSPPU) WHOSE CLASS 00737000
  803. * (AND OPTIONALLY DIRECTED ADDRESS) MATCH THOSE OF THE REAL 00738000
  804. * DEVICE BEING PROCESSED. IN THE CASE OF A 3800 PRINTER, 00739000
  805. * TWO VIRTUAL STORAGE AND REAL STORAGE BUFFERS ARE OBTAINED 00739250
  806. * WHEREAS FOR OTHER DEVICES, ONLY ONE IS OBTAINED. 00739500
  807. * IF A FILE IS FOUND, CONTINUE; 00739750
  808. * OTHERWISE, EXIT VIA A GOTO TO DMKDSPCH 00740000
  809. * IN THE CASE OF A 3800, IF THE SFBFLASH FIELD IS NOT ALL 00740250
  810. * ZEROES, IT MUST ALSO MATCH THE RDEVOVLY FIELD FOR A SPOOL 00740500
  811. * FILE TO BE CONSIDERED FOR PRINTING. 00740750
  812. * 00741000
  813. * 3. UNCHAIN THE SFBLOK FROM THE FILE CHAIN AND HOOK IT TO THE 00742000
  814. * RSPLCTL BLOK; WRITE A MESSAGE TO THE OPERATOR INDICATING 00743000
  815. * THE OWNERSHIP OF THE FILE; IF THE DEVICE IS A PUNCH, ASK 00744000
  816. * THE OPERATOR TO READY THE PUNCH, AND CONTINUE 00745000
  817. * 00746000
  818. * 4. PRINT OR PUNCH AN OUTPUT SEPARATOR RECORD 00747000
  819. * 00748000
  820. * 5. READ IN THE FIRST BUFFER OF THE FILE AND TEST FOR A BACK- 00749000
  821. * CHAIN FIELD OF ZERO. IF THE BACKCHAIN IS ZERO, THIS IS 00750000
  822. * REALLY THE FIRST BUFFER - IF THE DEVICE IS A 3800, 00751000
  823. * CALL DMKTCSET TO SET IT UP FOR THE FILE. IN ANY CASE, 00751300
  824. * CONTINUE TO NEXT STEP; IF BACK CHAIN IS 00751600
  825. * NOT ZERO, THE FILE IS BEING RESTARTED - LOCATE THE 00752000
  826. * NEAREST SKIP TO CHANNEL ONE AND CONTINUE 00753000
  827. * 00754000
  828. * 6. TEST TO SEE IF THE LAST PAGE BUFFER HAS BEEN PROCESSED. IF 00755000
  829. * IT HAS, GO TO STEP 8; OTHERWISE, CONTINUE 00756000
  830. * 00757000
  831. * 7. LOOP THRU THE CCWS IN THE BUFFER, ADJUSTING THEIR DATA 00758000
  832. * ADDRESSES TO CORRESPOND TO THE REAL PAGE ADDRESS OF THE 00759000
  833. * BUFFER AND FORCE SINGLE SPACE FOR PRINTER FILES IF DESIRED 00760000
  834. * WHEN ALL CCWS ARE SET, CALL DMKIOSQR TO START THE DEVICE AN 00761000
  835. * GO TO DMKDSPCH TO AWAIT THE INTERRUPT 00762000
  836. * EXCEPT IF THE DEVICE IS A 3800 PRINTER WHICH UTILIZES 00762150
  837. * DOUBLE BUFFERING. IN THIS CASE, SET UP THE SECOND BUFFER 00762300
  838. * IF IT DOESN'T HAVE I/O PENDING AND HAS VALID DATA 00762450
  839. * WAITING TO BE PRINTED. IN ADDITION, LOAD THE NEXT DASD 00762600
  840. * PAGE INTO THE BUFFER THAT JUST COMPLETED PRINTING. 00762750
  841. * 00763000
  842. * 8. WHEN THE LAST BUFFER HAS BEEN PROCESSED, TEST TO SEE IF 00764000
  843. * MORE COPIES OF THE FILE REMAIN TO BE MADE; 00765000
  844. * IF SO AN NOT A 3800, GO TO STEP 5; IF SO AND A 3800, 00765300
  845. * ISSUE THE 'END OF TRANSMISSION' CCW, SET UP THE FLASHING 00765600
  846. * AND COPY NUMBER INFORMATION AND CALL DMKTCSCO; IF NOT 00765900
  847. * AND IT IS A 3800, ISSUE THE 'MARK FORMS' CCW AND PUT THE 00766200
  848. * FILE ON THE DELAYED PURGE QUEUE. IF THE QUEUE HAS REACHED 00766500
  849. * MAXIMUM SIZE, RELEASE THE DASD BUFFERS FOR THE FIRST 00766800
  850. * FILE ON THE QUEUE. 00767100
  851. * OTHERWISE CALL DMKSPLDL TO RELEASE THE DASD BUFFERS 00767400
  852. * THAT CONTAINED THE FILE, AND GO TO STEP 2 00767700
  853. * 00768000
  854. *. 00769000
  855. SPACE 3 00770000
  856. RSPLOUT EQU * 00771000
  857. NI IOBFLAG,X'FF'-IOBRSTRT RESET RESTART FLAG 00772000
  858. TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED TO ONE @VA00701 00773000
  859. * USER ? 00774000
  860. BO FRETIOB YES -- FRET IOBLOK AND LEAVE @VA00701 00775000
  861. TM RDEVFLAG,RDEVACNT DEVICE BUSY WITH ACCOUNTING ? @VA00701 00776000
  862. BO FRETIOB YES -- FRET IOBLOK AND LEAVE @VA00701 00777000
  863. XC IOBRCNT,IOBRCNT CLEAR RESTART COUNTER @VA00701 00778000
  864. L R9,RDEVSPL PICK UP ACTIVE FILE POINTER 00779000
  865. TM IOBSTAT,IOBFATAL FATAL FLAG ?? 00780000
  866. BO PRNXTPAG YES - 00781000
  867. TM IOBCSW+4,CE+UE CHANNEL END OR UNIT EXCEPTION ?? 00782000
  868. * NORMAL INTERRUPT 00783000
  869. BNZ PRNXTPAG YES -- GO PROCESS NEXT PAGE BUFFER 00784000
  870. TM IOBCSW+4,DE DEVICE END ????? 00785000
  871. BO OUTDE YES -- 00786000
  872. OI IOBSTAT,IOBFATAL ERROR AND NOT UNIT CHECK 00787000
  873. B PRNXTPAG GO TO FATAL ROUTINE 00788000
  874. OUTDE EQU * 00789000
  875. * HERE ON INITIAL DEVICE END 00790000
  876. SR R7,R7 00791000
  877. LTR R9,R9 IS A FILE ALREADY OPEN ?? 00792000
  878. BZ RSPINIT NO - 00793000
  879. CLI 0(R9),X'FF' ADDRESS OF SFBLOK ?? (WARM START) 00794000
  880. * SET FOR ACTIVE FILE IN WARM START 00795000
  881. BE RSPINIT1 YES -- 00796000
  882. TM RDEVSTAT,RDEVNRDY INTERVENTION REQUIRED 00797000
  883. BZ FRETIOB NO -- 00798000
  884. TM RDEVTYPE,TYPPUN PUNCH TYPE ?? 00799000
  885. BZ FRETIOB NO -- LEAVE 00800000
  886. TM RDEVSTAT,RDEVBUSY IS IT REALLY NOT READY ?? 00801000
  887. BO FRETIOB YES -- FRET IOB AND LEAVE 00802000
  888. B PCHHDR DEVICE END FOR NOSEP CONDITION 00803000
  889. RSPINIT TM RDEVFLAG,RDEVDRAN DEVICE DRAINED ? @VA00701 00804000
  890. BNZ FRETIOB YES -- LEAVE 00805000
  891. RSPINIT1 LR R7,R9 SET SFBLOK ADDRESS TO CORRECT GPR 00806000
  892. * THIS FOR ACTIVE FILE ON WARM START 00807000
  893. LA R0,RSPSIZE GET CORE FOR 00808000
  894. CALL DMKFREE RSPLCTL WORKAREA 00809000
  895. LR R9,R1 SAVE ITS ADDRESS 00810000
  896. ST R9,RDEVSPL IN DEVICE BLOK ACTIVE FILE POINTER 00811000
  897. XC RSPLCTL(RSPSIZE*8),RSPLCTL CLEAR WORKAREA 00812000
  898. CALL DMKPGTVG OBTAIN VIRTUAL ADDRESS SPACE 00813000
  899. LTR R1,R1 VIRTUAL ADDRESS PRESENT ?? 00814000
  900. BZ RSP003 NO -- LEAVE 00815000
  901. ST R1,RSPVPAGE AND SAVE ITS ADDRESS 00816000
  902. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM) 00817000
  903. ST R2,RSPRPAGE AND SAVE ITS ADDRESS 00818000
  904. CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 00818200
  905. BNE RSPINIT2 XFER IF NOT @V60B9BA 00818400
  906. CALL DMKPGTVG GET ANOTHER BUFFER @V60B9BA 00818600
  907. LTR R1,R1 ADDRESS PRESENT ? @V60B9BA 00818800
  908. BZ RSP003A XFER IF NOT @V60B9BA 00819000
  909. ST R1,RSPVPAG2 SAVE ADDR OF 2ND VIRT BUFF @V60B9BA 00819200
  910. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM) LOCK IT IN @V60B9BA 00819400
  911. ST R2,RSPRPAG2 AND SAVE ITS ADDRESS @V60B9BA 00819600
  912. RSPINIT2 LTR R7,R7 WARM START ACTIVE FILE ?? @V60B9BA 00819800
  913. BNZ ACTFILE YES - 00820000
  914. SPACE 3 00821000
  915. PRNXTFIL EQU * HERE TO FIND THE NEXT FILE TO PROCESS 00822000
  916. L R5,RDEVCLAS PICK UP DEVICE OUTPUT CLASS(ES) 00823000
  917. L R2,RSPRPAGE RESTORE REAL DPAGE ADDRESS 00824000
  918. PRESCAN SLDL R4,8 GET CLASS IN GPR8 00825000
  919. LA R15,DMKRSPPR POINT TO START OF PRINTER FILE CHAIN 00826000
  920. TM RDEVTYPE,TYPPRT IS IT A PRINTER? 00827000
  921. BO SFBLOOP2 YES -- 00828000
  922. LA R15,DMKRSPPU START OF PUNCH FILE CHAIN 00829000
  923. SPACE 00830000
  924. SFBLOOP2 L R7,SFBPNT-SFBLOK(,R15) POINT TO NEXT SFBLOK 00831000
  925. LTR R7,R7 IS THERE ONE? 00832000
  926. BZ CLASSCNT NO -- GO SEE IF MORE CLASSES TO 00833000
  927. * TESTED 00834000
  928. TM SFBFLAG,SFBUHOLD+SFBSHOLD SHOULD THE FILE BE HELD ? 00835000
  929. BNZ NEXTSFB2 YES -- SKIP IT 00836000
  930. TM SFBFLAG,SFBINUSE THIS FILE IN USE ?? @VA08075 00836300
  931. BO NEXTSFB2 YES, IGNORE THIS FILE @VA08075 00836600
  932. SPACE 2 00837000
  933. CLASTEST EX R4,CLICLASS COMPARE REQUESTED OUTPUT CLASS TO 00838000
  934. * DEVICE 00839000
  935. BE FILFOUND FOUND A FILE 00840000
  936. EX R4,TSTANY TEST FOR * CLASS @V200930 00841000
  937. BE FILFOUND YES, DO THIS FILE @V200930 00842000
  938. SPACE 2 00843000
  939. NEXTSFB2 LR R15,R7 SAVE POINTER TO LAST BLOK 00844000
  940. B SFBLOOP2 AND CONTINUE DOWN THE CHAIN 00845000
  941. SPACE 00846000
  942. CLASSCNT EQU * HERE IF NO MORE SFBLOKS -- RESCAN CHAIN WITH NEW CLASS 00847000
  943. LTR R5,R5 ANY MORE CLASSES TO LOOK AT? 00848000
  944. BZ PRTIDLE NO 00849000
  945. B PRESCAN YES -- GO SCAN CHAIN AGAIN 00850000
  946. SPACE 2 00851000
  947. CLICLASS CLI SFBCLAS,0 EXECUTED COMPARE 00852000
  948. TSTANY CLI =C'*',0 EXECUTED COMPARE @V200930 00853000
  949. SPACE 3 00854000
  950. FILFOUND EQU * HERE IF A VALID OUTPUT FILE IS LOCATED 00855000
  951. CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 00855250
  952. BNE FILFND2 XFER IF NOT @V60B9BA 00855500
  953. CLI SFBFLASH,X'00' FLASHING SPECIFIED ? @V60B9BA 00855750
  954. BE FILFND2 XFER IF NOT @V60B9BA 00856000
  955. CLC SFBFLASH,RDEVOVLY IS THIS THE RIGHT OVERLAY? @V60B9BA 00856250
  956. BNE NEXTSFB2 TRY NEXT FILE IF NOT @V60B9BA 00856500
  957. FILFND2 MVC SFBPNT-SFBLOK(4,R15),SFBPNT UNCHAIN THE SFBLOK @V60B9BA 00856750
  958. ACTFILE L R5,SFBSTART SAVE START OF FILE 00857000
  959. ST R5,SFBPNT IN NEXTPNT 00858000
  960. ST R7,RSPSFBLK SAVE ADDRESS OF SPOOL FILE BLOK 00859000
  961. * CLEAR OUT THE FILE DEPENDENT OPTIONS 00860000
  962. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00860100
  963. NI RDEVFLAG,X'FF'-(RDEVSPAC+RDEVTERM+RDEVBACK) 00861000
  964. SPACE 00862000
  965. SPACE 2 00863000
  966. PRTOPMSG LA R2,70 FUNCTION INDEX @V200930 00864000
  967. BAL R6,SETMSG SETUP MESSAGE @V200930 00865000
  968. CALL DMKQCNWT,PARM=OPERATOR+NORET @V200930 00866000
  969. L R2,RSPRPAGE GET ADDRESS OF LOCKED BUFFER 00867000
  970. TM RDEVFLAG,RDEVSEP PRINT OR PUNCH JOB SEPARATOR ?? 00868000
  971. BO CALLSEP YES -- 00869000
  972. TM RDEVTYPE,TYPPRT PRINTER ?? 00870000
  973. BZ STARTPUN NO -- 00871000
  974. TM SFBFLAG2,SFBRSTRT SYSTEM RESTART ?? 00872000
  975. BO CALLSEP YES -- 00873000
  976. TM RDEVFLAG,RDEVLOAD UCS VERIFIED ?? 00874000
  977. BO PROCESS1 YES -- 00875000
  978. CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 00875300
  979. BE PROCESS1 XFER IF SO @V60B9BA 00875600
  980. SPACE 00876000
  981. CALLSEP CALL DMKSEPSP CALL SEPARATOR ROUTINE 00877000
  982. TM IOBSTAT,IOBFATAL FATAL I/O ERROR ?? 00878000
  983. BZ PROCESS NO -- 00879000
  984. CALLSEP2 BAL R5,RECHAIN RECHAIN FILE @V60B9BA 00880000
  985. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00880100
  986. BAL R5,DRAINPRT DO EMERG DRAIN @VA09471 00881100
  987. B PRTDRAN AND GIVE DRAIN MESSAGE 00882000
  988. SPACE 00883000
  989. PROCESS TM RDEVTYPE,TYPPRT PRINTER ?? 00884000
  990. BO PROCESS1 YES -- 00885000
  991. SPACE 3 00886000
  992. STARTPUN EQU * HERE TO START THE PUNCH 00887000
  993. TM RDEVFLAG,RDEVSEP GIVE START DEV MSG ?? 00888000
  994. BO PCHHDR NO PUNCH HEADER 00889000
  995. CALL DMKSCNRD GET DEV ADDRESS @V200930 00890000
  996. CALL DMKCVTBH CONVERT TO HEX @V200930 00891000
  997. STCM R1,7,STARTADR AND STORE IN OPERATOR MESSAGE 00892000
  998. LA R1,STARTMSG POINT TO MESSAGE 00893000
  999. LA R0,STARTMSZ GET SIZE OF MESSAGE 00894000
  1000. CALL DMKQCNWT,PARM=OPERATOR+ALARM+NORET HAVE OPERATOR START 00895000
  1001. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00895100
  1002. * PUNCH 00896000
  1003. OI RDEVSTAT,RDEVNRDY INDICATE INTERVENTION REQUIRED 00897000
  1004. * FROM READY 00898000
  1005. B FRETIOB LEAVE - 00899000
  1006. SPACE 00900000
  1007. PCHHDR L R1,RSPRSTRT GET POINTER TO RSTRT CARD SAVEAREA 00901000
  1008. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00901100
  1009. NI RDEVSTAT,X'FF'-RDEVNRDY RESET INTERVENTION REQUIRED 00902000
  1010. L R7,RSPSFBLK ADDRESS OF SPOOL FILE BLOK 00903000
  1011. LTR R1,R1 IS THERE ONE YET? 00904000
  1012. BNZ PUNCHDR YES -- GO SET UP HEADER CARD 00905000
  1013. LA R0,12 GET CORE FOR A SAVEAREA 00906000
  1014. CALL DMKFREE -- 00907000
  1015. ST R1,RSPRSTRT AND SAVE IN RSPLCTL 00908000
  1016. PUNCHDR EQU * HERE TO SET UP THE PUNCH HEADER CARD 00909000
  1017. LM R3,R4,PUNCCWS PICK UP MODEL PUNCH CCWS 00910000
  1018. ALR R3,R1 ADJUST DATA ADDRESS OF PUNCH CCW 00911000
  1019. SR R5,R5 CLEAR TIC REG 00912000
  1020. * BUFFER 00913000
  1021. STM R3,R5,0(R1) SET PUNCH CCWS IN SAVEAREA 00914000
  1022. MVI 8(R1),8 SET UP TIC OP-CODE IN SAVEAREA 00915000
  1023. MVI 12(R1),C' ' BLANK OUT 00916000
  1024. MVC 13(79,R1),12(R1) THE PUNCH SAVEAREA 00917000
  1025. ST R5,92(,R1) -- 00918000
  1026. SPACE 3 00919000
  1027. MVC 12(6,R1),=C'USERID' MOVE IN KEYWORD 'USERID' 00920000
  1028. MVC 19(8,R1),SFBUSER MOVE IN USERID 00921000
  1029. ST R1,IOBRCAW SET UP IOBRCAW WITH POINTER TO 1ST 00922000
  1030. * CCW 00923000
  1031. MVC 28(5,R1),=C'CLASS' MOVE CLASS KEYWORD 00924000
  1032. MVC 34(1,R1),SFBCLAS MOVE CLASS IN 00925000
  1033. OI IOBFLAG,IOBRSTRT FAKE A RESTART TO PICK UP HEADER 00926000
  1034. CLI SFBFNAME,C' ' FILE NAME PRESENT ?? 00927000
  1035. BE PCHDATE NO -- FORGET KEYWORD 00928000
  1036. MVC 36(4,R1),=C'NAME' MOVE KEYWORD NAME 00929000
  1037. MVC 41(24,R1),SFBFNAME MOVE IN FILE NAME AND FILE TYPE 00930000
  1038. PCHDATE LA R1,70(,R1) POINT TO DATE FIELD 00931000
  1039. LA R2,10(,R1) POINT TO TIME FIELD 00932000
  1040. CALL DMKCVTDT AND FILL THEM IN 00933000
  1041. PROCESS1 EQU * 00934000
  1042. CLI RDEVTYPE,TYP3800 IS IT A 3800 ? @V60B9BA 00934050
  1043. BNE PROCESS2 XFER IF NOT @V60B9BA 00934100
  1044. CALL DMKTCSET SET UP THE 3800 @V60B9BA 00934150
  1045. BZ PROCESS3 TRANSFER IF EVERYTHING OK @VA10572 00934200
  1046. BM MSG428E SPOOL PAGING ERROR @VA12900 00934225
  1047. TM IOBSTAT,IOBFATAL WAS IT A HARDWARE ERROR ? @V60B9BA 00934250
  1048. BO CALLSEP2 DRAIN THE PRINTER @V60B9BA 00934300
  1049. TM RDEVFLAG,RDEVSEP SEPARATOR PRINTED? @VMI0080 00934350
  1050. BZ NOMKFM XFER IF NOT @VMI0080 00934400
  1051. NI IOBFLAG,X'FF'-IOBRSTRT RESET RESTART IN IOBLOK @VA10572 00934405
  1052. LH R5,SFBCOPY SAVE NUMBER OF COPIES @VMI0080 00934450
  1053. MVC SFBCOPY,=H'1' FORCE IT TO 1 @VMI0080 00934500
  1054. CALL DMKTCSCO DO THE 'MARK FORM' @VMI0080 00934550
  1055. STH R5,SFBCOPY RESTORE NUMBER OF COPIES @VMI0080 00934600
  1056. NOMKFM TM RDEVSTA2,RDEVPURG PURGE ON MODULE ERROR? @VMI0080 00934650
  1057. BO DELFILE2 XFER IF SO @V60B9BA 00934700
  1058. OI SFBFLAG,SFBUHOLD PUT FILE IN USER HOLD @V60B9BA 00934750
  1059. BAL R5,RECHAIN RECHAIN THE FILE @V60B9BA 00934800
  1060. B TSTDRAIN SEE IF PRINTER DRAINED @V60B9BA 00934850
  1061. PROCESS3 DS 0H @VA10572 00934855
  1062. NI IOBFLAG,X'FF'-IOBRSTRT RESET RESTART IN IOBLOK @VA10572 00934860
  1063. PROCESS2 OI RDEVSTA2,RDEVINTL PREVENT SFBLOK CHANGES @V60B9BA 00934900
  1064. NI RSPFLAG1,X'FF'-(RSPBF1IO+RSPBF2IO+RSPBF1VL+RSPBF2VL) X00934950
  1065. RESET THE I/O FLAGS @VA09263 00934975
  1066. SPACE 1 00935000
  1067. L R0,SFBSTART GET SPOOLING FILE START 00936000
  1068. L R1,RSPVPAGE GET ADDRESS OF VIRTUAL BUFFER 00937000
  1069. CALL DMKRPAGT,PARM=(BRING+SYSTEM+LOCK) 00938000
  1070. BNZ MSG428E SPOOL PAGING ERROR 00939000
  1071. NI RDEVSTA2,255-RDEVINTL NO LONGER NEEDED @VA05941 00939500
  1072. OI RSPFLAG1,RSPBF1VL MARK BFR 1 VALID @V60B9BA 00939750
  1073. BAL R6,NEXTBUFF GET 1ST BUFFER AND REC BLOCK 00940000
  1074. LA R1,SPSIZE(,R2) POINT TO 1ST CCW IN THE BUFFER 00941000
  1075. ST R1,IOBCAW AND SAVE AS NORMAL CAW 00942000
  1076. LA R15,1 INSERT A BACKSPACE 00943000
  1077. ST R15,RSPMISC COUNT OF 1 PAGE 00944000
  1078. TM RDEVTYPE,TYPPUN IS IT PUNCH ?? 00945000
  1079. BZ CKPREPAG NO -- 00946000
  1080. L R6,RSPRSTRT SET UP TIC ADDRESS 00947000
  1081. STCM R1,7,9(R6) TO POINT TO FIRST BUFFER 00948000
  1082. B CKPREPAG MAKE THIS IS FIRST PAGE 00949000
  1083. RDEVINTL EQU X'08' @VA05941 00949500
  1084. SPACE 3 00950000
  1085. NEXTBUFF EQU * FIND RECBLOK AND UPDATE 00951000
  1086. CL R1,RSPVPAGE ARE WE ON FIRST BUFFER? @V60B9BA 00951250
  1087. BE NXTBF1 XFER IF SO @V60B9BA 00951500
  1088. ST R2,RSPRPAG2 SAVE REAL ADDR IN BFR 2 @V60B9BA 00951750
  1089. ST R0,RSPDPAG2 SAVE DASD ADDR IN BFR 2 @V60B9BA 00952000
  1090. B NXTBF2 CONTINUE @V60B9BA 00952250
  1091. NXTBF1 ST R2,RSPRPAGE SAVE REAL PAGE ADDRESS @V60B9BA 00952500
  1092. ST R0,RSPDPAGE SAVE DASD PAGE ADDRESS 00953000
  1093. NXTBF2 SRL R0,16 GET CYLINDER NUMBER IN LOW HALFWORD 00954000
  1094. LA R1,SFBRECS POINT TO ALLOCATION STRING 00955000
  1095. USING RECBLOK,R1 00956000
  1096. TM SFBFLAG,SFBRECOK+SFBRECER ARE ALLOCATION RECORDS 00957000
  1097. * COMPLETE OR IN ERROR ?? 00958000
  1098. BCR 7,R6 YES - DO NOT PROCESS 00959000
  1099. SPACE 00960000
  1100. FINDBLOK LR R4,R1 SAVE BACKCHAIN POINTER 00961000
  1101. L R1,RECPNT POINT TO NEXT RECBLOK ON CHAIN 00962000
  1102. LTR R1,R1 IS THERE ONE ?? 00963000
  1103. BNZ TESTCYL YES -- SEE IF ITS FOR THIS CYLINDER 00964000
  1104. SPACE 00965000
  1105. LA R0,RECSIZE BUILD A NEW BLOK 00966000
  1106. CALL DMKFREE 00967000
  1107. ST R1,RECPNT-RECBLOK(,R4) CHAIN NEW BLOK 00968000
  1108. XC RECBLOK(RECSIZE*8),RECBLOK CLEAR TO ZEROES 00969000
  1109. L R0,RSPDPAGE GET CYLINDER NUMBER 00970000
  1110. C R2,RSPRPAGE IS IT THE FIRST BUFFER? @V60B9BA 00970250
  1111. BE *+8 XFER IF SO @V60B9BA 00970500
  1112. L R0,RSPDPAG2 WE WANT 2ND BFR DASD ADDR @V60B9BA 00970750
  1113. ST R0,RECCYL AND STORE IN BLOK 00971000
  1114. MVI RECUSED,X'00' ZERO OUT PAGE NUMBER 00972000
  1115. B SETREC AND GO MARK RECORD 00973000
  1116. SPACE 00974000
  1117. TESTCYL CH R0,RECCYL IS RECBLOK FOR THIS CYLINDER 00975000
  1118. BNE FINDBLOK NO -- KEEP LOOKING 00976000
  1119. C R2,RSPRPAGE IS IT THE FIRST BUFFER? @VMI0090 00976100
  1120. BNE TESTCYL2 XFER IF NOT @VMI0090 00976200
  1121. CLC RECCYL+3(1),RSPDPAGE+3 CORRECT DEVICE ?? 00977000
  1122. BNE FINDBLOK NO - KEEP LOOKING 00978000
  1123. B SETREC WE FOUND THE BLOCK @VMI0090 00978100
  1124. SPACE 00978200
  1125. TESTCYL2 CLC RECCYL+3(1),RSPDPAG2+3 CORRECT DEV FOR BFR 2? @VMI0090 00978300
  1126. BNE FINDBLOK NO -- KEEP LOOKING @VMI0090 00978400
  1127. SETREC EQU * FOUND THE BLOK -- 00979000
  1128. SR R14,R14 00980000
  1129. IC R14,RSPDPAGE+2 GET PAGE NUMBER 00981000
  1130. C R2,RSPRPAGE IS IT THE FIRST BUFFER ? @V60B9BA 00981250
  1131. BE *+8 XFER IF SO @V60B9BA 00981500
  1132. IC R14,RSPDPAG2+2 GET PAGE FROM BFR 2 @V60B9BA 00981750
  1133. BCTR R14,0 -1 00982000
  1134. SRDL R14,3 DIVIDE BY 8 00983000
  1135. SRL R15,29 AND SAVE THE REMAINDER 00984000
  1136. LA R14,RECMAP(R14) POINT TO BYTE TO UPDATE 00985000
  1137. IC R15,ALOCTABL(R15) AND GET BIT MASK 00986000
  1138. EX R15,TSTALLOC SEE IF PAGE ALREADY ALLOCATED @VA11232 00986100
  1139. BOR R6 YES, DON'T ALLOCATE AGAIN @VA11232 00986200
  1140. EX R15,ALOCATE MARK THE PAGE 00987000
  1141. IC R15,RECUSED GET NUMBER OF RECORDS FOUND 00988000
  1142. LA R15,1(,R15) INCREMENT 00989000
  1143. STC R15,RECUSED AND SAVE 00990000
  1144. BR R6 RETURN TO CALLER 00991000
  1145. SPACE 3 00992000
  1146. CKBKMSG EQU * 00993000
  1147. SPACE 00993200
  1148. * IF 'BACKSPACE EOF' WAS SPECIFIED, MAKE SFBLAST THE 00993400
  1149. * CURRENT BUFFER AND BACK UP FROM THERE. 00993600
  1150. SPACE 00993800
  1151. NI RSPFLAG1,X'FF'-(RSPBF1VL+RSPBF1IO+RSPBF2VL+RSPBF2IO) X00993850
  1152. TURN OFF BUFFER FLAGS @VA11068 00993870
  1153. LR R3,R2 SAVE BUFFER ADDRESS 00994000
  1154. LA R2,10 FUNCTION INDEX @V200930 00995000
  1155. BAL R6,SETMSG SETUP MESSAGE @V200930 00996000
  1156. CALL DMKQCNWT,PARM=OPERATOR+NORET @V200930 00997000
  1157. LR R2,R3 RESTORE BUFFER ADDRESS 00998000
  1158. L R3,RSPMISC SEE IF BACKSPAC EOF @V60B9BA 00998150
  1159. LTR R3,R3 IF SO, IT'S NEGATIVE @V60B9BA 00998300
  1160. BNM NOTBKEOF XFER IF NOT NEGATIVE @V60B9BA 00998450
  1161. LPR R3,R3 MAKE IT POSITIVE @V60B9BA 00998600
  1162. ST R3,RSPMISC STORE IT BACK @V60B9BA 00998750
  1163. SR R6,R6 ZERO DISPLACEMENT OF CCW @V60B9BA 00998900
  1164. CLC SFBSTART,SFBLAST ARE WE ON LAST PAGE NOW? @V60B9BA 00999050
  1165. BE CKBK2 XFER IF SO @V60B9BA 00999200
  1166. MVC SFBSTART,SFBLAST MAKE LAST PAGE CURRENT @V60B9BA 00999350
  1167. LR R3,R2 NON-ZERO VALUE IN R3 @V60B9BA 00999500
  1168. B REFPAGE START BACKING UP @V60B9BA 00999650
  1169. NOTBKEOF L R6,IOBCSW GET ADDRESS OF LAST CCW EXEC@V60B9BA 00999800
  1170. N R6,F4095 GET DISPLACEMENT INTO PAGE 01000000
  1171. CKBK2 L R3,SPPREPAG GET PREVIOUS PAGE BUFFER ADDRESS 01001000
  1172. B REFPAGE START WITH CURRENT PAGE 01002000
  1173. SPACE 2 01003000
  1174. CKPREPAG L R0,SPPREPAG GET PREVIOUS PAGE BUFFER ADDRESS 01004000
  1175. SR R6,R6 ZERO DISPLACEMENT OF LAST CCW 01005000
  1176. LTR R3,R0 WAS THERE ONE ?? 01006000
  1177. BZ BACKCOMP NO -- THIS IS FIRST PAGE 01007000
  1178. ST R0,SFBSTART SAVE NEW STARTING PAGE ADDRESS 01008000
  1179. REFPAGE L R1,RSPVPAGE GET VIRTUAL BUFFER ADDRESS 01009000
  1180. L R0,SFBSTART REFRESH R0 01010000
  1181. CALL DMKRPAGT,PARM=(BRING+SYSTEM+LOCK) 01011000
  1182. BNZ MSG428E SPOOL PAGING ERROR 01012000
  1183. ST R2,RSPRPAGE STORE REAL PAGE ADDRESS 01013000
  1184. ST R0,RSPDPAGE STORE DASD PAGE ADDRESS 01014000
  1185. LTR R3,R3 FIRST PAGE ?? 01015000
  1186. BZ BACKCOMP YES -- START PROCESSING 01016000
  1187. OI SFBFLAG,SFBRECER INDICATE ALLOCATE 01017000
  1188. * CHAIN INCOMPLETE 01018000
  1189. TM RDEVFLAG,RDEVRSTR RESTART REQUESTED? 01019000
  1190. BO CKPREPAG YES -- FIND FIRST PAGE OF FILE 01020000
  1191. TM RDEVTYPE,TYPPUN IS IT A PUNCH? 01021000
  1192. BO CKPREPAG YES -- RESTART FROM THE TOP 01022000
  1193. SR R3,R3 CLEAR SKIP COUNTER 01023000
  1194. SR R4,R4 SET DUMMY 01024000
  1195. BCTR R4,0 BACKSPACE COMPARE REGISTER 01025000
  1196. LTR R6,R6 LAST CCW ADDRESS PRESENT ?? 01026000
  1197. BZ *+6 NO -- 01027000
  1198. ALR R6,R2 ADD BUFFER ADDRESS TO DISPLACEMENT 01028000
  1199. LA R1,SPSIZE(,R2) POINT TO FIRST CCW 01029000
  1200. LR R15,R2 SET UP FOR TIC CHAIN TEST 01030000
  1201. A R15,F4095 POINT TO END OF BUFFER 01031000
  1202. L R0,SPRECNUM AND GET NUMBER OF CCWS IN BUFFER 01032000
  1203. CKSKIP1 EQU * HERE TO TRY TO RESTART AT THE TOP OF A PAGE 01033000
  1204. CLR R1,R2 CCW ADDRESS WITHIN BUFFER PAGE 01034000
  1205. BL MSG428D NO -- INVALID TIC CHAIN 01035000
  1206. CLR R1,R15 CCW ADDRESS WITHIN BUFFER PAGE 01036000
  1207. BNL MSG428D NO -- INVALID TIC CHAIN 01037000
  1208. LTR R6,R6 ARE WE CHECKING FOR PART OF PAGE 01038000
  1209. BZ TSTSKIP NO -- SKIP COMPARE 01039000
  1210. CLR R1,R6 HAVE WE REACH LAST CCW EXECUTED 01040000
  1211. BNL ZERO6 YES -- DONT SCAN THE REST OF BUFFER 01041000
  1212. TSTSKIP CLI 0(R1),X'89' IS IT A PRINT AND SKIP TO CHANNEL 01042000
  1213. * ONE? 01043000
  1214. BE CKBACKSP YES -- GO RESTART 01044000
  1215. CLI 0(R1),X'8B' IS IT AN IMMEDIATE SKIP TO ONE? 01045000
  1216. BE CKBACKSP YES -- 01046000
  1217. CKIMMED TM 4(R1),SKIP IS THIS RECORD IMMEDIATE ?? @V293598 01047000
  1218. BO ADD8 YES -- NEXT CCW IS ADJACENT @V293598 01048000
  1219. AH R1,10(R1) POINT TO NEXT CCW 01049000
  1220. B SKIP8 01050000
  1221. ADD8 LA R1,8(,R1) POINT TO NEXT CCW 01051000
  1222. SKIP8 BCT R0,CKSKIP1 AND KEEP LOOKING FOR A SKIP 01052000
  1223. SPACE 01053000
  1224. ZERO6 SR R6,R6 CHECK ONLY FIRST BUFFER 01054000
  1225. L R0,SPRECNUM RESTORE CCW COUNTER 01055000
  1226. S R3,RSPMISC SUBTRACT NUMBER OF PAGES REMAINING 01056000
  1227. * TO BACK UP 01057000
  1228. LTR R3,R3 ARE WE FINISHED YET ?? 01058000
  1229. BNM SETBACK YES -- ENOUGH SKIPS IN THIS BUFFER 01059000
  1230. LPR R3,R3 GET NUMBER OF ADDITIONAL SKIPS 01060000
  1231. * NEEDED 01061000
  1232. ST R3,RSPMISC AND SAVE IT 01062000
  1233. B CKPREPAG GO CONTINUE TO BACK UP 01063000
  1234. SPACE 2 01064000
  1235. SETBACK LA R1,SPSIZE(,R2) POINT TO 1ST CCW IN THE BUFFER 01065000
  1236. LR R4,R3 GET NUMBER OF SKIPS TO BYPASS 01066000
  1237. TM SFBFLAG2,SFBRSTRT+SFBREQUE FILE RESTARTED OR REQUEUED ? 01067000
  1238. BZ *+6 NO -- LEAVE COUNT AS IS 01068000
  1239. SR R4,R4 START AT FIRST SKIP ON PAGE 01069000
  1240. SR R3,R3 AND ZERO THE SKIP COUNTER 01070000
  1241. B CKSKIP1 GO FIND RESTART CCW 01071000
  1242. SPACE 3 01072000
  1243. CKBACKSP CR R3,R4 HAVE ENOUGH SKIPS BEEN BYPASSED ?? 01073000
  1244. BE SETCAW YES -- GO SET UP RESTART CAW 01074000
  1245. LA R3,1(,R3) ADD ONE TO NUMBER OF SKIPS 01075000
  1246. B CKIMMED AND GO TEST FOR CCW LENGTH 01076000
  1247. SPACE 2 01077000
  1248. SETCAW ST R1,IOBRCAW SET UP RESTART CAW 01078000
  1249. OI IOBFLAG,IOBRSTRT SET RESTART FLAG TO USE RESTART CAW 01079000
  1250. BACKCOMP EQU * @V4075A0 01080100
  1251. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01080200
  1252. NI RDEVFLAG,X'FF'-(RDEVBACK+RDEVRSTR) @V4075A0 01080300
  1253. * RESET BACKSPACE AND RESTART FLAG 01081000
  1254. NI SFBFLAG2,X'FF'-(SFBRSTRT+SFBREQUE) RESET FLAGS 01082000
  1255. OC RSPVPAG2,RSPVPAG2 DOUBLE BUFFERING ACTIVE? @VA11068 01082100
  1256. BZ *+8 NO @VA11068 01082200
  1257. OI RSPFLAG1,RSPBF1VL MARK BUFFER VALID @VA11068 01082300
  1258. B PRCCWS GO PROCESS BUFFER 01083000
  1259. SPACE 3 01084000
  1260. TYPERADD EQU * HERE TO GET DEVICE TYPE AND 01085000
  1261. * ADDRESS FOR ERROR MESSAGES 01086000
  1262. LA R0,5 LENGTH OF AREA FOR MESSAGE DATA @VA00701 01087000
  1263. CALL DMKFREE GET STORAGE 01088000
  1264. LR R3,R1 SAVE ADDRESS OF AREA 01089000
  1265. XC 0(40,R3),0(R3) CLEAR AREA @VA00701 01090000
  1266. MVC 0(3,R3),=C'RDR' SET TYPE FOR MESSAGE 01091000
  1267. MVC 8(6,R3),=C'PURGED' .. 01092000
  1268. TM RDEVTYPC,CLASURI READER TYPE ?? 01093000
  1269. BO RADDR YES -- 01094000
  1270. MVC 8(6,R3),=C'HELD ' .. 01095000
  1271. MVC 0(3,R3),=C'PRT' .. 01096000
  1272. TM RDEVTYPE,TYPPRT PRINTER TYPE ?? 01097000
  1273. BO RADDR YES -- 01098000
  1274. MVC 0(3,R3),=C'PUN' .. 01099000
  1275. RADDR LH R1,IOBRADD GET DEVICE ADDRESS 01100000
  1276. CALL DMKCVTBH AND CONVERT 01101000
  1277. STCM R1,B'0111',4(R3) MOVE ADDRESS TO MESSAGE AREA 01102000
  1278. LA R0,4 LENGTH OF DATA 01103000
  1279. LA R1,4(R3) ADDRESS OF DEVICE ADDRESS DATA 01104000
  1280. BR R5 RETURN TO CALLER 01105000
  1281. SPACE 3 01106000
  1282. RSPMSG EQU * HERE TO CALL DMKERMSG TO WRITE ERROR MSG 01107000
  1283. ICM R0,B'1110',ID+3 INSERT MODEULE ID 01108000
  1284. O R2,=X'B0000000' INDICATE RETURN, ALARM 01109000
  1285. * AND OPERATOR 01110000
  1286. STM R0,R1,32(R3) SAVE PARM R0 AND R1 @VA00701 01111000
  1287. LA R0,CPEXSIZE LENGTH OF CPEXBLOK @VA00701 01112000
  1288. CALL DMKFREE GET STORAGE @VA00701 01113000
  1289. USING CPEXBLOK,R1 @VA00701 01114000
  1290. XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR BLOK @VA00701 01115000
  1291. BAL R15,MSGSTK SET UP ENTRY POINT AND STACK @VA00701 01116000
  1292. LM R0,R1,32(R3) RESTORE R0 AND R1 @VA00701 01117000
  1293. CALL DMKERMSG CALL MESSAGE WRITER @VA00701 01118000
  1294. LA R0,5 LENGTH OF DATA AREA @VA00701 01119000
  1295. LR R1,R3 ADDRESS OF DATA AREA @VA00701 01120000
  1296. CALL DMKFRET RETURN STORAGE @VA00701 01121000
  1297. GOTO DMKDSPCH AND EXIT @VA00701 01122000
  1298. SPACE 01123000
  1299. MSGSTK STM R15,R13,CPEXADD SAVE REGS AND ENTRY POINT @VA00701 01124000
  1300. CALL DMKSTKCP STACK CPEXBLOK @VA00701 01125000
  1301. BR R5 @VA00701 01126000
  1302. SPACE 3 01127000
  1303. EJECT 01128000
  1304. *. 01129000
  1305. * 01130000
  1306. * DMKRSPUR - FORMAT ACTIVE FILE MESSAGE 01131000
  1307. * 01132000
  1308. * 1. SET BASE REGS FOR MODULE DMKRSP 01133000
  1309. * 2. SET FUNCTION INDEX FOR DEVICE TYPE 01134000
  1310. * 3. USE SUBROUTINE SETMSG TO FORMAT MESSAGE 01135000
  1311. * 4. SET RETURN REGS R0 AND R1 01136000
  1312. * 5. EXIT TO CALLER 01137000
  1313. * 01138000
  1314. *. 01139000
  1315. SPACE 2 01140000
  1316. USING SAVEAREA,R13 @V200930 01141000
  1317. USING *,R12 @V200930 01142000
  1318. DMKRSPUR ENTER SAVE REGS @V200930 01143000
  1319. LR R10,R13 SAVE SAVEARAE ADDRESS @V200930 01144000
  1320. L R12,=A(DMKRSP) SET R12 BASE @V200930 01145000
  1321. USING DMKRSP,R12 @V200930 01146000
  1322. LR R13,R12 SET R13 BASE @V200930 01147000
  1323. A R13,F4096 SET BASE @V200930 01148000
  1324. USING DMKRSP+4096,R13 @V200930 01149000
  1325. LA R2,60 SET FUNCTION INDEX @V200930 01150000
  1326. TM RDEVTYPC,CLASURI IS IT A READER ?? @V200930 01151000
  1327. BO MSGA YES, CONT @V200930 01152000
  1328. LA R2,40 SET FUNCTION INDEX @V200930 01153000
  1329. TM RDEVTYPE,TYPPRT IS IT A PRINTER ?? @V200930 01154000
  1330. BO *+8 YES, CONT @V200930 01155000
  1331. LA R2,50 SET FUNCTION INDEX @V200930 01156000
  1332. MSGA BAL R6,SETMSG FORMAT MESSAGE @V200930 01157000
  1333. LR R13,R10 RESTORE SAVEARAE ADDRESS @V200930 01158000
  1334. USING SAVEAREA,R13 @V200930 01159000
  1335. STM R0,R1,SAVER0 RETURN VALUES @V200930 01160000
  1336. EXIT RETURN TO CALLER @V200930 01161000
  1337. USING DMKRSP+4096,R13 BASE ADDRESSING @V200930 01162000
  1338. SPACE 3 01163000
  1339. SETMSG CALL DMKSCNRN GET DEVICE NAME @V200930 01164000
  1340. STCM R1,15,MSGDEV SET NAME @V200930 01165000
  1341. CALL DMKSCNRD GET DEVICE ADDRESS @V200930 01166000
  1342. CALL DMKCVTBH CONVERT TO HEX @V200930 01167000
  1343. STCM R1,7,MSGADR SET DEV ADDRESS @V200930 01168000
  1344. LA R2,MSGLIST(R2) PICK UP FUNCTION BY INDEX IN R2 @V200930 01169000
  1345. MVC MSGCONS(10),0(R2) SET FUNCTION @V200930 01170000
  1346. MVC MSGUSR(8),SFBUSER SET USERID @V200930 01171000
  1347. LH R1,SFBFILID GET SPOOL FILE ID @V200930 01172000
  1348. CALL DMKCVTBD CONVERT TO DEC @V200930 01173000
  1349. STCM R1,15,MSGFILE SET FILE NUMBER @V200930 01174000
  1350. LA R0,MSGSIZ1 SET RDR SIZE @V200930 01175000
  1351. TM RDEVTYPC,CLASURI IS IT A READER ?? @V200930 01176000
  1352. BO MSGEND YES, DONE @V200930 01177000
  1353. L R1,SFBRECNO GET RECORD COUNT @V200930 01178000
  1354. CALL DMKCVTBD CONVERT TO DEC @V200930 01179000
  1355. STCM R0,3,MSGRECS SET RECORD COUNT @V200930 01180000
  1356. STCM R1,15,MSGRECS+2 .. @V200930 01181000
  1357. LH R1,SFBCOPY GET COPY COUNT @V200930 01182000
  1358. CALL DMKCVTBD CONVERT TO DEC @V200930 01183000
  1359. STCM R1,3,MSGCNT SET COUNT @V200930 01184000
  1360. MVC MSGCLS(1),SFBCLAS SET FILE CLASS @V200930 01185000
  1361. MVC MSGCLS+2(3),=C'CON' SET FILE TYPE @V200930 01186000
  1362. CLI SFBTYPE,TYPPRT IS IT CON ?? @V200930 01187000
  1363. BE SETMSGL YES @V200930 01188000
  1364. MVC MSGCLS+2(3),=C'RDR' SET RDR TYPE @V200930 01189000
  1365. CLI SFBTYPE,TYPRDR IS IT RDR ?? @V200930 01190000
  1366. BE SETMSGL YES @V200930 01191000
  1367. MVC MSGCLS+2(3),=C'PRT' SET PRT TYPE @V200930 01192000
  1368. TM SFBTYPE,TYPPRT IS IT PRT ?? @V200930 01193000
  1369. BO SETMSGL YES @V200930 01194000
  1370. MVC MSGCLS+2(3),=C'PUN' SET PUNCH TYPE @V200930 01195000
  1371. SETMSGL LA R0,MSGL SET SIZE @V200930 01196000
  1372. MSGEND LA R1,MSG1 SET NESSAGE ADDRESS @V200930 01197000
  1373. BR R6 RETURN TO CALLER @V200930 01198000
  1374. SPACE 3 01199000
  1375. SPACE 3 01200000
  1376. SPACE 3 01201000
  1377. STARTMSG EQU * ALIGN PUNCH START MESSAGE 01202000
  1378. DC C'PUN ' 01203000
  1379. STARTADR DC C' ' SPACE FOR DEVICE ADDRESS 01204000
  1380. DC C' START FOR OUTPUT' 01205000
  1381. STARTMSZ EQU *-STARTMSG LENGTH OF MESSAGE 01206000
  1382. SPACE 01207000
  1383. DS 0H 01208000
  1384. EJECT 01209000
  1385. PRNXTPAG EQU * HERE GET THE NEXT SPOOLING PAGE BUFFER FOR A FILE 01210000
  1386. ICM R9,B'1111',RDEVSPL ACTIVE FILE ???? @VA00701 01211000
  1387. BZ RSPLEXIT NO - EXIT CAREFULLY 01212000
  1388. L R7,RSPSFBLK AND POINTER TO SPOOL FILE BLOK 01213000
  1389. L R2,RSPRPAGE GET ADDRESS OF REAL PAGE BUFFER 01214000
  1390. TM IOBSTAT,IOBFATAL FATAL IO ERROR ? 01215000
  1391. BO MSG430A YES - SAVE FILE 01216000
  1392. ICM R15,B'1111',IOBCAW UNSOLICITED AND CE INTERRUPT @VA01299 01217000
  1393. BZ FRETIOB YES - FRET IOB AND EXIT @VA01299 01218000
  1394. ICM R15,B'0111',IOBCSW+1 CCW ADDRESS ZERO ? @VA01299 01219000
  1395. BZ MSG430A YES - INVALID CSW - ERROR @VA01299 01220000
  1396. OC RSPVPAG2,RSPVPAG2 DOUBLE BUFFERING ACTIVE? @V60B9BA 01220250
  1397. BZ NODOUBL1 XFER IF NOT @V60B9BA 01220500
  1398. TM RSPFLAG1,RSPBF1IO INTERRUPT FROM BFR 1 ? @V60B9BA 01220750
  1399. BO NODOUBL1 XFER IF SO @V60B9BA 01221000
  1400. L R2,RSPRPAG2 WE WANT THE SECOND BUFFER @V60B9BA 01221250
  1401. NODOUBL1 TM RDEVTYPE,TYPPRT IS THIS A PRINTER? @V60B9BA 01221500
  1402. BO CKRESTRT YES -- TEST FOR UNIT EXCEPTION 01222000
  1403. TM RDEVFLAG,RDEVRSTR+RDEVBACK+RDEVTERM FLUSH OR BACKSPACE? 01223000
  1404. BNZ CKRESTRT YES--TEST WHICH 01224000
  1405. L R1,RSPRSTRT GET POINTER TO LAST CARD SAVEAREA 01225000
  1406. L R3,IOBCSW AND ADDRESS+8 OF LAST CCW EXECUTED 01226000
  1407. SH R3,=H'12' POINT TO DATA AREA OF LAST CARD 01227000
  1408. LTR R3,R3 ADDRESS ZERO ?? 01228000
  1409. BNP CKRESTRT YES - USE SAME INFORMATION 01229000
  1410. L R3,0(R3) PUNCHED 01230000
  1411. LTR R3,R3 ANY LAST RECORD ?? 01231000
  1412. BNP CKRESTRT NO - 01232000
  1413. L R3,8(R3) PICK UP TIC ADDRESS 01233000
  1414. LA R3,0(R3) CLEAR TIC OP CODE 01234000
  1415. LH R14,6(R3) CCW DATA COUNT 01235000
  1416. MVI 12(R1),C' ' CLEAR DATA AREA 01236000
  1417. MVC 13(79,R1),12(R1) 01237000
  1418. BCTR R14,0 - 1 FOR MOVE 01238000
  1419. EX R14,MVCPCH MOVE DATA TO LAST CARD SAVE 01239000
  1420. SPACE 3 01240000
  1421. CKRESTRT EQU * HERE TO TEST FOR FLUSH, RESTART 01241000
  1422. OC RSPVPAG2,RSPVPAG2 DOUBLE BUFFERING ACTIVE? @VMI0035 01241060
  1423. BZ DORSTRT XFER IF NOT @VMI0035 01241120
  1424. SPACE 01241180
  1425. * SEE IF RESTART HAS BEEN INDICATED 01241240
  1426. SPACE 01241300
  1427. TM RSPFLAG1,RSPBF1VL HAS IT BEEN TURNED OFF? @VMI0035 01241360
  1428. BO TRYBFR2 TRY FOR BUFFER 2 IF NOT @VMI0035 01241420
  1429. TM RSPFLAG1,RSPBF1IO IS THIS ON? @VMI0035 01241480
  1430. BO DORSTRT IF SO, THEN TRY RESTART @VMI0035 01241540
  1431. TRYBFR2 TM RSPFLAG1,RSPBF2VL HAS IT BEEN TURNED OFF? @VMI0035 01241600
  1432. BO NORSTRT IF NOT, NO RESTART INDICATED@VMI0035 01241660
  1433. TM RSPFLAG1,RSPBF2IO THIS MUST ALSO BE ON @VMI0035 01241720
  1434. BZ NORSTRT IF NOT, NO RESTART @VMI0035 01241780
  1435. DORSTRT DS 0H @VMI0035 01241840
  1436. TM RDEVFLAG,RDEVTERM FLUSH COMMAND ?? 01242000
  1437. BO PRTERM YES -- FLUSH CURRENT FILE 01243000
  1438. TM RDEVFLAG,RDEVRSTR+RDEVBACK BACKSPACE COMMAND ?? 01244000
  1439. BNZ CKBKMSG YES -- GO START BACKING UP 01245000
  1440. NORSTRT TM IOBCSW+4,UE UNIT EXCEPTION ?? @VMI0035 01246000
  1441. BO UNITEX YES -- 01247000
  1442. L R0,SPNXTPAG GET POINTER TO NEXT PAGE BUFFER 01248000
  1443. ST R0,SFBSTART AND SAVE IN SFBLOK 01249000
  1444. OC RSPVPAG2,RSPVPAG2 DOUBLE BUFFERING ACTIVE? @V60B9BA 01249070
  1445. BZ NODOUBL2 XFER IF NOT @V60B9BA 01249140
  1446. C R2,RSPRPAGE IS IT BUFFER 1 ? @V60B9BA 01249210
  1447. BNE DBLBFR2 XFER IF NOT @V60B9BA 01249280
  1448. DBLBFR1 NI RSPFLAG1,X'FF'-(RSPBF1IO+RSPBF1VL) RESET FLAGS @V60B9BA 01249350
  1449. CLC RSPDPAGE,SFBLAST FINISHED WITH FILE? @V60B9BA 01249420
  1450. BE PRENDFIL XFER IF SO @V60B9BA 01249490
  1451. TM RSPFLAG1,RSPBF2VL BFR 2 VALID? @V60B9BA 01249560
  1452. BZ RSPLEXIT EXIT IF NOT @V60B9BA 01249630
  1453. L R2,RSPRPAG2 REAL ADDR OF BFR 2 @V60B9BA 01249700
  1454. LA R1,SPSIZE(,R2) ADDR OF FIRST CCW @V60B9BA 01249770
  1455. ST R1,IOBCAW PUT IT IN THE IOB @V60B9BA 01249840
  1456. B BFR2SIO START THE I/O ON BFR 2 @V60B9BA 01249910
  1457. SPACE 01249980
  1458. DBLBFR2 NI RSPFLAG1,X'FF'-(RSPBF2IO+RSPBF2VL) RESET FLAGS @V60B9BA 01250050
  1459. CLC RSPDPAG2,SFBLAST FINISHED WITH FILE? @V60B9BA 01250120
  1460. BE PRENDFIL XFER IF SO @V60B9BA 01250190
  1461. TM RSPFLAG1,RSPBF1VL BUFFER 1 VALID? @V60B9BA 01250260
  1462. BZ RSPLEXIT EXIT IF NOT @V60B9BA 01250330
  1463. L R2,RSPRPAGE REAL ADDR OF BFR 1 @V60B9BA 01250400
  1464. LA R1,SPSIZE(,R2) ADDR OF FIRST CCW @V60B9BA 01250470
  1465. ST R1,IOBCAW SAVE IT IN THE IOB @V60B9BA 01250540
  1466. B BFR1SIO START I/O ON BUFFER 1 @V60B9BA 01250610
  1467. SPACE 2 01250680
  1468. NODOUBL2 CLC RSPDPAGE,SFBLAST FINISHED WITH FILE? @V60B9BA 01250750
  1469. BE PRENDFIL YES -- 01251000
  1470. ST R0,RSPDPAGE SAVE NEW PAGE ADDRESS 01252000
  1471. L R1,RSPVPAGE GET VIRTUAL BUFFER ADDRESS 01253000
  1472. CALL DMKRPAGT,PARM=(BRING+SYSTEM+LOCK) 01254000
  1473. BNZ MSG428E SPOOL PAGING ERROR 01255000
  1474. BAL R6,NEXTBUFF ALL BUFFERS EXCEPT FIRST 01256000
  1475. PRCCWS EQU * HERE TO ADJUST PRINTER/PUNCH CCWS 01257000
  1476. L R14,SPRECNUM GET NUMBER OF CCWS IN BUFFER 01258000
  1477. LA R1,SPSIZE(,R2) POINT TO 1ST CCW IN BUFFER 01259000
  1478. LR R15,R2 SET UP FOR VALID ADDRESS TEST 01260000
  1479. A R15,F4095 POINT TO END OF BUFFER 01261000
  1480. OC RSPVPAG2,RSPVPAG2 DOUBLE BUFFERING ACTIVE? @VA09263 01261100
  1481. BNZ PRCCWS2 XFER IF SO @VA09263 01261200
  1482. ST R1,IOBCAW ADDRESS OF CHANNEL PROGRAM 01262000
  1483. PRCCWS2 TM RDEVTYPE,TYPPUN IS IT A PUNCH? @VA09263 01263000
  1484. BZ SPACTEST NO -- GO TEST FOR FORCED SPACING 01264000
  1485. L R6,RSPRSTRT POINT TO SAVED CARD FROM LAST BUFFER 01265000
  1486. STCM R1,B'0111',9(R6) UPDATE TIC ADDRESS 01266000
  1487. B GETCCWS AND CONTINUE WITH THE BUFFER 01267000
  1488. SPACE 2 01268000
  1489. SPACE 2 01269000
  1490. SPACTEST CLR R1,R2 CCW ADDRESS BELOW BUFFER ?? 01270000
  1491. BL MSG428D YES -- INVALID DATA IN BUFFER 01271000
  1492. CLR R1,R15 CCW ADDRESS ABOVE BUFFER ?? 01272000
  1493. BNL MSG428D YES -- INVALID DATA IN BUFFER 01273000
  1494. TM RDEVFLAG,RDEVSPAC FORCE SINGLE SPACING ?? 01274000
  1495. BZ NORMAL NO -- NORMAL CARRIAGE CONTROL 01275000
  1496. TM 0(R1),X'80' SKIP COMMAND ?? 01276000
  1497. BZ NORMAL NO -- 01277000
  1498. NI 0(R1),X'0B' TURN OFF CHANNEL SKIP BITS 01278000
  1499. OI 0(R1),X'08' FORCE SPACING 01279000
  1500. NORMAL TM 4(R1),SKIP IS THIS RECORD IMMEDIATE ?? @V293598 01280000
  1501. BO IMMEDOP YES -- 01281000
  1502. GETCCWS LM R3,R5,0(R1) PICK UP CCWS IN BUFFER 01282000
  1503. ALR R3,R1 RELOCATE DATA ADDRESS 01283000
  1504. ALR R5,R1 RELOCATE TIC ADDRESS 01284000
  1505. STM R3,R5,0(R1) AND REPLACE IN THE BUFFER 01285000
  1506. TM RDEVTYPE,TYPPUN IS IT A PUNCH? 01286000
  1507. BZ SAVEPT NO -- NO BACK CHAIN NEEDED 01287000
  1508. LA R4,0(R5) POINT TO END OF RECORD -4 01288000
  1509. SH R4,=H'4' 01289000
  1510. CLR R4,R1 BELOW START OF RECORD ?? @VA02778 01290000
  1511. BL MSG428D YES -- PRINT MESSAGE @VA02778 01291000
  1512. CLM R15,B'0111',9(R1) TIC ADDRESS WITHIN PAGE ?? @VA02778 01292000
  1513. BNH MSG428D NO -- PRINT MESSAGE @VA02778 01293000
  1514. ST R6,0(R4) SAVE POINTER TO PREVIOUS RECORD 01294000
  1515. * FOR RESTART 01295000
  1516. SAVEPT LA R6,0(R1) SAVE POINTER TO THIS RECORD 01296000
  1517. LA R1,0(R5) ADJUST TO NEXT CCW BY TIC ADDRESS 01297000
  1518. CKNEXT BCT R14,SPACTEST AND CONTINUE THRU THE BUFFER 01298000
  1519. CLR R1,R2 ADDRESS BELOW BUFFER ??? @VA06118 01298100
  1520. BL MSG428D YES, SEND MESSAGE @VA06118 01298200
  1521. CLR R1,R15 ADDRESS ABOVE BUFFER ??? @VA06118 01298300
  1522. BNL MSG428D YES, SEND MESSAGE @VA06118 01298400
  1523. MVC 0(8,R1),SENSECCW FINISH OFF THE PROGRAM WITH A PHONY 01299000
  1524. OC RSPVPAG2,RSPVPAG2 DBL BUFFERING ACTIVE? @V60B9BA 01299030
  1525. BZ NODOUBL3 XFER IF NOT @V60B9BA 01299060
  1526. SPACE 01299090
  1527. CL R2,RSPRPAGE FILLING FIRST BFR? @V60B9BA 01299120
  1528. BNE BFR2FILL XFER IF NOT @V60B9BA 01299150
  1529. BFR1FILL TM RSPFLAG1,RSPBF2IO IO PENDING ON BFR 2? @V60B9BA 01299180
  1530. BO RSPLEXIT EXIT IF SO @V60B9BA 01299210
  1531. BFR1SIO ST R12,IOBIRA STORE INT RETURN ADDR @V60B9BA 01299240
  1532. L R2,RSPRPAGE GET THE DASD BUFFER ADDRESS @VA09263 01299247
  1533. LA R1,SPSIZE(,R2) POINT TO FIRST CCW @VA09263 01299253
  1534. ST R1,IOBCAW ADDRESS OF CHANNEL PROGRAM @VA09263 01299259
  1535. NI IOBSTAT,X'FF'-IOBFATAL RESET FATAL FLAG @V60B9BA 01299270
  1536. OI RSPFLAG1,RSPBF1IO SET BFR 1 I/O PENDING @V60B9BA 01299300
  1537. CALL DMKIOSQR START THE I/O GOING @V60B9BA 01299330
  1538. CLC RSPDPAGE,SFBLAST IS THIS THE LAST @V60B9BA 01299360
  1539. BE RSPLEXIT EXIT IF SO @V60B9BA 01299390
  1540. TM RDEVFLAG,RDEVTERM+RDEVBACK+RDEVRSTR @VMI0035 01299420
  1541. * FLUSH OR BACKSPAC COMMAND? 01299450
  1542. BZ BFR1SIO2 XFER IF NOT @VMI0035 01299480
  1543. NI RSPFLAG1,X'FF'-RSPBF1VL RESET - INDICATE RESTART@VMI0035 01299510
  1544. B RSPLEXIT WAIT FOR INTERRUPT @VMI0035 01299540
  1545. BFR1SIO2 L R0,SPNXTPAG GET NEXT DASD BUFFER @VMI0035 01299570
  1546. ST R0,SFBSTART SAVE ITS DASD ADDRESS @V60B9BA 01299600
  1547. ST R0,RSPDPAG2 SAVE IT THERE ALSO @V60B9BA 01299630
  1548. L R1,RSPVPAG2 LET'S BRING IN BFR 2 @V60B9BA 01299660
  1549. CALL DMKRPAGT,PARM=(BRING+SYSTEM+LOCK) BRING IT IN @V60B9BA 01299690
  1550. BNZ MSG428E PAGING ERROR @V60B9BA 01299720
  1551. OI RSPFLAG1,RSPBF2VL BFR 2 NOW VALID @V60B9BA 01299750
  1552. BAL R6,NEXTBUFF SET UP ALLOC RECDS @V60B9BA 01299780
  1553. B PRCCWS NOW ADJUST CCWS IN BFR 2 @V60B9BA 01299810
  1554. SPACE 01299840
  1555. BFR2FILL TM RSPFLAG1,RSPBF1IO IO PENDING ON BFR 1 ? @V60B9BA 01299870
  1556. BO RSPLEXIT EXIT IF SO @V60B9BA 01299900
  1557. BFR2SIO ST R12,IOBIRA SET INT RETURN ADDR @V60B9BA 01299930
  1558. L R2,RSPRPAG2 GET THE DASD BUFFER ADDRESS @VA09263 01299937
  1559. LA R1,SPSIZE(,R2) POINT TO FIRST CCW @VA09263 01299943
  1560. ST R1,IOBCAW ADDRESS OF CHANNEL PROGRAM @VA09263 01299949
  1561. NI IOBSTAT,X'FF'-IOBFATAL RESET FATAL FLAG @V60B9BA 01299960
  1562. OI RSPFLAG1,RSPBF2IO SET BFR 2 IO PENDING @V60B9BA 01299990
  1563. CALL DMKIOSQR START THE IO GOING @V60B9BA 01300020
  1564. CLC RSPDPAG2,SFBLAST IS THIS THE LAST? @V60B9BA 01300050
  1565. BE RSPLEXIT EXIT IF SO @V60B9BA 01300080
  1566. TM RDEVFLAG,RDEVTERM+RDEVBACK+RDEVRSTR @VMI0035 01300110
  1567. * FLUSH OR BACKSPAC COMMAND? 01300140
  1568. BZ BFR2SIO2 XFER IF NOT @VMI0035 01300170
  1569. NI RSPFLAG1,X'FF'-RSPBF2VL RESET - INDICATE RESTART@VMI0035 01300200
  1570. B RSPLEXIT WAIT FOR INTERRUPT @VMI0035 01300230
  1571. BFR2SIO2 L R0,SPNXTPAG GET NEXT DASD BUFFER @VMI0035 01300260
  1572. ST R0,SFBSTART AND SAVE IN SFBLOK @V60B9BA 01300290
  1573. ST R0,RSPDPAGE GET SET TO BRING IT INTO @V60B9BA 01300320
  1574. L R1,RSPVPAGE ... BUFFER 1 @V60B9BA 01300350
  1575. CALL DMKRPAGT,PARM=(BRING+SYSTEM+LOCK) BRING IT IN @V60B9BA 01300380
  1576. BNZ MSG428E PAGING ERROR @V60B9BA 01300410
  1577. OI RSPFLAG1,RSPBF1VL MARK BFR 1 AS VALID @V60B9BA 01300440
  1578. BAL R6,NEXTBUFF SET UP ALLOC RECDS @V60B9BA 01300470
  1579. B PRCCWS NOW ADJUST CCWS IN BFR 1 @V60B9BA 01300500
  1580. SPACE 2 01300530
  1581. NODOUBL3 ST R12,IOBIRA STORE INTERRUPT RETURN ADDRESS 01300560
  1582. * SENSE TO FORCE CE+DE TOGETHER 01301000
  1583. NI IOBSTAT,X'FF'-IOBFATAL RESET FATAL FLAG 01302000
  1584. B SIO AND GO DO START IO 01303000
  1585. SPACE 01304000
  1586. IMMEDOP LA R1,8(R1) POINT TO NEXT CCW 01305000
  1587. B CKNEXT 01306000
  1588. SPACE 01307000
  1589. SPACE 3 01308000
  1590. PRTERM EQU * HERE TO TERMINATE PRINTER AND PUNCH OUTPUT FILES 01309000
  1591. LA R2,20 SET FUNCTION INDEX @V200930 01310000
  1592. BAL R6,SETMSG FORMAT MESSAGE @V200930 01311000
  1593. CALL DMKQCNWT,PARM=OPERATOR+NORET @V200930 01312000
  1594. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01312100
  1595. OI SFBFLAG,SFBRECER SET ALLOCATION RECORD IN-COMPLETE 01313000
  1596. L R2,RSPRPAGE RESTORE ADDRESS OF RDEVBLOK 01314000
  1597. TM RDEVSTAT,RDEVNRDY NOT READY FLAG SET ?? 01315000
  1598. BO PRTEOF YES -- FORGET TERM MESSAGE 01316000
  1599. TM RDEVTYPE,TYPPUN IS IT A PUNCH FILE ?? 01317000
  1600. BO PCHBLK YES -- PUNCH BLANK CARD 01318000
  1601. NI RDEVFLAG,X'FF'-RDEVTERM RESET FLUSH FLAG 01319000
  1602. LA R1,TERMIRA GET NEW IRA FOR TERMINATE MESSAGE 01320000
  1603. ST R1,IOBIRA AND STORE IN IOBLOK 01321000
  1604. ST R8,IOBMISC SAVE ADDRESS OF RDEVBLOK 01322000
  1605. LA R1,SPSIZE(,R2) POINT TO FIRST CCW 01323000
  1606. LM R3,R6,TERMCCW1 LOAD 1ST TWO CCWS 01324000
  1607. ALR R5,R1 UPDATE DATA ADDRESS 01325000
  1608. STM R3,R6,0(R1) STORE IN BUFFER 01326000
  1609. LM R3,R6,TERMCCW2 LOAD NEXT TWO CCWS 01327000
  1610. ALR R3,R1 UPDATE DATA ADDRESSES 01328000
  1611. ALR R5,R1 01329000
  1612. STM R3,R6,16(R1) STORE CCWS NEXT IN BUFFER 01330000
  1613. MVC 32(8,R1),TERMCCW3 MOVE IN SENSE CCW 01331000
  1614. MVI 40(R1),C'*' FILL THE BUFFER WITH * 01332000
  1615. MVC 41(238,R1),40(R1) 01333000
  1616. MVI 172(R1),C' ' CLEAR SPOT FOR MSG 01334000
  1617. MVC 173(81,R1),172(R1) 01335000
  1618. MVC 198(29,R1),=C'OUTPUT TERMINATED BY OPERATOR' 01336000
  1619. TERMSIO ST R1,IOBCAW SAVE IN NORMAL CAW 01337000
  1620. B SIO GO PRINT TERMINATE MESSAGE 01338000
  1621. DROP R12,R13 @VA08952 01338500
  1622. SPACE 3 01339000
  1623. TERMIRA EQU * HERE ON INTERRUPT FOR TERM MSG 01340000
  1624. USING *,R12 TEMPORARY ADDRESSABILITY 01341000
  1625. S R12,TERMDSP STANDARD 01342000
  1626. USING DMKRSP,R12,R13 @VA08952 01343100
  1627. LR R13,R12 .. 01344000
  1628. A R13,F4096 .. 2ND BASE REGISTER 01345000
  1629. L R8,IOBMISC RESTORE ADDRESS OF RDEVBLOK 01346000
  1630. L R9,RDEVSPL RESTORE ADDRESS OF RSPLCTL WORKAREA 01347000
  1631. L R7,RSPSFBLK RESTORE ADDRESS OF SFBLOK 01348000
  1632. TM IOBCSW+4,UE UNIT EXCEPTION ?? 01349000
  1633. BZ PRTEOF NO -- 01350000
  1634. L R1,IOBCSW GET ADDRESS OF NEXT CCW 01351000
  1635. LA R1,0(R1) .. 01352000
  1636. B TERMSIO FINISH PROCESSING 01353000
  1637. SPACE 3 01354000
  1638. TERMDSP DC A(TERMIRA-DMKRSP) DISPLACEMENT 01355000
  1639. SPACE 2 01356000
  1640. ALOCATE OI 0(R14),0 EXECUTED TO MARK PAGE AS ALLOCATED 01357000
  1641. TSTALLOC TM 0(R14),0 TEST IS PAGE ALLOCATED @VA11232 01357100
  1642. SPACE 01358000
  1643. ALOCTABL DC X'8040201008040201' BIT MASKS FOR ALLOCATION 01359000
  1644. SPACE 3 01360000
  1645. TERMCCW1 CCW X'1B',*-*,CC+SILI,1 SPACE 3 @VA09992 01361200
  1646. CCW X'09',40,CC+SILI,132 PRINT AND SPACE 1 01362000
  1647. TERMCCW2 CCW X'09',147,CC+SILI,132 PRINT AND SPACE 1 01363000
  1648. CCW X'09',40,CC+SILI,132 01364000
  1649. TERMCCW3 CCW X'04',*-*,SKIP+SILI,1 PHONY SENSE 01365000
  1650. SPACE 2 01366000
  1651. MVCPCH MVC 12(0,R1),12(R3) MOVE DATA SAVEAREA 01367000
  1652. EJECT 01368000
  1653. DS 0H 01369000
  1654. MSG428D EQU * HERE IF TIC CHAIN IN BUFFER IS INVALID 01370000
  1655. OI SFBFLAG2,SFBTICER SET TIC ERROR FLAG 01371000
  1656. MSG428E EQU * HERE FOR SPOOL PAGING ERROR 01372000
  1657. NI RDEVSTA2,255-RDEVINTL NO LONGER NEEDED @VA05941 01372500
  1658. OI SFBFLAG,SFBSHOLD SET FILE IN SYSTEM HOLD 01373000
  1659. BAL R5,RECHAIN RECHAIN FILE 01374000
  1660. BAL R5,TYPERADD GET TYPE AND ADDRESS FOR ERROR MSG 01375000
  1661. LA R2,428 ERROR MSG DMKRSP428E 01376000
  1662. LA R0,16 SET LENGTH TO 16 01377000
  1663. LR R1,R3 AND ADDRESS TO TYPE DATA 01378000
  1664. BAL R5,RSPMSG WRITE ERROR MSG 01379000
  1665. B PRNXTFIL GO START NEXT FILE 01380000
  1666. SPACE 01381000
  1667. MSG430A EQU * HERE ON FATAL I/O ERROR 01382000
  1668. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01382100
  1669. OI RDEVSTAT,RDEVDISA SET DEVICE OFFLINE 01383000
  1670. BAL R5,DRAINPRT DO EMERG DRAIN @VA09471 01384100
  1671. LTR R7,R7 SFBLOK PRESENT ? @VA01299 01385000
  1672. BZ TYPE430A NO - SKIP CHAIN ROUTINE @VA01299 01386000
  1673. OI SFBFLAG,SFBSHOLD SET FILE IN SYSTEM HOLD STATUS 01387000
  1674. MVC SFBSTART,SFBPNT RESTORE FIRST DASD BUFFER @V60B9BA 01387500
  1675. BAL R5,RECHAIN RECHAIN THE FILE 01388000
  1676. TYPE430A BAL R5,TYPERADD GET TYPE AND ADDRESS @VA01299 01389000
  1677. LA R2,430 ERROR MSG DMKRSP430A 01390000
  1678. ICM R2,B'0100',=C'A' ACTION CODE 01391000
  1679. AR R0,R0 LENGTH OF 8 FOR DATA 01392000
  1680. LR R1,R3 ADDRESS OF TYPE 01393000
  1681. BAL R5,RSPMSG WRITE ERROR MSG 01394000
  1682. B PRTIDLE GO FREE UP BUFFERS 01395000
  1683. SPACE 3 01396000
  1684. RECHAIN LA R1,DMKRSPPR POINT TO START OF PRINTER FILE CHAIN 01397000
  1685. OI SFBFLAG,SFBRECER INDICATE ALLOCATION INCOMPLETE 01398000
  1686. TM RDEVTYPE,TYPPRT IS IT IN FACT A PRINTER?? 01399000
  1687. BO *+8 YES -- 01400000
  1688. LA R1,DMKRSPPU POINT TO START OF PUNCH CAHIN 01401000
  1689. L R2,0(,R1) SAVE POINTER TO FIRST ON CHAIN 01402000
  1690. ST R7,0(,R1) RE-CHAIN INTERRUPTED FILE 01403000
  1691. ST R2,SFBPNT AND CHAIN OTHER FILE BEHIND IT 01404000
  1692. * THE CALL TO DMKCKSPL HAS BEEN MOVED FROM ROUTINE SAVEFILE 01404100
  1693. * SO THAT SYSTEM HOLD AND USER HOLD STATUS SET HERE IN DMKRSP 01404200
  1694. * AS A RESULT OF SOME KIND OF ERROR IN PRINTING THESE FILES 01404300
  1695. * WILL BE CHECKPOINTED. NOTE: SAVEFILE ALWAYS COMES HERE. 01404400
  1696. CALL DMKCKSPL,PARM=CHGSFB CHECKPOINT @VA11799 01404500
  1697. TM RDEVFLAG,RDEVDRAN DEVICE BEING DRAINED ?? 01405000
  1698. BCR 8,R5 BZ - YES RETURN 01406000
  1699. TM SFBFLAG,SFBSHOLD+SFBUHOLD FILE TO BE SAVED ?? 01407000
  1700. BCR 7,R5 BNZ - YES 01408000
  1701. LR R2,R5 SAVE RETURN ADDRESS 01409000
  1702. IC R5,RDEVTYPE GET DEVICE TYPE FOR START COMMAND 01410000
  1703. CALL DMKCSOSD START FILE ON A AN OTHER DEVICE 01411000
  1704. BR R2 RETURN TO CALLER 01412000
  1705. SPACE 3 01413000
  1706. PRENDFIL EQU * HERE ON END OF FILE FOR PRINTER/PUNCH 01414000
  1707. ST R0,SFBPNT SAVE STARTING CCPD FOR REPEAT (HOLD) 01415000
  1708. * AND FLUSH (HOLD) 01416000
  1709. L R6,SPRMISC LOOK FOR NON-ZERO START CCPD @VA11232 01416200
  1710. LTR R6,R6 HAS SFBSTART BEEN SAVED THERE @VA11232 01416400
  1711. BZ PCHTST NO, USE VALUE IN SPNXTPAG @VA11232 01416600
  1712. ST R6,SFBPNT USE START CCPD @VA11232 01416800
  1713. PCHTST TM RDEVTYPE,TYPPUN PUNCH DEVICE @VA11232 01417000
  1714. BZ PRTEOF NO -- 01418000
  1715. SPACE 01419000
  1716. PCHBLK LA R0,LASTCARD SET UP IRA FOR PUNCHING BLANK CARD 01420000
  1717. ST R0,IOBIRA -- 01421000
  1718. ST R8,IOBMISC SAVE ADDRESS OF RDEVBLOK 01422000
  1719. LA R3,SPSIZE(,R2) ADDRESS OF FIRST CCW 01423000
  1720. ST R3,IOBCAW STORE CAW 01424000
  1721. MVI 7(R3),X'01' SET COUNT TO ONE 01425000
  1722. MVI 0(R3),X'01' PUNCH NO STACKER SELECT 01426000
  1723. L R6,8(R3) LOAD ADDRESS IN TIC 01427000
  1724. LA R6,0(R6) CLEAR HIGH ORDER BYTE 01428000
  1725. MVI 12(R3),C' ' SET UP BLANK CARD 01429000
  1726. MVC 0(8,R6),SENSECCW MOVE IN PHONY SENSE 01430000
  1727. S R6,F4 POINT TO BACK CHAIN ADDRESS 01431000
  1728. MVC 0(4,R6),RSPRSTRT MOVE IN ADDRESS OF LAST CARD PUNCHED 01432000
  1729. B SIO AND GO PUNCH BLANK CARD 01433000
  1730. SPACE 3 01434000
  1731. LASTCARD EQU * HERE ON INTERRUPT AFTER PUNCHING BLANK LAST CARD 01435000
  1732. DROP R12,R13 @VA02106 01436000
  1733. USING *,R12 TEMPORARY ADDRESSABILITY 01437000
  1734. S R12,LASTDSP STANDARD ADDRESSABILITY 01438000
  1735. USING DMKRSP,R12,R13 @VA02106 01439000
  1736. LR R13,R12 .. 01440000
  1737. A R13,F4096 .. 2ND BASE REGISTER 01441000
  1738. MVI IOBFLAG,IOBCP ZERO IOBFLAG @VA02975 01442000
  1739. L R8,IOBMISC RESTORE ADDRESS OF RDEVBLOK 01443000
  1740. SR R7,R7 CLEAR SFBLOK POINTER @VA01299 01444000
  1741. ICM R9,B'1111',RDEVSPL RESTORE ADDRESS OF RSPLCTL @VA01299 01445000
  1742. BZ MSG430A CTL MISSING - ERROR @VA01299 01446000
  1743. L R7,RSPSFBLK RESTORE ADDRES OF SFBLOK 01447000
  1744. SPACE 01448000
  1745. PRTEOF EQU * @V4075A0 01449100
  1746. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01449200
  1747. TM RDEVFLAG,RDEVTERM @V4075A0 01449300
  1748. BZ TSTCOPY NO -- TEST FOR MORE COPIES 01450000
  1749. NI RDEVFLAG,X'FF'-RDEVTERM RESET FLUSH FLAG 01451000
  1750. TM SFBFLAG,SFBSHOLD HOLD DUE TO FLUSH COMMAND ?? 01452000
  1751. BO PRDELET YES -- 01453000
  1752. TSTCOPY LH R1,SFBCOPY GET NUMBER OF COPIES REQUESTED 01454000
  1753. TM SFBFLAG2,SFBREQUE REQUEUE THE FILE ?? 01455000
  1754. BO PRDELET YES -- 01456000
  1755. BCT R1,PREPEAT DECREMENT BY 1 AND TEST FOR REPEAT 01457000
  1756. SPACE 01458000
  1757. PRDELET CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 01458400
  1758. BNE PRDELET2 XFER IF NOT @V60B9BA 01458800
  1759. TM SFBFLAG,SFBSHOLD IS FILE TO BE SAVED? @VA09343 01458840
  1760. BO SAVEFILE XFER IF SO @VA09343 01458875
  1761. TM RDEVFLAG,RDEVSEP SEPARATOR PRINTED? @VA09343 01458910
  1762. BZ PRDELET2 XFER IF NOT @VA09343 01458945
  1763. LH R2,SFBCOPY SAVE NUMBER OF COPIES @VA09343 01458980
  1764. MVC SFBCOPY,=H'1' FORCE IT TO 1 @VA09343 01459015
  1765. CALL DMKTCSCO ISSUE THE 'MARK FORMS' CCW @V60B9BA 01459200
  1766. STH R2,SFBCOPY RESTORE NUMBER OF COPIES @VA09343 01459300
  1767. PRDELET2 TM SFBFLAG,SFBSHOLD IS THE FILE TO BE SAVED ?? 01459600
  1768. BO SAVEFILE YES - GO RECHAIN THE FILE 01460000
  1769. TM SFBFLAG2,SFBREQUE REQUEUE FILE AND NO HOLD 01461000
  1770. BZ DELFILE NO -- 01462000
  1771. BAL R5,RECHAIN RECHAIN FILE AND NOHOLD 01463000
  1772. NI SFBFLAG2,X'FF'-SFBREQUE RESET REQUEUE FLAG 01464000
  1773. B TSTDRAIN TEST FOR DRAIN REQUEST 01465000
  1774. DELFILE XC RSPSFBLK(4),RSPSFBLK CLEAR POINTER TO SFBLOK 01466000
  1775. CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 01466080
  1776. BNE DELFILE2 XFER IF NOT @V60B9BA 01466160
  1777. SPACE 01466240
  1778. * ADD THIS FILE TO DELAYED PURGE QUEUE AND, IF THE QUEUE 01466320
  1779. * HAS REACHED MAXIMUM SIZE, PURGE THE FIRST FILE ON 01466400
  1780. * THE QUEUE. 01466480
  1781. SPACE 01466560
  1782. OI SFBFLAG,SFBSHOLD PUT IN SYS HOLD NOW @V60B9BA 01466640
  1783. LA R1,RDEVDELP ADDR OF DELAY PURGE ANCHOR @V60B9BA 01466720
  1784. SR R2,R2 COUNTER FOR NUM OF FILES @V60B9BA 01466800
  1785. DELPLOOP LR R5,R1 SAVE PREVIOUS POINTER @V60B9BA 01466880
  1786. L R1,SFBPNT-SFBLOK(,R1) PTR TO NEXT SFBLOK @V60B9BA 01466960
  1787. LTR R1,R1 IS THERE ONE? @V60B9BA 01467040
  1788. BZ DELPOUT XFER IF AT END OF QUEUE @V60B9BA 01467120
  1789. LA R2,1(,R2) ONE MORE FILE ON THE QUEUE @V60B9BA 01467200
  1790. B DELPLOOP TRY AGAIN @V60B9BA 01467280
  1791. DELPOUT XC SFBPNT,SFBPNT OUR NEW ONE GOES ON END OF Q@V60B9BA 01467360
  1792. ST R7,SFBPNT-SFBLOK(,R5) POINT OLD LAST TO US @V60B9BA 01467440
  1793. CLM R2,B'0001',RDEVMAXP HAVE WE REACHED MAXIMUM? @V60B9BA 01467520
  1794. BL TSTDRAIN XFER IF NOT @V60B9BA 01467600
  1795. L R7,RDEVDELP DELETE FIRST ONE ON QUEUE @V60B9BA 01467680
  1796. MVC RDEVDELP,SFBPNT A NEW FIRST ONE @V60B9BA 01467760
  1797. DELFILE2 CALL DMKSPLDL CALL FILE DELETER @V60B9BA 01467840
  1798. TSTDRAIN TM RDEVFLAG,RDEVDRAN DRAIN REQUESTED? 01468000
  1799. BZ PRNXTFIL NO -- GO PROCESS NEXT FILE 01469000
  1800. PRTDRAN BAL R6,DRAINMSG TYPE DRAIN MESSAGE @V200930 01470000
  1801. B PRTIDLE AND PRINTER IS IDLE 01471000
  1802. SPACE 01472000
  1803. LASTDSP DC A(LASTCARD-DMKRSP) DISPLACEMENT 01473000
  1804. EJECT 01474000
  1805. PREPEAT CLI RDEVTYPE,TYP3800 IS IT A 3800 ? @V60B9BA 01474250
  1806. BNE PREPEAT2 XFER IF NOT @V60B9BA 01474500
  1807. CALL DMKTCSCO DO THE 3800 HOUSEKEEPING @V60B9BA 01474750
  1808. BNZ PRDELET2 NOTHING MORE TO DO @V60B9BA 01475000
  1809. B *+8 SFBCOPY ALREADY STORED @V60B9BA 01475250
  1810. PREPEAT2 STH R1,SFBCOPY SAVE NBR OF COPIES LEFT @V60B9BA 01475500
  1811. TM RDEVFLAG,RDEVDRAN IS DEVICE DRAINING ?? @V200930 01476000
  1812. BO SAVEFILE YES, STOP AFTER THIS COPY @V200930 01477000
  1813. OI SFBFLAG,SFBRECOK INDICATE ALLOCATIONS RECORDS 01478000
  1814. LA R2,0 SET FUNCTION INDEX @V200930 01479000
  1815. BAL R6,SETMSG FORMAT MESSAGE @V200930 01480000
  1816. CALL DMKQCNWT,PARM=OPERATOR+NORET @V200930 01481000
  1817. L R2,RSPRPAGE RESTORE ADDRESS OF REAL PAGE @VA11232 01482200
  1818. L R0,SPRMISC LOOK FOR NON-ZERO START CCPD @VA11232 01482400
  1819. LTR R0,R0 HAS SFBSTART BEEN SAVED THERE @VA11232 01482600
  1820. BNZ BEGCCPD USE START CCPD FROM SPRMISC @VA11232 01482800
  1821. L R0,SPNXTPAG GET CCPD OF FIRST PAGE @VA11232 01483000
  1822. BEGCCPD ST R0,RSPDPAGE STORE START CCPD @VA11232 01483200
  1823. ST R0,SFBSTART AND STORE IN SPOOL FILE BLOK 01485000
  1824. CALL DMKCKSPL,PARM=CHGSFB CHECKPOINT @V304298 01486000
  1825. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01487100
  1826. OI RDEVFLAG,RDEVRSTR INDICATE FILE RESTART 01488000
  1827. NI IOBFLAG,X'FF'-IOBRSTRT RESET RESTART IN IOBLOK @VA09859 01488100
  1828. CLI RDEVTYPE,TYP3800 IS IT A 3800 ? @V60B9BA 01488300
  1829. BE PROCESS2 AFTER CALL TO DMKTCSET @V60B9BA 01488600
  1830. B PROCESS AND REPEAT 01489000
  1831. SPACE 3 01490000
  1832. SAVEFILE EQU * HERE IF THE OPERATOR WANTS THE FILE SAVED 01491000
  1833. L R5,SFBPNT GET STARTING CCPD SAVED DURING OPEN 01492000
  1834. ST R5,SFBSTART AND STORE IN SPOOL FILE START 01493000
  1835. TM RDEVFLAG,RDEVSEP SEPARATOR PRINTED? @VA09263 01495050
  1836. BZ SAVEFIL2 XFER IF NOT @VA09263 01495100
  1837. CLI RDEVTYPE,TYP3800 IS IT 3800 ? @VA10003 01495110
  1838. BNE SAVEFIL2 NO,CONTINUE AS BEFORE @VA10003 01495120
  1839. LH R2,SFBCOPY SAVE NUMBER OF COPIES @VA09263 01495150
  1840. MVC SFBCOPY,=H'1' FORCE IT TO 1 @VA09263 01495200
  1841. CALL DMKTCSCO DO THE 'MARK FORM' @VA09263 01495250
  1842. STH R2,SFBCOPY RESTORE NUMBER OF COPIES @VA09263 01495300
  1843. SAVEFIL2 BAL R5,RECHAIN RECHAIN THE FILE @VA09313 01495400
  1844. LA R2,30 SET FUNCTION INDEX @VA09313 01496000
  1845. BAL R6,SETMSG FORMAT MESSAGE @V200930 01497000
  1846. CALL DMKQCNWT,PARM=OPERATOR+NORET @V200930 01498000
  1847. B TSTDRAIN 01499000
  1848. SPACE 01500000
  1849. PRTIDLE EQU * HERE WHEN PRINTER/PUNCH HAS NO MORE WORK TO DO 01501000
  1850. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01501100
  1851. NI RDEVSTAT,X'FF'-RDEVNRDY RESET NOT READY FLAG 01502000
  1852. NI RDEVFLAG,RDEVLOAD+RDEVSEP+RDEVDRAN RESET FILE FLAGS 01503000
  1853. ICM R9,B'1111',RDEVSPL RSPLCTL PRESENT ? @VA01299 01504000
  1854. BZ FRETIOB NO - FRET IOB AND EXIT @VA01299 01505000
  1855. XC RDEVSPL,RDEVSPL CLEAR POOINTER TO RSPLCTL @VA13267 01505500
  1856. RSP003A L R1,RSPVPAGE POINT TO VIRTUAL BUFFER @V60B9BA 01506000
  1857. SR R0,R0 DUMMY DASD ADDRESS FOR RAPGEGET 01507000
  1858. CALL DMKRPAGT,AFFINITY,PARM=(SYSTEM) @V4075A0 01508100
  1859. CALL DMKPGTVR RELEASE VIRTUAL ADDRESS SPACE 01509000
  1860. L R1,RSPVPAG2 SECOND BUFFER ADDRESS @V60B9BA 01509250
  1861. LTR R1,R1 IS THERE ONE ? @V60B9BA 01509500
  1862. BZ RSP003B XFER IF NOT @V60B9BA 01509750
  1863. SR R0,R0 DUMMY DASD ADDRESS @V60B9BA 01510000
  1864. CALL DMKRPAGT,AFFINITY,PARM=(SYSTEM) @V60B9BA 01510250
  1865. CALL DMKPGTVR RELEASE SYSTEM VIRT ADDRESS @V60B9BA 01510500
  1866. RSP003B L R1,RSPRSTRT GET PTR TO RESTART SAVEAREA @V60B9BA 01510750
  1867. LTR R1,R1 IS THERE ONE?? 01511000
  1868. BZ RSP003 NO -- 01512000
  1869. LA R0,12 GET SIZE OF AREA 01513000
  1870. CALL DMKFRET AND FRET THE BUFFER 01514000
  1871. RSP003 LR R1,R9 POINT TO RSPLCTL WORKAREA 01515000
  1872. LA R0,RSPSIZE AND GET ITS SIZE 01516000
  1873. CALL DMKFRET FREE IT 01517000
  1874. SR R9,R9 CLEAR THE ACTIVE FILE PTR @VA13267 01518000
  1875. TM RDEVTYPE,TYPPUN IS IT A PUNCH?? 01520000
  1876. BZ FRETIOB NO -- GO FREE THE IOB 01521000
  1877. L R4,DMKRSPAC GET POINTER TO CHAIN OF ACNTBLOKS 01522000
  1878. LTR R4,R4 ARE THERE ANY TO PUNCH?? 01523000
  1879. BZ FRETIOB NO -- 01524000
  1880. TM RDEVSTAT,RDEVDISA IS THE DEVICE DISABLED?? 01525000
  1881. BO FRETIOB YES -- DON'TRY TO RESTART -- 01526000
  1882. SPACE 01527000
  1883. LA R4,4 CHECK TO SEE IF THIS PUNCH IS 01528000
  1884. LA R14,RDEVCLAS+3 CLASS C FOR PUNCHING ACCOUNTING 01529000
  1885. PUNLP CLI 0(R14),C'C' RECORDS ?? 01530000
  1886. BE PUACNT YES -- GO START 01531000
  1887. BCTR R14,0 STEP TO NEXT CLASS 01532000
  1888. BCT R4,PUNLP NO -- CHECK NEXT CLASS 01533000
  1889. B FRETIOB NOT CLASS C - LEAVE 01534000
  1890. SPACE 01535000
  1891. PUACNT OI RDEVFLAG,RDEVACNT FLAG PUNCH AS BUSY WITH ACCOUNTING 01536000
  1892. MVI IOBFLAG,IOBCP ZERO IOBFLAG @VA02975 01537000
  1893. CALL DMKACOPU,AFFINITY @V4075A0 01538100
  1894. NI RDEVFLAG,X'FF'-RDEVACNT RESET BUSY WITH ACCOUNTING 01539000
  1895. TM RDEVFLAG,RDEVDRAN DRAIN REQUESTED ?? 01540000
  1896. BO PRTDRAN YES -- GO GIVE DRAIN MSG 01541000
  1897. L R4,DMKRSPAC GET ADDRESS OF FIRST ACNTBLOK 01542000
  1898. LTR R4,R4 ANY ACCOUNTING CARDS TO PUNCH ?? 01543000
  1899. BNZ PUACNT YES -- GO PUNCH THEM 01544000
  1900. L R14,DMKRSPPU GET PUNCH FILE CHAIN ADDRESS 01545000
  1901. LTR R14,R14 ANY PUNCH FILES ?? 01546000
  1902. BZ FRETIOB NO -- LEAVE 01547000
  1903. B RSPINIT1 GO GET NEXT FILE 01548000
  1904. SPACE 3 01549000
  1905. UNITEX EQU * HERE TO RESTART ON UNIT EXCEPTION 01550000
  1906. L R1,IOBCSW GET ADDRESS OF NEXT CCW 01551000
  1907. LA R1,0(R1) CLEAR HIGH ORDER BYTE 01552000
  1908. CLI 0(R1),X'08' OP-CODE TIC ?? 01553000
  1909. BNE *+8 NO - START WITH THIS CCW 01554000
  1910. L R1,0(R1) GET TIC ADDRESS TO NEXT CCW 01555000
  1911. LA R1,0(R1) CLEAR HIGH ORDER BYTE 01556000
  1912. ST R1,IOBCAW SET IOBLOK 01557000
  1913. ST R12,IOBIRA RESTORE RETURN ADDRESS 01558000
  1914. B SIO 01559000
  1915. SPACE 3 01560000
  1916. FRETIOB LR R1,R10 POINT TO IOBLOK 01561000
  1917. LA R0,IOBSIZE AND GET ITS SIZE 01562000
  1918. CALL DMKFRET FREE IT 01563000
  1919. B RSPLEXIT 01574000
  1920. EJECT 01575000
  1921. * 01576000
  1922. * 01577000
  1923. * 01578000
  1924. * MISCELLANEOUS SUBROUTINES 01579000
  1925. * 01580000
  1926. SPACE 3 01581000
  1927. DRAINMSG EQU * HERE TO WRITE DEVICE DRAINED MESSAGE 01582000
  1928. CALL DMKSCNRN GET DEVICE NAME @V200930 01583000
  1929. STCM R1,15,DRANMSG SET NAME @V200930 01584000
  1930. MVC DRANCLS(4),RDEVCLAS GET CLASSES @V200930 01585000
  1931. OC DRANCLS(4),BLANKS EDIT @V200930 01586000
  1932. CALL DMKSCNRD GET DEVICE ADDRESS @V200930 01587000
  1933. CALL DMKCVTBH CONVERT TO HEX @V200930 01588000
  1934. STCM R1,7,DRANADDR SET ADDRESS @V200930 01589000
  1935. MVC DRANSEP(3),=C' NO' FLAG NOSEP @V200930 01590000
  1936. TM RDEVFLAG,RDEVSEP TEST FOR NOSEP @V200930 01591000
  1937. BZ *+10 YES IT IS NOSEP @V200930 01592000
  1938. MVC DRANSEP(3),BLANKS FLAG SEP @V200930 01593000
  1939. LA R0,DRANMSZR READER MESSAGE SIZE @VA09027 01593300
  1940. TM RDEVTYPC,CLASURI IS IT A READER TYPE? @VA09027 01593600
  1941. BO GOMSG YES, DON'T RELOAD SIZE @VA09027 01593900
  1942. LA R0,DRANMSZ GET LENGTH OF MESSAGE 01594000
  1943. GOMSG EQU * @VA09027 01594500
  1944. LA R1,DRANMSG AND ITS ADDRESS 01595000
  1945. CALL DMKQCNWT,PARM=OPERATOR+NORET 01596000
  1946. BR R6 RETURN TO CALLER 01597000
  1947. SPACE 3 01598000
  1948. DRAINPRT DS 0H @VA09471 01598020
  1949. TM RDEVFLAG,RDEVDRAN ALREADY DRAINED ? @VA09471 01598040
  1950. BOR R5 YES - 3800 ACT COUNT CORRECT @VA09471 01598060
  1951. OI RDEVFLAG,RDEVDRAN SET DEVICE AS DRAINED @VA09471 01598080
  1952. CLI RDEVTYPE,TYP3800 IS IT A 3800 ? @VA09471 01598100
  1953. BNER R5 NO - RETURN TO CALLER @VA09471 01598120
  1954. L R14,RDEVEXTN POINT TO RDEVBLOK EXT @VA09471 01598140
  1955. USING RSPXBLOK,R14 @VA09471 01598160
  1956. XC RSPXBLOK(RSPXSIZE*8),RSPXBLOK CLEAR BLOCK @VA09471 01598180
  1957. DROP R14 @VA09471 01598200
  1958. * NOW DECR ACT COUNT FOR IMAGELIB CONTAINED IN RDEVIMAG 01598220
  1959. L R1,=A(DMKQNTBL) START OF 3800 IMAGELIBS @VA09471 01598240
  1960. LTR R1,R1 ARE THERE ANY ? @VA09471 01598260
  1961. BZR R5 NO - GET OUT FAST @VA09471 01598280
  1962. TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) GET IT IN @VA09471 01598300
  1963. LR R14,R2 POINT TO FIRST SYSTEM ENTRY @VA09471 01598320
  1964. USING NPRTBL,R14 @VA09471 01598340
  1965. LTR R14,R14 ANY IMAGELIBS ? @VA09471 01598360
  1966. BZR R5 NO - GET OUT FAST @VA09471 01598380
  1967. NXTIMAG DS 0H @VA09471 01598400
  1968. CLC RDEVIMAG,NPRNAME IS THIS CURRENT SYSTEM ? @VA09471 01598420
  1969. BE GOTIMAG YES - GO DECR ACT COUNT @VA09471 01598440
  1970. AL R14,NPRPNT NEXT SYSTEM @VA09471 01598460
  1971. CLC NPRPNT,ZEROES IS IT DUMMY LAST ENTRY ? @VA09471 01598480
  1972. BNE NXTIMAG NO GO CHECK IT OUT @VA09471 01598500
  1973. BR R5 YES - GET OUT FAST @VA09471 01598520
  1974. GOTIMAG DS 0H @VA09471 01598540
  1975. SR R15,R15 CLEAR WORK REGISTER @VA09471 01598560
  1976. IC R15,NPRCNT GET OLD ACT COUNT @VA09471 01598580
  1977. LTR R15,R15 ALREADY ZERO ? @VA09471 01598600
  1978. BZR R5 YES - GET OUT FAST @VA09471 01598620
  1979. BCTR R15,0 DECR COUNT @VA09471 01598640
  1980. STC R15,NPRCNT SAVE NEW COUNT @VA09471 01598660
  1981. BR R5 RETURN TO CALLER @VA09471 01598680
  1982. DROP R14 @VA09471 01598700
  1983. SPACE 3 01598720
  1984. SIO CALL DMKIOSQR HERE TO CALL FOR START IO 01599000
  1985. SPACE 3 01600000
  1986. RSPLEXIT GOTO DMKDSPCH GENERAL EXIT FROM DMKRSP 01601000
  1987. SPACE 3 01602000
  1988. MSG1 DS 0H @V200930 01603000
  1989. MSGDEV DC CL5' ' @V200930 01604000
  1990. MSGADR DC CL4' ' @V200930 01605000
  1991. MSGCONS DC CL10' ' @V200930 01606000
  1992. MSGUSR DC CL8' ' @V200930 01607000
  1993. DC C' FILE = ' @V200930 01608000
  1994. MSGFILE DC CL4' ' @V200930 01609000
  1995. MSGSIZ1 EQU *-MSG1 SIZE FOR READERS @V200930 01610000
  1996. DC C' RECDS= ' @V200930 01611000
  1997. MSGRECS DC CL6' ' @V200930 01612000
  1998. DC C' COPY= ' @V200930 01613000
  1999. MSGCNT DC CL2' ' @V200930 01614000
  2000. DC CL2' ' @V200930 01615000
  2001. MSGCLS DC CL6' ' @V200930 01616000
  2002. MSGL EQU *-MSG1 @V200930 01617000
  2003. SPACE 01618000
  2004. MSGLIST DC CL10'REPEATED ' 0 @V200930 01619000
  2005. DC CL10'BACKSPACE ' 10 @V200930 01620000
  2006. DC CL10'FLUSHED ' 20 @V200930 01621000
  2007. DC CL10'FILE HELD ' 30 @V200930 01622000
  2008. DC CL10'PRINTING ' 40 @V200930 01623000
  2009. DC CL10'PUNCHING ' 50 @V200930 01624000
  2010. DC CL10'READING ' 60 @V200930 01625000
  2011. DC CL10'OUTPUT OF ' 70 @V200930 01626000
  2012. DC CL10'INPUT FOR ' 80 @V200930 01627000
  2013. DS 0H 01628000
  2014. SPACE 2 01629000
  2015. DRANMSG DC CL5' ' @V200930 01630000
  2016. DRANADDR DC CL3' ' @V200930 01631000
  2017. DC CL11' DRAINED ' @V200930 01632000
  2018. DRANUSR DC CL8'SYSTEM ' @V200930 01633000
  2019. DRANMSZR EQU *-DRANMSG @VA09027 01633500
  2020. DC CL9' CLASS = ' @V200930 01634000
  2021. DRANCLS DC CL4' ' @V200930 01635000
  2022. DRANSEP DC CL6' NOSEP' @V200930 01636000
  2023. DRANMSZ EQU *-DRANMSG @V200930 01637000
  2024. DS 0H 01638000
  2025. LTORG 01639000
  2026. EJECT 01640000
  2027. * 01641000
  2028. * SPOOLING AND ACCOUNTING FILE ANCHORS 01642000
  2029. * 01643000
  2030. SPACE 3 01644000
  2031. DS 0F 01645000
  2032. DC CL4'PRT' 01646000
  2033. DMKRSPPR DC A(0) START OF PRINTER FILE CHAIN 01647000
  2034. DC CL4'PUN' 01648000
  2035. DMKRSPPU DC A(0) START OF PUNCH FILE CHAIN 01649000
  2036. DC CL4'RDR' 01650000
  2037. DMKRSPRD DC A(0) START OF READER FILE CHAIN 01651000
  2038. DC CL4'DEL' 01652000
  2039. DMKRSPDL DC A(0) START OF DELETE FILE CHAIN 01653000
  2040. DC CL4'ACNT' 01654000
  2041. DMKRSPAC DC A(0) START OF ACCOUNT FILE CHAIN 01655000
  2042. DC CL4'DUMP' @V67CAH7 01655200
  2043. DMKRSPDP DC A(0) ANCHOR OF DUMP IN @V67CAH7 01655400
  2044. * PROGRESS CHAIN 01655600
  2045. DC CL4'HOLD' 01656000
  2046. DMKRSPHQ DC A(0) START OF SPOOL HOLD QUEUE 01657000
  2047. DC CL4'ID' 01658000
  2048. DMKRSPID DC X'0001' SYSTEM SPOOL ID COUNTER 01659000
  2049. DC X'FFFF' 01660000
  2050. * 01661000
  2051. * THE FOLLOWING POINTERS USED BY DMKCKP 01662000
  2052. * 01663000
  2053. DC V(DMKOPRWT) ADDRESS OF CONSOLE WRITE ROUTINE @V200820 01664000
  2054. DC V(DMKSYSOW) ADDRESS OF SYSTEM OWNLIST 01665000
  2055. DC V(DMKSYSOC) POINTER TO NUMBER OF ENTRIES 01666000
  2056. DC V(DMKSYSTP) POINTER TO SYSRES DEVICE TYPE 01667000
  2057. DC V(DMKSYSWM) POINTER TO WARMSTART CYLINDER 01668000
  2058. DC V(DMKTMRPT) POINTER TO VMVTIME CONVERT ROUTINE 01669000
  2059. DMKRSPCV DC 2F'0' TIME OF DAY CLOCK VALUE 01670000
  2060. DC V(DMKSYSRM) ADDRESS OF REAL STORAGE SIZE @VA02884 01671000
  2061. DMKRSPMN DC F'0' ACTIVE MONITOR SFBLOK ADDRESS @V50A2B5 01671100
  2062. SPACE 01672000
  2063. * 01673000
  2064. * THE ORDER OF THE ABOVE POINTERS MUST NOT CHANGE. 01674000
  2065. * 01675000
  2066. EJECT 01676000
  2067. DS 0H 01677000
  2068. ******************************************* 01678000
  2069. *. 01679000
  2070. * 01680000
  2071. * DMKRSPER CALLED BY DMKIOS WHEN AN ERROR IS DETECTED BY THE 01681000
  2072. * LAST IO OPERATION. THIS ROUTINE WILL HANDLE ONLY 01682000
  2073. * SPOOL OUTPUT DEVICES WITH CHANNEL 9 PUNCH 01683000
  2074. * ALL OTHER ERRORS WILL BE HANDLED BY DMKRSERR. DMKRSERR 01684000
  2075. * WILL BE CALLED BY THIS ROUTINE, BUT DMKRSERR 01685000
  2076. * WILL RETURN DIRECTLY TO DMKIOS 01686000
  2077. * 01687000
  2078. *. 01688000
  2079. ******************************************* 01689000
  2080. SPACE 01690000
  2081. USING SAVEAREA,R13 01691000
  2082. USING RDEVBLOK,R8 01692000
  2083. USING IOERBLOK,R9 01693000
  2084. SPACE 01694000
  2085. DMKRSPER EQU * 01695000
  2086. ENTRY DMKRSPER 01696000
  2087. USING *,R12 01697000
  2088. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 01697100
  2089. STM R0,R11,SAVEREGS SAVE REGS R0 THRU R11 01698000
  2090. ICM R9,B'1111',RDEVIOER PROCESSING IOERBLOK ? 01699000
  2091. BZ UNSOL NO - CHECK FOR UNSOLICITED @VA00701 01700000
  2092. * INTERRUPT 01701000
  2093. TM IOERFLG1,IOERERP DMKSPLER IN CONTROL OF IOERBLOK 01702000
  2094. BZ CALLSPL NO -- GIVE HIM CONTROL 01703000
  2095. TM IOERFLG1,IOERDEPD DEVICE END PENDING ?? @VA00701 01704000
  2096. BZ SVC16 NO -- LEAVE - UNWANTED INTERRUPT @VA00701 01705000
  2097. OI IOERFLG1,IOERDERD INDICATE DEVICE END RECEIVED @VA00701 01706000
  2098. ICM R1,B'1111',IOBIOER ADDRESS OF NEW IOERBLOK @VA00701 01707000
  2099. BZ SVC16 BRANCH IF NONE @VA00701 01708000
  2100. BAL R5,CKIOER FRET IOERBLOK @VA01254 01709000
  2101. SVC16 SVC 16 RETURN SAVE AREA 01710000
  2102. GOTO DMKDSPCH LEAVE - UNWANTED INTERRUPT 01711000
  2103. UNSOL EQU * HERE TO CHECK FOR UNSOLICITED @VA00701 01712000
  2104. * INTERRUPT 01713000
  2105. TM IOBSPEC,IOBUNSL UNSOLICITED INTERUPT ?? @VA04976 01714100
  2106. BZ TESTIOB NO, HANDLE SOLICITED @VA04976 01714200
  2107. MVC RDEVIOER(4),IOBIOER MOVE IOERBLOK POINTER @VA01299 01716000
  2108. XC IOBIOER,IOBIOER CLEAR IOERBLOK ADDRESS IN IOBLOK@VA07121 01717500
  2109. MVC IOBCSW+4(2),=X'0400' FORCE DEVICE ALONE @VA00701 01718000
  2110. B NOCMD TO IOS TO RECORD ERROR AND @VA00701 01719000
  2111. * UNSTACK IOBLOK 01720000
  2112. SPACE 01721000
  2113. TESTIOB ICM R9,B'1111',IOBIOER IOERBLOK PRESENT IN IOBLOK ? 01722000
  2114. BZ SPLER NO -- GO TO DMKSPLER 01723000
  2115. TM IOERFLG1,IOERDERD DEVICE END RECEIVED FOR THIS BLOK ? 01724000
  2116. BO SVC16 YES -- FORGET INTERRUPT 01725000
  2117. TM IOERFLG1,IOERERP DMKSPLER IN CONTROL ? @VA01299 01726000
  2118. BO SVC16 YES - FORGET INTERRUPT @VA01299 01727000
  2119. TM IOERDATA,1 IS IT CHANNEL 9 PUNCH (PRINTER) 01728000
  2120. BZ CALLSPL NO -- 01729000
  2121. TM RDEVTYPC,CLASURO UNIT RECORD OUTPUT ?? 01730000
  2122. BZ CALLSPL NO - CALL DMKSPLER 01731000
  2123. TM RDEVTYPE,TYPPUN IS IT PUNCH TYPE ?? 01732000
  2124. BO CALLSPL YES - 01733000
  2125. CLC RDEVTYPC(2),=AL1(CLASURO,TYP3203) 3203? @VA10868 01733050
  2126. BNE NOT3203 NO, DON'T CARE @VA10868 01733100
  2127. TM IOERDATA,X'FE' CHANNEL 9 ALONE ? @VA10868 01733150
  2128. BZ NOT3203 YES, DON'T UPDATE CSW @VA10868 01733200
  2129. L R15,IOERCSW GET FAILING CCW ADDR @VA10868 01733250
  2130. CLI 0(R15),X'08' IS NEXT CCW A TIC ? @VA10868 01733300
  2131. BNE SAVECSW NO, GO BUMP CSW @VA10868 01733350
  2132. L R15,0(R15) GET CORRECT CCW ADDR @VA10868 01733400
  2133. SAVECSW LA R15,8(R15) ADJUST CSW FOR RSE @VA10868 01733450
  2134. STCM R15,7,IOERCSW+1 SAVE UPDATED CSW @VA10868 01733500
  2135. B CALLSPL AND CALL DMKRSERR @VA10868 01733550
  2136. NOT3203 DS 0H @VA10868 01733600
  2137. TM IOBCSW+4,UC+DE UNIT CHECK AND DEVICE END 01734000
  2138. BNO CALLSPL NO -- 01735000
  2139. TM IOBSTAT,IOBCC1 CONDITION CODE 1 01736000
  2140. BZ IGNORE NO -- GET NEXT CCW 01737000
  2141. CALLSPL OI IOERFLG1,IOERERP INDICATE DMKRSERR IN CONTROL 01738000
  2142. SPLER CALL DMKRSERR CALL U/R ERROR ROUTINE 01739000
  2143. * NO RETURN FROM DMKSPLER. DMKSPLER WILL EXIT TO 01740000
  2144. * DMKIOS VIA THE SVC 16 01741000
  2145. SPACE 01742000
  2146. IGNORE EQU * HERE TO IGNORE THE ERROR 01743000
  2147. L R1,IOBCSW POINT TO TIC 01744000
  2148. LA R1,0(R1) CLEAR HIGH BYTE 01745000
  2149. CLI 0(R1),X'08' IS IT A TIC ?? 01746000
  2150. BNE *+8 NO - USE THIS CCW 01747000
  2151. L R1,0(,R1) GET TRANSFER ADDRESS 01748000
  2152. LA R1,0(R1) CLEAR HIGH ORDER BYTE 01749000
  2153. ST R1,IOBRCAW STORE RESTART CAW 01750000
  2154. LR R1,R9 SET TO FRET IOBERBLOK 01751000
  2155. BAL R5,CKIOER FRET IOERBLOK @VA01254 01752000
  2156. OI IOBFLAG,IOBRSTRT SET RESTART FLAG @VA01254 01753000
  2157. CLC =C'SEP ',IOBMISC2 PRINTING SEPARATOR PAGE 01754000
  2158. BE NOCMD YES -- DO NOT FLUSH OR BACKSPACE 01755000
  2159. TM RDEVFLAG,RDEVTERM+RDEVBACK+RDEVRSTR FLUSH OR BACKSPACE 01756000
  2160. BZ NOCMD NO --CONT 01757000
  2161. NI IOBFLAG,X'FF'-IOBRSTRT RESET RESTART FLAG 01758000
  2162. MVC IOBCSW(4),IOBRCAW SET ENDING ADDRESS FOR BACK SPACE 01759000
  2163. OI IOBCSW+4,CE FORCE RETURN TO DMKRSP 01760000
  2164. NOCMD EQU * 01761000
  2165. NI IOBFLAG,X'FF'-IOBERP RESET ERP IN CONTROL FLAG @VA00701 01762000
  2166. NI IOBSTAT,X'FF'-IOBFATAL AND RESET FATAL FLAG 01763000
  2167. EXIT RETURN TO CALLER (DMKIOS) 01764000
  2168. ********************************************************************* 01765000
  2169. * FRET IOERBLOK AND CHANNEL CHECK RECORD 01766000
  2170. ******************************************************************** 01767000
  2171. SPACE 2 01768000
  2172. CKIOER EQU * @VA01254 01769000
  2173. TM IOERCSW+5-IOERBLOK(R1),IFCC+CCC+CDC IS CHANNEL @VA01254 01770000
  2174. * ERROR INDICATED ? 01771000
  2175. BZ CKEND NO, GO FRET IOERBLOK @VA01254 01772000
  2176. LR R3,R1 SAVE IOERBLOK POINTER @VA01254 01773000
  2177. L R1,IOERCCRA-IOERBLOK(R3) CHANNEL REC ADDR @V508690 01774500
  2178. L R0,IOERCCRL-IOERBLOK(R3) CHANNEL REC LENGTH @V508690 01775500
  2179. CALL DMKFRET RELEASE STORAGE @VA01254 01778000
  2180. LR R1,R3 GET IOERBLOK POINTER @VA01254 01779000
  2181. CKEND EQU * @VA01254 01780000
  2182. LA R0,IOERSIZE LENGTH OF IOERBLOK @VA01254 01781000
  2183. AH R0,IOEREXT-IOERBLOK(R1) ADD SIZE OF EXT BLOK @VA01254 01782000
  2184. CALL DMKFRET RELEASE STORAGE @VA01254 01783000
  2185. SR R0,R0 CLEAR REGISTER 0 @VA01254 01784000
  2186. ST R0,IOBIOER CLEAR IOERBLOK POINTER @VA01254 01785000
  2187. BR R5 RETURN TO IN LINE CODE @VA01254 01786000
  2188. ******************************************************************** 01787000
  2189. SPACE 4 01788000
  2190. ********************************************************************** 01789000
  2191. SPACE 2 01790000
  2192. DS 0D 01791000
  2193. ENTRY DMKRSP83 01792000
  2194. DMKRSP83 CCW X'83',*-*,CC+SILI,1 3211 RESET COMMAND 01793000
  2195. CCW 4,*-*,SILI+SKIP,1 01794000
  2196. SPACE 01795000
  2197. LTORG 01796000
  2198. EJECT 01797000
  2199. COPY SPOOL 01798000
  2200. COPY RBLOKS 01799000
  2201. COPY VBLOKS 01800000
  2202. PSA 01801000
  2203. COPY VMBLOK 01802000
  2204. COPY SAVE 01803000
  2205. COPY ACCOUNT 01804000
  2206. COPY EQU 01805000
  2207. COPY DEVTYPES 01806000
  2208. COPY IOBLOKS 01807000
  2209. COPY CONBUF 01808000
  2210. COPY UDIRECT 01809000
  2211. COPY ALLOC 01810000
  2212. COPY IOER 01811000
  2213. COPY NPRTBL @VA09471 01811100
  2214. END 01812000