DCL SPCPTR .P1 PARM; DCL DD CONTROL CHAR(8) BAS(.P1); DCL DD OP-CODE CHAR(1) DEF(CONTROL) POS(1); DCL DD CMD-KEY ZND(2,0) DEF(CONTROL) POS(2); DCL DD CSR-POSITION CHAR(5) DEF(CONTROL) POS(4); DCL DD CURSOR-ROW ZND(2,0) DEF(CSR-POSITION) POS(1); DCL DD CURSOR-COL ZND(3,0) DEF(CSR-POSITION) POS(3); DCL SPCPTR .P2 PARM; DCL DD SCREEN CHAR(5000) BAS(.P2); DCL CON SCREEN-WIDTH BIN(2) INIT(80); DCL CON ITEM-HEADER-SIZE BIN(2) INIT(10); /* FORMAT OF SCREEN ITEM: */ DCL MSPPTR .ITEM; DCL DD ITEM CHAR(3574) BAS(.ITEM); DCL DD ITEM-ATTR CHAR(1) DEF(ITEM) POS( 1); DCL DD ITEM-ROW ZND(2,0) DEF(ITEM) POS( 2); DCL DD ITEM-COL ZND(3,0) DEF(ITEM) POS( 4); DCL DD ITEM-SIZE ZND(4,0) DEF(ITEM) POS( 7); DCL DD ITEM-DATA CHAR(3564) DEF(ITEM) POS(11); /* 27*132 */ DCL DD ITEM-POSITION CHAR(5) DEF(ITEM) POS( 2); /* REDEF */ /* LOGICAL ATTRIBUTES */ /* BLANK NO ATTRIBUTE */ /* . END OF ITEMS (REMAINDER OF STRUCTURE IGNORED) */ /* B BLANK */ /* L LABEL */ /* T TITLE */ /* H HIGHLIGHTED */ /* U INFORMATIONAL */ /* N NOTIFY */ /* M MESSAGE (STRONG) */ /* P PROTECTED (INPUT) */ /* O OPTION - CAN TAB TO */ /* C CHOICE - CAN TAB TO */ /* S INPUT (SECURE) - NON-DISPLAY s ANY CASE */ /* I E INPUT (NORMAL) - GREEN, UNDERLINED i e ANY CASE */ /* J F INPUT (WEAK ) - GREEN, NO UNDERLINING j f ANY CASE */ /* Q G INPUT (STRONG) - WHITE, UNDERLINED q g ANY CASE */ /* R K INPUT (MEDIUM) - WHITE, NO UNDERLINING r k ANY CASE */ DCL SPCPTR @SEPT BASPCO; DCL SPCPTR .SEPT(6440) BAS(@SEPT); DCL SPCPTR .UFCB INIT(UFCB); DCL DD UFCB CHAR(210) BDRY(16); DCL SPCPTR .ODP DEF(UFCB) POS( 1); DCL SPCPTR .INBUF DEF(UFCB) POS( 17); DCL SPCPTR .OUTBUF DEF(UFCB) POS( 33); DCL SPCPTR .IO-FEEDBACK DEF(UFCB) POS( 65); DCL SPCPTR .NEXT-UFCB DEF(UFCB) POS( 81); DCL DD FILE-NAME CHAR(10) DEF(UFCB) POS(129) INIT("QSN80"); DCL DD LIB-ID BIN ( 2) DEF(UFCB) POS(139) INIT( 75); DCL DD LIBRARY CHAR(10) DEF(UFCB) POS(141) INIT("QSYS"); DCL DD MBR-ID BIN ( 2) DEF(UFCB) POS(151) INIT(-71); DCL DD MEMBER CHAR(10) DEF(UFCB) POS(153) INIT("*FIRST"); DCL DD FLAGS-1 CHAR( 1) DEF(UFCB) POS(175) INIT(X'80'); DCL DD FLAGS-2 CHAR( 1) DEF(UFCB) POS(176) INIT(X'00'); DCL DD NO-MORE-PARAMS BIN ( 2) DEF(UFCB) POS(209) INIT(32767); DCL SPC IO-FEEDBACK BAS(.IO-FEEDBACK); DCL DD OFFSET-TO-DEV BIN ( 2) DIR; DCL DD NBR-OF-PUTS BIN ( 4) DIR; DCL DD NBR-OF-GETS BIN ( 4) DIR; DCL DD NBR-OF-PUTGETS BIN ( 4) DIR; DCL DD NBR-OF-OTHER-OP BIN ( 4) DIR; DCL DD CUR-OPERATION CHAR( 1) DIR; DCL DD PREV-OPERATION CHAR( 1) DIR; DCL DD REC-FORMAT-NAME CHAR(10) DIR; DCL DD ACTUAL-DEV-TYPE CHAR( 1) DIR; DCL DD ACTUAL-DEV-CLAS CHAR( 1) DIR; DCL DD ACTUAL-DEV-NAME CHAR(10) DIR; DCL DD ACTUAL-REC-SIZE BIN ( 4) DIR; DCL DD REQUEST-ID CHAR(80) DIR; DCL DD NBR-OF-BLOCKS BIN ( 2) DIR; DCL DD * BIN ( 4) DIR; DCL DD CUR-BLOCK-COUNT BIN ( 4) DIR; DCL SPC ODP BAS(.ODP); DCL DD * CHAR(16) DIR; DCL DD DEV-OFFSET BIN ( 4) DIR; DCL SPCPTR .DMDEV; DCL SPC FUNCTION-LIST BAS(.DMDEV); DCL DD MAX-DEVICE BIN ( 2) DIR; DCL DD NBR-DEVICES BIN ( 2) DIR; DCL DD DEVICE-NAME CHAR(10) DIR; DCL DD WORKAREA-OFFSET BIN ( 4) DIR; DCL DD WORKAREA-LENGTH BIN ( 4) DIR; DCL DD LUD-PTR-INDEX BIN ( 2) DIR; DCL DD GET-FCT BIN ( 2) DIR; DCL DD GET-DIR BIN ( 2) DIR; DCL DD GET-KEY BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; DCL DD PUT-FCT BIN ( 2) DIR; DCL DD PUT-GET BIN ( 2) DIR; DCL SPCPTR .PUTOPT INIT(PUTOPT); DCL DD PUTOPT CHAR(4); DCL DD PUT-OPTION-BYTE CHAR(1) DEF(PUTOPT) POS(1) INIT(X'00'); DCL DD PUT-SHARE-BYTE CHAR(1) DEF(PUTOPT) POS(2) INIT(X'00'); DCL DD PUT-DATA-BYTE CHAR(1) DEF(PUTOPT) POS(3) INIT(X'00'); DCL DD PUT-DEVICE-BYTE CHAR(1) DEF(PUTOPT) POS(4) INIT(X'05'); DCL SPCPTR .GETOPT INIT(GETOPT); DCL DD GETOPT CHAR(4); DCL DD GET-OPTION-BYTE CHAR(1) DEF(GETOPT) POS(1) INIT(X'03'); DCL DD GET-SHARE-BYTE CHAR(1) DEF(GETOPT) POS(2) INIT(X'00'); DCL DD GET-DATA-BYTE CHAR(1) DEF(GETOPT) POS(3) INIT(X'00'); DCL DD GET-DEVICE-BYTE CHAR(1) DEF(GETOPT) POS(4) INIT(X'06'); DCL SPCPTR .FORMAT INIT(FORMAT); DCL DD FORMAT CHAR(14); DCL DD FORMAT-ID CHAR( 1) DEF(FORMAT) POS( 1) INIT(X'01'); DCL DD FORMAT-SIZE BIN ( 2) DEF(FORMAT) POS( 2) INIT( 10 ); DCL DD FORMAT-NAME CHAR(10) DEF(FORMAT) POS( 4) INIT("USRRCD"); DCL DD FORMAT-END CHAR( 1) DEF(FORMAT) POS(14) INIT(X'FF'); DCL OL OPEN (.UFCB); DCL OL PUT (.UFCB, .PUTOPT, .FORMAT); DCL OL GET (.UFCB, .GETOPT, .FORMAT); DCL OL CLOSE(.UFCB); DCL DD BUFFER CHAR(5014) BAS(*); DCL DD IO-COMMAND CHAR(5014) DEF(BUFFER) POS( 1); DCL DD P-HEADER CHAR( 14) DEF(BUFFER) POS( 1);/*REDEF*/ DCL DD DATA-STREAM CHAR(5000) DEF(BUFFER) POS(15); DCL DD INIT-COMMAND CHAR(7); DCL DD INIT-SEND-L BIN( 2) DEF(INIT-COMMAND) POS(1) INIT(0002); DCL DD INIT-RECV-L BIN( 2) DEF(INIT-COMMAND) POS(3) INIT(0000); DCL DD INIT-FUNCT CHAR(1) DEF(INIT-COMMAND) POS(5) INIT(X'71'); DCL DD INIT-ESC1 CHAR(1) DEF(INIT-COMMAND) POS(6) INIT(X'04'); DCL DD INIT-CLR-UNIT CHAR(1) DEF(INIT-COMMAND) POS(7) INIT(X'40'); DCL DD PUT-HEADER CHAR(14); DCL DD PUT-SEND-L BIN( 2) DEF(PUT-HEADER) POS( 1); DCL DD PUT-RECV-L BIN( 2) DEF(PUT-HEADER) POS( 3) INIT(0000); DCL DD PUT-FUNCT CHAR(1) DEF(PUT-HEADER) POS( 5) INIT(X'71'); DCL DD PUT-ESC1 CHAR(1) DEF(PUT-HEADER) POS( 6) INIT(X'04'); DCL DD PUT-CLR-FMT CHAR(1) DEF(PUT-HEADER) POS( 7) INIT(X'50'); DCL DD PUT-ESC2 CHAR(1) DEF(PUT-HEADER) POS( 8) INIT(X'04'); DCL DD PUT-WRITE CHAR(1) DEF(PUT-HEADER) POS( 9) INIT(X'11'); DCL DD PUT-CC CHAR(2) DEF(PUT-HEADER) POS(10); DCL DD KB-RESET CHAR(1) DEF(PUT-CC) POS( 1) INIT(X'60'); DCL DD BLNK-OFF1 CHAR(1) DEF(PUT-CC) POS( 2) INIT(X'20'); DCL DD PUT-IC CHAR(1) DEF(PUT-HEADER) POS(12) INIT(X'13'); DCL DD PUT-ROW CHAR(1) DEF(PUT-HEADER) POS(13); DCL DD PUT-COL CHAR(1) DEF(PUT-HEADER) POS(14); DCL DD GET-MDT CHAR(13); DCL DD MDT-SEND-L BIN( 2) DEF(GET-MDT) POS( 1) INIT(0008); DCL DD MDT-RECV-L BIN( 2) DEF(GET-MDT) POS( 3) INIT(5000); DCL DD MDT-FUNCT CHAR(1) DEF(GET-MDT) POS( 5) INIT(X'73'); DCL DD MDT-ESC1 CHAR(1) DEF(GET-MDT) POS( 6) INIT(X'04'); DCL DD MDT-WRITE CHAR(1) DEF(GET-MDT) POS( 7) INIT(X'11'); DCL DD MDT-WRT-CC CHAR(2) DEF(GET-MDT) POS( 8); DCL DD * CHAR(1) DEF(MDT-WRT-CC) POS( 1) INIT(X'00'); DCL DD BLINK-ON CHAR(1) DEF(MDT-WRT-CC) POS( 2) INIT(X'18'); DCL DD MDT-ESC2 CHAR(1) DEF(GET-MDT) POS(10) INIT(X'04'); DCL DD MDT-READ CHAR(1) DEF(GET-MDT) POS(11) INIT(X'52'); DCL DD MDT-RD-CC CHAR(2) DEF(GET-MDT) POS(12); DCL DD KB-LOCK CHAR(1) DEF(MDT-RD-CC) POS( 1) INIT(X'20'); DCL DD BLNK-OFF2 CHAR(1) DEF(MDT-RD-CC) POS( 2) INIT(X'20'); DCL DD SBA-ORDER CHAR(3); DCL DD SBA CHAR(1) DEF(SBA-ORDER) POS(1) INIT(X'11'); DCL DD SBA-ROW CHAR(1) DEF(SBA-ORDER) POS(2); DCL DD SBA-COL CHAR(1) DEF(SBA-ORDER) POS(3); DCL DD SF-ORDER CHAR(6); DCL DD SF CHAR(1) DEF(SF-ORDER) POS(1) INIT(X'1D'); DCL DD SF-FW CHAR(2) DEF(SF-ORDER) POS(2); DCL DD SF-ATTR CHAR(1) DEF(SF-ORDER) POS(4); DCL DD SF-SIZE BIN(2) DEF(SF-ORDER) POS(5); DCL DD CMD-KEY-TABLE CHAR(256); DCL DD CMD-KEY-MAP(16) CHAR(16) DEF(CMD-KEY-TABLE) POS(1) INIT (X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 00:0F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 10:1F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 20:2F */ X'1F0102030405060708090A0B0C1F1F1F', /* 30:3F * CMD 01-12 */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 40:4F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 50:5F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 60:6F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 70:7F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 80:8F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* 90:9F */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* A0:AF */ X'1F0D0E0F101112131415161718191F1F', /* B0:BF * CMD 13-24 */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* C0:CF */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* D0:DF */ X'1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', /* E0:EF */ X'1F001F1A1B1C1D1F1E1F1F1F1F1F1F1F');/* F0:FF * SPECIAL */ /* F1 ENTER PF KEY 00 */ /* 31:3C FUNCTION KEY 01-12 PF KEY 01-12 */ /* B1:BC FUNCTION KEY 13-24 PF KEY 13-24 */ /* BD - CMD SHIFTED BACKSP PF KEY 25 */ /* F3 - HELP PF KEY 26 */ /* F4 ROLL DOWN (PGUP) PF KEY 27 */ /* F5 ROLL UP (PGDN) PF KEY 28 */ /* F6 - PRINT PF KEY 29 */ /* F8 - HOME PF KEY 30 */ /* OTHERS INVALID PF KEY 31 */ DCL DD CHAR-TABLE CHAR(256); DCL DD *(16) CHAR(16) DEF(CHAR-TABLE) POS(1) INIT (X'006F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', /* 00-0F ??????????????? */ X'6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', /* 10-1F ???????????????? */ X'6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', /* 20-2F ???????????????? */ X'6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', /* 30-3F ???????????????? */ X'004142434445464748494A4B4C4D4E4F', /* 40-4F SPACE ==> NULL */ X'505152535455565758595A5B5C5D5E5F', /* 50-5F ALL OTHER CHARS */ X'606162636465666768696A6B6C6D6E6F', /* 60-6F ARE OUTPUT UN- */ X'707172737475767778797A7B7C7D7E7F', /* 70-7F CHANGED... */ X'808182838485868788898A8B8C8D8E8F', /* 80-8F */ X'909192939495969798999A9B9C9D9E9F', /* 90-9F */ X'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF', /* A0-AF */ X'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF', /* B0-BF */ X'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF', /* C0-CF */ X'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF', /* D0-DF */ X'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF', /* E0-EF */ X'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFE40');/* F0-FF BUT AVOID X'FF' */ DCL DD ATTR-TABLE CHAR(256); DCL DD *(16) CHAR(16) DEF(ATTR-TABLE) POS(1) INIT (X'20202020202020202020202020202020', /* 00-0F */ X'20202020202020202020202020202020', /* 10-1F */ X'20202020202020202020202020202020', /* 20-2F */ X'20202020202020202020202020202020', /* 30-3F */ X'00202020202020202020202020202020', /* 40-4F SPACE => NULL */ X'20202020202020202020202020202020', /* 50-5F */ X'20202020202020202020202020202020', /* 60-6F */ X'20202020202020202020202020202020', /* 70-7F */ X'2020E7F220E5E1E361E4202020202020', /* 80-8F ..bc.efghi */ X'20E0E3606968F874E6E2202020202020', /* 90-9F .jklmnopqr */ X'2020F7627A2020202020202020202020', /* A0-AF ..stu..... */ X'20202020202020202020202020202020', /* B0-BF */ X'202027B220A5A1A321A4202020202020', /* C0-CF ..BC.EFGHI */ X'20A0A3202928B83EA6A2202020202020', /* D0-DF .JKLMNOPQR */ X'2020BF223A2020202020202020202020', /* E0-EF ..STU..... */ X'20202020202020202020202020202020');/* F0-FF */ DCL DD ATTR CHAR(1); DCL DD FIELD-SIZE BIN(2); DCL DD LENGTH BIN(2); DCL DD GOT BIN(2); DCL DD P BIN(2); DCL DD BINARY-VALUE BIN(2); DCL DD BIN-CHAR CHAR(1) DEF(BINARY-VALUE) POS(2); DCL MSPPTR .INPUT; DCL DD INPUT CHAR(5000) BAS(.INPUT); DCL DD DATA-RETURNED CHAR(5000) BAS(*); DCL DD ROW-POS CHAR(1) DEF(DATA-RETURNED) POS(1); DCL DD COL-POS CHAR(1) DEF(DATA-RETURNED) POS(2); DCL DD AID-KEY CHAR(1) DEF(DATA-RETURNED) POS(3); DCL DD CURSOR-POSITIONS CHAR(10); DCL DD THE-POSITION CHAR(5) DEF(CURSOR-POSITIONS) POS(1); DCL DD THE-ROW ZND(2,0) DEF(THE-POSITION) POS(1); DCL DD THE-COL ZND(3,0) DEF(THE-POSITION) POS(3); DCL DD ERR-POSITION CHAR(5) DEF(CURSOR-POSITIONS) POS(6); DCL DD ERR-ROW ZND(2,0) DEF(ERR-POSITION) POS(1); DCL DD ERR-COL ZND(3,0) DEF(ERR-POSITION) POS(3); DCL OL PARMLIST(.P1, .P2) EXT PARM MIN(2); /****************************************************************/ ENTRY * (PARMLIST) EXT; CMPBLA(B) OP-CODE, "W"/EQ(WRITE-TERMINAL); CMPBLA(B) OP-CODE, "R"/EQ(READ-TERMINAL); CMPBLA(B) OP-CODE, "C"/EQ(CLOSE-TERMINAL); CMPBLA(B) OP-CODE, "O"/EQ(OPEN-TERMINAL); B DONE; /************/ OPEN-TERMINAL: CPYBWP .ODP, *; CPYBWP .NEXT-UFCB, *; CALLX .SEPT(12), OPEN, *; ADDSPP .DMDEV, .ODP, DEV-OFFSET; CLEAR-DISP-UNIT: CPYBLA .OUTBUF->IO-COMMAND, INIT-COMMAND; CALLX .SEPT(PUT-FCT), PUT, *; B DONE; /*************/ CLOSE-TERMINAL: CALLX .SEPT(11), CLOSE, *; B DONE; /*************/ WRITE-TERMINAL: CPYBREP CURSOR-POSITIONS, "0"; SETSPP .ITEM, SCREEN; CPYNV P, 1; WRITE-NEXT-ITEM: CMPBLA(B) ITEM-ATTR, "."/EQ(SET-CURSOR); XLATEWT ATTR, ITEM-ATTR, ATTR-TABLE; CPYNV FIELD-SIZE, ITEM-SIZE; WRITE-SBA-ORDER: CPYNV BINARY-VALUE, ITEM-ROW; CPYBLA SBA-ROW, BIN-CHAR; CPYNV BINARY-VALUE, ITEM-COL; CPYBLA SBA-COL, BIN-CHAR; CPYBLA .OUTBUF->DATA-STREAM(P:3), SBA-ORDER; ADDN(S) P, 3; TEST-IF-INPUT-FIELD: TSTBUM(B) ATTR, X'80'/ONES(INPUT-FIELD); CMPBLA(B) ATTR, X'00'/EQ(WRITE-CONTENT); AND .OUTBUF->DATA-STREAM(P:1), ATTR, X'3F'; ADDN(S) P, 1; WRITE-CONTENT: CMPNV(B) FIELD-SIZE, 0/EQ(=+2); XLATEWT .OUTBUF->DATA-STREAM(P:FIELD-SIZE), ITEM-DATA(1:FIELD-SIZE), CHAR-TABLE;: ADVANCE-TO-NEXT-ITEM: ADDN LENGTH, ITEM-HEADER-SIZE, FIELD-SIZE; ADDSPP .ITEM, .ITEM, LENGTH; ADDN(SB) P, FIELD-SIZE/POS(WRITE-NEXT-ITEM); INPUT-FIELD: CMPBLA(B) THE-POSITION, "00000"/NEQ(=+2); CPYBLA THE-POSITION, ITEM-POSITION;: VERIFY(B) GOT, ITEM-ATTR, "EFGKefgk"/POS(WRITE-SF-ORDER); XLATE ITEM-ATTR, ITEM-ATTR, "EFGKefgk", "IJQRijqr"; CMPBLA(B) ERR-POSITION, "00000"/NEQ(=+2); CPYBLA ERR-POSITION, ITEM-POSITION;: WRITE-SF-ORDER: CPYBLA SF-FW, X'4000'; TSTBUM(B) ATTR, X'40'/ZER(=+2); OR(S) SF-FW, X'0020';: /* TRANSLATE TO UPPER CASE */ VERIFY(B) GOT, ITEM-ATTR, "OC"/POS(=+2); OR(S) SF-FW, X'0600';: /* REJECT INPUT, ONLY TAB */ AND SF-ATTR, ATTR, X'3F'; CPYNV SF-SIZE, FIELD-SIZE; CPYBLA .OUTBUF->DATA-STREAM(P:6), SF-ORDER; ADDN(SB) P, 6/POS(WRITE-CONTENT); SET-CURSOR: CMPBLA(B) ERR-POSITION, "00000"/NEQ(USE-ERR-POSITION); CMPBLA(B) CSR-POSITION, "00000"/NEQ(USE-CSR-POSITION); USE-THE-POSITION: /* FIRST INPUT FIELD */ CMPBLA(B) THE-POSITION, "00000"/NEQ(=+2); CPYBLA THE-POSITION, "01001";: CPYBLA ERR-POSITION, THE-POSITION; USE-ERR-POSITION: /* FIRST ERROR FIELD */ CPYNV(B) BINARY-VALUE, ERR-ROW/ZER(NEXT-ROW); CPYBLA PUT-ROW, BIN-CHAR; ADDN BINARY-VALUE, ERR-COL, 1; CMPNV(B) BINARY-VALUE, SCREEN-WIDTH/NHI(SEND-PUT-COMMAND); NEXT-ROW: ADDLC(S) PUT-ROW, X'01'; CPYNV(B) BINARY-VALUE, 1/POS(SEND-PUT-COMMAND); USE-CSR-POSITION: /* AS GIVEN IN CALL */ CPYNV BINARY-VALUE, CURSOR-ROW; CPYBLA PUT-ROW, BIN-CHAR; CPYNV BINARY-VALUE, CURSOR-COL; SEND-PUT-COMMAND: CPYBLA PUT-COL, BIN-CHAR; ADDN PUT-SEND-L, P, 8; /* CURSOR POS */ CPYBLA .OUTBUF->P-HEADER, PUT-HEADER; CPYBLA XXX,.OUTBUF->BUFFER; DCL DD XXX CHAR(500); BRK "1"; CALLX .SEPT(PUT-FCT), PUT, *; DONE: RTX *; /************/ READ-TERMINAL: CPYBLA .OUTBUF->IO-COMMAND, GET-MDT; CALLX .SEPT(PUT-GET), GET, *; ADDSPP .INPUT, .INBUF, 3; GET-CURSOR-POSITION: CPYBLA BIN-CHAR, .INBUF->ROW-POS; CPYNV CURSOR-ROW, BINARY-VALUE; CPYBLA BIN-CHAR, .INBUF->COL-POS; CPYNV CURSOR-COL, BINARY-VALUE; GET-CMD-KEY: XLATEWT BIN-CHAR, .INBUF->AID-KEY, CMD-KEY-TABLE; CPYNV CMD-KEY, BINARY-VALUE; DISTRIBUTE-MDT-DATA-IF-ANY: CMPNV(B) ACTUAL-REC-SIZE, 3/NHI(DONE); ADDN LENGTH, ACTUAL-REC-SIZE, 1; CPYBLA .INBUF->DATA-RETURNED(LENGTH:3), X'110000'; /* STOP */ GET-MDT-FIELDS: SETSPP .ITEM, SCREEN; POSITION-TO-FIELD: CPYNV BINARY-VALUE, 0; CPYBLA BIN-CHAR, INPUT(2:1); /* ROW */ CPYNV(B) THE-ROW, BINARY-VALUE/ZER(DONE); /* FOUND STOP */ CPYBLA BIN-CHAR, INPUT(3:1); /* COL */ SUBN(B) THE-COL, BINARY-VALUE, 1/NZER(=+3); CPYNV THE-COL, SCREEN-WIDTH; /* LAST COLUMN IN */ SUBN(S) THE-ROW, 1;: /* PREVIOUS ROW */ CHECK-POSITION: CMPBLA(B) ITEM-ATTR, "."/EQ(GET-MDT-FIELDS); CMPBLA(B) THE-POSITION, ITEM-POSITION/EQ(FOUND-MDT-FIELD); ADDN LENGTH, ITEM-HEADER-SIZE, ITEM-SIZE; ADDSPP .ITEM, .ITEM, LENGTH; B CHECK-POSITION; FOUND-MDT-FIELD: ADDSPP .INPUT, .INPUT, 3; CPYNV FIELD-SIZE, ITEM-SIZE; SCAN(B) GOT, INPUT, X'11'/ZER(DONE); SUBN(SB) GOT, 1/ZER(=+2); CPYBLAP ITEM-DATA(1:FIELD-SIZE), INPUT(1:GOT), " ";: CMPNV(B) GOT, 0/HI(=+2); CPYBLAP ITEM-DATA(1:FIELD-SIZE), " ", " ";: FIND-NEXT-FIELD: ADDSPP .INPUT, .INPUT, GOT; B POSITION-TO-FIELD;