GIO TITLE 'DMSGIO (CMS) VM/370 - RELEASE 6' 00001000 SPACE 2 00002000 *. 00003000 ************************************************************ 00004000 * 00005000 * MODULE NAME: 00006000 * 00007000 * DMSGIO 00008000 * 00009000 * FUNCTION: 00010000 * 00011000 * CREATE THE DIAGNOSE AND CCW'S FOR AN I/O OPERATION TO 00012000 * A DISPLAY TERMINAL FROM A VIRTUAL MACHINE. 00013000 * 00014000 * ATTRIBUTES: 00015000 * 00016000 * DISK RESIDENT 00017000 * 00018000 * ENTRY POINTS: 00019000 * 00020000 * DMSGIO 00021000 * 00022000 * ENTRY CONDITIONS: 00023000 * 00024000 * GPR1 - A(PLIST) 00025000 * PLIST - A(BUFFER) ADDRESS OF INPUT BUFFER 00026000 * A(LINE) ADDRESS OF DISPLAY LINE 00027000 * A(COUNT) ADDRESS OF NUMBER OF BYTES TO 00028000 * BE WRITTEN 00029000 * A(FLAG) ADDRESS OF FUNCTION FLAG 00030000 * 00031000 * GPR13 - EDCB ADDRESS IF USED BY CMS EDITOR 00032000 * OR 00033000 * MUST BE ZERO IF NOT CALLED BY EDITOR 00034000 * 00035000 * OUTPUT: 00036000 * 1. A DIAGNOSE IS ISSUED TO CP TO WRITE TO THE DISPLAY 00037000 * TERMINAL. 00038000 * 2. R15 CONTAINS: 00039000 * A. 0 IF THE I/O OPERATION WAS SUCCESSFUL 00040000 * B. NON-ZERO IF AN I/O ERROR OCURRED 00041000 * 00042000 * EXIT CONDITIONS: 00043000 * 00044000 * NORMAL - GPR15 = 0 00045000 * 00046000 * ERROR - GPR15 ¬= 0 00047000 * 00048000 * CALLS TO OTHER ROUTINES: 00049000 * 00050000 * NONE 00051000 * 00052000 * EXTERNAL REFERENCES: 00053000 * 00054000 * ADEVTAB - ADDRESS OF DEVICE TABLE IN CMS NUCLEUS 00055000 * 00056000 * OPERATION: 00057000 * 00058000 * DMSGIO FIRST DETERMINES IF IT HAS BEEN CALLED BY THE 00059000 * CMS EDITOR. IF IT HAS, THEN A WORK AREA EXISTS IN THE 00060000 * EDITOR EDCB CONTROL BLOCK FOR USE IN BUILDING THE CCW 00061000 * TO BE PASSED TO CP. IF DMSGIO HAS BEEN CALLED FROM 00062000 * AN APPLICATION PROGRAM, POSSIBLY VIA THE DISPW MACRO, 00063000 * THEN DMSGIO GETS FREE STORAGE FOR THE CCW. 00064000 * 00065000 * DMSGIO CREATES A DIAGNOSE INSTRUCTION OF THE FORMAT: 00066000 * 00067000 * --------------------------------------- 00068000 * | 83 | R1 | R2 | 0058 | 00069000 * --------------------------------------- 00070000 * 00071000 * WHERE: 00072000 * 00073000 * 83 IS THE DIAGNOSE OPCADE 00074000 * R1 IS A REGISTER CONTAINING THE ADDRESS OF 00075000 * THE CCW 00076000 * R2 IS A REGISTER CONTAINING A VIRTUAL 00077000 * CONSOLE DEVICE ADDRESS 00078000 * 0058 IS THE DIAGNOSE CODE IN HEXADECIMAL 00079000 * 00080000 * DMSGIO CREATES A CCW OF THE FORMAT: 00081000 * 00082000 * ----------------------------------------------- 00083000 * | X'19' | DATA ADDR | FLGS | CTL | COUNT | 00084000 * ----------------------------------------------- 00085000 * 00086000 * WHERE: 00087000 * 00088000 * DATA ADDR IS THE ADDRESS RECEIVED IN THE 00089000 * PLIST OF THE INPUT BUFFER 00090000 * FLGS Z ARE THE NORMAL CCW FLAG BITS 00091000 * CTL IS THE LINE NUMBER POINTED TO BY 00092000 * THE LINE ADDRESS IN THE PARAMETER 00093000 * LIST. THE HIGH ORDER BIT IS 00094000 * INTERPRETED BY CP AS A REQUEST 00095000 * TO ERASE THE ENTIRE OUTPUT DISPLAY 00096000 * PRIOR TO DISPLAYING THE NEW DATA. 00097000 * IF THE FLAG IN THE PARAMETER LIST 00098000 * INDICATES A CANCEL FUNCTION, THIS 00099000 * FIELD WILL CONTAIN X'FF' TO CAUSE 00100000 * A SCREEN CANCEL OPERATION. 00101000 * COUNT IS THE HALFWORD COUNT POINTED TO 00102000 * BY THE COUNT ADDRESS IN THE 00103000 * PARAMETER LIST 00104000 * 00105000 * USING THE INPUT PARAMETER LIST, THIS MODULE IS A 00106000 * BASIC INTERFACE FOR CMS OR APPLICATIONS PROGRAMS. 00107000 * USING A STANDARD CALLING SEQUENCE, CMS OR AN 00108000 * APLLICATION PROGRAM CAN WRITE TO THE DISPLAY 00109000 * TERMINAL. 00110000 * 00111000 * 00112000 * 00113000 ************************************************************ 00114000 *. 00115000 EJECT 00116000 DMSGIO START 0 00117000 USING DMSGIO,R10 @V305614 00118000 USING EDCB,R13 @V305614 00119000 LR R10,R15 @V305614 00120000 USING NUCON,R0 00121000 USING GIOLIST,R3 @VA05027 00122000 LR R3,R1 SAVE PLIST POINTER @VA05027 00123000 SPACE 1 00124000 LTR R9,R13 IF R13 IS 0 THERE IS NO EDCB @VA05027 00125000 BNZ HAVEDCB ..... @VA05027 00126000 SPACE 1 00127000 DMSFREE DWORDS=2 @VA05027 00128000 LR R13,R1 GET GIO FREE STOR ADR @VA05027 00129000 B READY NOW GO PLUG THE CCW @VA05027 00130000 SPACE 1 00131000 HAVEDCB LA R13,CMDBLOK ADDRESSABILITY FOR COMMAND @VA05027 00132000 DROP R13 @VA05027 00133000 USING GIOBLOK,R13 @VA05027 00134000 SPACE 1 00135000 READY MVI GIOCMD,GIOOP PLUG SPECIAL OP-CODE @VA05027 00136000 MVI GIOFLG,GIOSLI SET SILI BIT ON @VA05027 00137000 MVC GIOBUF(3),GIOLBUF GET BUFFER ADR FROM PLIST @VA05027 00138000 L R2,GIOLINE GET ADR OF LINE NUMBER @VA05027 00139000 MVC GIOCTL,1(R2) PLUG LINE NUMBER @VA05027 00140000 L R2,GIOLCNT GET ADR OF COUNT @VA05027 00141000 MVC GIOCNT,0(R2) PLUG COUNT INTO CCW @VA05027 00142000 L R2,GIOLFLG GET FLAG ADR @VA05027 00143000 TM 0(R2),CANCLB CANCEL REQUESTED ? 00144000 BNO NOCANC NO...BR 00145000 LA R5,CANCEL POINT TO CANCEL CCW @VA05027 00146000 B OVLAY GET DEVICE ADR 00147000 NOCANC LA R5,GIOCMD CCW ADR FOR NORMAL WRITE @VA05027 00148000 MVI 4(R5),X'20' SET ALL FLAGS TO NORMAL GG934D0 00148100 TM 0(R2),X'08' WANTS ATTRIBUTE BYTES ALLOWED? GG934D0 00148200 BNO *+8 NO, DO NOT TURN BIT ON GG934D0 00148300 OI 4(R5),X'02' SET ATTR. ALLOWED FLAG GG934D0 00148400 TM 0(R2),X'04' HI-INTENSITY WANTED? GG934D0 00148500 BNO NOHI NO, DON'T SET BIT GG934D0 00148600 OI 4(R5),X'01' TURN ON HI-INTENSITY GG934D0 00148700 NOHI EQU * GG934D0 00148800 TM 0(R2),ERASB DO WE ERASE ? 00149000 BNO OVLAY NO...BR 00150000 OI GIOCTL,CPMORE SET ERASE BIT FOR CP @VA05027 00151000 OVLAY L R2,ADEVTAB ADR OF DEVTAB IN NUCLEUS 00152000 LH R4,0(,R2) GET CONSOLE DEVICE ADDR 00153000 SR R15,R15 CLEAR RETCODE REGISTER @VM08823 00154000 WAITDISP TIO 0(R4) MAKE SURE DISPLAY @VM08823 00155000 BC 7,WAITDISP IS AVAILABLE @VM08823 00156000 DIAG DC X'83',X'54',X'0058' SPECIAL DISPLAY DIAGNOSE @VM08823 00157000 BZ DONE BR..IF I/O STARTED @VM08823 00158000 BC 3,CCER BR..IF NOT CSW STORED @VM08823 00159000 TM CSW+4,X'10' WAS DEVICE BUSY ? @VM08823 00160000 BO WAITDISP IF SO..TRY AGAIN @VM08823 00161000 CLI CSW+4,X'04' DE ONLY ? @VM08823 00162000 BE WAITDISP YES..BR @VM08823 00163000 B BADERR MUST BE A BAD ONE @VM08823 00164000 CCER EQU * @VM08823 00165000 BC 1,BADERR BR..NOT OPER @VM08823 00166000 B WAITDISP BR..MUST HAVE BEEN BUSY @VM08823 00167000 BADERR EQU * @VM08823 00168000 LA R15,4 SET ERROR CODE @VM08823 00169000 DONE EQU * @VM08823 00170000 LTR R13,R9 DID WE GET FREE STORAGE ? @VA05027 00171000 BNZR R14 JUST RETURN IF NOT @VA05027 00172000 DMSFRET DWORDS=(0),LOC=(1) @VA05027 00173000 BR R14 RETURN 00174000 SPACE 1 00175000 *************************************************************** 00176000 * 00177000 * EQUATES AND CONSTANTS 00178000 * 00179000 *************************************************************** 00180000 SPACE 1 00181000 ERASB EQU X'01' CAUSE MORE STATUS 00182000 CPMORE EQU X'80' TELL CP CAUSE MORE 00183000 CANCLB EQU X'02' CANCEL OP REQUESTED 00184000 GIOOP EQU X'19' SPECIAL OP CODE FOR GRAPHICS @VA05027 00185000 GIOSLI EQU X'20' SILI BIT FOR CCW FLAG @VA05027 00186000 SPACE 1 00187000 * KEEP THE NEXT TWO STATEMENTS TOGETHER * 00188000 DS 0D @VA05027 00189000 CANCEL DC X'1900000020FF0001' CANCEL SCREEN CCW @VA05027 00190000 SPACE 1 00191000 * GIOLIST MAPS THE PARAMETER LIST PASSED TO DMSGIO * 00192000 GIOLIST DSECT @VA05027 00193000 DS X @VA05027 00194000 GIOLBUF DS 3X ADR OF WRITE BUFFER @VA05027 00195000 GIOLINE DS F ADR OF THE LINE NUMBER @VA05027 00196000 GIOLCNT DS F ADR OF THE WRITE COUNT @VA05027 00197000 GIOLFLG DS F ADR OF THE INDICATOR FLAG @VA05027 00198000 SPACE 1 00199000 * GIOBLOK MAPS THE FREE STORAGE OBTAINED BY DMSGIO FOR 00200000 * USE IN BUILDING THE CCW TO BE PASSED TO CP 00201000 GIOBLOK DSECT @VA05027 00202000 GIOCMD DS X CCW OP-CODE @VA05027 00203000 GIOBUF DS 3X WRITE BUFFER ADDRESS @VA05027 00204000 GIOFLG DS X FLAG BYTE @VA05027 00205000 GIOCTL DS X LINE NUMBER @VA05027 00206000 GIOCNT DS H WRITE COUNT @VA05027 00207000 SPACE 1 00208000 EDCB @V305614 00209000 EJECT 00210000 NUCON 00211000 REGEQU 00212000 END 00213000