TITLE "SCRN38"; ENTRY * (PARMLIST) EXT; /***************************************************/ /* */ /* DATE WRITTEN. 89/03/09 LEIF SVALGAARD */ /* REVISED: 89/05/13 */ /* */ /* CALL "SCRN38" */ /* USING WORKSTATION-CONTROL */ /* WORKSTATION-SCREEN */ /* */ /* 01 WORKSTATION-CONTROL. */ /* 02 OPERATION-CODE PIC X. */ /* 02 COMMAND-KEY PIC 99. */ /* 02 CURSOR-ROW PIC 99. */ /* 02 CURSOR-COL PIC 99. */ /* 02 KEY-MAPPING PIC X(16). */ /* 02 ERROR-CODE PIC X(4). */ /* */ /* 01 WORKSTATION-SCREEN. */ /* 02 WS-CHAR PIC X OCCURS 1923. */ /* */ /***************************************************/ DCL SPCPTR P1 PARM; /* PARAMETER 1 */ DCL SPCPTR P2 PARM; /* PARAMETER 2 */ DCL OL PARMLIST(P1,P2) EXT PARM MIN(2); DCL DD WS-CONTROL CHAR(27) BAS(P1); /* PARAMETER 1 */ DCL DD OP-CODE CHAR( 1) DEF(WS-CONTROL) POS(1); DCL DD CMD-KEY ZND(2,0) DEF(WS-CONTROL) POS(2); DCL DD CURSOR-ROW ZND(2,0) DEF(WS-CONTROL) POS(4); DCL DD CURSOR-COL ZND(2,0) DEF(WS-CONTROL) POS(6); DCL DD KEY-MAPPING CHAR(16) DEF(WS-CONTROL) POS(8); DCL DD ERROR-CODE CHAR( 4) DEF(WS-CONTROL) POS(24); DCL DD WS-SCREEN CHAR(1923) BAS(P2); /* PARAMETER 2 */ DCL DD WS-CHAR(1923) CHAR(1) DEF(WS-SCREEN) POS( 1); DCL DD WS-SENTINELS CHAR(3) DEF(WS-SCREEN) POS(1921); /* SCRN38 SUPPORTS THE IBM 5250 INFORMATION DISPLAY SYSTEM */ /* AS DESCRIBED IN IBM MANUAL SA21-9247-4. */ /* */ /* THE CODE IS WRITTEN WITH SPEED IN MIND AND MAKES EXTENSIVE */ /* USE OF TABLES AND CODE-REPETITION TO SPEED THINGS UP. */ /* I/O IS DONE THRU ENTRY POINT TABLES AS FOLLOWS: */ /* */ /* SYSTEM ENTRY POINT TABLE (SEPT) - OPEN, CLOSE */ /* DATA MANAGEMENT ENTRY POINT TABLE (DMEPT) - PUT, GET */ /* */ /* THE I/O IS DONE BY USING THE CALLX INSTRUCTION REFERENCING */ /* A SYSTEM POINTER THAT IS OBTAINED FROM THE ENTRY POINT */ /* TABLE. THE ENTRY POINT TABLE CONTAINS PRE-RESOLVED SYSTEM */ /* POINTERS (2040 OF THEM...). THE SYSTEM ENTRY POINT TABLE */ /* IS ADDRESSED BY THE POINTER BASED ON THE PROCESS COMMUNI- */ /* CATION OBJECT (PCO): */ /* PCO POINTER --> POINTER TO SEPT --> PTR TO OS FUNCTION 1 */ /* PTR TO OS FUNCTION 2 */ /* ... */ /* FINDING THE CORRECT POINTER TO USE FOR ANY I/O OPERATION */ /* (EXCEPT OPEN, CLOSE, COMMIT, AND ROLLBACK) IS DONE THRU */ /* THE DATA MANAGEMENT TABLE FOR THE OPEN DATA PATH. AFTER */ /* A USER FILE CONTROL BLOCK HAS BEEN OPENED, THIS TABLE HAS */ /* THE CORRECT INDICES INTO THE SYSTEM ENTRY POINT TABLE FOR */ /* EACH I/O ROUTINE. */ /* */ /* INDEX VALUES: OPEN 12 COMMIT 1103 */ /* CLOSE 11 ROLLBACK 1102 */ /* */ /* THESE ARE THE ONLY DIRECT (NOT INDEXED VIA DMEPT) CALLS. */ DCL SPC PROCESS-COMM-AREA BASPCO; DCL SPCPTR PCO-POINTER DIR; DCL SPC SYSTEM-ENTRY-POINT-TABLE BAS(PCO-POINTER); DCL SPCPTR .SEPT(2040) DIR; DCL CON OPEN-ENTRY BIN(2) INIT(12); DCL CON CLOS-ENTRY BIN(2) INIT(11); /* THE USER FILE CONTROL BLOCK (UFCB) DEFINES THE FILE NAME, */ /* BUFFER SPACES AND ALL NECESSARY CONTROL INFORMATION NEEDED */ /* TO MANAGE THE FILE. IT ALSO PROVIDES THE FEEDBACKS NEEDED */ /* TO ACCESS TO ENTRY POINT TABLES, SUCH AS THE ODP (THE OPEN */ /* DATA PATH). */ DCL DD UFCB CHAR(214) 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 .OPEN-FEEDBACK DEF(UFCB) POS( 49); DCL SPCPTR .IO-FEEDBACK DEF(UFCB) POS( 65); DCL SPCPTR .NEXT-UFCB DEF(UFCB) POS( 81); DCL DD * CHAR(32) DEF(UFCB) POS( 97);/* RESERVED */ DCL DD FILE-NAME CHAR(10) DEF(UFCB) POS(129) INIT("SCREEN"); DCL DD LIB-ID BIN ( 2) DEF(UFCB) POS(139) INIT(-72); DCL DD LIBRARY CHAR(10) DEF(UFCB) POS(141) INIT("*LIBL"); DCL DD MBR-ID BIN ( 2) DEF(UFCB) POS(151) INIT(-73); DCL DD MEMBER CHAR(10) DEF(UFCB) POS(153) INIT("*FIRST"); /* LIB-ID AND MBR-ID ARE NEGATIVE TO SIGNIFY THAT NO LIBRARY */ /* AND MEMBER ARE SPECIFIED. */ DCL DD ODP-DEVICE-NAME CHAR(10) DEF(UFCB) POS(163); DCL DD ODP-DEVICE-INDEX BIN ( 2) DEF(UFCB) POS(173); 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'); /* BIT 0-2 CLOSE OPTIONS 100 = PERM. */ /* BIT 3-4 SHARE OPTIONS */ /* BIT 5-6 SECURE OPTIONS */ /* BIT 7-9 UFCB STATE */ /* BIT 10-13 INPUT, OUTPUT, UPDATE, DELETE */ /* BIT 14-15 USRBUF OPTIONS */ DCL DD REL-VERSION CHAR( 4) DEF(UFCB) POS(177) INIT("0100"); DCL DD INVOC-MARK-COUNT BIN ( 4) DEF(UFCB) POS(181); DCL DD MORE-FLAGS CHAR( 1) DEF(UFCB) POS(185) INIT(X'04'); DCL DD TAPE-END-OPTION CHAR( 1) DEF(UFCB) POS(186); DCL DD * CHAR(22) DEF(UFCB) POS(187); /* RECORD PARAMETER */ DCL DD RECORD-PARAM BIN ( 2) DEF(UFCB) POS(209) INIT(1); DCL DD RECORD-LENGTH BIN ( 2) DEF(UFCB) POS(211) INIT(3000); DCL DD NO-MORE-PARAMS BIN ( 2) DEF(UFCB) POS(213) INIT(32767); DCL SPCPTR .UFCB INIT(UFCB); /* POINTER TO UFCB */ DCL SPC IO-FEEDBACK BAS(.IO-FEEDBACK); DCL DD OFFSET-TO-DEV-DEP-PART BIN ( 2) DIR; DCL DD NUMBER-OF-PUTS BIN ( 4) DIR; DCL DD NUMBER-OF-GETS BIN ( 4) DIR; DCL DD NUMBER-OF-PUTGETS BIN ( 4) DIR; DCL DD NUMBER-OF-OTHER-OPS BIN ( 4) DIR; DCL DD CURRENT-OPERATION CHAR( 1) DIR; DCL DD PREVIOUS-OPERATION CHAR( 1) DIR; DCL DD RECORD-FORMAT-NAME CHAR(10) DIR; DCL DD ACTUAL-DEVICE-TYPE CHAR( 1) DIR; DCL DD ACTUAL-DEVICE-CLASS CHAR( 1) DIR; /* X'00' = 5251 960 CHAR DISPLAY */ /* X'01' = SYSTEM CONSOLE */ /* X'07' = 5251 1920 CHAR DISPLAY */ /* X'0B' = 5291 1920 CHAR DISPLAY MONO */ /* X'15' = 5292 1920 CHAR DISPLAY COLOR */ /* X'17' = 3180 132 CHAR/ROW MONO */ /* X'27' = 3196 1920 CHAR MONO MOD/A1 */ /* X'28' = 3196 1920 CHAR MONO MOD/B1 */ /* X'33' = 5150 1920 CHAR PC SUPPORT */ DCL DD ACTUAL-DEVICE-NAME CHAR(10) DIR; DCL DD ACTUAL-RECORD-LENGTH BIN ( 4) DIR; DCL DD REQUEST-IDENTIFIER CHAR(80) DIR; DCL DD NUMBER-OF-BLOCKS BIN ( 2) DIR; DCL DD * BIN ( 4) DIR; DCL DD CURRENT-BLOCK-COUNT BIN ( 4) DIR; DCL DD * CHAR( 8) DIR; /* THE OPEN DATA PATH CONTAINS AN OFFSET TO THE DMEPT FOR */ /* THE DEVICE IN QUESTION: */ 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 DD UPD-FCT BIN ( 2) DIR; DCL DD DEL-FCT BIN ( 2) DIR; DCL DD FORCE-EOD BIN ( 2) DIR; DCL DD FORCE-EOV BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; DCL DD REL-LOCK BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; DCL DD CLOSE-FCT BIN ( 2) DIR; DCL DD OPEN-FCT BIN ( 2) DIR; DCL DD * BIN ( 2) DIR; 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 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'); /* OPTION BYTE: X'00' = PUT, X'03' = GET */ /* SHARE BYTE : X'00' = READ, X'03' = UPDATE */ /* DATA BYTE : X'00' = DATA ACCESS RECORD */ /* DEVICE BYTE: X'01' = GET, X'02' = GETD, */ /* X'05' = PUT, X'06' = PUTGET */ 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("RECORD"); DCL DD FORMAT-END CHAR( 1) DEF(FORMAT) POS(14) INIT(X'FF'); DCL SPCPTR .PUTOPTION INIT(PUTOPT); DCL SPCPTR .GETOPTION INIT(GETOPT); DCL SPCPTR .FORMAT INIT(FORMAT); /* WE NOW HAVE ENOUGH TO SET UP THE PARAMETER LISTS FOR THE I/O. */ /* ACCESS TO THE SCREEN WILL TAKE PLACE THRU A DISPLAY FILE WITH */ /* THE NAME "SCREEN" USING A FORMAT CALLED "RECORD". THIS DISPLAY */ /* FILE SHOULD BE DEFINED TO THE DDS AS FOLLOWS: */ /* */ /* A PRINT */ /* A R RECORD USRDFN */ /* */ /* THE IMPORTANT WORD IS 'USRDFN' = USER DEFINED DATA STREAM */ DCL OL OPEN(.UFCB); DCL OL PUT (.UFCB, .PUTOPTION, .FORMAT); DCL OL GET (.UFCB, .GETOPTION, .FORMAT); DCL OL CLOS(.UFCB); DCL DD BUFFER CHAR(3100) BAS(*); DCL DD P-HEADER CHAR( 14) DEF(BUFFER) POS( 1); DCL DD DATA-STREAM CHAR(3000) DEF(BUFFER) POS(15); DCL DD DS-CHAR(3000) CHAR(1) DEF(DATA-STREAM) POS(1); DCL DD IO-COMMAND CHAR(3000) DEF(BUFFER) POS( 1); 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 ERR-COMMAND CHAR(13); DCL DD ERR-SEND-L BIN( 2) DEF(ERR-COMMAND) POS(1) INIT(0008); DCL DD ERR-RECV-L BIN( 2) DEF(ERR-COMMAND) POS(3) INIT(0000); DCL DD ERR-FUNCT CHAR(1) DEF(ERR-COMMAND) POS(5) INIT(X'71'); DCL DD ERR-ESC1 CHAR(1) DEF(ERR-COMMAND) POS(6) INIT(X'04'); DCL DD ERR-ERROR CHAR(1) DEF(ERR-COMMAND) POS(7) INIT(X'21'); DCL DD ERR-HI-BLINK CHAR(1) DEF(ERR-COMMAND) POS(8) INIT(X'2A'); DCL DD ERR-CODE CHAR(4) DEF(ERR-COMMAND) POS(9) INIT("0025"); DCL DD ERR-LO-NORMAL CHAR(1) DEF(ERR-COMMAND) POS(13) INIT(X'20'); 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(3000); 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 GET-IMM CHAR(11); DCL DD IMM-SEND-L BIN( 2) DEF(GET-IMM) POS( 1) INIT(0006); DCL DD IMM-RECV-L BIN( 2) DEF(GET-IMM) POS( 3) INIT(3000); DCL DD IMM-FUNCT CHAR(1) DEF(GET-IMM) POS( 5) INIT(X'73'); DCL DD IMM-ESC1 CHAR(1) DEF(GET-IMM) POS( 6) INIT(X'04'); DCL DD IMM-WRITE CHAR(1) DEF(GET-IMM) POS( 7) INIT(X'11'); DCL DD IMM-WRT-CC CHAR(2) DEF(GET-IMM) POS( 8); DCL DD * CHAR(1) DEF(IMM-WRT-CC) POS( 1) INIT(X'00'); DCL DD * CHAR(1) DEF(IMM-WRT-CC) POS( 2) INIT(X'00'); DCL DD IMM-ESC2 CHAR(1) DEF(GET-IMM) POS(10) INIT(X'04'); DCL DD IMM-READ CHAR(1) DEF(GET-IMM) POS(11) INIT(X'72'); /******************** USEFUL COMMANDS: ***********************/ /* */ /* EACH COMMAND MUST BE PRECEEDED BY AN ESCAPE CHARACTER (X'04') */ /* */ /* INPUT --------------------- OUTPUT ---------------------- */ /* READ IMMEDIATE X'72' CLEAR FORMAT TABLE X'50' */ /* READ INPUT FIELDS X'42' CC CLEAR UNIT X'40' */ /* READ MDT FIELDS X'52' CC WRITE TO DISPLAY X'11' CC */ /* READ WHOLE SCREEN X'62' */ /* */ /******* SOME COMMANDS REQUIRE 2 CONTROL CHARACTERS (CC): ********/ /* */ /* FIRST BYTE: */ /* RESET AID CLEAR MDT CLEAR MDT NULL FIELDS NULL FIELDS*/ /* LOCK KB NONBYPASS ALL FIELDS NONBYPASS ALL */ /* X'00' . . . . . */ /* X'20' X . . . . */ /* X'40' X X . . . */ /* X'60' X . X . . */ /* X'80' X . . X . */ /* X'A0' X X . . X */ /* X'C0' X X . X . */ /* X'E0' X . X . X */ /* */ /* SECOND BYTE: (IF A BIT IS 0, NO ACTION IS TAKEN) */ /* BIT MEANING */ /* 0 RESERVED */ /* 1 RESERVED */ /* 2 CURSOR BLINK OFF */ /* 3 CURSOR BLINK ON (OVERRIDES 2) */ /* 4 UNLOCK KEYBOARD, RESET AID BYTE, MOVE CURSOR TO IC ADDR */ /* 5 SOUND ALARM */ /* 6 MESSAGE WAITING INDICATOR OFF */ /* 7 MESSAGE WAITING INDICATOR ON (OVERRIDES 6) */ /* */ /************ ORDERS MAY FOLLOW THE WRITE COMMAND: ***************/ /* */ /* .---------------------<-------------------------. */ /* : : */ /* : .-> SBA ROW COL --. .-->-- DATA -----. : */ /* : : : : : : */ /* ESC WTD CC ---------------------------------------------------> */ /* : : : : */ /* : : : : */ /* : `-- SF --------->-------- ATTR -- FL1 FL2 --' : */ /* : : : : */ /* : `-> FW1 FW2 --' : */ /* : : */ /* `--------------------->-------------------------' */ /* : : : : */ /* `-> IC ROW COL --' `-> RA ROW COL CHAR --' */ /* */ /* INSERT CURSOR --- IC: X'13' MOVE CURSOR TO ROW,COL AT END */ /* OF THE WRITE COMMAND. */ /* REPEAT TO ADDR -- RA: X'02' REPEAT CHAR UNTIL ROW,COL IS */ /* REACHED. */ /* SET BUFFER ADDR - SBA: X'11' SET CURRENT DISPLAY ADDRESS. */ /* */ /* START FIELD ----- SF: X'1D' DEFINE INPUT FIELD AT LAST SBA */ /* POSITION (POINTS TO WHERE ATTR */ /* SHOULD BE WRITTEN) */ /* */ /* FL1 FL2 TWO BYTE BINARY FIELD LENGTH */ /* (EXCLUDING ATTR AT START) */ /* */ /* FW1 FW2 TWO BYTE FIELD FORMAT WORD */ /* */ /****************** FIELD FORMAT WORD: *************************/ /* */ /* BYTE BIT CODE DESCRIPTION */ /* 1 0-1 01 MUST BE 01 */ /* 2 BYPASS */ /* 0 NOT A BYPASS FIELD */ /* 1 A BYPASS FIELD (I.E. NO ENTRY IS ALLOWED) */ /* 3 DUP ENABLE */ /* 0 DUP NOT ALLOWED */ /* 1 DUP IS ALLOWED */ /* 4 MODIFIED DATA TAG (MDT BIT) */ /* 0 THIS FIELD HAS NOT BEEN MODIFIED */ /* 1 THIS FIELD HAS BEEN MODIFIED */ /* 5-7 FIELD EDIT SPECS */ /* 000 ACCEPT ALL CHARS */ /* 001 ACCEPT ONLY LETTERS , . - AND BLANK */ /* 010 ACCEPT ALL CHARS */ /* 011 ACCEPT ONLY DIGITS + , . - AND BLANK */ /* 100 KATAKANA CHARS */ /* 101 RESERVED */ /* 110 REJECT ANY DATA CHARS; CAN TAB TO FIELD */ /* 111 ACCEPT ONLY DIGITS */ /* */ /* 2 0 AUTO ENTER (WHEN FIELD IS FILLED) */ /* 0 NO AUTO ENTER */ /* 1 AUTO ENTER */ /* 1 FIELD EXIT REQUIRED */ /* 0 FIELD EXIT NOT REQUIRED */ /* 1 FIELD EXIT IS REQUIRED */ /* 2 MONOCASE */ /* 0 ACCEPT LOWERCASE LETTERS */ /* 1 TRANSLATE OPERATOR-ENTERED LETTERS TO UPPER */ /* 3 RESERVED */ /* 4 MANDATORY ENTER */ /* 0 NOT A MANDATORY ENTER FIELD */ /* 1 IS A MANDATORY ENTER FIELD */ /* 5-7 RIGHT ADJUST/MANDATORY FILL */ /* 000 NO ADJUST SPECIFIED */ /* 001-100 RESERVED */ /* 101 RIGHT ADJUST, ZERO FILL */ /* 110 RIGHT ADJUST, SPACE FILL */ /* 111 MANDATORY FILL (BY OPERATOR) */ /* */ /****************** SCREEN ATTRIBUTES: *************************/ /* */ /* HEX CODE NO/LIMITED COLOR (5251) FULL COLOR (5292) */ /* 20 NORMAL GREEN */ /* 21 REVERSE GREEN, REVERSE */ /* 22 HIGH INT.(WHITE) WHITE */ /* 23 HIGH (WHITE), REVERSE WHITE, REVERSE */ /* 24 UNDERSCORE GREEN, UNDERSCORE */ /* 25 UNDERSCORE, REVERSE GREEN, UNDERSCORE, REVERSE */ /* 26 UNDERSCORE, HIGH (WHITE) WHITE, UNDERSCORE */ /* 27 NONDISPLAY NONDISPLAY */ /* 28 BLINK RED */ /* 29 BLINK, REVERSE RED, REVERSE */ /* 2A BLINK, HIGH (WHITE) RED, BLINK */ /* 2B BLINK, HIGH (WHITE), REV. RED, BLINK, REVERSE */ /* 2C BLINK, UNDERSCORE RED, UNDERSCORE */ /* 2D BLINK, UNDERSCORE, REV. RED, UNDERSCORE, REVERSE */ /* 2E BLINK, UNDERSCORE, HIGH(W) RED, UNDERSCORE, BLINK */ /* 2F NONDISPLAY NONDISPLAY */ /* 30 COL SEPARATOR TURQUOISE, COL SEP. */ /* 31 COL SEP., REVERSE TURQUOISE, COL SEP., REV. */ /* 32 COL SEP., HIGH (WHITE) YELLOW, COL SEP. */ /* 33 COL SEP., HIGH (W), REV. YELLOW, COL SEP., REV. */ /* 34 COL SEP., UNDERSCORE TURQUOISE, COL SEP., UNDER */ /* 35 COL SEP., UNDERSCORE, REV. TURQUOISE, COL S, UND., REV*/ /* 36 COL SEP., UND., HIGH (WH) YELLOW, COL S., UND., */ /* 37 NONDISPLAY NONDISPLAY */ /* 38 COL SEP., BLINK PINK */ /* 39 COL SEP., BLINK, REVERSE PINK, REVERSE */ /* 3A COL SEP., BLINK, HIGH (W) BLUE */ /* 3B COL SEP., BL., HI(W), REV. BLUE, REVERSE */ /* 3C COL SEP., BLINK, UNDERSC. PINK, UNDERSCORE */ /* 3D COL SEP., BLINK, UND.,REV. PINK, UNDERSCORE, REVERSE */ /* 3E COL SEP., BL., HI(W), UND. BLUE, UNDERSCORE */ /* 3F NONDISPLAY NONDISPLAY */ /* */ /*******************************************************************/ /* SCREEN SCANNING VARIABLES */ DCL DD SPACES CHAR(80); DCL DD CHAR(3000) CHAR(1) BAS(*); DCL DD CH CHAR(1) BAS(*); DCL DD CH80 CHAR(80) BAS(*); DCL DD CH79 CHAR(79) BAS(*); DCL DD CH78 CHAR(78) BAS(*); DCL DD CH77 CHAR(77) BAS(*); DCL DD CH76 CHAR(76) BAS(*); DCL DD CH75 CHAR(75) BAS(*); DCL DD CH74 CHAR(74) BAS(*); DCL DD CH73 CHAR(73) BAS(*); DCL DD CH72 CHAR(72) BAS(*); DCL DD CH71 CHAR(71) BAS(*); DCL DD CH70 CHAR(70) BAS(*); DCL DD CH69 CHAR(69) BAS(*); DCL DD CH68 CHAR(68) BAS(*); DCL DD CH67 CHAR(67) BAS(*); DCL DD CH66 CHAR(66) BAS(*); DCL DD CH65 CHAR(65) BAS(*); DCL DD CH64 CHAR(64) BAS(*); DCL DD CH63 CHAR(63) BAS(*); DCL DD CH62 CHAR(62) BAS(*); DCL DD CH61 CHAR(61) BAS(*); DCL DD CH60 CHAR(60) BAS(*); DCL DD CH59 CHAR(59) BAS(*); DCL DD CH58 CHAR(58) BAS(*); DCL DD CH57 CHAR(57) BAS(*); DCL DD CH56 CHAR(56) BAS(*); DCL DD CH55 CHAR(55) BAS(*); DCL DD CH54 CHAR(54) BAS(*); DCL DD CH53 CHAR(53) BAS(*); DCL DD CH52 CHAR(52) BAS(*); DCL DD CH51 CHAR(51) BAS(*); DCL DD CH50 CHAR(50) BAS(*); DCL DD CH49 CHAR(49) BAS(*); DCL DD CH48 CHAR(48) BAS(*); DCL DD CH47 CHAR(47) BAS(*); DCL DD CH46 CHAR(46) BAS(*); DCL DD CH45 CHAR(45) BAS(*); DCL DD CH44 CHAR(44) BAS(*); DCL DD CH43 CHAR(43) BAS(*); DCL DD CH42 CHAR(42) BAS(*); DCL DD CH41 CHAR(41) BAS(*); DCL DD CH40 CHAR(40) BAS(*); DCL DD CH39 CHAR(39) BAS(*); DCL DD CH38 CHAR(38) BAS(*); DCL DD CH37 CHAR(37) BAS(*); DCL DD CH36 CHAR(36) BAS(*); DCL DD CH35 CHAR(35) BAS(*); DCL DD CH34 CHAR(34) BAS(*); DCL DD CH33 CHAR(33) BAS(*); DCL DD CH32 CHAR(32) BAS(*); DCL DD CH31 CHAR(31) BAS(*); DCL DD CH30 CHAR(30) BAS(*); DCL DD CH29 CHAR(29) BAS(*); DCL DD CH28 CHAR(28) BAS(*); DCL DD CH27 CHAR(27) BAS(*); DCL DD CH26 CHAR(26) BAS(*); DCL DD CH25 CHAR(25) BAS(*); DCL DD CH24 CHAR(24) BAS(*); DCL DD CH23 CHAR(23) BAS(*); DCL DD CH22 CHAR(22) BAS(*); DCL DD CH21 CHAR(21) BAS(*); DCL DD CH20 CHAR(20) BAS(*); DCL DD CH19 CHAR(19) BAS(*); DCL DD CH18 CHAR(18) BAS(*); DCL DD CH17 CHAR(17) BAS(*); DCL DD CH16 CHAR(16) BAS(*); DCL DD CH15 CHAR(15) BAS(*); DCL DD CH14 CHAR(14) BAS(*); DCL DD CH13 CHAR(13) BAS(*); DCL DD CH12 CHAR(12) BAS(*); DCL DD CH11 CHAR(11) BAS(*); DCL DD CH10 CHAR(10) BAS(*); DCL DD CH09 CHAR(09) BAS(*); DCL DD CH08 CHAR(08) BAS(*); DCL DD CH07 CHAR(07) BAS(*); DCL DD CH06 CHAR(06) BAS(*); DCL DD CH05 CHAR(05) BAS(*); DCL DD CH04 CHAR(04) BAS(*); DCL DD CH03 CHAR(03) BAS(*); DCL DD CH02 CHAR(02) BAS(*); DCL DD CH01 CHAR(01) BAS(*); DCL DD WS CHAR(1923) BAS(*); /* LOGICAL SCREEN */ DCL SPCPTR .FIELD; DCL SPCPTR .INPUT; DCL SPCPTR .IN; DCL SPCPTR .OUTPUT; DCL SPCPTR .OUT; DCL DD I BIN(2) BDRY(2); /* INDEX TO CHAR ON LOGICAL SCREEN */ DCL DD R BIN(2); /* RELATIVE POSITION OF NEXT ATTRIBUTE */ DCL DD A BIN(2); /* INDEX TO ATTRIBUTE ON LOGICAL SCREEN */ DCL DD P BIN(2); /* INDEX TO CHAR IN OUTPUT BUFFER */ DCL DD N BIN(2); /* INDEX TO NEXT ATTRIBUTE ON SCREEN */ DCL DD B BIN(2); /* INDEX TO PREV. ATTRIBUTE ON SCREEN */ /* POSITIONING AND CURSOR HANDLING */ DCL DD REMAINING-FIELDS BIN (2); DCL DD ATTR-COL BIN (2); DCL DD TOP BIN (2); DCL DD ROW-NBR BIN (2) INIT(0); DCL DD #ROW CHAR(1) DEF(ROW-NBR) POS(2); DCL DD COL-NBR BIN (2) INIT(0); DCL DD #COL CHAR(1) DEF(COL-NBR) POS(2); DCL DD END-COL BIN (2) INIT(0); DCL DD #END CHAR(1) DEF(END-COL) POS(2); DCL DD SBA-NEEDED CHAR(1); DCL DD ORDER-PARM CHAR(9) BAS(*); DCL DD SBA CHAR(1) DEF(ORDER-PARM) POS(1); DCL DD ROW CHAR(1) DEF(ORDER-PARM) POS(2); DCL DD COL CHAR(1) DEF(ORDER-PARM) POS(3); DCL DD SF CHAR(1) DEF(ORDER-PARM) POS(4); DCL DD FFW CHAR(2) DEF(ORDER-PARM) POS(5); DCL DD ATTR CHAR(1) DEF(ORDER-PARM) POS(7); DCL DD SIZE BIN (2) DEF(ORDER-PARM) POS(8); DCL DD RA CHAR(1) DEF(ORDER-PARM) POS(1); DCL DD REP CHAR(1) DEF(ORDER-PARM) POS(4); DCL DD DATA-RETURNED CHAR(3) 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 ROW-1*80(24) BIN(2) INIT (0000, 0080, 0160, 0240, 0320, 0400, 0480, 0560, 0640, 0720, 0800, 0880, 0960, 1040, 1120, 1200, 1280, 1360, 1440, 1520, 1600, 1680, 1760, 1840); DCL DD BINARY-VALUE BIN (2) INIT(0); DCL DD CMD-CHAR CHAR(1) DEF(BINARY-VALUE) POS(2); DCL DD BIN-CHAR CHAR(1) DEF(BINARY-VALUE) POS(2); /* COMMAND KEY TRANSLATION */ DCL DD CMD-KEY-TABLE CHAR(256); DCL DD CMD-KEY-MAP(16) CHAR(16) DEF(CMD-KEY-TABLE) POS(1) INIT (X'63636363636363636363636363636363', /* 00:0F */ X'63636363636363636363636363636363', /* 10:1F */ X'63636363636363636363636363636363', /* 20:2F */ X'630102030405060708090A0B0C636363', /* 30:3F * CMD 01-12 */ X'63636363636363636363636363636363', /* 40:4F */ X'63636363636363636363636363636363', /* 50:5F */ X'63636363636363636363636363636363', /* 60:6F */ X'63636363636363636363636363636363', /* 70:7F */ X'63636363636363636363636363636363', /* 80:8F */ X'63636363636363636363636363636363', /* 90:9F */ X'63636363636363636363636363636363', /* A0:AF */ X'630D0E0F101112131415161718196363', /* B0:BF * CMD 13-24 */ X'63636363636363636363636363636363', /* C0:CF */ X'63636363636363636363636363636363', /* D0:DF */ X'63636363636363636363636363636363', /* E0:EF */ X'6300630F02011A631063636363636363');/* F0:FF * SPECIAL */ /* 31:3C COMMAND KEY 01-12 PF KEY 01-12 */ /* B1:BC COMMAND KEY 13-24 PF KEY 13-24 */ /* BD CMD SHIFTED BACKSP PF KEY 25 */ /* F1 ENTER PF KEY 00 */ /* F3 HELP PF KEY 15 */ /* F4 ROLL DOWN (BACK) PF KEY 02 */ /* F5 ROLL UP (NEXT) PF KEY 01 */ /* F6 PRINT PF KEY 26 */ /* F8 HOME PF KEY 16 */ /* OTHERS INVALID PF KEY 99 */ DCL DD CMD-KEY-TYPE CHAR(256); DCL DD *(16) CHAR(16) DEF(CMD-KEY-TYPE) POS(1) INIT (X'00000000000000000000000000000000', /* 00:0F */ X'00000000000000000000000000000000', /* 10:1F */ X'00000000000000000000000000000000', /* 20:2F */ X'00FFFFFFFFFFFFFFFFFFFFFFFF000000', /* 30:3F * CMD 01-12 */ X'00000000000000000000000000000000', /* 40:4F */ X'00000000000000000000000000000000', /* 50:5F */ X'00000000000000000000000000000000', /* 60:6F */ X'00000000000000000000000000000000', /* 70:7F */ X'00000000000000000000000000000000', /* 80:8F */ X'00000000000000000000000000000000', /* 90:9F */ X'00000000000000000000000000000000', /* A0:AF */ X'00FFFFFFFFFFFFFFFFFFFFFFFF000000', /* B0:BF * CMD 13-24 */ X'00000000000000000000000000000000', /* C0:CF */ X'00000000000000000000000000000000', /* D0:DF */ X'00000000000000000000000000000000', /* E0:EF */ X'00FF0000FFFF00000000000000000000');/* F0:FF * SPECIAL */ /* SCREEN CHARACTER TRANSLATION TABLE. ALL SPACES IN INPUT FIELDS */ /* ARE TRANSLATED INTO NULLS TO EASE INSERTION OF CHARACTERS FROM */ /* THE KEYBOARD. SPACES ON BOX FRAMES ARE TRANSLATED INTO DASHES. */ /* IN ANY CASE, ATTRIBUTES ARE TRANSLATED TO CANONICAL VALUES... */ DCL DD CHAR-TABLE CHAR(256); DCL DD *(16) CHAR(16) DEF(CHAR-TABLE) POS(1) INIT (X'202122232425262028292A2B2C2D4040', /* 00-0F ALL ATTRIBUTES */ X'202122232425262728292A2B2C2D2E20', /* 10-1F ARE TRANSLATED */ X'202122232425262728292A2B2C2D2E2F', /* 20-2F INTO RANGE X'20'*/ X'202122232425262728292A2B2C2D2E2F', /* 30-3F TO X'2F'. */ X'FF4142434445464748494A4B4C4D4E4F', /* 40-4F SPACE => REPL */ 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 SPACE-REPLACEMENT CHAR(1) DEF(CHAR-TABLE) POS(65); DCL DD ATTR-5292 CHAR(64); DCL DD *(4) CHAR(16) DEF(ATTR-5292) POS(1) INIT (X'203839232425262028292A2B2C2D4040', /* 00-0F ALL ATTRIBUTES */ X'202122232425262728292A2B2C2D2E20', /* 10-1F ARE TRANSLATED */ X'202122232425262728292A2B2C2D2E2F', /* 20-2F INTO RANGE X'20'*/ X'202122232425262728292A2B2C2D2E2F');/* 30-3F TO X'2F'. */ DCL DD ATTR-5150 CHAR(64); DCL DD *(4) CHAR(16) DEF(ATTR-5150) POS(1) INIT (X'203839232425262028292A2B2C2D4040', /* 00-0F ALL ATTRIBUTES */ X'202122232425262728292A2B2C2D2E20', /* 10-1F ARE TRANSLATED */ X'202122232425262728292A2B2C2D2E2F', /* 20-2F INTO RANGE X'20'*/ X'202122232425262728292A2B2C2D2E2F');/* 30-3F TO X'2F'. */ DCL IDL CLASS-ACTION /* BRANCH TABLE FOR CLASS */ (SET-KEY-MAPPING , /* 01 SYSTEM CONSOLE */ SET-KEY-MAPPING , /* 02 */ SET-KEY-MAPPING , /* 03 */ SET-KEY-MAPPING , /* 04 */ SET-KEY-MAPPING , /* 05 */ SET-KEY-MAPPING , /* 06 */ SET-KEY-MAPPING , /* 07 5251 STD */ SET-KEY-MAPPING , /* 08 */ SET-KEY-MAPPING , /* 09 */ SET-KEY-MAPPING , /* 0A */ SET-KEY-MAPPING , /* 0B 5291 MONO */ SET-KEY-MAPPING , /* 0C */ SET-KEY-MAPPING , /* 0D */ SET-KEY-MAPPING , /* 0E */ SET-KEY-MAPPING , /* 0F */ SET-KEY-MAPPING , /* 10 */ SET-KEY-MAPPING , /* 11 */ SET-KEY-MAPPING , /* 12 */ SET-KEY-MAPPING , /* 13 */ SET-KEY-MAPPING , /* 14 */ SET-ATTR-5292 , /* 15 5292 COLOR */ SET-KEY-MAPPING , /* 16 */ SET-KEY-MAPPING , /* 17 3180 MONO */ SET-KEY-MAPPING , /* 18 */ SET-KEY-MAPPING , /* 19 */ SET-KEY-MAPPING , /* 1A */ SET-KEY-MAPPING , /* 1B */ SET-KEY-MAPPING , /* 1C */ SET-KEY-MAPPING , /* 1D */ SET-KEY-MAPPING , /* 1E */ SET-KEY-MAPPING , /* 1F */ SET-KEY-MAPPING , /* 20 */ SET-KEY-MAPPING , /* 21 */ SET-KEY-MAPPING , /* 22 */ SET-KEY-MAPPING , /* 23 */ SET-KEY-MAPPING , /* 24 */ SET-KEY-MAPPING , /* 25 */ SET-KEY-MAPPING , /* 26 */ SET-KEY-MAPPING , /* 27 3196 MOD/A1 */ SET-KEY-MAPPING , /* 28 3196 MOD/B1 */ SET-KEY-MAPPING , /* 29 */ SET-KEY-MAPPING , /* 2A */ SET-KEY-MAPPING , /* 2B */ SET-KEY-MAPPING , /* 2C */ SET-KEY-MAPPING , /* 2D */ SET-KEY-MAPPING , /* 2E */ SET-KEY-MAPPING , /* 2F */ SET-KEY-MAPPING , /* 30 */ SET-KEY-MAPPING , /* 31 */ SET-KEY-MAPPING , /* 32 */ SET-ATTR-5150 , /* 33 5150 PC SUPPORT */ SET-KEY-MAPPING , /* 34 */ SET-KEY-MAPPING , /* 35 */ SET-KEY-MAPPING , /* 36 */ SET-KEY-MAPPING , /* 37 */ SET-KEY-MAPPING , /* 38 */ SET-KEY-MAPPING , /* 39 */ SET-KEY-MAPPING , /* 3A */ SET-KEY-MAPPING , /* 3B */ SET-KEY-MAPPING , /* 3C */ SET-KEY-MAPPING , /* 3D */ SET-KEY-MAPPING , /* 3E */ SET-KEY-MAPPING );/* 3F */ DCL DD CLASS-VALUE BIN(2) INIT(0); DCL DD CLASS-CHAR CHAR(1) DEF(CLASS-VALUE) POS(2); DCL DD IMAGE-ARRAY CHAR(1921); /* AT OPEN, INIT TO ALL X'20' */ DCL DD IMAGE(1921) CHAR(1) DEF(IMAGE-ARRAY) POS(1); DCL DD ATTR-VALUE BIN(2) INIT(0); DCL DD ATTR-CHAR CHAR(1) DEF(ATTR-VALUE) POS(2); DCL DD PREV-ATTR CHAR(1); DCL DD PREV-#ROW CHAR(1); /* CONTROL ATTRIBUTES HEX 01-0D */ /* OUTPUT ATTRIBUTES HEX 10-1F */ /* INPUT ATTRIBUTES HEX 20-2F LOWER CASE */ /* INPUT ATTRIBUTES HEX 30-3F UPPER CASE */ DCL IDL ATTR-ACTION /* BRANCH TABLE FOR ATTRS */ (INVALID-ATTR , /* 01 */ OPTION-ATTR , /* 02 OPTION .H.. */ OPTION-ATTR , /* 03 RECALL RH.. */ OPTION-ATTR , /* 04 ..U. */ OPTION-ATTR , /* 05 R.U. */ OPTION-ATTR , /* 06 .HU. */ WINDOW-ATTR , /* 07 WINDOW */ END-OF-SCREEN , /* 08 END ...B */ OPTION-ATTR , /* 09 R..B */ OPTION-ATTR , /* 0A .H.B */ OPTION-ATTR , /* 0B RH.B */ OPTION-ATTR , /* 0C ..UB */ OPTION-ATTR , /* 0D R.UB */ ECSCAN-MALFUNCTION , /* 0E MUST NOT BE USED */ ECSCAN-MALFUNCTION , /* 0F MUST NOT BE USED */ SIMPLE-OUTPUT-ATTR , /* 10 LABEL .... */ SIMPLE-OUTPUT-ATTR , /* 11 HIGH-LITE R... */ SIMPLE-OUTPUT-ATTR , /* 12 TITLE .H.. */ SIMPLE-OUTPUT-ATTR , /* 13 RH.. */ SIMPLE-OUTPUT-ATTR , /* 14 PROTECT ..U. */ SIMPLE-OUTPUT-ATTR , /* 15 R.U. */ SIMPLE-OUTPUT-ATTR , /* 16 UNDERLINE .HU. */ BLANK-OUTPUT-ATTR , /* 17 BLANK */ SIMPLE-OUTPUT-ATTR , /* 18 ...B */ SIMPLE-OUTPUT-ATTR , /* 19 R..B */ SIMPLE-OUTPUT-ATTR , /* 1A .H.B */ SIMPLE-OUTPUT-ATTR , /* 1B MESSAGE RH.B */ SIMPLE-OUTPUT-ATTR , /* 1C ..UB */ SIMPLE-OUTPUT-ATTR , /* 1D R.UB */ SIMPLE-OUTPUT-ATTR , /* 1E .HUB */ BOX-ATTR , /* 1F BOX */ ANY-CASE-INPUT-ATTR , /* 20 EDIT Y .... */ ANY-CASE-INPUT-ATTR , /* 21 Y R... */ ANY-CASE-INPUT-ATTR , /* 22 Y .H.. */ ANY-CASE-INPUT-ATTR , /* 23 Y RH.. */ ANY-CASE-INPUT-ATTR , /* 24 Y ..U. */ ANY-CASE-INPUT-ATTR , /* 25 ERROR Y R.U. */ ANY-CASE-INPUT-ATTR , /* 26 INPUT Y .HU. */ ANY-CASE-INPUT-ATTR , /* 27 SECURE Y */ ANY-CASE-INPUT-ATTR , /* 28 Y ...B */ ANY-CASE-INPUT-ATTR , /* 29 Y R..B */ ANY-CASE-INPUT-ATTR , /* 2A Y .H.B */ ANY-CASE-INPUT-ATTR , /* 2B Y RH.B */ ANY-CASE-INPUT-ATTR , /* 2C Y ..UB */ ANY-CASE-INPUT-ATTR , /* 2D Y R.UB */ ANY-CASE-INPUT-ATTR , /* 2E Y .HUB */ ANY-CASE-INPUT-ATTR , /* 2F Y */ UPPER-CASE-INPUT-ATTR , /* 30 EDIT X .... */ UPPER-CASE-INPUT-ATTR , /* 31 X R... */ UPPER-CASE-INPUT-ATTR , /* 32 X .H.. */ UPPER-CASE-INPUT-ATTR , /* 33 X RH.. */ UPPER-CASE-INPUT-ATTR , /* 34 X ..U. */ UPPER-CASE-INPUT-ATTR , /* 35 ERROR X R.U. */ UPPER-CASE-INPUT-ATTR , /* 36 INPUT X .HU. */ UPPER-CASE-INPUT-ATTR , /* 37 SECURE X */ UPPER-CASE-INPUT-ATTR , /* 38 X ...B */ UPPER-CASE-INPUT-ATTR , /* 39 X R..B */ UPPER-CASE-INPUT-ATTR , /* 3A X .H.B */ UPPER-CASE-INPUT-ATTR , /* 3B X RH.B */ UPPER-CASE-INPUT-ATTR , /* 3C X ..UB */ UPPER-CASE-INPUT-ATTR , /* 3D X R.UB */ UPPER-CASE-INPUT-ATTR , /* 3E X .HUB */ UPPER-CASE-INPUT-ATTR );/* 3F X */ DCL IDL FIELD-ACTION /* BRANCH TABLE FOR ATTRS */ (FIND-NEXT-FIELD , /* 01 */ OPTION-FIELD-FOUND , /* 02 OPTION .H.. */ OPTION-FIELD-FOUND , /* 03 RECALL RH.. */ OPTION-FIELD-FOUND , /* 04 ..U. */ OPTION-FIELD-FOUND , /* 05 R.U. */ OPTION-FIELD-FOUND , /* 06 .HU. */ FIND-NEXT-FIELD , /* 07 WINDOW */ DONE-DISTRIBUTING , /* 08 END ...B */ OPTION-FIELD-FOUND , /* 09 R..B */ OPTION-FIELD-FOUND , /* 0A .H.B */ OPTION-FIELD-FOUND , /* 0B RH.B */ OPTION-FIELD-FOUND , /* 0C ..UB */ OPTION-FIELD-FOUND , /* 0D R.UB */ ECSCAN-MALFUNCTION , /* 0E MUST NOT BE USED */ ECSCAN-MALFUNCTION , /* 0F MUST NOT BE USED */ FIND-NEXT-FIELD , /* 10 LABEL .... */ FIND-NEXT-FIELD , /* 11 HIGH-LITE R... */ FIND-NEXT-FIELD , /* 12 TITLE .H.. */ FIND-NEXT-FIELD , /* 13 RH.. */ FIND-NEXT-FIELD , /* 14 PROTECT ..U. */ FIND-NEXT-FIELD , /* 15 R.U. */ FIND-NEXT-FIELD , /* 16 UNDERLINE .HU. */ FIND-NEXT-FIELD , /* 17 BLANK */ FIND-NEXT-FIELD , /* 18 ...B */ FIND-NEXT-FIELD , /* 19 R..B */ FIND-NEXT-FIELD , /* 1A .H.B */ FIND-NEXT-FIELD , /* 1B MESSAGE RH.B */ FIND-NEXT-FIELD , /* 1C ..UB */ FIND-NEXT-FIELD , /* 1D R.UB */ FIND-NEXT-FIELD , /* 1E .HUB */ FIND-NEXT-FIELD , /* 1F BOX */ INPUT-FIELD-FOUND , /* 20 EDIT Y .... */ INPUT-FIELD-FOUND , /* 21 Y R... */ INPUT-FIELD-FOUND , /* 22 Y .H.. */ INPUT-FIELD-FOUND , /* 23 Y RH.. */ INPUT-FIELD-FOUND , /* 24 Y ..U. */ INPUT-FIELD-FOUND , /* 25 ERROR Y R.U. */ INPUT-FIELD-FOUND , /* 26 INPUT Y .HU. */ INPUT-FIELD-FOUND , /* 27 SECURE Y */ INPUT-FIELD-FOUND , /* 28 Y ...B */ INPUT-FIELD-FOUND , /* 29 Y R..B */ INPUT-FIELD-FOUND , /* 2A Y .H.B */ INPUT-FIELD-FOUND , /* 2B Y RH.B */ INPUT-FIELD-FOUND , /* 2C Y ..UB */ INPUT-FIELD-FOUND , /* 2D Y R.UB */ INPUT-FIELD-FOUND , /* 2E Y .HUB */ INPUT-FIELD-FOUND , /* 2F Y */ INPUT-FIELD-FOUND , /* 30 EDIT X .... */ INPUT-FIELD-FOUND , /* 31 X R... */ INPUT-FIELD-FOUND , /* 32 X .H.. */ INPUT-FIELD-FOUND , /* 33 X RH.. */ INPUT-FIELD-FOUND , /* 34 X ..U. */ INPUT-FIELD-FOUND , /* 35 ERROR X R.U. */ INPUT-FIELD-FOUND , /* 36 INPUT X .HU. */ INPUT-FIELD-FOUND , /* 37 SECURE X */ INPUT-FIELD-FOUND , /* 38 X ...B */ INPUT-FIELD-FOUND , /* 39 X R..B */ INPUT-FIELD-FOUND , /* 3A X .H.B */ INPUT-FIELD-FOUND , /* 3B X RH.B */ INPUT-FIELD-FOUND , /* 3C X ..UB */ INPUT-FIELD-FOUND , /* 3D X R.UB */ INPUT-FIELD-FOUND , /* 3E X .HUB */ INPUT-FIELD-FOUND );/* 3F X */ DCL IDL REPEAT-ATTR-CHAR /* BRANCH TABLE FOR REPEAT */ (REPEAT--01, REPEAT--02, REPEAT--03, REPEAT--04, REPEAT--05, REPEAT--06, REPEAT--07, REPEAT--08, REPEAT--09, REPEAT--10, REPEAT--11, REPEAT--12, REPEAT--13, REPEAT--14, REPEAT--15, REPEAT--16, REPEAT--17, REPEAT--18, REPEAT--19, REPEAT--20, REPEAT--21, REPEAT--22, REPEAT--23, REPEAT--24, REPEAT--25, REPEAT--26, REPEAT--27, REPEAT--28, REPEAT--29, REPEAT--30, REPEAT--31, REPEAT--32, REPEAT--33, REPEAT--34, REPEAT--35, REPEAT--36, REPEAT--37, REPEAT--38, REPEAT--39, REPEAT--40, REPEAT--41, REPEAT--42, REPEAT--43, REPEAT--44, REPEAT--45, REPEAT--46, REPEAT--47, REPEAT--48, REPEAT--49, REPEAT--50, REPEAT--51, REPEAT--52, REPEAT--53, REPEAT--54, REPEAT--55, REPEAT--56, REPEAT--57, REPEAT--58, REPEAT--59, REPEAT--60, REPEAT--61, REPEAT--62, REPEAT--63, REPEAT--64, REPEAT--65, REPEAT--66, REPEAT--67, REPEAT--68, REPEAT--69, REPEAT--70, REPEAT--71, REPEAT--72, REPEAT--73, REPEAT--74, REPEAT--75, REPEAT--76, REPEAT--77, REPEAT--78, REPEAT--79); DCL IDL PUT-FIELD /* BRANCH TABLE FOR FIELD */ (PUT-FLD-01, PUT-FLD-02, PUT-FLD-03, PUT-FLD-04, PUT-FLD-05, PUT-FLD-06, PUT-FLD-07, PUT-FLD-08, PUT-FLD-09, PUT-FLD-10, PUT-FLD-11, PUT-FLD-12, PUT-FLD-13, PUT-FLD-14, PUT-FLD-15, PUT-FLD-16, PUT-FLD-17, PUT-FLD-18, PUT-FLD-19, PUT-FLD-20, PUT-FLD-21, PUT-FLD-22, PUT-FLD-23, PUT-FLD-24, PUT-FLD-25, PUT-FLD-26, PUT-FLD-27, PUT-FLD-28, PUT-FLD-29, PUT-FLD-30, PUT-FLD-31, PUT-FLD-32, PUT-FLD-33, PUT-FLD-34, PUT-FLD-35, PUT-FLD-36, PUT-FLD-37, PUT-FLD-38, PUT-FLD-39, PUT-FLD-40, PUT-FLD-41, PUT-FLD-42, PUT-FLD-43, PUT-FLD-44, PUT-FLD-45, PUT-FLD-46, PUT-FLD-47, PUT-FLD-48, PUT-FLD-49, PUT-FLD-50, PUT-FLD-51, PUT-FLD-52, PUT-FLD-53, PUT-FLD-54, PUT-FLD-55, PUT-FLD-56, PUT-FLD-57, PUT-FLD-58, PUT-FLD-59, PUT-FLD-60, PUT-FLD-61, PUT-FLD-62, PUT-FLD-63, PUT-FLD-64, PUT-FLD-65, PUT-FLD-66, PUT-FLD-67, PUT-FLD-68, PUT-FLD-69, PUT-FLD-70, PUT-FLD-71, PUT-FLD-72, PUT-FLD-73, PUT-FLD-74, PUT-FLD-75, PUT-FLD-76, PUT-FLD-77, PUT-FLD-78, PUT-FLD-79); DCL DTAPTR .TO; DCL DD DATA-ATTR CHAR(7); DCL DD TYPE CHAR(1) DEF(DATA-ATTR) POS(1) INIT(X'04'); DCL DD LENGTH BIN (2) DEF(DATA-ATTR) POS(2) INIT(0); DCL DD * BIN (4) DEF(DATA-ATTR) POS(4) INIT(0); /* DATA POINTER ATTRIBUTES: CHAR(7) */ /* */ /* SCALAR TYPE CHAR(1) */ /* X'00' = BINARY */ /* X'01' = FLOATING POINT */ /* X'02' = ZONED DECIMAL */ /* X'03' = PACKED DECIMAL */ /* X'04' = CHARACTER */ /* */ /* SCALAR LENGTH BIN (2) */ /* */ /* RESERVED (BINARY 0) BIN (4) */ /* */ /* NOTE THAT ONLY THE FOLLOWING INSTRUCTIONS */ /* MAY USE DATA POINTER BASED VARIABLES: */ /* */ /* CVTCN CVTNC CVTEFN EDIT */ /* CPYBLA CPYBLAP CPYBRA CPYBRAP */ /* CPYNV */ DCL EXCM EXCEPTION-LIST EXCID(H'0000') /* ALL */ BP(ERROR-DETECTED) IGN; DCL DD EXC-DESCR CHAR(10) BDRY(16); DCL DD E-BYTES-PROV BIN(4) DEF(EXC-DESCR) POS(1) INIT(10); DCL DD E-BYTES-AVAIL BIN(4) DEF(EXC-DESCR) POS(5) INIT( 0); DCL DD E-CONTROL CHAR(2) DEF(EXC-DESCR) POS(9) INIT(X'A000'); /* GOTO HANDLER */ DCL SPCPTR .EXC-DESCR INIT(EXC-DESCR); DCL DD FIRST-TIME CHAR(1) INIT("Y"); /****************************************************************/ SCRN38: MODEXCPD EXCEPTION-LIST, .EXC-DESCR, X'01'; CMPBLA(B) FIRST-TIME, "Y"/NEQ(OPEN-ALREADY); CPYBLA FIRST-TIME, "N"; CALLX .SEPT(OPEN-ENTRY), OPEN, *; BRK "OPEN"; /* BREAK POINTS ARE PROVIDED BEFORE ("PUT", "CLEAR") AND AFTER */ /* ("OPEN", "GET", AND "IMM") SYSTEM I/O CALLS. THIS ALLOWS DATA */ /* AND BUFFERS TO BE EXAMINED WITH THE DEBUGGER... */ /* IF ANY EXCEPTIONS OCCUR, PROCESSING CONTINUES THRU THE BREAK */ /* POINT "ERROR". */ ADDSPP .DMDEV, .ODP, DEV-OFFSET; CPYBREP IMAGE-ARRAY, X'20'; CPYBREP SPACES, X'40'; CLEAR-DISPLAY-UNIT: CPYBLA .OUTBUF->IO-COMMAND, INIT-COMMAND; BRK "CLEAR"; CALLX .SEPT(PUT-FCT), PUT, *; SET-DEVICE-SPECIFIC-ATTRIBUTES: CPYBLA CLASS-CHAR, ACTUAL-DEVICE-CLASS; CMPBLA(B) CLASS-CHAR, X'3F'/HI(SET-KEY-MAPPING); B CLASS-ACTION(CLASS-VALUE); SET-ATTR-5292: CPYBLA CHAR-TABLE, ATTR-5292; B SET-KEY-MAPPING; SET-ATTR-5150: CPYBLA CHAR-TABLE, ATTR-5150; B SET-KEY-MAPPING; SET-KEY-MAPPING: CMPBLA(B) KEY-MAPPING, SPACES/EQ(OPEN-ALREADY); CPYBLA CMD-KEY-MAP(16), KEY-MAPPING; OPEN-ALREADY: CPYBLA WS-SENTINELS, X'084020'; CPYNV I, 1; TEST-OPERATION: CMPBLA(B) OP-CODE, "W"/EQ(WRITE-WORKSTATION); CMPBLA(B) OP-CODE, "R"/EQ(READ-WORKSTATION); CMPBLA(B) OP-CODE, "E"/EQ(WRITE-ERROR-CODE); ERROR-DETECTED: BRK "ERROR"; RTX *; WRITE-WORKSTATION: CPYNV P, 1; CPYNV R, 1; CPYNV ROW-NBR, 0; CPYNV COL-NBR, 80; CPYNV REMAINING-FIELDS, 128; CPYBLA SBA-NEEDED,"Y"; CPYBLA ATTR-CHAR,X'00'; CPYBLA PREV-#ROW,X'00'; NEXT-FIELD: SETSPP .OUTPUT,.OUTBUF->DS-CHAR(P); ADDN(S) COL-NBR, R; CMPNV(B) COL-NBR, 80/HI(ADVANCE-ROW); ADVANCE-TO-FIELD: ADDN(S) I, R; SUBN A, I,1; CPYBLA PREV-ATTR, ATTR-CHAR; CPYBLA ATTR-CHAR, WS-CHAR(A); SETSPP .FIELD, WS-CHAR(I); ECSCAN(B) R,.FIELD->WS, X'00', X'00'/EC(TOP-OF-FIELD); TOP-OF-FIELD: SUBN(B) LENGTH, R,1/EQ(EMPTY-FIELD); B ATTR-ACTION(ATTR-VALUE); /* P => CURRENT OUTPUT CHAR NBR */ /* A => ATTRIBUTE CHAR NBR */ /* I => 1ST DATA CHAR NBR */ /* R IS SET FOR NEXT FIELD */ /* LENGTH = NBR OF DATA CHARS */ ADVANCE-ROW: CPYNV COL-NBR, 1; ADDN(SB) ROW-NBR, 1/HI(ADVANCE-TO-FIELD); /****************************************************************/ INVALID-ATTR: SIMPLE-OUTPUT-ATTR: CMPBLA(B) SBA-NEEDED, "Y"/NEQ(TEST-THE-PREV-ATTR); PUT-SET-BUFFER-ADDRESS-FOR-OUTPUT: CPYBLA SBA-NEEDED, "N"; CPYBLA .OUTPUT->SBA, X'11'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #COL; ADDSPP .OUTPUT,.OUTPUT, 3; ADDN(S) P, 3; TEST-THE-PREV-ATTR: CMPBLA(B) PREV-ATTR, X'07'/EQ(PREV-WAS-WINDOW); PUT-THE-OUTPUT-ATTR: XLATEWT .OUTPUT->CH, ATTR-CHAR, CHAR-TABLE; CPYBLA IMAGE(A), ATTR-CHAR; ADDN(S) P, 1; PUT-THE-OUTPUT-DATA: SETDP .TO,.OUTBUF->DS-CHAR(P); SETDPAT .TO, DATA-ATTR; CPYBLA .TO,.FIELD->WS; UPD-IMAGE: ADDN(S) P, LENGTH; SETSPP .OUT, IMAGE(I); B REPEAT-ATTR-CHAR(LENGTH); PREV-WAS-WINDOW: CMPBLA(B) #ROW, PREV-#ROW/NEQ(PUT-THE-OUTPUT-ATTR); SUBN B, A,1; CMPBLA(B) IMAGE(B), ATTR-CHAR/NEQ(PUT-THE-OUTPUT-ATTR); PUT-A-SPACE-INSTEAD: CPYBLA .OUTPUT->CH, " "; CPYBLA IMAGE(A), ATTR-CHAR; ADDN(S) P, 1; AND-THEN-THE-DATA: SETDP .TO,.OUTBUF->DS-CHAR(P); SETDPAT .TO, DATA-ATTR; CPYBLA .TO,.FIELD->WS; ADDN(S) P, LENGTH; SETSPP .OUT, IMAGE(I); B REPEAT-ATTR-CHAR(LENGTH); /****************************************************************/ ANY-CASE-INPUT-ATTR: CPYBLA .OUTPUT->FFW, X'4000'; /* ANY CASE INPUT */ PUT-SET-BUFFER-ADDRESS-FOR-INPUT: SUBN(SB) REMAINING-FIELDS, 1/NHI(SIMPLE-OUTPUT-ATTR); CPYBLA SBA-NEEDED, "N"; CPYBLA .OUTPUT->SBA, X'11'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #COL; PUT-START-FIELD-FOR-INPUT: CPYBLA .OUTPUT->SF , X'1D'; XLATEWT .OUTPUT->ATTR, ATTR-CHAR, CHAR-TABLE; CPYBLA .OUTPUT->SIZE, LENGTH; CPYBLA IMAGE(A), ATTR-CHAR; ADDN(S) P, 9; PUT-THE-INPUT-DATA: ADDSPP .OUT,.OUTPUT, 9; CPYBLA SPACE-REPLACEMENT, X'00'; B PUT-FIELD(LENGTH); OPTION-ATTR: CPYBLA .OUTPUT->FFW, X'4600'; /* SELECTOR FIELD */ B PUT-SET-BUFFER-ADDRESS-FOR-INPUT; UPPER-CASE-INPUT-ATTR: CPYBLA .OUTPUT->FFW, X'4020'; /* MONOCASE INPUT */ B PUT-SET-BUFFER-ADDRESS-FOR-INPUT; /****************************************************************/ WINDOW-ATTR: CMPBLA(B) SBA-NEEDED, "Y"/NEQ(SBA-WAS-NOT-NEEDED); PUT-SET-BUFFER-ADDRESS-FOR-WINDOW: CPYBLA .OUTPUT->SBA, X'11'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #COL; ADDSPP .OUTPUT,.OUTPUT, 3; ADDN(S) P, 3; SBA-WAS-NOT-NEEDED: CPYBLA PREV-#ROW, #ROW; ADDN(S) P, 1; TEST-WINDOW-ATTR: CMPBLA(B) IMAGE(A), X'1F' /HI (PUT-ORIGINAL-ATTR); UNDERLYING-IS-NOT-INPUT: SUBN(B) B, A,1 /ZER(PUT-ORIGINAL-ATTR); CMPBLA(B) IMAGE(A), IMAGE(B)/EQ (PUT-SPACE-ON-ATTR); PUT-ORIGINAL-ATTR: XLATEWT .OUTPUT->CH, IMAGE(A), CHAR-TABLE; CPYBLA SBA-NEEDED, "Y"; B NEXT-FIELD; PUT-SPACE-ON-ATTR: CPYBLA .OUTPUT->CH, " "; CPYBLA SBA-NEEDED, "Y"; B NEXT-FIELD; /****************************************************************/ BOX-ATTR: ADDN N, A,R; CMPBLA(B) WS-CHAR(N), X'1F'/NEQ(SIMPLE-OUTPUT-ATTR); ADDN ATTR-COL, COL-NBR,R; CMPNV(B) ATTR-COL, 80/HI(SIMPLE-OUTPUT-ATTR); CMPBLA(B) SBA-NEEDED, "Y"/NEQ(PUT-THE-BOX-ATTR); PUT-SET-BUFFER-ADDRESS-FOR-BOX: CPYBLA SBA-NEEDED, "N"; CPYBLA .OUTPUT->SBA, X'11'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #COL; ADDSPP .OUTPUT,.OUTPUT,3; ADDN(S) P, 3; PUT-THE-BOX-ATTR: XLATEWT .OUTPUT->CH, ATTR-CHAR, CHAR-TABLE; CPYBLA IMAGE(A), ATTR-CHAR; ADDSPP .OUT,.OUTPUT, 1; ADDN(S) P, 1; PUT-THE-BOX-DATA: CPYBLA SPACE-REPLACEMENT, "-"; B PUT-FIELD(LENGTH); /****************************************************************/ BLANK-OUTPUT-ATTR: CMPBLA(B) SBA-NEEDED, "Y"/NEQ(PUT-THE-BLANK-ATTR); PUT-SET-BUFFER-ADDRESS-FOR-BLANK: CPYBLA SBA-NEEDED, "N"; CPYBLA .OUTPUT->SBA, X'11'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #COL; ADDSPP .OUTPUT,.OUTPUT, 3; ADDN(S) P, 3; PUT-THE-BLANK-ATTR: XLATEWT .OUTPUT->CH, ATTR-CHAR, CHAR-TABLE; CPYBLA IMAGE(A), ATTR-CHAR; ADDSPP .OUTPUT,.OUTPUT, 1; ADDN(S) P, 1; PUT-THE-BLANK-DATA: ADDN END-COL, COL-NBR,LENGTH; CPYBLA .OUTPUT->RA, X'02'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #END; CPYBLA .OUTPUT->REP, X'00'; ADDSPP .OUTPUT,.OUTPUT, 4; ADDN(S) P, 4; SETSPP .OUT, IMAGE(I); B REPEAT-ATTR-CHAR(LENGTH); /****************************************************************/ EMPTY-FIELD: CMPBLA(B) SBA-NEEDED, "Y"/NEQ(PUT-THE-EMPTY-ATTR); PUT-SET-BUFFER-ADDRESS-FOR-EMPTY: CPYBLA SBA-NEEDED, "N"; CPYBLA .OUTPUT->SBA, X'11'; CPYBLA .OUTPUT->ROW, #ROW; CPYBLA .OUTPUT->COL, #COL; ADDSPP .OUTPUT,.OUTPUT, 3; ADDN(S) P, 3; PUT-THE-EMPTY-ATTR: XLATEWT .OUTPUT->CH, ATTR-CHAR, CHAR-TABLE; CPYBLA IMAGE(A), ATTR-CHAR; ADDN(S) P, 1; B NEXT-FIELD; /****************************************************************/ END-OF-SCREEN: CPYNV BINARY-VALUE, CURSOR-ROW; CPYBLA PUT-ROW, BIN-CHAR; CPYNV BINARY-VALUE, CURSOR-COL; CPYBLA PUT-COL, BIN-CHAR; ADDN PUT-SEND-L, P,8; CPYBLA .OUTBUF->P-HEADER, PUT-HEADER; BRK "PUT"; CALLX .SEPT(PUT-FCT), PUT, *; RTX *; /****************************************************************/ READ-WORKSTATION: CPYBLA .OUTBUF->IO-COMMAND, GET-MDT; CALLX .SEPT(PUT-GET), GET, *; BRK "GET"; GET-CMD-KEY: XLATEWT CMD-CHAR,.INBUF->AID-KEY, CMD-KEY-TABLE; CPYNV CMD-KEY, BINARY-VALUE; GET-CURSOR-POS: CPYBLA #ROW,.INBUF->ROW-POS; CPYNV CURSOR-ROW, ROW-NBR; CPYBLA #COL,.INBUF->COL-POS; CPYNV CURSOR-COL, COL-NBR; ADDSPP .INPUT,.INBUF,3; /* PAST CURSOR POS. AND AID */ XLATEWT CMD-CHAR,.INBUF->AID-KEY, CMD-KEY-TYPE; CMPBLA(B) CMD-CHAR, X'00'/NEQ(DISTRIBUTE-MODIFIED-DATA); /* FOR CERTAIN AID KEYS NO DATA IS SENT. FOR THESE WE WILL */ /* ISSUE A READ IMMEDIATE COMMAND TO READ ALL INPUT FIELDS. */ /* */ /* OUR PROBLEM NOW IS TO DISTRIBUTE THE DATA IN THE PROPER */ /* PLACE IN THE WS-CHAR ARRAY... */ /* */ /* FORMAT OF RETURNED DATA: */ /* ROW COL AID (DATA) REPEATED FOR EACH INPUT FIELD. ALL */ /* NULLS ARE CONVERTED TO BLANKS. THE */ /* ATTR'S ARE NOT RETURNED. AID CODE IS */ /* SET TO X'00'. */ /* */ /* IF THE MASTER MDT BIT IS NOT SET, NO DATA IS RETURNED! */ DISTRIBUTE-INPUT-DATA: CPYBLA .OUTBUF->IO-COMMAND, GET-IMM; CALLX .SEPT(PUT-GET), GET, *; BRK "IMM"; CMPNV(B) ACTUAL-RECORD-LENGTH, 3/NHI(DONE-DISTRIBUTING); FIND-NEXT-FIELD: SETSPP .FIELD, WS-CHAR(I); ECSCAN(B) R,.FIELD->WS, X'00', X'00'/EC(CHECK-FOR-INPUT); CHECK-FOR-INPUT: ADDN(S) I, R; /* I => 1ST DATA CHAR */ SUBN A, I,1; /* A => ATTRIBUTE CHAR */ CPYBLA ATTR-CHAR, WS-CHAR(A); B FIELD-ACTION(ATTR-VALUE); INPUT-FIELD-FOUND: ADDSPP .FIELD,.FIELD, R; ECSCAN(B) R,.FIELD->WS, X'00', X'00'/EC(GET-INPUT-LENGTH); GET-INPUT-LENGTH: SUBN(B) LENGTH, R,1/ZER(CHECK-FOR-INPUT); SETDP .TO, WS-CHAR(I); SETDPAT .TO, DATA-ATTR; CPYBLA .TO,.INPUT->CH80; ADDSPP .INPUT,.INPUT,LENGTH; B CHECK-FOR-INPUT; OPTION-FIELD-FOUND: ADDSPP .FIELD,.FIELD, R; ECSCAN(B) R,.FIELD->WS, X'00', X'00'/EC(GET-OPTION-LENGTH); GET-OPTION-LENGTH: SUBN(B) LENGTH, R,1/ZER(CHECK-FOR-INPUT); ADDSPP .INPUT,.INPUT,LENGTH; B CHECK-FOR-INPUT; /* IF ONLY THE MODIFIED FIELDS WERE RECEIVED, THE DISTRIBUTION */ /* IS MORE TRICKY AS WE HAVE TO COMPUTE THE FIELD POSITION FROM */ /* THE ROW AND COLUMN INFORMATION, AND ALSO INSERT SPACES WHERE */ /* TRAILING NULLS HAVE BEEN STRIPPED OFF... */ /* */ /* FORMAT OF RETURNED DATA: */ /* ROW COL AID (SBA ROW COL DATA) REPEATED FOR EACH FIELD THAT */ /* HAS AN MDT BIT SET. THE ROW */ /* AND COL POINTS TO THE FIRST */ /* DATA CHAR (NOT THE ATTR)... */ /* */ /* FOR DATA CHARS: TRAILING NULLS ARE STRIPPED OFF. */ /* LEADING AND EMBEDDED NULLS ARE CONVERTED TO */ /* BLANKS. */ DISTRIBUTE-MODIFIED-DATA: ADDN LENGTH, ACTUAL-RECORD-LENGTH,1; SETSPP .IN,.INBUF->CHAR(LENGTH); CPYBLA .IN->CH02, X'1100'; /* SENTINEL */ B POSITION-TO-FIELD; MOVE-DATA-TO-WS: SUBN(B) LENGTH, TOP,1/ZER(MOVE-SPACES-TO-WS); SETDP .TO,.FIELD->WS; SETDPAT .TO, DATA-ATTR; CPYBLA .TO,.INPUT->CH80; ADDSPP .INPUT,.INPUT, LENGTH; ADDSPP .FIELD,.FIELD, LENGTH; MOVE-SPACES-TO-WS: SUBN(B) LENGTH, R,TOP/ZER(POSITION-TO-FIELD); SETDP .TO,.FIELD->WS; SETDPAT .TO, DATA-ATTR; CPYBLA .TO, SPACES; POSITION-TO-FIELD: CMPBLA(B) .INPUT->ROW, X'00'/EQ(DONE-DISTRIBUTING); CPYBLA #ROW,.INPUT->ROW; CPYBLA #COL,.INPUT->COL; ADDN I, ROW-1*80(ROW-NBR), COL-NBR; ADDSPP .INPUT,.INPUT,3; SETSPP .FIELD, WS-CHAR(I); /* I => 1ST DATA CHAR */ ECSCAN(B) R,.FIELD->WS, X'00', X'00'/EC(FIND-TOP-OF-DATA); FIND-TOP-OF-DATA: SCAN(B) TOP,.INPUT->CH80, X'11'/NZER(MOVE-DATA-TO-WS); DONE-DISTRIBUTING: RTX *; WRITE-ERROR-CODE: CPYBLA ERR-CODE, ERROR-CODE; CPYBLA .OUTBUF->IO-COMMAND, ERR-COMMAND; BRK "ERR"; CALLX .SEPT(PUT-FCT), PUT, *; RTX *; /* BECAUSE NOT ALL CHARACTER HANDLING INSTRUCTIONS SUPPORT */ /* DATA POINTER BASED OPERANDS, WE HAVE TO SIMULATE THAT BY */ /* USING BRANCH TABLES FOR EACH POSSIBLE LENGTH... */ REPEAT--01: CPYBREP .OUT->CH01, ATTR-CHAR; B NEXT-FIELD; REPEAT--02: CPYBREP .OUT->CH02, ATTR-CHAR; B NEXT-FIELD; REPEAT--03: CPYBREP .OUT->CH03, ATTR-CHAR; B NEXT-FIELD; REPEAT--04: CPYBREP .OUT->CH04, ATTR-CHAR; B NEXT-FIELD; REPEAT--05: CPYBREP .OUT->CH05, ATTR-CHAR; B NEXT-FIELD; REPEAT--06: CPYBREP .OUT->CH06, ATTR-CHAR; B NEXT-FIELD; REPEAT--07: CPYBREP .OUT->CH07, ATTR-CHAR; B NEXT-FIELD; REPEAT--08: CPYBREP .OUT->CH08, ATTR-CHAR; B NEXT-FIELD; REPEAT--09: CPYBREP .OUT->CH09, ATTR-CHAR; B NEXT-FIELD; REPEAT--10: CPYBREP .OUT->CH10, ATTR-CHAR; B NEXT-FIELD; REPEAT--11: CPYBREP .OUT->CH11, ATTR-CHAR; B NEXT-FIELD; REPEAT--12: CPYBREP .OUT->CH12, ATTR-CHAR; B NEXT-FIELD; REPEAT--13: CPYBREP .OUT->CH13, ATTR-CHAR; B NEXT-FIELD; REPEAT--14: CPYBREP .OUT->CH14, ATTR-CHAR; B NEXT-FIELD; REPEAT--15: CPYBREP .OUT->CH15, ATTR-CHAR; B NEXT-FIELD; REPEAT--16: CPYBREP .OUT->CH16, ATTR-CHAR; B NEXT-FIELD; REPEAT--17: CPYBREP .OUT->CH17, ATTR-CHAR; B NEXT-FIELD; REPEAT--18: CPYBREP .OUT->CH18, ATTR-CHAR; B NEXT-FIELD; REPEAT--19: CPYBREP .OUT->CH19, ATTR-CHAR; B NEXT-FIELD; REPEAT--20: CPYBREP .OUT->CH20, ATTR-CHAR; B NEXT-FIELD; REPEAT--21: CPYBREP .OUT->CH21, ATTR-CHAR; B NEXT-FIELD; REPEAT--22: CPYBREP .OUT->CH22, ATTR-CHAR; B NEXT-FIELD; REPEAT--23: CPYBREP .OUT->CH23, ATTR-CHAR; B NEXT-FIELD; REPEAT--24: CPYBREP .OUT->CH24, ATTR-CHAR; B NEXT-FIELD; REPEAT--25: CPYBREP .OUT->CH25, ATTR-CHAR; B NEXT-FIELD; REPEAT--26: CPYBREP .OUT->CH26, ATTR-CHAR; B NEXT-FIELD; REPEAT--27: CPYBREP .OUT->CH27, ATTR-CHAR; B NEXT-FIELD; REPEAT--28: CPYBREP .OUT->CH28, ATTR-CHAR; B NEXT-FIELD; REPEAT--29: CPYBREP .OUT->CH29, ATTR-CHAR; B NEXT-FIELD; REPEAT--30: CPYBREP .OUT->CH30, ATTR-CHAR; B NEXT-FIELD; REPEAT--31: CPYBREP .OUT->CH31, ATTR-CHAR; B NEXT-FIELD; REPEAT--32: CPYBREP .OUT->CH32, ATTR-CHAR; B NEXT-FIELD; REPEAT--33: CPYBREP .OUT->CH33, ATTR-CHAR; B NEXT-FIELD; REPEAT--34: CPYBREP .OUT->CH34, ATTR-CHAR; B NEXT-FIELD; REPEAT--35: CPYBREP .OUT->CH35, ATTR-CHAR; B NEXT-FIELD; REPEAT--36: CPYBREP .OUT->CH36, ATTR-CHAR; B NEXT-FIELD; REPEAT--37: CPYBREP .OUT->CH37, ATTR-CHAR; B NEXT-FIELD; REPEAT--38: CPYBREP .OUT->CH38, ATTR-CHAR; B NEXT-FIELD; REPEAT--39: CPYBREP .OUT->CH39, ATTR-CHAR; B NEXT-FIELD; REPEAT--40: CPYBREP .OUT->CH40, ATTR-CHAR; B NEXT-FIELD; REPEAT--41: CPYBREP .OUT->CH41, ATTR-CHAR; B NEXT-FIELD; REPEAT--42: CPYBREP .OUT->CH42, ATTR-CHAR; B NEXT-FIELD; REPEAT--43: CPYBREP .OUT->CH43, ATTR-CHAR; B NEXT-FIELD; REPEAT--44: CPYBREP .OUT->CH44, ATTR-CHAR; B NEXT-FIELD; REPEAT--45: CPYBREP .OUT->CH45, ATTR-CHAR; B NEXT-FIELD; REPEAT--46: CPYBREP .OUT->CH46, ATTR-CHAR; B NEXT-FIELD; REPEAT--47: CPYBREP .OUT->CH47, ATTR-CHAR; B NEXT-FIELD; REPEAT--48: CPYBREP .OUT->CH48, ATTR-CHAR; B NEXT-FIELD; REPEAT--49: CPYBREP .OUT->CH49, ATTR-CHAR; B NEXT-FIELD; REPEAT--50: CPYBREP .OUT->CH50, ATTR-CHAR; B NEXT-FIELD; REPEAT--51: CPYBREP .OUT->CH51, ATTR-CHAR; B NEXT-FIELD; REPEAT--52: CPYBREP .OUT->CH52, ATTR-CHAR; B NEXT-FIELD; REPEAT--53: CPYBREP .OUT->CH53, ATTR-CHAR; B NEXT-FIELD; REPEAT--54: CPYBREP .OUT->CH54, ATTR-CHAR; B NEXT-FIELD; REPEAT--55: CPYBREP .OUT->CH55, ATTR-CHAR; B NEXT-FIELD; REPEAT--56: CPYBREP .OUT->CH56, ATTR-CHAR; B NEXT-FIELD; REPEAT--57: CPYBREP .OUT->CH57, ATTR-CHAR; B NEXT-FIELD; REPEAT--58: CPYBREP .OUT->CH58, ATTR-CHAR; B NEXT-FIELD; REPEAT--59: CPYBREP .OUT->CH59, ATTR-CHAR; B NEXT-FIELD; REPEAT--60: CPYBREP .OUT->CH60, ATTR-CHAR; B NEXT-FIELD; REPEAT--61: CPYBREP .OUT->CH61, ATTR-CHAR; B NEXT-FIELD; REPEAT--62: CPYBREP .OUT->CH62, ATTR-CHAR; B NEXT-FIELD; REPEAT--63: CPYBREP .OUT->CH63, ATTR-CHAR; B NEXT-FIELD; REPEAT--64: CPYBREP .OUT->CH64, ATTR-CHAR; B NEXT-FIELD; REPEAT--65: CPYBREP .OUT->CH65, ATTR-CHAR; B NEXT-FIELD; REPEAT--66: CPYBREP .OUT->CH66, ATTR-CHAR; B NEXT-FIELD; REPEAT--67: CPYBREP .OUT->CH67, ATTR-CHAR; B NEXT-FIELD; REPEAT--68: CPYBREP .OUT->CH68, ATTR-CHAR; B NEXT-FIELD; REPEAT--69: CPYBREP .OUT->CH69, ATTR-CHAR; B NEXT-FIELD; REPEAT--70: CPYBREP .OUT->CH70, ATTR-CHAR; B NEXT-FIELD; REPEAT--71: CPYBREP .OUT->CH71, ATTR-CHAR; B NEXT-FIELD; REPEAT--72: CPYBREP .OUT->CH72, ATTR-CHAR; B NEXT-FIELD; REPEAT--73: CPYBREP .OUT->CH73, ATTR-CHAR; B NEXT-FIELD; REPEAT--74: CPYBREP .OUT->CH74, ATTR-CHAR; B NEXT-FIELD; REPEAT--75: CPYBREP .OUT->CH75, ATTR-CHAR; B NEXT-FIELD; REPEAT--76: CPYBREP .OUT->CH76, ATTR-CHAR; B NEXT-FIELD; REPEAT--77: CPYBREP .OUT->CH77, ATTR-CHAR; B NEXT-FIELD; REPEAT--78: CPYBREP .OUT->CH78, ATTR-CHAR; B NEXT-FIELD; REPEAT--79: CPYBREP .OUT->CH79, ATTR-CHAR; B NEXT-FIELD; PUT-FLD-01: XLATEWT .OUT->CH01,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-02: XLATEWT .OUT->CH02,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-03: XLATEWT .OUT->CH03,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-04: XLATEWT .OUT->CH04,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-05: XLATEWT .OUT->CH05,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-06: XLATEWT .OUT->CH06,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-07: XLATEWT .OUT->CH07,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-08: XLATEWT .OUT->CH08,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-09: XLATEWT .OUT->CH09,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-10: XLATEWT .OUT->CH10,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-11: XLATEWT .OUT->CH11,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-12: XLATEWT .OUT->CH12,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-13: XLATEWT .OUT->CH13,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-14: XLATEWT .OUT->CH14,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-15: XLATEWT .OUT->CH15,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-16: XLATEWT .OUT->CH16,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-17: XLATEWT .OUT->CH17,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-18: XLATEWT .OUT->CH18,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-19: XLATEWT .OUT->CH19,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-20: XLATEWT .OUT->CH20,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-21: XLATEWT .OUT->CH21,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-22: XLATEWT .OUT->CH22,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-23: XLATEWT .OUT->CH23,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-24: XLATEWT .OUT->CH24,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-25: XLATEWT .OUT->CH25,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-26: XLATEWT .OUT->CH26,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-27: XLATEWT .OUT->CH27,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-28: XLATEWT .OUT->CH28,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-29: XLATEWT .OUT->CH29,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-30: XLATEWT .OUT->CH30,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-31: XLATEWT .OUT->CH31,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-32: XLATEWT .OUT->CH32,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-33: XLATEWT .OUT->CH33,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-34: XLATEWT .OUT->CH34,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-35: XLATEWT .OUT->CH35,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-36: XLATEWT .OUT->CH36,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-37: XLATEWT .OUT->CH37,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-38: XLATEWT .OUT->CH38,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-39: XLATEWT .OUT->CH39,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-40: XLATEWT .OUT->CH40,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-41: XLATEWT .OUT->CH41,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-42: XLATEWT .OUT->CH42,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-43: XLATEWT .OUT->CH43,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-44: XLATEWT .OUT->CH44,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-45: XLATEWT .OUT->CH45,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-46: XLATEWT .OUT->CH46,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-47: XLATEWT .OUT->CH47,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-48: XLATEWT .OUT->CH48,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-49: XLATEWT .OUT->CH49,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-50: XLATEWT .OUT->CH50,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-51: XLATEWT .OUT->CH51,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-52: XLATEWT .OUT->CH52,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-53: XLATEWT .OUT->CH53,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-54: XLATEWT .OUT->CH54,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-55: XLATEWT .OUT->CH55,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-56: XLATEWT .OUT->CH56,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-57: XLATEWT .OUT->CH57,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-58: XLATEWT .OUT->CH58,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-59: XLATEWT .OUT->CH59,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-60: XLATEWT .OUT->CH60,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-61: XLATEWT .OUT->CH61,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-62: XLATEWT .OUT->CH62,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-63: XLATEWT .OUT->CH63,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-64: XLATEWT .OUT->CH64,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-65: XLATEWT .OUT->CH65,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-66: XLATEWT .OUT->CH66,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-67: XLATEWT .OUT->CH67,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-68: XLATEWT .OUT->CH68,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-69: XLATEWT .OUT->CH69,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-70: XLATEWT .OUT->CH70,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-71: XLATEWT .OUT->CH71,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-72: XLATEWT .OUT->CH72,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-73: XLATEWT .OUT->CH73,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-74: XLATEWT .OUT->CH74,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-75: XLATEWT .OUT->CH75,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-76: XLATEWT .OUT->CH76,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-77: XLATEWT .OUT->CH77,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-78: XLATEWT .OUT->CH78,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; PUT-FLD-79: XLATEWT .OUT->CH79,.FIELD->WS, CHAR-TABLE; B UPD-IMAGE; ECSCAN-MALFUNCTION: PEND;