VSQ TITLE 'DMKVSQ (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
*. 00003000
* MODULE NAME - 00004000
* 00005000
* DMKVSQ 00006000
* 00007000
* FUNCTION - 00008000
* 00009000
* TO LOCATE THE NEXT AVAILABLE SLOT IN A PRINTER/PUNCH 00010000
* BUFFER AND MOVE INTO IT A CCW AND DATA. 00011000
* 00012000
* ATTRIBUTES - 00013000
* 00014000
* REENTRANT, RESIDENT, ENTERED VIA BALR FROM DMKVSP 00015000
* 00016000
* ENTRY POINTS - 00017000
* 00018000
* DMKVSQPD - TO LOCATE THE NEXT AVAILABLE SLOT IN A 00019000
* PRINTER/PUNCH BUFFER 00020000
* 00021000
* ENTRY CONDITIONS - 00022000
* 00023000
* GPR3 = NUMBER OF BYTES REQUESTED IN THE BUFFER 00024000
* GPR7 = ADDRESS OF THE SFBLOK FOR THE ACTIVE FILE 00025000
* GPR8 = ADDRESS OF THE VDEVBLOK FOR ADDRESSED VIRTUAL DEVICE 00026000
* GPR9 = ADDRESS OF VSPLCTL WORKAREA 00027000
* GPR11 = ADDRESS OF USER'S VMBLOK 00028000
* GPR12 = ADDRESS OF DMKVSQ 00029000
* 00030000
* NOTE THAT WHEN DMKVSQEX IS ENTERED FROM DMKVSP, GPR13 DOES 00031000
* NOT POINT TO A SAVEAREA, AND THE ENTER AND EXIT MACROS MAY NOT 00032000
* BE USED. 00033000
* 00034000
* EXIT CONDITIONS - 00035000
* 00036000
* NORMAL - RETURN TO CALLER VIA ADDRESS SPECIFIED IN REGISTER 00037000
* 14 + 4. 00038000
* 00039000
* ERROR - RETURN TO CALLER VIA BR R14, WITH INFORMATION 00040000
* SET UP FOR DMKVSP TO CALL ITS ERROMSG ROUTINE. 00041000
* 00042000
EJECT 00043000
* 00044000
* CALLS TO OTHER ROUTINES - 00045000
* 00046000
* DMKPGTSG - TO OBTAIN DASD PAGE BUFFER SPACE 00047000
* DMKRPAGT - TO READ A PAGE BUFFER INTO VIRTUAL MEMORY 00048000
* DMKRPAPT - WRITE A BUFFER FROM VIRTUAL MEMORY TO DASD 00049000
* DMKSPLCV - TO CLOSE A NEW DASD OUTPUT SPOOL FILE 00050000
* DMKSPLDL - TO PURGE A PARTIALLY COMPLETE FILE 00051000
* DMKPGTVR - TO RELEASE VIRTUAL BUFFER 00052000
* DMKPGTVG - TO GET A VIRTUAL BUFFER 00053000
* DMKPTRUL - TO UNLOCK A LOCK BUFFER PAGE 00054000
* DMKFREE, DMKFRET FOR THE USUAL REASONS 00055000
* 00056000
* EXTERNAL REFERENCES - 00057000
* 00058000
* DMKBOXHR - CLASS X PAGE HEADER LINE 00059000
* DMKVSPWA - ADDRESS OF 3211 INDEX WORK AREA 00060000
* 00061000
* TABLES / WORKAREAS - 00062000
* 00063000
* 00064000
* REGISTER USAGE - 00065000
* 00066000
* GPR2 = ADDRESS OF SPLINK 00067000
* GPR3 = NUMBER OF BYTES OF BUFFER REQUESTED 00068000
* GPR5 = ADDRESS OF WORK BUFFER (VSPBUFBK) 00069000
* GPR6 = INTERNAL SUBROUTINE LINKAGE 00070000
* GPR7 = ADDRESS OF SFBLOK FOR ACTIVE FILE 00071000
* GPR8 = ADDRESS OF VDEVBLOK FOR ACTIVE VIRTUAL DEVICE 00072000
* GPR9 = ADDRESS OF VSPLCTL WORKAREA 00073000
* GPR10 = SAVE DMKVSP RETURN ADDRESS 00074000
* GPR11 = ADDRESS OF THE USER'S VMBLOK 00075000
* GPR12 = DMKVSQ BASE ADDRESS 00076000
* GPR14,15 - BALR LINKAGE FOR DMKFREE/DMKFRET 00077000
* 00078000
EJECT 00079000
* NOTES - 00080000
* 00081000
* OPERATION - 00082000
* 00083000
* 1. LOCATE NEXT AVAILABLE SLOT IN PRINTER/PUNCH BUFFER. 00084000
* PAGE IN THE BUFFER, IF NECESSARY, AND LOCK THE BUFFER 00085000
* IN STORAGE. 00086000
* 00087000
* 2. IF ENOUGH ROOM EXISTS IN THIS BUFFER FOR THE CURRENT 00088000
* REQUEST, GO TO STEP 3. OTHERWISE, CALL DMKPGTSG TO OBTAIN A 00089000
* NEW SPOOLING PAGE BUFFER AND WRITE OUT THE FULL BUFFER 00090000
* TO DASD. 00091000
* 00092000
* 3. MOVE THE CCW AND DATA FROM THE WORK BUFFER TO THE VIRTUAL 00093000
* BUFFER. 00094000
* 00095000
* 4. UNLOCK THE BUFFER PAGE AND RETURN TO DMKVSP. 00096000
* 00097000
* ERROR MESSAGES - 00098000
* 00099000
* NONE 00100000
* 00101000
*. 00102000
EJECT 00103000
COPY OPTIONS 00104000
COPY LOCAL OPTIONS 00105000
EJECT 00106000
DMKVSQ CSECT LOADER CONTROL ONLY 00107000
SPACE 00108000
ENTRY DMKVSQPD 00109000
SPACE 3 00110000
EXTRN DMKPGTVR,DMKPGTSG 00111000
EXTRN DMKPGTVG 00112000
EXTRN DMKPGTSD @VA11232 00112100
EXTRN DMKSPLCV 00113000
EXTRN DMKBOXHR 00114000
EXTRN DMKRPAGT,DMKRPAPT 00115000
EXTRN DMKPTRUL,DMKSPLDL 00116000
EXTRN DMKVSPWA @V60BCAA 00117000
EXTRN DMKVSP @V60BCAA 00118000
SPACE 3 00119000
USING PSA,R0 00120000
USING SPLINK,R2 00121000
USING SFBLOK,R7 00122000
USING VDEVBLOK,R8 00123000
USING VSPLCTL,R9 00124000
USING VMBLOK,R11 00125000
SPACE 2 00126000
DMKVSQPD EQU * 00127000
SPACE 00128000
USING *,R12 00129000
LR R12,R15 ESTABLISH BASE REGISTER @V60BCAA 00130000
SPACE 2 00131000
B VSQ0001 00132000
ID DC CL8'DMKVSQ' MODULE NAME 00133000
VSQ0001 EQU * 00134000
PRTDATA EQU * HERE TO LOCATE THE NEXT AVAILABLE 00135000
* SLOT IN A PRINTER/PUNCH BUFFER -- 00136000
* ON ENTRY, R3 CONTAINS THE NUMBER OF BYTES REQUESTED 00137000
SPACE 00138000
LR R10,R14 SAVE RETURN ADDRESS TO DMKVSP@V60BCAA 00139000
SR R6,R6 @VA09669 00139500
L R5,VSPBUFBK GET ADDRESS OF WORK BUFFER 00140000
TM SFBTYPE,TYPPRT PRINTER FILE ? 00141000
BZ PRTCONT NO - 00142000
CLI VDEVCLAS,C'X' CLASS X ?? 00143000
BNE PRTCONT NO - 00144000
L R4,=A(DMKVSPWA) ADDR OF 3211 INDEX WORK AREA @V60BCAA 00145000
USING WORKAREA,R4 00146000
L R1,HDRADD ADDRESS OF HEADER CCW AND MSG 00147000
LTR R1,R1 BUFFER AVAILABLE ?? 00148000
BM PRTCONT DO NOT USE HEADER LINE 00149000
BNZ XCONT YES - PROCESS X CLASS 00150000
L R1,=A(DMKBOXHR) INSTALLATION HEADER PRESENT ?? 00151000
SL R8,VMDVSTRT VDEVBLOK DISP @VA00716 00152000
LTR R1,R1 ?? 00153000
BNZ HDRTRAN YES - GET IT 00154000
HDRERR AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA00716 00155000
MVC HDRADD(4),FFS INDICATE PAGE ERROR OR DMKBOXHR @VA00716 00156000
B PRTCONT NOT PRESENT - FORGET USING HEADER 00157000
HDRTRAN TRANS 2,1,OPT=(BRING,DEFER,SYSTEM),IOER=HDRERR @VA00716 00158000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA00716 00159000
LA R0,15 SIZE OF BUFFER 00160000
CALL DMKFREE GET STORAGE 00161000
MVI 0(R1),C' ' CLEAR BUFFER 00162000
MVC 1(119,R1),0(R1) 00163000
MVC 0(20,R1),VSPPREAM MOVE IN PREAMBLE CCW'S @V293598 00164000
MVC 62(46,R1),0(R2) MOVE IN HEADER FOR CLASS X LIST 00165000
ST R1,HDRADD STORE ADDRESS OF BUFFER AND CONT 00166000
XCONT CLI 0(R5),X'8B' SKIP IMMEDIATELY ?? 00167000
BE XSKIP YES - 00168000
CLI 0(R5),X'89' WRITE SKIP CCW ?? 00169000
BNE PRTCONT NO - CONTINUE 00170000
MVI 0(R5),X'01' CHANGE WRITE SKIP TO WRITE 00171000
BAL R6,PRTCONT MOVE TO SPOOL BUFFER 00172000
L R4,=A(DMKVSPWA) ADDR OF 3211 INDEX WORK AREA @VA10556 00172250
SR R6,R6 CLEAR REG6 @VA09669 00172500
XSKIP L R5,HDRADD ADDRESS OF CCW AND DATA 00173000
LA R3,8 LENGTH OF SPACE IMMEDIATE 00174000
BAL R6,PRTCONT MOVE SPACE TO PRINT BUFFER 00175000
SR R6,R6 CLEAR REG6 @VA09669 00175500
A R5,F8 POINT TO HEADER WRITE CCW 00176000
LA R3,112 LENGTH OF CCW AND DATA 00177000
DROP R4 00178000
SPACE 00179000
PRTCONT L R1,VSPVPAGE GET VIRTUAL BUFFER ADDRESS 00180000
* PAGE THE BUFFER IN 00181000
SL R8,VMDVSTRT VDEVBLOK DISP @VA00716 00182000
TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM),IOER=EMSG429 @VA00716 00183000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA00716 00184000
LH R14,VSPNEXT GET POINTER TO NEXT SLOT 00185000
LTR R14,R14 POINTER ZERO ?? 00186000
BNZ PRTNOTAG CAN'T BE TIME TO SET TAG @V293598 00187000
LA R14,16 SET ORDINARY 1ST DISP @V293598 00188000
CLC SFBSTART(4),VSPDPAGE FIRST PAGE OF FILE ?? @V293598 00189000
BNE PRTNOTAG NO - DON'T SET TAG @V293598 00190000
MVC 16(12,R2),MODELCCW INITIALIZE THE CCWS @V293598 00191000
MVI 16(R2),X'03' MAKE COMMAND NOP @V293598 00192000
MVI 23(R2),L'VSPXTAG SET COUNT FIELD @V293598 00193000
MVI 27(R2),L'VSPXTAG+16 SET TIC DISPLACEMENT @V293598 00194000
MVI 28(R2),C' ' SET FIRST TAG CHAR TO BLANK @V293598 00195000
MVC 29(L'VSPXTAG-1,R2),28(R2) BLANK THE ENTIRE FLD @V293598 00196000
LA R14,L'VSPXTAG+16(,R14) NEXT DBLWD BOUNDARY @V293598 00197000
MVC SPRECNUM(4),F1 INIT SPOOL BUFFER REC COUNT @V293598 00198000
PRTNOTAG AR R3,R14 ADD DISP TO NUMBER OF @V293598 00199000
* BYTES REQUESTED 00200000
LA R4,4088 MAXIMUM NUMBER OF BYTES @V60B9BA 00201000
CLC SFBSTART(4),VSPDPAGE IS IT FIRST DASD BUFFER ? @V60B9BA 00202000
BNE *+8 XFER IF NOT @V60B9BA 00203000
LA R4,4040 FEWER BYTES IN FIRST BUFFER @V60B9BA 00204000
CR R3,R4 WILL WE FALL OFF END ? @V60B9BA 00205000
BNH PRTDATA2 NO -- 00206000
SR R3,R14 RESTORE R3 TO ENTRY VALUE 00207000
LA R4,10 RETRY COUNT OF 10 00208000
STH R4,SFBMISC1 AND SAVE 00209000
PRTSG LR R4,R2 SAVE BUFFER ADDRESS 00210000
MVC SPFILID,SFBFILID FILE ID FOR VALIDATING PAGE @V60B9BA 00211000
MVC SPTIME,SFBTIME MORE VALIDATION DATA @V60B9BA 00212000
CALL DMKPGTSG GET A SPOOLING PAGE BUFFER 00213000
LTR R1,R1 VALID DASD ADDRESS CCPD 00214000
BNZ SPACGOOD SPACE AVAILBLE 00215000
SPACE 00216000
* SPOOLING SPACE FULL 00217000
LR R2,R4 RESTORE BUFFER ADDRESS 00218000
L R0,SFBSTART GET BUFFER START ADDRESS 00219000
ST R0,SPNXTPAG AND CHAIN TAIL TO START OF FILE 00220000
ST R0,SPRMISC SPRMISC = SFBSTART @VA11232 00220500
LM R0,R1,VSPDPAGE GET CURRENT BUFFER ADDRESSES 00221000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00222000
CALL DMKRPAPT,PARM=SYSTEM AND WRITE IT TO DASD 00223000
BNZ EMSG429 BUFFER WRITE ERROR @VA01460 00224000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00226000
ST R0,SFBLAST UPDATE BUFFER LAST ADDRESS 00227000
MSG427 BAL R6,SETOPTS AND CLEAR FILE AND DEVICE 00228000
B MSG427I GIVE ERROR MSG DMKVSP427I 00229000
SPACE 00230000
SPACGOOD ST R1,SPNXTPAG SAVE FORWARD BUFFER LINK 00231000
L R1,SFBSTART START CCPD @VA11232 00231100
L R0,SPPREPAG ARE WE WRITING FIRST BUFFER @VA11232 00231150
LTR R0,R0 IF ZERO - YES @VA11232 00231200
BNZ STSTRT NO, USE SFBSTART @VA11232 00231250
C R1,VSPDPAGE ARE WE RE-WRITING FIRST BUFFER ? @VA11232 00231300
BE STSTRT NO, SFBSTART IS OK @VA11232 00231350
L R1,VSPDPAGE WE HAVE A NEW SFBSTART @VA11232 00231400
ST R1,SFBSTART UPDATE SFBSTART AND SFBLAST TO @VA11232 00231450
ST R1,SFBLAST NEW START CCPD @VA11232 00231500
STSTRT ST R1,SPRMISC SPRMISC CONTAINS START CCPD @VA11232 00231550
ST R0,SFBPNT SFBPNT PTS TO PREV. WHIL WRITE @VA11232 00231600
LM R0,R1,VSPDPAGE GET CURRENT BUFFER ADDRESSES 00232000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00233000
CALL DMKRPAPT,PARM=SYSTEM AND WRITE IT TO DASD 00234000
LR R2,R4 RESTORE BUFFER ADDRESS 00235000
BZ WRGOOD BUFFER WRITTEN NO ERRORS 00236000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00237000
OI VSPFLAG1,VSPERR INDICATE BUFFER WRITE ERROR @VA11232 00238500
MVC VSPDPAGE(4),SPNXTPAG USE NEXT CCPD AS CURRENT CCPD 00239000
ICM R14,B'0011',SFBMISC1 GET RETRY COUNT 00240000
BZ MSG429 FAILED 10 CONSECUTIVE RETIES 00241000
BCTR R14,0 -1 00242000
STH R14,SFBMISC1 AND SAVE 00243000
B PRTSG AND RETRY 00244000
SPACE 00245000
WRGOOD AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00246000
L R15,SPPREPAG SAVE CCPD OF PREVIOUS BUFFER @VA01460 00247000
TM VSPFLAG1,VSPERR STILL IN ERROR RECOVERY ? @VA11232 00247500
BO *+8 DON'T UPD. SFBLAST UNTIL FINISHED@VA11232 00247600
ST R0,SFBLAST SAVE ADDRESS OF LAST BUFFER WRITTEN 00248000
L R0,VSPDPAGE GET OLD BUFFER ADDRESS 00249000
ST R0,SPPREPAG AND SAVE AS BACK-CHAIN 00250000
L R0,SPNXTPAG GET NEW BUFFER ADDRESS 00251000
ST R0,VSPDPAGE AND SAVE IN CONTROL BLOK 00252000
L R0,SFBSTART CHAIN FORWARD POINTER TO 00253000
ST R0,SPNXTPAG FIRST BUFFER 00254000
SR R0,R0 CLEAR OUT OLD BUFFER 00255000
ST R0,SPRECNUM RECORD COUNTER 00256000
LA R14,SPSIZE OFFSET OF FIRST RECORD IN BUFFER 00257000
AR R3,R14 POINTER TO NEW NEXT SLOT 00258000
TM VSPFLAG1,VSPERR STILL IN ERROR RECOVERY ? @VA11232 00259100
BO *+10 YES -- DO NOT UPDATE SFBPNT 00260000
MVC SFBPNT,SFBLAST UPDATE SFBPNT TO LAST BUFFER 00261000
PRTDATA2 STH R3,VSPNEXT SAVE IN CONTROL BLOCK 00262000
AR R2,R14 POINT TO REAL ADDRESS OF SLOT 00263000
SR R3,R14 NUMBER OF BYTES REQUESTED IN R3 00264000
BCTR R3,0 -1 FOR MOVE 00265000
EX R3,MOVEBUFF MOVE CCW AND DATA FROM WORK BUFFER 00266000
* TO THE VIRTUAL BUFFER 00267000
SR R2,R14 RESTORE R2 TO START OF BUFFER 00268000
L R14,SPRECNUM GET BUFFER CCW COUNT 00269000
LA R14,1(R14) UPDATE BY ONE 00270000
ST R14,SPRECNUM SAVE BUFFER COUNT 00271000
TM 0(R5),X'03' CONTROL IMMEDIATE CMND? @VA02094 00273000
BO SKIPCCW YES--DON'T UPDATE COUNT @VA02094 00274000
OI SFBFLAG2,SFBFLNMT INDICATE FILE NOT EMPTY @VA13052 00274500
L R14,SFBRECNO UPDATE RECORD COUNT 00275000
LA R14,1(R14) .. 00276000
ST R14,SFBRECNO .. 00277000
SKIPCCW EQU * @VA02094 00278000
TM VSPFLAG1,VSPERR PAGE WRITE ERROR ? @VA11232 00279100
BZ CONACT CHECK FOR ACTIVE CONSOLE 00280000
NI VSPFLAG1,X'FF'-VSPERR RESET ERROR INDICATOR @VA11232 00281100
LTR R3,R15 IS THERE A PREVIOUS CCPD BUFFER ?? 00282000
BZ UPSFBPNT UPDATE LAST AND SFBPNT @VA11232 00282500
SPACE 00286000
UPDTPNT LR R4,R2 SAVE ADDRESS OF CURRENT BUFFER 00287000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00288000
CALL DMKPGTVG GET VIRTUAL BUFFER 00289000
LTR R1,R1 DID WE GET A VIRTUAL BUFFER ? @VA11232 00289100
BZ EMSG429A NO, PURGE THE FILE @VA11232 00289200
ST R1,VSPVPG2 SAVE ADDR. OF SEC. VIRTUAL BUFF. @VA11232 00289300
TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=EMSG429A @VA11232 00290100
LR R0,R3 CCPD OF BUFFER TO BE UPDATED 00291000
CALL DMKRPAGT,PARM=(BRING+SYSTEM) 00292000
BNZ EMSG429A BUFFER READ ERROR @VA11232 00293100
MVC SPNXTPAG(4),4(R4) UPDATE FORWARD POINTER 00294000
MVC SFBPNT,SPPREPAG MOVE PREVIOUS TO SFBPNT @VA11232 00294500
CALL DMKRPAPT,PARM=SYSTEM WRITE OUT BUFFER 00295000
BNZ EMSG429A BUFFER WRITE ERROR @VA11232 00296100
LR R2,R4 RESTORE SEC. PAGE BUFFER ADDRESS @VA11232 00296200
L R0,SPPREPAG UPD. SFBPNT TO PREV. GOOD WRITE @VA11232 00296300
ST R0,SFBPNT TO POINT TO NEW BUFFER JUST @VA11232 00296400
ST R0,SFBLAST WRITTEN...... @VA11232 00296500
SLR R0,R0 RELEASE STORAGE PAGE @VA11232 00296600
CALL DMKRPAGT,PARM=SYSTEM .. 00298000
CALL DMKPGTVR RELEASE VIRTUAL BUFFER ADDRESS 00299000
ST R0,VSPVPG2 CLEAR PTR TO SECOND VIRTUAL BUFF @VA11232 00299100
LR R2,R4 RESTORE REAL BUFFER ADDRESS 00300000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00301000
B CONACT CHECK IF CONSOLE FILE @VA11232 00301100
UPSFBPNT MVC SFBPNT,SFBLAST SAVE ADDRESS OF LAST GOOD WRITE 00302000
CONACT CLI VDEVTYPE,TYP3210 CONSOLE 00303000
BNE UNLOCK NO - GO UNLOCK AND EXIT 00304000
CLC SFBSTART(4),VSPDPAGE 1ST PAGE OF FILE? @V293598 00305000
BNE VSPCKR1 NO - CHK FOR REC 1. @V293598 00306000
TM SPRECNUM+3,X'FD' YES - IS THIS REC 2? @V293598 00307000
BZ CONSWRT YES - WRITE THE BUFFER @V293598 00308000
B VSPCKOP NO - CHK FOR OPERATOR @V293598 00309000
VSPCKR1 EQU * @V293598 00310000
TM SPRECNUM+3,X'FE' RECORD ONE ?? 00311000
BZ CONSWRT YES -- WRITE BUFFER TO SPOOL DEVICE 00312000
VSPCKOP EQU * @V293598 00313000
TM VMOSTAT,VMSYSOP SYSTEM OPERATOR ?? 00314000
BZ UNLOCK NO -- ALL DONE GET OUT 00315000
TM SPRECNUM+3,X'0E' 16 LINES SINCE LAST WRITE ?? 00316000
BNZ UNLOCK NO -- 00317000
CONSWRT MVC SPNXTPAG(4),SFBSTART CHAIN THIS BUFFER TO START @VA11232 00318500
MVC SFBPNT,SPPREPAG SFBPNT POINTS TO PREV. @VA11232 00318600
MVC SPRMISC,SFBSTART SPRMISC CONTAINS START CCPD @VA11232 00318700
MVC SPFILID,SFBFILID FILE ID FOR VALIDATING PAGE @V60B9BA 00321000
MVC SPTIME,SFBTIME MORE VALIDATION DATA @V60B9BA 00322000
LR R4,R2 SAVE REAL ADDRESS 00323000
LM R0,R1,VSPDPAGE DASD AND VIRTUAL ADDRESS 00324000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00325000
CALL DMKRPAPT,PARM=SYSTEM WRITE BUFFER TO SPOOLING DEV 00326000
BNZ CONSWRT1 IF ERRORS, DONT UPDATE SFBLAST @VA03374 00327000
ST R0,SFBLAST SAVE ADDR OF LAST BUFFER WRITTEN @VA03374 00328000
ST R0,SFBPNT SAVE CURRENT PAGE BUFFER @VA07159 00329000
NI SFBFLAG2,255-SFBPURGE OK SO TURN IT OFF @VA07846 00330000
CONSWRT1 EQU * @VA03374 00331000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00332000
LR R2,R4 RESTORE REAL ADDRESS 00333000
UNLOCK L R1,VSPVPAGE GET VIRTUAL PAGE ADDRESS 00334000
CALL DMKPTRUL UNLOCK PAGE 00335000
LTR R6,R6 IS IT TIME TO EXIT??? @VA09669 00335200
BZ EXIT YES, BRANCH @VA09669 00335400
BR R6 RETURN TO CLASS X BUFFER SETUP @VA09669 00335600
EXIT DS 0H @VA09669 00335800
LR R14,R10 RESTORE RETURN ADDRESS @V60BCAA 00336000
LA R14,4(R14) RETURN TO NON-ERROR PATH IN @V60BCAA 00337000
* DMKVSP 00338000
B RETRN SET UP TO RETURN TO CALLER @V60BCAA 00339000
SPACE 3 00340000
PRTPUR XC VSPSFBLK(4),VSPSFBLK CLEAR SFBLOK POINTER 00341000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00342000
CALL DMKSPLDL AND PURGE THE FILE 00343000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00344000
SR R7,R7 CLEAR SFBLOK GPR 00345000
B PRTDONE AND EXIT NOW 00346000
SPACE 00347000
SETOPTS MVC SFBCLAS,VDEVCLAS MOVE IN FILE CLASS 00348000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00349000
CALL DMKSPLCV CALL VIRTUAL OUTPUT FILE CLOSE 00350000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00351000
* ROUTINE 00352000
SPACE 2 00353000
PRTDONE EQU * HERE WHEN FINISHED CLOSING THE FILE 00354000
L R9,VDEVSPL RESTORE ADDRESS OF WORKAREA 00355000
L R1,VSPVPAGE GET VIRTUAL BUFFER ADDRESS 00356000
SR R0,R0 DUMMY DASD ADDRESS 00357000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00358000
CALL DMKRPAGT,PARM=SYSTEM TO RELEASE CORE PAGE, AND 00359000
CALL DMKPGTVR TO RELEASE VIRTUAL BUFFER ADDRESS 00360000
L R1,VSPVPG2 SECOND VIRTUAL BUFFER ADDRESS @VA11232 00361100
LTR R1,R1 IS THERE ONE ? @VA11232 00361200
BZ NOBUFF2 NO, NOTHING TO RELEASE @VA11232 00361300
CALL DMKRPAGT,PARM=SYSTEM RELEASE CORE PAGE @VA11232 00361400
CALL DMKPGTVR AND RELEASE VIRTUAL BUFFER @VA11232 00361500
NOBUFF2 AL R8,VMDVSTRT RE-ESTABLISH VDEVBLOK ADDRESS @VA11232 00361600
L R1,VSPBUFBK GET ADDRESS OF WORK BUFFER 00362000
LTR R1,R1 BLOK TO BE FRETED ?? 00363000
BZ FRETSPL NO - FRET VSPLCTL BLOK 00364000
LA R0,VSPBUFSZ SIZE OF BLOK 00365000
CALL DMKFRET FRET IT 00366000
SPACE 00367000
FRETSPL LR R1,R9 GET ADDRESS OF VSPLCTL WORKAREA 00368000
LA R0,VSPSIZE AND ITS SIZE 00369000
CALL DMKFRET AND FREE IT 00370000
SR R9,R9 00371000
ST R9,VDEVSPL CLEAR ADDRESS OF VSPLCTL 00372000
NI VDEVSFLG,X'FF'-(VDEVPURG+VDEVCFCL) RESET PURGE AND 00373000
* CONSOLE FUNCTION FLAG 00374000
BR R6 AND LEAVE 00375000
SPACE 3 00376000
DS 0H 00377000
MSG427I EQU * HERE IF SPOOL SPACE FULL 00378000
LA R2,427 ERROR MSG DMKVSQ427I 00379000
B ERMRTRN SET UP TO RETURN ON ERROR @V60BCAA 00380000
* PATH 00381000
EMSG429A EQU * @VA11232 00381100
XC VSPCCW(8),VSPCCW CREATE DUMMY SWAPTABLE ENTRY @VA11232 00381150
LR R2,R4 RESTORE BUFFER ADDRESS @VA11232 00381200
L R4,SPPREPAG GET FIRST CCPD TO DEALLOCATE @VA11232 00381250
ST R4,VSPCCW+4 SAVE IN DUMMY SWAPTABLE ENTRY @VA11232 00381300
LA R5,VSPCCW R5 POINTS TO DUMMY SWAPTABLE @VA11232 00381350
CALL DMKPGTSD DEALLOCATE PAGE @VA11232 00381400
XC VSPCCW(8),VSPCCW CREATE DUMMY SWAPTABLE ENTRY @VA11232 00381450
L R4,VSPDPAGE SECOND CCPD TO DEALLOCATE @VA11232 00381500
ST R4,VSPCCW+4 SAVE IN DUMMY SWAPTABLE ENTRY @VA11232 00381550
CALL DMKPGTSD DEALLOCATE PAGE @VA11232 00381600
EMSG429 EQU * HERE IF IO ERROR ON TRANS @VA01460 00382000
AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00383000
MSG429F EQU * HERE IF SPOOLING DEVICE ERROR AND 00384000
* SFBLOK TO BE FRETED 00385000
MSG429 MVC SFBLAST(4),SFBPNT CCPD OF LAST BUFFER WRITTEN @VA01460 00386000
BAL R6,PRTPUR PURGE FILE AND CLEAR BLOKS @VA00808 00387000
SPACE 00388000
MSG429I EQU * HERE IF SPOOLING I/O ERROR 00389000
LA R2,429 ERROR MSG DMKVSQ429I 00390000
ERMRTRN LR R14,R10 RESTORE CALLER'S RETURN ADDR.@V60BCAA 00391000
* RETURN WILL BE TO POINT IN DMKVSP 00392000
* WHICH WILL CALL 'ERROMSG' ROUTINE. 00393000
RETRN L R12,=A(DMKVSP) RESTORE DMKVSP'S BASE REGS. @V60BCAA 00394000
LR R10,R12 @V60BCAA 00395000
A R10,F4096 @V60BCAA 00396000
BR R14 RETURN TO CALLER @V60BCAA 00397000
EJECT 00398000
MOVEBUFF MVC 0(0,R2),0(R5) MOVE DATA TO VIRTUAL BUFFER 00399000
SPACE 2 00400000
MODELCCW EQU * MODEL CCW AND TIC 00401000
DC X'41' PUNCH OP-CODE 00402000
DC AL3(12) RELATIVE DATA ADDRESS 00403000
DC AL1(CC+SILI,0) FLAGS 00404000
DC AL2(80) DATA LENGTH 00405000
DC X'08' TIC OP-CODE 00406000
DC AL3(96) RELATIVE ADDRESS OF NEXT RECORD 00407000
SPACE 00408000
* SPACE, WRITE, AND SKIP CCWS 00409000
VSPPREAM DC X'0B000000700000018900000C6000006008000070' @V293598 00410000
SPACE 2 00411000
SAVER14 DC F'0' SAVE AREA FOR RETURN ADDRESS @V60BCAA 00412000
SPACE 00413000
DS 0F 00414000
LTORG 00415000
EJECT 00416000
COPY EQU 00417000
COPY VBLOKS 00418000
COPY VMBLOK 00419000
COPY SPOOL 00420000
PSA 00421000
COPY DEVTYPES 00422000
WORKAREA DSECT MAPPING OF 3211 INDEX WORK AREA @V60BCAA 00423000
* LOCATED BY DMKVSPWA 00424000
WRKADD DS F ADDRESS OF INDEX WORK AREA 00425000
HDRADD DS F ADDRESS OF HEADER BUFFER 00426000
VSPSTK DS F ADDRESS OF LOCAL STACK CPEXBLOKS 00427000
F2047 DS F 00428000
F2048 DS F 00429000
END 00430000