DIR TITLE 'DMMDIR (IPCS) VM/370 - RELEASE 6' 00001000
* 00002000
* MODULE NAME: 00003000
* DUMPSCAN 00004000
* 00005000
* FUNCTION: 00006000
* FORMAT AND DISPLAY THE DUMP FOR 'DSC' AND 'SCR' 00007000
* 00008000
* ATTRIBUTES: 00009000
* REUSABLE 00010000
* NON-REENTRANT 00011000
* 00012000
* ENTRY POINTS: 00013000
* DMMDIR 00014000
* 00015000
* ENTRY CONDITIONS: 00016000
* R2 POINTS TO THE AREA TO BE DISPLAYED 00017000
* R7 CONTAINS THE DUMP ADDRESS TO BE DISPLAYED 00018000
* 00019000
* EXIT CONDITIONS: 00020000
* RETURN CODE IN R15 0 - GOOD 00021000
* 4 - WARNING 00022000
* 8 - FATAL 00023000
* 00024000
* CALLS TO OTHER ROUTINES: 00025000
* DMMINT TRANSLATE 00026000
* 00027000
* EXTERNAL REFERENCES: 00028000
* BUFF1 DATA AREA 00029000
* CMDINFO HEADER 00030000
* TYPEFLAG TERMINAL TYPE 00031000
* 00032000
* TABLES/WORKAREAS: 00033000
* SCREEN DISPLAY AREA 00034000
* 00035000
* REGISTER USAGE: 00036000
* 00037000
* R15 ADDRESSES OF EXTERNAL ROUTINES 00038000
* R14 RETURNS FROM EXTERNAL ROUTINES 00039000
* R13 SAVE AREA ADDRESS 00040000
* R12 BASE 00041000
* R11,R10 NOT USED 00042000
* R9-R2 WORK REGISTERS 00043000
* 00044000
* NOTES: 00045000
* 00046000
* 00047000
* OPERATION: 00048000
* DIR FIRST CLEARS THE SCREEN WORK AREA. 00049000
* THE INTENT IS TO PUT THE REQUESTED ADDRESS ON 00050000
* LINE 8 OF THE SCREEN. SO, ALLOWING 16 TRANSLATED 00051000
* BYTES TO A LINE THE STARTING AND ENDING ADDRESSES 00052000
* ARE CALCULATED. THE 16 BYTES OF DATA, ALONG WITH 00053000
* THE TRUE, IN-DUMP ADDRESS IS THEN TRANSLATED AND LAID 00054000
* OUT ON THE SCREEN. WHEN THE SCREEN IS FILLED, IT IS 00055000
* WRITTEN OUT BY A DIAGNOSE UNLESS THE TERMINAL IS 00056000
* A 2741. IN THIS CASE, ONLY ONE LINE AT THE REQUESTED 00057000
* ADDRESS IS WRITTEN. 00058000
* 00059000
* ERROR MESSAGES: 00060000
* NONE 00061000
* 00062000
* * * * * * * *------- -------- -------- -------- ------* 00063000
DMMDIR CSECT @VA04250 00064000
ENTRY SCRNAREA DISPLAY AREA @VA04250 00065000
ENTRY INCORE ADDRESS IN CORE OF LAST DISP AREA@V4075A2 00066000
ENTRY DMMDIRLN COMMON WRTERM/PRINT ROUTINE @V4075A2 00067000
EXTRN PRINTSW PRINT ON/OFF STATUS @V4075A2 00068000
ENTRY HEXAD LAST ADDRESS DISPLAYED @VA04250 00069000
EXTRN BUFF1 DUMP DATA @VA04250 00070000
EXTRN DMMINT TRANSLATE @VA04250 00071000
EXTRN CMDINFO HEADER @VA04250 00072000
EXTRN TYPEFLAG TYPE OF TERMINAL @VA04250 00073000
EXTRN CONSOLE VIRT CONS ADDR. @VA04250 00074000
EXTRN PRINTONE ONE-SHOT PRINT SWITCH @V4075A2 00075000
STM R14,R12,SAVEDISP(R13) CALLER SAVE @VA04250 00076000
LR R12,R15 ADDRESS. @VA04250 00077000
USING DMMDIR,R12 USE @VA04250 00078000
LA R11,SCRNAREA ADDRESSABILITY TO @VA04250 00079000
USING SCREEN,R11 SCREEN DSECT @VA04250 00080000
ST R13,SAVEBACK CALLER SAVE PTR @VA04250 00081000
B EYECATCH BYPASS EYECATCHER @VA04250 00082000
DS 0D ALIGN @VA04250 00083000
DC CL8'DMMDIR' EYECATCH @VA04250 00084000
RELLEV DC C'REL4LEV0' RELEASE AND LEVEL @V4075A1 00085000
EYECATCH LA R13,SAVEAREA OUR SAVE PTR @VA04250 00086000
* * * * * * * *-----------------------------------------* 00087000
* * * * * * * * DIR IS PASSED AN ADDRESS TO BE FORMATTED 00088000
* * * * * * * * AND DISPLAYED ON THE SCREEN. AT THE TIME 00089000
* * * * * * * * HE GETS CONTROL, THE RECORD IS IN CORE IN 00090000
* * * * * * * * BUFF1. 00091000
* * * * * * * * R2 HAS THE IN-CORE ADDRESS OF THE 00092000
* * * * * * * * REQUIRED PART OF THE DUMP. 00093000
* * * * * * * * R7 HAS THE IN-DUMP ADDRESS TO FORMAT. 00094000
* * * * * * * *-----------------------------------------* 00095000
ST R7,HEXAD SAVE REQUESTED ADDRESS @VA04250 00096000
XC RETCODE,RETCODE CLEAR RETURN @VA04250 00097000
LR R9,R2 GET IN CORE ADDRESS @VA04250 00098000
L R2,BUFF1ADD GET PAGE LOWER BOUNDARY @VA04250 00099000
LA R8,SCREEN START OF SCREEN @VA04250 00100000
STM R6,R9,CLEARSAV SAVE REGS THROUGH CLEAR @VA04250 00101000
LA R6,SCREEN START OF SCREEN @VA04250 00102000
LA R7,SCREENSZ 1760 BYTES IN SCREEN @VA04250 00103000
LA R9,BLANKPAD PAD @VA04830 00104000
SLL R9,HIORD PUT PAD CHAR IN HI ORDER @VA04830 00105000
MVCL R6,R8 CLEAR SCREEN @VA04250 00106000
LM R6,R9,CLEARSAV RESTORE REGS @VA04250 00107000
ST R9,INCORE SAVE THE ADDRESS TO BE DISPLAYED @V4075A2 00108000
SH R9,EIGHTY POINT TO FIRST LINE TO BE SCREE @VA04250 00109000
SH R7,EIGHTY KEEP REAL ADDRESS IN STEP @VA04250 00110000
LR R6,R9 GET FIRST LINE @VA04250 00111000
AH R6,ONETIRTY R6 NOW POINTS TO END OF SCREEN @VA04250 00112000
AH R2,ONEK R2 POINTS TO TOP OF PAGE @VA04250 00113000
CR R6,R2 IS TOP OF SCREEN OFF PAGE? @VA04250 00114000
BNH OFFPAGE NO @VA04250 00115000
LR R6,R2 YES - USE LOWER FIGURE @VA04250 00116000
OFFPAGE SH R2,ONEK RESTORE R2 @VA04250 00117000
OFFCOMP CR R2,R9 CURRENT LINE PTR OFF PAGE? @VA04250 00118000
BNH KEEPON NO - PRINT IT. @VA04250 00119000
LA R9,EBCOUT(R9) NEXT LINE ON PAGE @VA04250 00120000
LA R7,EBCOUT(R7) BUMP REAL ADDRESS @VA04250 00121000
LA R8,LINEL(R8) NEXT LINE ON SCREEN @VA04250 00122000
B OFFCOMP GO CHECK NEXT LINE @VA04250 00123000
KEEPON LA R3,TRANL GET LENGTH FOR TRANSLATE - 19 @VA04250 00124000
TRANSLAT MVC TRANLINE+TDAT(L'TRANLINE-TDAT),0(R9) TRANS DATA @VA04250 00125000
ST R7,TRANLINE LOAD ADDRESS FOR TRANS @VA04250 00126000
LA R4,TRANLINE+ONE GET ADDRESS FOR TRANS @VA04250 00127000
L R15,INTADD GO DO IT @VA04250 00128000
BALR R14,R15 LINK @VA04250 00129000
LA R8,FOUR(R8) POINT TO ADDR AREA @VA04250 00130000
MVC 0(TRANADL,R8),0(R5) PLUG ADDRESS @VA04250 00131000
LA R5,SIX(R5) POINT TO DATA @VA04250 00132000
LA R2,FOUR COUNT SLOTS ON LINE @VA04250 00133000
LA R8,TEN(R8) MIDDLE OF SCREEN @VA04250 00134000
MOVEBLOK MVC 0(TRANOUT,R8),0(R5) MOVE XLATED 8 BYTES TO SCRN @VA04250 00135000
LA R8,TEN(R8) NEXT OUTPUT BLOCK @VA04250 00136000
LA R5,EIGHT(R5) NEXT INPUT BLOCK @VA04250 00137000
BCT R2,MOVEBLOK MOVE NEXT BLOK @VA04250 00138000
LA R8,TWO(R8) POINT TO EBCDIC AREA @VA04250 00139000
MVC 0(EBCOUT,R8),0(R9) WRITE EBCDIC @VA04250 00140000
TR 0(EBCOUT,R8),TRTABLE TRANSLATE UNPRINTABLES @VA04250 00141000
LA R8,TWENTYFO(R8) BUMP SCREEN LINE PTR @VA04250 00142000
CR R6,R9 OFF END OF SCREEN? @VA04250 00143000
BL SCRNFULL YES - GO WRITE IT @VA04250 00144000
LA R9,EBCOUT(R9) BUMP PAGELINE PTR @VA04250 00145000
LA R7,EBCOUT(R7) BUMP ADDRESS CTR @VA04250 00146000
B KEEPON GET NEXT LINE @VA04250 00147000
* * * * * * * *-----------------------------------------* 00148000
* * * * * * * * THIS ROUTINE WRITES TO THE SCREEN 00149000
* * * * * * * *-----------------------------------------* 00150000
SCRNFULL MVC SCRNL21(LINEL),BLANKOUT CLEAR READY LINE @VA04830 00151000
MVC SCRNL21(L'READYMSG),READYMSG '*** READY ***' @VA04250 00152000
L R2,CIADD INFO LINE @VA04250 00153000
MVC SCRNL1(LINEL),0(R2) POST ANY ADDITIONAL INFO @VA04250 00154000
MVC 0(LINEL,R2),BLANKOUT CLEAR MESSAGE AREA @VA04830 00155000
L R2,TFLAGADD GET DEVICE TYPE @VA04250 00156000
CLI 0(R2),TYPER TYPER? @VA04250 00157000
BNE SCREENIT NO - GO DISPLAY IT @VA04250 00158000
LA R8,SCRNL9 YES TYPE 1 LINE. GET ADDRESS @VA04250 00159000
LA R9,SHRTLINE LENGTH - 72 @VA04250 00160000
BAL R10,WRTERM GO WRITE ONE LINE @VA04250 00161000
B RETURN GO BACK @VA04250 00162000
SCREENIT MVC SCRNL9(L'ASTS),ASTS FLAG ACTIVE ADDRESS @VA04250 00163000
MVC SCRNL9+LREADY(L'ASTS),ASTS DITTO @VA04250 00164000
MVI CCW1CTL,ON SET ERASE CONTROL BYTE ON @VA04250 00165000
MVI CCW2CTL,LINE1 START WRITE LINE 1 @VA04250 00166000
LA R3,CCWD CCW FOR DIAGNOSE @VA04250 00167000
L R4,CONSADD VIRT CONS ADDRESS @VA04250 00168000
L R4,0(R4) DEVICE ADDRESS @VA04250 00169000
B DISBRENT GO TO BRANCH ENTRY TO DISPLAY @V4075A2 00170000
* * * * * * * * ------- -------- -------- ------- * 00171000
* * * * * * * * WRTERM 00172000
* * * * * * * * ------- -------- -------- ------- * 00173000
WRTERM ST R8,PARMLIS1 SAVE MSG TEXT PTR IN PARM LIST @V4075A2 00174000
ST R9,PARMLIS2 AND TEXT LENGTH @V4075A2 00175000
LA R1,PARMLIS1 POINTER TO PASS @V4075A2 00176000
L R15,FEDLNADD ADDRESS OF DMMFEDLN - LINE WRITER@V4075A2 00177000
BALR R14,R15 GO WRITE THE LINE @V4075A2 00178000
BR R10 AND RETURN @V4075A2 00179000
PARMLIS1 DS F PARM1 @V4075A2 00180000
PARMLIS2 DS F PARM2 @V4075A2 00181000
FEDLNADD DC V(DMMFEDLN) LINE WRITER ROUTINE @V4075A2 00182000
* * * * * * * * ------- -------- -------- ------- * 00183000
* * * * * * * * CONSTANTS FOR FORMAT 00184000
* * * * * * * *------- -------- -------- -------- ------* 00185000
DS 0F ALIGN @VA04250 00186000
TRANLINE DS CL20 LINE FROM DUMP TO BE TRANSLATED @VA04250 00187000
HEXAD DC 4X'FF' LAST ADDRESS DISPLAYED @VA04250 00188000
ONEK DC X'0FE0' ONE PAGE @VA04250 00189000
EIGHTY DC X'0080' 8 LINES FORMATTED @VA04250 00190000
ONETIRTY DC X'0130' ONE SCREEN FORMATTED @VA04250 00191000
* * * * * * * * ------- -------- -------- ------- * 00192000
* * * * * * * * MISC CONSTANTS 00193000
* * * * * * * * ------- -------- -------- ------- * 00194000
RETCODE DS F RETURN CODE @VA04250 00195000
TYPER EQU X'FF' TYPER DEVICE FLAG @VA04250 00196000
NULL EQU X'00' CLEAR REGS @VA04250 00197000
LINE1 EQU X'01' FIRST SCREEN LINE @VA04250 00198000
ONE EQU 1 THIS AND @VA04250 00199000
TWO EQU 2 THESE ARE NUMERIC EQUATES @VA04250 00200000
FOUR EQU 4 USED IN THE TRANSLATE AND @VA04250 00201000
SIX EQU 6 FORMAT ROUTINE @VA04250 00202000
EIGHT EQU 8 AND REPRESENT THE ARRANGEMENT @VA04250 00203000
TEN EQU 10 OF THE OUTPUT AREA. @VA04250 00204000
TWENTYFO EQU 24 ON THE SCREEN @VA04250 00205000
* * * * * * * * ------- -------- -------- ------- * 00206000
SCREENSZ EQU 1760 SIZE OF SCREEN IN BYTES @VA04250 00207000
MAXTRIES EQU 100 MAX NUMBER OF WRITE TRIES @VA04250 00208000
TRANL EQU 19 LENGTH TO TRANSLATE @VA04250 00209000
TRANADL EQU 6 LENGTH OF TRANSLATED ADDRESS @VA04250 00210000
TRANOUT EQU 8 LENGTH OF OUTPUT BLOCK @VA04250 00211000
EBCOUT EQU 16 LENGTH OF EBCDIC OUTPUT AREA @VA04250 00212000
SHRTLINE EQU 72 LENGTH OF DATA ON OUT LINE @VA04250 00213000
LINEL EQU 80 LENGTH OF OUTPUT LINE @VA04250 00214000
ON EQU X'FF' ON - SWITCH STATUS @VA04250 00215000
ASTS DC CL3'***' ASTERISKS FOR 'CURRENT LINE' @VA04250 00216000
TDAT EQU 4 LENGTH OF DATA TO TRANSLATE @VA04250 00217000
LREADY EQU 11 LENGTH OF FIRST PART OF 'READY' @VA04250 00218000
SAVEDISP EQU 12 DISP INTO SAVEAREA FOR REGS @VA04250 00219000
SAVREG15 EQU 16 DISP INTO SAVAREA FOR R15 @VA04250 00220000
BLANKPAD EQU 64 PAD CHAR FOR LONG CLEAR @VA04830 00221000
HIORD EQU 24 BITS TO GET TO HI ORD BYTE @VA04830 00222000
* * * * * * * * ------- -------- -------- ------- * 00223000
* * * * * * * * SAVEAREA 00224000
* * * * * * * * ------- -------- -------- ------- * 00225000
SAVEAREA DS 0F THIS PROGRAM'S SAVE AREA @VA04250 00226000
SAVEUSR DS F USER WORD @VA04250 00227000
SAVEFWD DS F FORWARD POINTER @VA04250 00228000
SAVEBACK DS F BACKWARD POINTER @VA04250 00229000
SAVER14 DS F SAVE AREA FOR CALLER'S R14 @VA04250 00230000
SAVER15 DS F SAVE AREA FOR CALLER'S R15 @VA04250 00231000
SAVER0 DS F SAVE AREA FOR CALLER'S R0 @VA04250 00232000
SAVER1 DS F SAVE AREA FOR CALLER'S R1 @VA04250 00233000
SAVER2 DS F SAVE AREA FOR CALLER'S R2 @VA04250 00234000
SAVER3 DS F SAVE AREA FOR CALLER'S R3 @VA04250 00235000
SAVER4 DS F SAVE AREA FOR CALLER'S R4 @VA04250 00236000
SAVER5 DS F SAVE AREA FOR CALLER'S R5 @VA04250 00237000
SAVER6 DS F SAVE AREA FOR CALLER'S R6 @VA04250 00238000
SAVER7 DS F SAVE AREA FOR CALLER'S R7 @VA04250 00239000
SAVER8 DS F SAVE AREA FOR CALLER'S R8 @VA04250 00240000
SAVER9 DS F SAVE AREA FOR CALLER'S R9 @VA04250 00241000
SAVER10 DS F SAVE AREA FOR CALLER'S R10 @VA04250 00242000
SAVER11 DS F SAVE AREA FOR CALLER'S R11 @VA04250 00243000
SAVER12 DS F SAVE AREA FOR CALLER'S R12 @VA04250 00244000
* * * * * * * * ------- -------- -------- ------- * 00245000
CLEARSAV DS 4F SAVE REGS ACROSS MVCL @VA04250 00246000
BUFF1ADD DC AL4(BUFF1) DUMP DATA @VA04250 00247000
CIADD DC AL4(CMDINFO) HEADER @VA04250 00248000
TFLAGADD DC AL4(TYPEFLAG) DEVICE TYPE @VA04250 00249000
CONSADD DC AL4(CONSOLE) ADDRESS OF VIRT CONSOLE CUU @VA04250 00250000
INTADD DC AL4(DMMINT) TRANSLATE @VA04250 00251000
* * * * * * * * ------- -------- -------- ------- * 00252000
* * * * * * * * TRANSLATE TABLE FOR SCREEN 00253000
* * * * * * * * ------- -------- -------- ------- * 00254000
TRTABLE DS CL256 TRANSLATE TABLE @VA04250 00255000
ORG TRTABLE @VA04250 00256000
DC 64C'.' 64 UNPRINTABLE CHARACTERS @VA04250 00257000
DC C' ' DISPLAY BLANK AS BLANK @VA04250 00258000
DC 9C'.' 9 UNPRINTABLE CHARACTERS @VA04250 00259000
DC X'4A4B4C4D4E4F50' 7 '¢.<(+|&' @VA04250 00260000
DC 9C'.' 9 UNPRINTABLE CHARACTERS @VA04250 00261000
DC X'5A5B5C5D5E5F6061' 8 '!$*);¬-/' @VA04250 00262000
DC 9C'.' 9 UNPRINTABLE CHARACTERS @VA04250 00263000
DC X'6B6C6D6E6F' 5 ',%_>?' @VA04250 00264000
DC 10C'.' 10 UNPRINTABLE CHARACTERS @VA04250 00265000
DC X'7A7B7C7D7E7F' 6 ':#@'="' @VA04250 00266000
DC C'.' 1 UNPRINTABLE CHARACTER @VA04250 00267000
DC X'818283848586878889' 9 'ABCDEFGHI' LOWER CASE @VA04250 00268000
DC 7C'.' 7 UNPRINTABLE CHARACTERS @VA04250 00269000
DC X'919293949596979899' 9 'JKLMNOPQR' LOWER CASE @VA04250 00270000
DC 8C'.' 8 UNPRINTABLE CHARACTERS @VA04250 00271000
DC X'A2A3A4A5A6A7A8A9' 8 'STUVWXYZ' LOWER CASE @VA04250 00272000
DC 23C'.' 23 UNPRINTABLE CHARACTERS @VA04250 00273000
DC X'C1C2C3C4C5C6C7C8C9' 9 'ABCDEFGHI' UPPER @VA04250 00274000
DC 7C'.' 7 UNPRINTABLE CHARACTERS @VA04250 00275000
DC X'D1D2D3D4D5D6D7D8D9' 9 'JKLMNOPQR' UPPER @VA04250 00276000
DC 8C'.' 8 UNPRINTABLE CHARACTERS @VA04250 00277000
DC X'E2E3E4E5E6E7E8E9' 8 'STUVWXYZ' UPPER @VA04250 00278000
DC 6C'.' 6 UNPRINTABLE CHARACTERS @VA04250 00279000
DC X'F0F1F2F3F4F5F6F7F8F9' 10 '0123456789' @VA04250 00280000
DC 6C'.' 6 UNPRINTABLE CHARACTERS @VA04250 00281000
* * * * * * * * ------- -------- -------- ------- * 00282000
* * * * * * * * 'SCREEN CONSTANTS 00283000
* * * * * * * * ------- -------- -------- ------- * 00284000
READYMSG DC C'*** READY ***' @VA04250 00285000
CCWD CCW X'19',SCRNAREA,X'60',1760 ERASE CCW @VA04250 00286000
CCW X'19',SCRNAREA,X'20',1680 WRITE CCW @VA04250 00287000
CCW1CTL EQU CCWD+5 CCW1 CONTROL BYTE - ERASE @VA04250 00288000
CCW2CTL EQU CCWD+13 CCW2 CTL BYTE - START LINE @VA04250 00289000
BLANKOUT DC CL80' ' FILL CHAR @VA04830 00290000
SCRNAREA DS CL1760 DISPLAY AREA @VA04250 00291000
************************************************************** @V4075A2 00292000
* COMMON SCREEN WRITE ROUTINE @V4075A2 00293000
* ALSO CHECKS FOR 'PRINT' ON, AND @V4075A2 00294000
* WRITES TO THE VIRTUAL PRTR @V4075A2 00295000
************************************************************** @V4075A2 00296000
DMMDIRLN STM R14,R12,SAVEDISP(R13) SAVE CALLERS REGS @V4075A2 00297000
DROP R12 @V4075A2 00298000
USING DMMDIRLN,R15 @V4075A2 00299000
L R12,DIRADDR GET START OF THIS MODULE @V4075A2 00300000
B THISBASE AROUND ADCON @V4075A2 00301000
DIRADDR DC AL4(DMMDIR) BASE FOR ENTRY @V4075A2 00302000
DROP R15 GET READY FOR 12 @V4075A2 00303000
USING DMMDIR,R12 @V4075A2 00304000
THISBASE ST R13,SAVEBACK CALLERS SAVE AREA @V4075A2 00305000
LA R13,SAVEAREA HEX SAVEAREA @V4075A2 00306000
DISBRENT XC PRETCODE,PRETCODE CLEAR PRINT RETURN CODE @V4075A2 00307000
* IF THIS IS A REISSUE, DONT DISPLAY. @V4075A2 00308000
L R6,PRINT1AD IS THIS A ONE-SHOT DEAL? @V4075A2 00309000
CLI 0(R6),NOSUBC INDICATING PRINT PREV CMD @V4075A2 00310000
BE GETPRTSW YES - DONT DISPLAY. @V4075A2 00311000
WAITT WAIT FOR ANY SCREEN ACTIVITY. @V4075A2 00312000
LA R6,100 SET MAX RETRY COUNT @V4075A2 00313000
SPLASH DC X'83340058' DIAGNOSE @V4075A2 00314000
BZ GETPRTSW OK - GO CHECK THE PRINT SWITCH @V4075A2 00315000
BCT R6,SPLASH TRY A FEW MORE TIMES @V4075A2 00316000
************************************************************** @V4075A2 00317000
* NOW LOOK SEE IF WE MUST ALSO PRINT THIS @V4075A2 00318000
************************************************************** @V4075A2 00319000
GETPRTSW L R2,PRTSWADD POINT TO THE PRINT STATUS SW @V4075A2 00320000
CLI 0(R2),ON SHOULD WE PRINT THIS TOO ? @V4075A2 00321000
BNE RETURN NO @V4075A2 00322000
************************************************************** @V4075A2 00323000
* SINCE PRINT IS ON WE WILL WRITE THIS TO '00E' @V4075A2 00324000
* R3 POINTS TO THE DIAG CCW CHAIN. GO THERE TO GET @V4075A2 00325000
* THE ADDRESS OF THE DATA TO WRITE, AND THE NUMBER OF @V4075A2 00326000
* BYTES. FROM THIS FIGURE THE NUMBER OF LINES TO WRITE. @V4075A2 00327000
************************************************************** @V4075A2 00328000
L R4,0(R3) GET THE SCREEN ADDR FROM THE CCW @V4075A2 00329000
LA R4,0(R4) AND CLEAR OUT THE HI BYTE @V4075A2 00330000
L R7,4(R3) GET THE BYTE COUNT @V4075A2 00331000
SLL R7,16 CLEAR OUT THE FLAG AND CNTRL FLDS@V4075A2 00332000
SRL R7,16 AND RESTORE THE COUNT @V4075A2 00333000
LA R5,80 BYTES/LINE @V4075A2 00334000
LA R6,0 CLEAR TOP OF DIVIDEND @V4075A2 00335000
DR R6,R5 FIND NUM. LINES @V4075A2 00336000
************************************************************** @V4075A2 00337000
* NOW CHECK FOR A REMAINDER AND CORRECT THE LINES. @V4075A2 00338000
* ALSO CHECK FOR A MAX OF 22 LINES @V4075A2 00339000
************************************************************** @V4075A2 00340000
LTR R6,R6 ANY REMAINDER? @V4075A2 00341000
BZ COUNTRT IF NOT - DONT ADJUST @V4075A2 00342000
LA R7,1(R7) YES - ADD A LINE @V4075A2 00343000
COUNTRT C R7,TWENTY2 SEE IF MORE THAN 22 LINES REMAIN @V4075A2 00344000
BNH COUNTDON NO - DONT SET TO 22 @V4075A2 00345000
L R7,TWENTY2 TOO MANY - SET TO 22 @V4075A2 00346000
************************************************************** @V4075A2 00347000
* NOW CLEAR THE PRINT LINE TO BLANKS, AND MOVE IN @V4075A2 00348000
* AND THE PRINT THE SET NUMBER OF LINES. @V4075A2 00349000
************************************************************** @V4075A2 00350000
COUNTDON MVI PRINTLIN,BLANK SET UP TO CLEAR PRINT LINE @V4075A2 00351000
MVC PRINTLIN+ONE(L'PRINTLIN-ONE),PRINTLIN TO BLANKS @V4075A2 00352000
LA R9,L'PRINTLIN-1 SET TO MOVE 80 BYTES @V4075A2 00353000
MOVEX EX R9,MOVEPRTL GET THE LINE @V4075A2 00354000
LA R2,CARRCTRL POINT TO THE CARRAIGE CONTROL @V4075A2 00355000
PRINTL (R2),81,ERROR=PRINTERR WRITE TO VIRT PRINTER @V4075A2 00356000
PRINTOK LA R4,L'PRINTLIN(R4) BUMP TO NEXT LINE @V4075A2 00357000
BCT R7,COUNTDON GO PRINT ANOTHER LINE @V4075A2 00358000
B RETURN GET OUT @V4075A2 00359000
MOVEPRTL MVC PRINTLIN(0),0(R4) MOVE DATA TO THE PRINT LINE @V4075A2 00360000
************************************************************** @V4075A2 00361000
* RETURN @V4075A2 00362000
************************************************************** @V4075A2 00363000
RETURN L R13,SAVEBACK @V4075A2 00364000
MVC SAVREG15(L'RETCODE,R13),RETCODE PLUG THE RETURN @V4075A2 00365000
LM R14,R12,SAVEDISP(R13) CALLERS REGS @V4075A2 00366000
BR R14 RETURN @V4075A2 00367000
************************************************************** @V4075A2 00368000
* THIS HANDLES NON ZERO RETURNS FROM PRINTL @V4075A2 00369000
************************************************************** @V4075A2 00370000
PRINTERR ST R15,PRTERRCD SAVE THE CODE @V4075A2 00371000
L R2,PRTERRCD GET IT FOR PRINTL @V4075A2 00372000
C R2,CHAN9 3211 VIRTUAL CARR TAPE HOLE? @V4075A2 00373000
BE PRINTOK YES - MAY IGNORE THIS @V4075A2 00374000
C R2,CHAN12 ANOTHER VIRTUAL HOLE? @V4075A2 00375000
BE PRINTOK RIGHT @V4075A2 00376000
LINEDIT TEXT='DMMDSC500S ERROR ''...'' WRITING TO THE VIRTUAL X00377000
PRINTER',SUB=(DEC,(2)) @V4075A2 00378000
MVC RETCODE,CODE4 SET WARNING CODE @V4075A2 00379000
B RETURN AND GO BACK @V4075A2 00380000
************************************************************** @V4075A2 00381000
* CONSTANTS @V4075A2 00382000
NOSUBC EQU X'0F' 'DONT-DISPLAY' FLAG @V4075A2 00383000
************************************************************** @V4075A2 00384000
BLANK EQU X'40' BLANK TO CLEAR PRINT LINE @V4075A2 00385000
CARRCTRL DC C' ' CARRIAGE CONTROL CHARACTER @VA08980 00386000
PRINTLIN DS CL80 PRINTED TEXT * DO NOT SEPARATE @V4075A2 00387000
CHAN9 DC F'2' CHANNEL 2 @V4075A2 00388000
CHAN12 DC F'3' CHANNEL 3 FROM CARR TAPE @V4075A2 00389000
PRINT1AD DC AL4(PRINTONE) ONE-SHOT FLAG ADDRESS @V4075A2 00390000
PRTERRCD DS F PRETCODE FROM PRINTL @V4075A2 00391000
PRTSWADD DC AL4(PRINTSW) ADDRESS OF PRINT SW IN DMMDSC @V4075A2 00392000
INCORE DC F'0' IN CORE ADDRESS OF LATEST DATA DISPLAYED@V4075A2 00393000
PRETCODE DS F RETURN TO CALLER @V4075A2 00394000
CODE4 DC F'4' WARNING RETURN @V4075A2 00395000
TWENTY2 DC F'22' SCREEN FULL OF LINES @V4075A2 00396000
PATCH DC 50F'0' PATCH AREA @VA04250 00397000
LTORG @VA04250 00398000
REGEQU @VA04250 00399000
SCREEN DSECT @VA04250 00400000
SCRNL1 DS CL80 @VA04250 00401000
SCRNL2 DS CL80 @VA04250 00402000
SCRNL3 DS CL80 @VA04250 00403000
SCRNL4 DS CL80 @VA04250 00404000
SCRNL5 DS CL80 @VA04250 00405000
SCRNL6 DS CL80 @VA04250 00406000
SCRNL7 DS CL80 @VA04250 00407000
SCRNL8 DS CL80 @VA04250 00408000
SCRNL9 DS CL80 @VA04250 00409000
SCRNL10 DS CL80 @VA04250 00410000
SCRNL11 DS CL80 @VA04250 00411000
SCRNL12 DS CL80 @VA04250 00412000
SCRNL13 DS CL80 @VA04250 00413000
SCRNL14 DS CL80 @VA04250 00414000
SCRNL15 DS CL80 @VA04250 00415000
SCRNL16 DS CL80 @VA04250 00416000
SCRNL17 DS CL80 @VA04250 00417000
SCRNL18 DS CL80 @VA04250 00418000
SCRNL19 DS CL80 @VA04250 00419000
SCRNL20 DS CL80 @VA04250 00420000
SCRNL21 DS CL80 @VA04250 00421000
SCRNL22 DS CL80 @VA04250 00422000
END 00423000