Table of Contents

DMKVSQ Source

References

Source Listing

DMKVSQ.ASSEMBLE.txt
  1. VSQ TITLE 'DMKVSQ (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKVSQ 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * TO LOCATE THE NEXT AVAILABLE SLOT IN A PRINTER/PUNCH 00010000
  11. * BUFFER AND MOVE INTO IT A CCW AND DATA. 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * REENTRANT, RESIDENT, ENTERED VIA BALR FROM DMKVSP 00015000
  16. * 00016000
  17. * ENTRY POINTS - 00017000
  18. * 00018000
  19. * DMKVSQPD - TO LOCATE THE NEXT AVAILABLE SLOT IN A 00019000
  20. * PRINTER/PUNCH BUFFER 00020000
  21. * 00021000
  22. * ENTRY CONDITIONS - 00022000
  23. * 00023000
  24. * GPR3 = NUMBER OF BYTES REQUESTED IN THE BUFFER 00024000
  25. * GPR7 = ADDRESS OF THE SFBLOK FOR THE ACTIVE FILE 00025000
  26. * GPR8 = ADDRESS OF THE VDEVBLOK FOR ADDRESSED VIRTUAL DEVICE 00026000
  27. * GPR9 = ADDRESS OF VSPLCTL WORKAREA 00027000
  28. * GPR11 = ADDRESS OF USER'S VMBLOK 00028000
  29. * GPR12 = ADDRESS OF DMKVSQ 00029000
  30. * 00030000
  31. * NOTE THAT WHEN DMKVSQEX IS ENTERED FROM DMKVSP, GPR13 DOES 00031000
  32. * NOT POINT TO A SAVEAREA, AND THE ENTER AND EXIT MACROS MAY NOT 00032000
  33. * BE USED. 00033000
  34. * 00034000
  35. * EXIT CONDITIONS - 00035000
  36. * 00036000
  37. * NORMAL - RETURN TO CALLER VIA ADDRESS SPECIFIED IN REGISTER 00037000
  38. * 14 + 4. 00038000
  39. * 00039000
  40. * ERROR - RETURN TO CALLER VIA BR R14, WITH INFORMATION 00040000
  41. * SET UP FOR DMKVSP TO CALL ITS ERROMSG ROUTINE. 00041000
  42. * 00042000
  43. EJECT 00043000
  44. * 00044000
  45. * CALLS TO OTHER ROUTINES - 00045000
  46. * 00046000
  47. * DMKPGTSG - TO OBTAIN DASD PAGE BUFFER SPACE 00047000
  48. * DMKRPAGT - TO READ A PAGE BUFFER INTO VIRTUAL MEMORY 00048000
  49. * DMKRPAPT - WRITE A BUFFER FROM VIRTUAL MEMORY TO DASD 00049000
  50. * DMKSPLCV - TO CLOSE A NEW DASD OUTPUT SPOOL FILE 00050000
  51. * DMKSPLDL - TO PURGE A PARTIALLY COMPLETE FILE 00051000
  52. * DMKPGTVR - TO RELEASE VIRTUAL BUFFER 00052000
  53. * DMKPGTVG - TO GET A VIRTUAL BUFFER 00053000
  54. * DMKPTRUL - TO UNLOCK A LOCK BUFFER PAGE 00054000
  55. * DMKFREE, DMKFRET FOR THE USUAL REASONS 00055000
  56. * 00056000
  57. * EXTERNAL REFERENCES - 00057000
  58. * 00058000
  59. * DMKBOXHR - CLASS X PAGE HEADER LINE 00059000
  60. * DMKVSPWA - ADDRESS OF 3211 INDEX WORK AREA 00060000
  61. * 00061000
  62. * TABLES / WORKAREAS - 00062000
  63. * 00063000
  64. * 00064000
  65. * REGISTER USAGE - 00065000
  66. * 00066000
  67. * GPR2 = ADDRESS OF SPLINK 00067000
  68. * GPR3 = NUMBER OF BYTES OF BUFFER REQUESTED 00068000
  69. * GPR5 = ADDRESS OF WORK BUFFER (VSPBUFBK) 00069000
  70. * GPR6 = INTERNAL SUBROUTINE LINKAGE 00070000
  71. * GPR7 = ADDRESS OF SFBLOK FOR ACTIVE FILE 00071000
  72. * GPR8 = ADDRESS OF VDEVBLOK FOR ACTIVE VIRTUAL DEVICE 00072000
  73. * GPR9 = ADDRESS OF VSPLCTL WORKAREA 00073000
  74. * GPR10 = SAVE DMKVSP RETURN ADDRESS 00074000
  75. * GPR11 = ADDRESS OF THE USER'S VMBLOK 00075000
  76. * GPR12 = DMKVSQ BASE ADDRESS 00076000
  77. * GPR14,15 - BALR LINKAGE FOR DMKFREE/DMKFRET 00077000
  78. * 00078000
  79. EJECT 00079000
  80. * NOTES - 00080000
  81. * 00081000
  82. * OPERATION - 00082000
  83. * 00083000
  84. * 1. LOCATE NEXT AVAILABLE SLOT IN PRINTER/PUNCH BUFFER. 00084000
  85. * PAGE IN THE BUFFER, IF NECESSARY, AND LOCK THE BUFFER 00085000
  86. * IN STORAGE. 00086000
  87. * 00087000
  88. * 2. IF ENOUGH ROOM EXISTS IN THIS BUFFER FOR THE CURRENT 00088000
  89. * REQUEST, GO TO STEP 3. OTHERWISE, CALL DMKPGTSG TO OBTAIN A 00089000
  90. * NEW SPOOLING PAGE BUFFER AND WRITE OUT THE FULL BUFFER 00090000
  91. * TO DASD. 00091000
  92. * 00092000
  93. * 3. MOVE THE CCW AND DATA FROM THE WORK BUFFER TO THE VIRTUAL 00093000
  94. * BUFFER. 00094000
  95. * 00095000
  96. * 4. UNLOCK THE BUFFER PAGE AND RETURN TO DMKVSP. 00096000
  97. * 00097000
  98. * ERROR MESSAGES - 00098000
  99. * 00099000
  100. * NONE 00100000
  101. * 00101000
  102. *. 00102000
  103. EJECT 00103000
  104. COPY OPTIONS 00104000
  105. COPY LOCAL OPTIONS 00105000
  106. EJECT 00106000
  107. DMKVSQ CSECT LOADER CONTROL ONLY 00107000
  108. SPACE 00108000
  109. ENTRY DMKVSQPD 00109000
  110. SPACE 3 00110000
  111. EXTRN DMKPGTVR,DMKPGTSG 00111000
  112. EXTRN DMKPGTVG 00112000
  113. EXTRN DMKPGTSD @VA11232 00112100
  114. EXTRN DMKSPLCV 00113000
  115. EXTRN DMKBOXHR 00114000
  116. EXTRN DMKRPAGT,DMKRPAPT 00115000
  117. EXTRN DMKPTRUL,DMKSPLDL 00116000
  118. EXTRN DMKVSPWA @V60BCAA 00117000
  119. EXTRN DMKVSP @V60BCAA 00118000
  120. SPACE 3 00119000
  121. USING PSA,R0 00120000
  122. USING SPLINK,R2 00121000
  123. USING SFBLOK,R7 00122000
  124. USING VDEVBLOK,R8 00123000
  125. USING VSPLCTL,R9 00124000
  126. USING VMBLOK,R11 00125000
  127. SPACE 2 00126000
  128. DMKVSQPD EQU * 00127000
  129. SPACE 00128000
  130. USING *,R12 00129000
  131. LR R12,R15 ESTABLISH BASE REGISTER @V60BCAA 00130000
  132. SPACE 2 00131000
  133. B VSQ0001 00132000
  134. ID DC CL8'DMKVSQ' MODULE NAME 00133000
  135. VSQ0001 EQU * 00134000
  136. PRTDATA EQU * HERE TO LOCATE THE NEXT AVAILABLE 00135000
  137. * SLOT IN A PRINTER/PUNCH BUFFER -- 00136000
  138. * ON ENTRY, R3 CONTAINS THE NUMBER OF BYTES REQUESTED 00137000
  139. SPACE 00138000
  140. LR R10,R14 SAVE RETURN ADDRESS TO DMKVSP@V60BCAA 00139000
  141. SR R6,R6 @VA09669 00139500
  142. L R5,VSPBUFBK GET ADDRESS OF WORK BUFFER 00140000
  143. TM SFBTYPE,TYPPRT PRINTER FILE ? 00141000
  144. BZ PRTCONT NO - 00142000
  145. CLI VDEVCLAS,C'X' CLASS X ?? 00143000
  146. BNE PRTCONT NO - 00144000
  147. L R4,=A(DMKVSPWA) ADDR OF 3211 INDEX WORK AREA @V60BCAA 00145000
  148. USING WORKAREA,R4 00146000
  149. L R1,HDRADD ADDRESS OF HEADER CCW AND MSG 00147000
  150. LTR R1,R1 BUFFER AVAILABLE ?? 00148000
  151. BM PRTCONT DO NOT USE HEADER LINE 00149000
  152. BNZ XCONT YES - PROCESS X CLASS 00150000
  153. L R1,=A(DMKBOXHR) INSTALLATION HEADER PRESENT ?? 00151000
  154. SL R8,VMDVSTRT VDEVBLOK DISP @VA00716 00152000
  155. LTR R1,R1 ?? 00153000
  156. BNZ HDRTRAN YES - GET IT 00154000
  157. HDRERR AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA00716 00155000
  158. MVC HDRADD(4),FFS INDICATE PAGE ERROR OR DMKBOXHR @VA00716 00156000
  159. B PRTCONT NOT PRESENT - FORGET USING HEADER 00157000
  160. HDRTRAN TRANS 2,1,OPT=(BRING,DEFER,SYSTEM),IOER=HDRERR @VA00716 00158000
  161. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA00716 00159000
  162. LA R0,15 SIZE OF BUFFER 00160000
  163. CALL DMKFREE GET STORAGE 00161000
  164. MVI 0(R1),C' ' CLEAR BUFFER 00162000
  165. MVC 1(119,R1),0(R1) 00163000
  166. MVC 0(20,R1),VSPPREAM MOVE IN PREAMBLE CCW'S @V293598 00164000
  167. MVC 62(46,R1),0(R2) MOVE IN HEADER FOR CLASS X LIST 00165000
  168. ST R1,HDRADD STORE ADDRESS OF BUFFER AND CONT 00166000
  169. XCONT CLI 0(R5),X'8B' SKIP IMMEDIATELY ?? 00167000
  170. BE XSKIP YES - 00168000
  171. CLI 0(R5),X'89' WRITE SKIP CCW ?? 00169000
  172. BNE PRTCONT NO - CONTINUE 00170000
  173. MVI 0(R5),X'01' CHANGE WRITE SKIP TO WRITE 00171000
  174. BAL R6,PRTCONT MOVE TO SPOOL BUFFER 00172000
  175. L R4,=A(DMKVSPWA) ADDR OF 3211 INDEX WORK AREA @VA10556 00172250
  176. SR R6,R6 CLEAR REG6 @VA09669 00172500
  177. XSKIP L R5,HDRADD ADDRESS OF CCW AND DATA 00173000
  178. LA R3,8 LENGTH OF SPACE IMMEDIATE 00174000
  179. BAL R6,PRTCONT MOVE SPACE TO PRINT BUFFER 00175000
  180. SR R6,R6 CLEAR REG6 @VA09669 00175500
  181. A R5,F8 POINT TO HEADER WRITE CCW 00176000
  182. LA R3,112 LENGTH OF CCW AND DATA 00177000
  183. DROP R4 00178000
  184. SPACE 00179000
  185. PRTCONT L R1,VSPVPAGE GET VIRTUAL BUFFER ADDRESS 00180000
  186. * PAGE THE BUFFER IN 00181000
  187. SL R8,VMDVSTRT VDEVBLOK DISP @VA00716 00182000
  188. TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM),IOER=EMSG429 @VA00716 00183000
  189. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA00716 00184000
  190. LH R14,VSPNEXT GET POINTER TO NEXT SLOT 00185000
  191. LTR R14,R14 POINTER ZERO ?? 00186000
  192. BNZ PRTNOTAG CAN'T BE TIME TO SET TAG @V293598 00187000
  193. LA R14,16 SET ORDINARY 1ST DISP @V293598 00188000
  194. CLC SFBSTART(4),VSPDPAGE FIRST PAGE OF FILE ?? @V293598 00189000
  195. BNE PRTNOTAG NO - DON'T SET TAG @V293598 00190000
  196. MVC 16(12,R2),MODELCCW INITIALIZE THE CCWS @V293598 00191000
  197. MVI 16(R2),X'03' MAKE COMMAND NOP @V293598 00192000
  198. MVI 23(R2),L'VSPXTAG SET COUNT FIELD @V293598 00193000
  199. MVI 27(R2),L'VSPXTAG+16 SET TIC DISPLACEMENT @V293598 00194000
  200. MVI 28(R2),C' ' SET FIRST TAG CHAR TO BLANK @V293598 00195000
  201. MVC 29(L'VSPXTAG-1,R2),28(R2) BLANK THE ENTIRE FLD @V293598 00196000
  202. LA R14,L'VSPXTAG+16(,R14) NEXT DBLWD BOUNDARY @V293598 00197000
  203. MVC SPRECNUM(4),F1 INIT SPOOL BUFFER REC COUNT @V293598 00198000
  204. PRTNOTAG AR R3,R14 ADD DISP TO NUMBER OF @V293598 00199000
  205. * BYTES REQUESTED 00200000
  206. LA R4,4088 MAXIMUM NUMBER OF BYTES @V60B9BA 00201000
  207. CLC SFBSTART(4),VSPDPAGE IS IT FIRST DASD BUFFER ? @V60B9BA 00202000
  208. BNE *+8 XFER IF NOT @V60B9BA 00203000
  209. LA R4,4040 FEWER BYTES IN FIRST BUFFER @V60B9BA 00204000
  210. CR R3,R4 WILL WE FALL OFF END ? @V60B9BA 00205000
  211. BNH PRTDATA2 NO -- 00206000
  212. SR R3,R14 RESTORE R3 TO ENTRY VALUE 00207000
  213. LA R4,10 RETRY COUNT OF 10 00208000
  214. STH R4,SFBMISC1 AND SAVE 00209000
  215. PRTSG LR R4,R2 SAVE BUFFER ADDRESS 00210000
  216. MVC SPFILID,SFBFILID FILE ID FOR VALIDATING PAGE @V60B9BA 00211000
  217. MVC SPTIME,SFBTIME MORE VALIDATION DATA @V60B9BA 00212000
  218. CALL DMKPGTSG GET A SPOOLING PAGE BUFFER 00213000
  219. LTR R1,R1 VALID DASD ADDRESS CCPD 00214000
  220. BNZ SPACGOOD SPACE AVAILBLE 00215000
  221. SPACE 00216000
  222. * SPOOLING SPACE FULL 00217000
  223. LR R2,R4 RESTORE BUFFER ADDRESS 00218000
  224. L R0,SFBSTART GET BUFFER START ADDRESS 00219000
  225. ST R0,SPNXTPAG AND CHAIN TAIL TO START OF FILE 00220000
  226. ST R0,SPRMISC SPRMISC = SFBSTART @VA11232 00220500
  227. LM R0,R1,VSPDPAGE GET CURRENT BUFFER ADDRESSES 00221000
  228. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00222000
  229. CALL DMKRPAPT,PARM=SYSTEM AND WRITE IT TO DASD 00223000
  230. BNZ EMSG429 BUFFER WRITE ERROR @VA01460 00224000
  231. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00226000
  232. ST R0,SFBLAST UPDATE BUFFER LAST ADDRESS 00227000
  233. MSG427 BAL R6,SETOPTS AND CLEAR FILE AND DEVICE 00228000
  234. B MSG427I GIVE ERROR MSG DMKVSP427I 00229000
  235. SPACE 00230000
  236. SPACGOOD ST R1,SPNXTPAG SAVE FORWARD BUFFER LINK 00231000
  237. L R1,SFBSTART START CCPD @VA11232 00231100
  238. L R0,SPPREPAG ARE WE WRITING FIRST BUFFER @VA11232 00231150
  239. LTR R0,R0 IF ZERO - YES @VA11232 00231200
  240. BNZ STSTRT NO, USE SFBSTART @VA11232 00231250
  241. C R1,VSPDPAGE ARE WE RE-WRITING FIRST BUFFER ? @VA11232 00231300
  242. BE STSTRT NO, SFBSTART IS OK @VA11232 00231350
  243. L R1,VSPDPAGE WE HAVE A NEW SFBSTART @VA11232 00231400
  244. ST R1,SFBSTART UPDATE SFBSTART AND SFBLAST TO @VA11232 00231450
  245. ST R1,SFBLAST NEW START CCPD @VA11232 00231500
  246. STSTRT ST R1,SPRMISC SPRMISC CONTAINS START CCPD @VA11232 00231550
  247. ST R0,SFBPNT SFBPNT PTS TO PREV. WHIL WRITE @VA11232 00231600
  248. LM R0,R1,VSPDPAGE GET CURRENT BUFFER ADDRESSES 00232000
  249. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00233000
  250. CALL DMKRPAPT,PARM=SYSTEM AND WRITE IT TO DASD 00234000
  251. LR R2,R4 RESTORE BUFFER ADDRESS 00235000
  252. BZ WRGOOD BUFFER WRITTEN NO ERRORS 00236000
  253. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00237000
  254. OI VSPFLAG1,VSPERR INDICATE BUFFER WRITE ERROR @VA11232 00238500
  255. MVC VSPDPAGE(4),SPNXTPAG USE NEXT CCPD AS CURRENT CCPD 00239000
  256. ICM R14,B'0011',SFBMISC1 GET RETRY COUNT 00240000
  257. BZ MSG429 FAILED 10 CONSECUTIVE RETIES 00241000
  258. BCTR R14,0 -1 00242000
  259. STH R14,SFBMISC1 AND SAVE 00243000
  260. B PRTSG AND RETRY 00244000
  261. SPACE 00245000
  262. WRGOOD AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00246000
  263. L R15,SPPREPAG SAVE CCPD OF PREVIOUS BUFFER @VA01460 00247000
  264. TM VSPFLAG1,VSPERR STILL IN ERROR RECOVERY ? @VA11232 00247500
  265. BO *+8 DON'T UPD. SFBLAST UNTIL FINISHED@VA11232 00247600
  266. ST R0,SFBLAST SAVE ADDRESS OF LAST BUFFER WRITTEN 00248000
  267. L R0,VSPDPAGE GET OLD BUFFER ADDRESS 00249000
  268. ST R0,SPPREPAG AND SAVE AS BACK-CHAIN 00250000
  269. L R0,SPNXTPAG GET NEW BUFFER ADDRESS 00251000
  270. ST R0,VSPDPAGE AND SAVE IN CONTROL BLOK 00252000
  271. L R0,SFBSTART CHAIN FORWARD POINTER TO 00253000
  272. ST R0,SPNXTPAG FIRST BUFFER 00254000
  273. SR R0,R0 CLEAR OUT OLD BUFFER 00255000
  274. ST R0,SPRECNUM RECORD COUNTER 00256000
  275. LA R14,SPSIZE OFFSET OF FIRST RECORD IN BUFFER 00257000
  276. AR R3,R14 POINTER TO NEW NEXT SLOT 00258000
  277. TM VSPFLAG1,VSPERR STILL IN ERROR RECOVERY ? @VA11232 00259100
  278. BO *+10 YES -- DO NOT UPDATE SFBPNT 00260000
  279. MVC SFBPNT,SFBLAST UPDATE SFBPNT TO LAST BUFFER 00261000
  280. PRTDATA2 STH R3,VSPNEXT SAVE IN CONTROL BLOCK 00262000
  281. AR R2,R14 POINT TO REAL ADDRESS OF SLOT 00263000
  282. SR R3,R14 NUMBER OF BYTES REQUESTED IN R3 00264000
  283. BCTR R3,0 -1 FOR MOVE 00265000
  284. EX R3,MOVEBUFF MOVE CCW AND DATA FROM WORK BUFFER 00266000
  285. * TO THE VIRTUAL BUFFER 00267000
  286. SR R2,R14 RESTORE R2 TO START OF BUFFER 00268000
  287. L R14,SPRECNUM GET BUFFER CCW COUNT 00269000
  288. LA R14,1(R14) UPDATE BY ONE 00270000
  289. ST R14,SPRECNUM SAVE BUFFER COUNT 00271000
  290. TM 0(R5),X'03' CONTROL IMMEDIATE CMND? @VA02094 00273000
  291. BO SKIPCCW YES--DON'T UPDATE COUNT @VA02094 00274000
  292. OI SFBFLAG2,SFBFLNMT INDICATE FILE NOT EMPTY @VA13052 00274500
  293. L R14,SFBRECNO UPDATE RECORD COUNT 00275000
  294. LA R14,1(R14) .. 00276000
  295. ST R14,SFBRECNO .. 00277000
  296. SKIPCCW EQU * @VA02094 00278000
  297. TM VSPFLAG1,VSPERR PAGE WRITE ERROR ? @VA11232 00279100
  298. BZ CONACT CHECK FOR ACTIVE CONSOLE 00280000
  299. NI VSPFLAG1,X'FF'-VSPERR RESET ERROR INDICATOR @VA11232 00281100
  300. LTR R3,R15 IS THERE A PREVIOUS CCPD BUFFER ?? 00282000
  301. BZ UPSFBPNT UPDATE LAST AND SFBPNT @VA11232 00282500
  302. SPACE 00286000
  303. UPDTPNT LR R4,R2 SAVE ADDRESS OF CURRENT BUFFER 00287000
  304. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00288000
  305. CALL DMKPGTVG GET VIRTUAL BUFFER 00289000
  306. LTR R1,R1 DID WE GET A VIRTUAL BUFFER ? @VA11232 00289100
  307. BZ EMSG429A NO, PURGE THE FILE @VA11232 00289200
  308. ST R1,VSPVPG2 SAVE ADDR. OF SEC. VIRTUAL BUFF. @VA11232 00289300
  309. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=EMSG429A @VA11232 00290100
  310. LR R0,R3 CCPD OF BUFFER TO BE UPDATED 00291000
  311. CALL DMKRPAGT,PARM=(BRING+SYSTEM) 00292000
  312. BNZ EMSG429A BUFFER READ ERROR @VA11232 00293100
  313. MVC SPNXTPAG(4),4(R4) UPDATE FORWARD POINTER 00294000
  314. MVC SFBPNT,SPPREPAG MOVE PREVIOUS TO SFBPNT @VA11232 00294500
  315. CALL DMKRPAPT,PARM=SYSTEM WRITE OUT BUFFER 00295000
  316. BNZ EMSG429A BUFFER WRITE ERROR @VA11232 00296100
  317. LR R2,R4 RESTORE SEC. PAGE BUFFER ADDRESS @VA11232 00296200
  318. L R0,SPPREPAG UPD. SFBPNT TO PREV. GOOD WRITE @VA11232 00296300
  319. ST R0,SFBPNT TO POINT TO NEW BUFFER JUST @VA11232 00296400
  320. ST R0,SFBLAST WRITTEN...... @VA11232 00296500
  321. SLR R0,R0 RELEASE STORAGE PAGE @VA11232 00296600
  322. CALL DMKRPAGT,PARM=SYSTEM .. 00298000
  323. CALL DMKPGTVR RELEASE VIRTUAL BUFFER ADDRESS 00299000
  324. ST R0,VSPVPG2 CLEAR PTR TO SECOND VIRTUAL BUFF @VA11232 00299100
  325. LR R2,R4 RESTORE REAL BUFFER ADDRESS 00300000
  326. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00301000
  327. B CONACT CHECK IF CONSOLE FILE @VA11232 00301100
  328. UPSFBPNT MVC SFBPNT,SFBLAST SAVE ADDRESS OF LAST GOOD WRITE 00302000
  329. CONACT CLI VDEVTYPE,TYP3210 CONSOLE 00303000
  330. BNE UNLOCK NO - GO UNLOCK AND EXIT 00304000
  331. CLC SFBSTART(4),VSPDPAGE 1ST PAGE OF FILE? @V293598 00305000
  332. BNE VSPCKR1 NO - CHK FOR REC 1. @V293598 00306000
  333. TM SPRECNUM+3,X'FD' YES - IS THIS REC 2? @V293598 00307000
  334. BZ CONSWRT YES - WRITE THE BUFFER @V293598 00308000
  335. B VSPCKOP NO - CHK FOR OPERATOR @V293598 00309000
  336. VSPCKR1 EQU * @V293598 00310000
  337. TM SPRECNUM+3,X'FE' RECORD ONE ?? 00311000
  338. BZ CONSWRT YES -- WRITE BUFFER TO SPOOL DEVICE 00312000
  339. VSPCKOP EQU * @V293598 00313000
  340. TM VMOSTAT,VMSYSOP SYSTEM OPERATOR ?? 00314000
  341. BZ UNLOCK NO -- ALL DONE GET OUT 00315000
  342. TM SPRECNUM+3,X'0E' 16 LINES SINCE LAST WRITE ?? 00316000
  343. BNZ UNLOCK NO -- 00317000
  344. CONSWRT MVC SPNXTPAG(4),SFBSTART CHAIN THIS BUFFER TO START @VA11232 00318500
  345. MVC SFBPNT,SPPREPAG SFBPNT POINTS TO PREV. @VA11232 00318600
  346. MVC SPRMISC,SFBSTART SPRMISC CONTAINS START CCPD @VA11232 00318700
  347. MVC SPFILID,SFBFILID FILE ID FOR VALIDATING PAGE @V60B9BA 00321000
  348. MVC SPTIME,SFBTIME MORE VALIDATION DATA @V60B9BA 00322000
  349. LR R4,R2 SAVE REAL ADDRESS 00323000
  350. LM R0,R1,VSPDPAGE DASD AND VIRTUAL ADDRESS 00324000
  351. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00325000
  352. CALL DMKRPAPT,PARM=SYSTEM WRITE BUFFER TO SPOOLING DEV 00326000
  353. BNZ CONSWRT1 IF ERRORS, DONT UPDATE SFBLAST @VA03374 00327000
  354. ST R0,SFBLAST SAVE ADDR OF LAST BUFFER WRITTEN @VA03374 00328000
  355. ST R0,SFBPNT SAVE CURRENT PAGE BUFFER @VA07159 00329000
  356. NI SFBFLAG2,255-SFBPURGE OK SO TURN IT OFF @VA07846 00330000
  357. CONSWRT1 EQU * @VA03374 00331000
  358. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00332000
  359. LR R2,R4 RESTORE REAL ADDRESS 00333000
  360. UNLOCK L R1,VSPVPAGE GET VIRTUAL PAGE ADDRESS 00334000
  361. CALL DMKPTRUL UNLOCK PAGE 00335000
  362. LTR R6,R6 IS IT TIME TO EXIT??? @VA09669 00335200
  363. BZ EXIT YES, BRANCH @VA09669 00335400
  364. BR R6 RETURN TO CLASS X BUFFER SETUP @VA09669 00335600
  365. EXIT DS 0H @VA09669 00335800
  366. LR R14,R10 RESTORE RETURN ADDRESS @V60BCAA 00336000
  367. LA R14,4(R14) RETURN TO NON-ERROR PATH IN @V60BCAA 00337000
  368. * DMKVSP 00338000
  369. B RETRN SET UP TO RETURN TO CALLER @V60BCAA 00339000
  370. SPACE 3 00340000
  371. PRTPUR XC VSPSFBLK(4),VSPSFBLK CLEAR SFBLOK POINTER 00341000
  372. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00342000
  373. CALL DMKSPLDL AND PURGE THE FILE 00343000
  374. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00344000
  375. SR R7,R7 CLEAR SFBLOK GPR 00345000
  376. B PRTDONE AND EXIT NOW 00346000
  377. SPACE 00347000
  378. SETOPTS MVC SFBCLAS,VDEVCLAS MOVE IN FILE CLASS 00348000
  379. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00349000
  380. CALL DMKSPLCV CALL VIRTUAL OUTPUT FILE CLOSE 00350000
  381. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00351000
  382. * ROUTINE 00352000
  383. SPACE 2 00353000
  384. PRTDONE EQU * HERE WHEN FINISHED CLOSING THE FILE 00354000
  385. L R9,VDEVSPL RESTORE ADDRESS OF WORKAREA 00355000
  386. L R1,VSPVPAGE GET VIRTUAL BUFFER ADDRESS 00356000
  387. SR R0,R0 DUMMY DASD ADDRESS 00357000
  388. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00358000
  389. CALL DMKRPAGT,PARM=SYSTEM TO RELEASE CORE PAGE, AND 00359000
  390. CALL DMKPGTVR TO RELEASE VIRTUAL BUFFER ADDRESS 00360000
  391. L R1,VSPVPG2 SECOND VIRTUAL BUFFER ADDRESS @VA11232 00361100
  392. LTR R1,R1 IS THERE ONE ? @VA11232 00361200
  393. BZ NOBUFF2 NO, NOTHING TO RELEASE @VA11232 00361300
  394. CALL DMKRPAGT,PARM=SYSTEM RELEASE CORE PAGE @VA11232 00361400
  395. CALL DMKPGTVR AND RELEASE VIRTUAL BUFFER @VA11232 00361500
  396. NOBUFF2 AL R8,VMDVSTRT RE-ESTABLISH VDEVBLOK ADDRESS @VA11232 00361600
  397. L R1,VSPBUFBK GET ADDRESS OF WORK BUFFER 00362000
  398. LTR R1,R1 BLOK TO BE FRETED ?? 00363000
  399. BZ FRETSPL NO - FRET VSPLCTL BLOK 00364000
  400. LA R0,VSPBUFSZ SIZE OF BLOK 00365000
  401. CALL DMKFRET FRET IT 00366000
  402. SPACE 00367000
  403. FRETSPL LR R1,R9 GET ADDRESS OF VSPLCTL WORKAREA 00368000
  404. LA R0,VSPSIZE AND ITS SIZE 00369000
  405. CALL DMKFRET AND FREE IT 00370000
  406. SR R9,R9 00371000
  407. ST R9,VDEVSPL CLEAR ADDRESS OF VSPLCTL 00372000
  408. NI VDEVSFLG,X'FF'-(VDEVPURG+VDEVCFCL) RESET PURGE AND 00373000
  409. * CONSOLE FUNCTION FLAG 00374000
  410. BR R6 AND LEAVE 00375000
  411. SPACE 3 00376000
  412. DS 0H 00377000
  413. MSG427I EQU * HERE IF SPOOL SPACE FULL 00378000
  414. LA R2,427 ERROR MSG DMKVSQ427I 00379000
  415. B ERMRTRN SET UP TO RETURN ON ERROR @V60BCAA 00380000
  416. * PATH 00381000
  417. EMSG429A EQU * @VA11232 00381100
  418. XC VSPCCW(8),VSPCCW CREATE DUMMY SWAPTABLE ENTRY @VA11232 00381150
  419. LR R2,R4 RESTORE BUFFER ADDRESS @VA11232 00381200
  420. L R4,SPPREPAG GET FIRST CCPD TO DEALLOCATE @VA11232 00381250
  421. ST R4,VSPCCW+4 SAVE IN DUMMY SWAPTABLE ENTRY @VA11232 00381300
  422. LA R5,VSPCCW R5 POINTS TO DUMMY SWAPTABLE @VA11232 00381350
  423. CALL DMKPGTSD DEALLOCATE PAGE @VA11232 00381400
  424. XC VSPCCW(8),VSPCCW CREATE DUMMY SWAPTABLE ENTRY @VA11232 00381450
  425. L R4,VSPDPAGE SECOND CCPD TO DEALLOCATE @VA11232 00381500
  426. ST R4,VSPCCW+4 SAVE IN DUMMY SWAPTABLE ENTRY @VA11232 00381550
  427. CALL DMKPGTSD DEALLOCATE PAGE @VA11232 00381600
  428. EMSG429 EQU * HERE IF IO ERROR ON TRANS @VA01460 00382000
  429. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00383000
  430. MSG429F EQU * HERE IF SPOOLING DEVICE ERROR AND 00384000
  431. * SFBLOK TO BE FRETED 00385000
  432. MSG429 MVC SFBLAST(4),SFBPNT CCPD OF LAST BUFFER WRITTEN @VA01460 00386000
  433. BAL R6,PRTPUR PURGE FILE AND CLEAR BLOKS @VA00808 00387000
  434. SPACE 00388000
  435. MSG429I EQU * HERE IF SPOOLING I/O ERROR 00389000
  436. LA R2,429 ERROR MSG DMKVSQ429I 00390000
  437. ERMRTRN LR R14,R10 RESTORE CALLER'S RETURN ADDR.@V60BCAA 00391000
  438. * RETURN WILL BE TO POINT IN DMKVSP 00392000
  439. * WHICH WILL CALL 'ERROMSG' ROUTINE. 00393000
  440. RETRN L R12,=A(DMKVSP) RESTORE DMKVSP'S BASE REGS. @V60BCAA 00394000
  441. LR R10,R12 @V60BCAA 00395000
  442. A R10,F4096 @V60BCAA 00396000
  443. BR R14 RETURN TO CALLER @V60BCAA 00397000
  444. EJECT 00398000
  445. MOVEBUFF MVC 0(0,R2),0(R5) MOVE DATA TO VIRTUAL BUFFER 00399000
  446. SPACE 2 00400000
  447. MODELCCW EQU * MODEL CCW AND TIC 00401000
  448. DC X'41' PUNCH OP-CODE 00402000
  449. DC AL3(12) RELATIVE DATA ADDRESS 00403000
  450. DC AL1(CC+SILI,0) FLAGS 00404000
  451. DC AL2(80) DATA LENGTH 00405000
  452. DC X'08' TIC OP-CODE 00406000
  453. DC AL3(96) RELATIVE ADDRESS OF NEXT RECORD 00407000
  454. SPACE 00408000
  455. * SPACE, WRITE, AND SKIP CCWS 00409000
  456. VSPPREAM DC X'0B000000700000018900000C6000006008000070' @V293598 00410000
  457. SPACE 2 00411000
  458. SAVER14 DC F'0' SAVE AREA FOR RETURN ADDRESS @V60BCAA 00412000
  459. SPACE 00413000
  460. DS 0F 00414000
  461. LTORG 00415000
  462. EJECT 00416000
  463. COPY EQU 00417000
  464. COPY VBLOKS 00418000
  465. COPY VMBLOK 00419000
  466. COPY SPOOL 00420000
  467. PSA 00421000
  468. COPY DEVTYPES 00422000
  469. WORKAREA DSECT MAPPING OF 3211 INDEX WORK AREA @V60BCAA 00423000
  470. * LOCATED BY DMKVSPWA 00424000
  471. WRKADD DS F ADDRESS OF INDEX WORK AREA 00425000
  472. HDRADD DS F ADDRESS OF HEADER BUFFER 00426000
  473. VSPSTK DS F ADDRESS OF LOCAL STACK CPEXBLOKS 00427000
  474. F2047 DS F 00428000
  475. F2048 DS F 00429000
  476. END 00430000