# # VT100 VIDEO DISPLAY COMMAND PROGRAM. CALLING SEQUENCE IS # CALL UVT100(CMD,N1,N2), WHERE CMD IS ONE OF THE COMMANDS IN # THE PARAMETER LIST BELOW, AND N1 AND N2 ARE OPTIONAL PARAMETERS # DEPENDING UPON CMD. SEE THE UVT100 USER'S MANUAL FOR MORE DETAILS. # # AUTHOR: GLEN HOFFING # DATE: 24-FEB-81 # SUBROUTINE UVT100(CMD,N1,N2) IMPLICIT INTEGER (A-Z) BYTE OUTBUF(1000) COMMON /VTCOM/ OUTBUF,LEN PARAMETER CUP = 1, #CURSOR POSITION REPORT CUU = 2, #CURSOR UP CUD = 3, #CURSOR DOWN CUF = 4, #CURSOR FORWARD CUB = 5, #CURSOR BACK DECDWL = 6, #DOUBLE WIDTH LINE DECDHL = 7, #DOUBLE HEIGHT LINE DECRC = 8, #RESTORE CURSOR DECSC = 9, #SAVE CURSOR DECSWL = 10, #SINGLE HEIGHT, SINGLE WIDTH LINE ED = 11, #ERASE IN DISPLAY EL = 12, #ERASE IN LINE SGR = 13, #SELECT GRAPHIC RENDITION NEL = 14, #NEXT LINE SCS = 15, #SELECT CHARACTER SET SM = 16, #SET MODE RM = 17, #RESET MODE ANSI = 18 #SET TERMINAL TO VT100 MODE (VT52 CMD) OUTBUF(LEN+1) = 27 #SET FIRST CHARACTER TO 'ESCAPE' CODE IF (CMD == CUP) [ #CURSOR POSITION OUTBUF(LEN+2) = "[" IF (N1 < 1 .OR. N1 > 24) RETURN ENCODE(2,10,OUTBUF(LEN+3)) N1 #...ROW N1 IF (OUTBUF(LEN+3) == " ") OUTBUF(LEN+3) = 0 OUTBUF(LEN+5) = ";" IF (N2 < 1 .OR. N2 > 80) RETURN ENCODE(2,10,OUTBUF(LEN+6)) N2 #...COLUMN N2 IF (OUTBUF(LEN+6) == " ") OUTBUF(LEN+6) = 0 OUTBUF(LEN+8) = "H" LEN = LEN + 8 ] ELSE IF (CMD == CUB) [ #CURSOR BACK OUTBUF(LEN+2) = "[" IF (N1 < 1 .OR. N1 > 80) RETURN ENCODE(2,10,OUTBUF(LEN+3)) N1 #...N1 COLUMNS IF (OUTBUF(LEN+3) == " ") OUTBUF(LEN+3) = 0 OUTBUF(LEN+5) = "D" LEN = LEN + 5 ] ELSE IF (CMD == CUD) [ #CURSOR DOWN OUTBUF(LEN+2) = "[" IF (N1 < 1 .OR. N1 > 24) RETURN ENCODE(2,10,OUTBUF(LEN+3)) N1 #...N1 ROWS IF (OUTBUF(LEN+3) == " ") OUTBUF(LEN+3) = 0 OUTBUF(LEN+5) = "B" LEN = LEN + 5 ] ELSE IF (CMD == CUF) [ #CURSOR FORWARD OUTBUF(LEN+2) = "[" IF (N1 < 1 .OR. N1 > 80) RETURN ENCODE(2,10,OUTBUF(LEN+3)) N1 #...N1 COLUMNS IF (OUTBUF(LEN+3) == " ") OUTBUF(LEN+3) = 0 OUTBUF(LEN+5) = "C" LEN = LEN + 5 ] ELSE IF (CMD == CUU) [ #CURSOR UP OUTBUF(LEN+2) = "[" IF (N1 < 1 .OR. N1 > 24) RETURN ENCODE(2,10,OUTBUF(LEN+3)) N1 #...N1 ROWS IF (OUTBUF(LEN+3) == " ") OUTBUF(LEN+3) = 0 OUTBUF(LEN+5) = "A" LEN = LEN + 5 ] ELSE IF (CMD == DECDHL) [ #DOUBLE-HEIGHT LINE OUTBUF(LEN+2) = "#" IF (N1 == 1) OUTBUF(LEN+3) = "4" #...BOTTOM HALF ELSE OUTBUF(LEN+3) = "3" #...TOP HALF LEN = LEN + 3 ] ELSE IF (CMD == DECDWL) [ #DOUBLE-WIDTH LINE OUTBUF(LEN+2) = "#" OUTBUF(LEN+3) = "6" LEN = LEN + 3 ] ELSE IF (CMD == DECRC) [ #RESTORE CURSOR OUTBUF(LEN+2) = "8" LEN = LEN + 2 ] ELSE IF (CMD == DECSC) [ #SAVE CURSOR OUTBUF(LEN+2) = "7" LEN = LEN + 2 ] ELSE IF (CMD == DECSWL) [ #SINGLE-WIDTH,SINGLE-HEIGHT LINE OUTBUF(LEN+2) = "#" OUTBUF(LEN+3) = "5" LEN = LEN + 3 ] ELSE IF (CMD == ED) [ #ERASE DISPLAY OUTBUF(LEN+2) = "[" IF (N1 == 0) #...CURSOR POSITION TO END OF SCREEN OUTBUF(LEN+3) = "0" ELSE IF (N1 == 1) #...START OF SCREEN TO CURSOR POSITION OUTBUF(LEN+3) = "1" ELSE OUTBUF(LEN+3) = "2" #...ENTIRE SCREEN OUTBUF(LEN+4) = "J" LEN = LEN + 4 ] ELSE IF (CMD == EL) [ #ERASE LINE OUTBUF(LEN+2) = "[" IF (N1 == 0) #...CURSOR POSITION TO END OF LINE OUTBUF(LEN+3) = "0" ELSE IF (N1 == 2) #...ENTIRE LINE OUTBUF(LEN+3) = "2" ELSE #...START OF LINE TO CURSOR POSITION OUTBUF(LEN+3) = "1" OUTBUF(LEN+4) = "K" LEN = LEN + 4 ] ELSE IF (CMD == SGR) [ #SELECT GRAPHIC RENDITION OUTBUF(LEN+2) = "[" IF (N1 == 7) #...REVERSE FIELD ON OUTBUF(LEN+3) = "7" ELSE OUTBUF(LEN+3) = "0" #...REVERSE FIELD OFF OUTBUF(LEN+4) = "m" OUTBUF(LEN+5) = 8 LEN = LEN + 5 ] ELSE IF (CMD == NEL) [ #CURSOR TO NEW LINE OUTBUF(LEN+2) = "E" LEN = LEN + 2 ] ELSE IF (CMD == SCS) [ #SELECT CHARACTER SET IF (N1 == 0) #...G0 CHARACTER SET OUTBUF(LEN+2) = "(" ELSE #...G1 CHARACTER SET OUTBUF(LEN+2) = ")" IF (N2 == 0) #...UNITED KINGDOM CHARACTER SET OUTBUF(LEN+3) = "A" ELSE IF (N2 == 1) #...ASCII CHARACTER SET OUTBUF(LEN+3) = "B" ELSE #...SPECIAL GRAPHICS SET OUTBUF(LEN+3) = "0" LEN = LEN + 3 ] ELSE IF (CMD == SM) [ #SET MODE OUTBUF(LEN+2) = "[" OUTBUF(LEN+3) = "?" IF (N1 > 0 .AND. N1 < 10) #...MODE TO SET ENCODE(1,5,OUTBUF(LEN+4)) N1 OUTBUF(LEN+5) = "h" LEN = LEN + 5 ] ELSE IF (CMD == RM) [ #RESET MODE OUTBUF(LEN+2) = "[" OUTBUF(LEN+3) = "?" IF (N1 > 0 .AND. N1 < 10) #...MODE TO RESET ENCODE(1,5,OUTBUF(LEN+4)) N1 OUTBUF(LEN+5) = "l" LEN = LEN + 5 ] ELSE IF (CMD == ANSI) [ #ANSI MODE OUTBUF(LEN+2) = "<" LEN = LEN + 2 ] 5 FORMAT (I1) 10 FORMAT (I2) RETURN END