INCLUDE/NL [314,6]DEFIN INCLUDE [314,6]VTDEFIN.RAT # # VTCURS - SUBROUTINE TO DO RELATIVE CURSOR MOVEMENTS # SUBROUTINE VTCURS (LINES, COLS) # INTEGER LINES #NUMBER OF LINES TO MOVE INTEGER COLS #NUMBER OF COLUMNS TO MOVE # NEGATIVE FOR UP OR LEFT; POSITIVE FOR DOWN OR RIGHT # IF (LINES != 0) DO I=1,IABS(LINES) [ CALL VTSEND(ESCAPE) IF (LINES > 0) CALL VTSEND (DOWN) ELSE CALL VTSEND (UP) ] IF (COLS != 0) DO I=1,IABS (COLS) [ CALL VTSEND (ESCAPE) IF (COLS > 0) CALL VTSEND (RIGHT) ELSE CALL VTSEND (LEFT) ] CALL VTSEND (FLUSH) #FORCE IMMEDIATE OUTPUT RETURN END # # VTDCA - SUBROUTINE TO DO DIRECT CURSOR ADDRESSING ON VT52 # SUBROUTINE VTDCA (LINE, COL) # INTEGER LINE INTEGER COL # CALL VTSEND (ESCAPE) CALL VTSEND (DIRECT) CALL VTSEND (31+LINE) CALL VTSEND (31+COL) CALL VTSEND (FLUSH) #FORCE IMMEDIATE OUTPUT RETURN END # # VTFUNC - SUBROUTINE TO EXECUTE ESCAPE SEQUENCE FUNCTIONS ON VT52 # SUBROUTINE VTFUNC (FUNC) # CHARACTER FUNC #THE VT52 CONTROL CODE DESIRED # # WORKS FOR THE FOLLOWING VT52 FUNCTIONS: # HOLD, NOHOLD HOLD SCREEN MODE # ALTKP, NOALTKP ALTERNATE KEYPAD MODE # ERASEL, ERASES ERASE FROM HERE TO END OF LINE, SCREEN # HOME MOVE CURSOR TO UPPER LEFTHAND CORNOR # GRAPH, NOGRAPH GRAPHICS MODE # UP, DOWN MOVE CURSOR UP OR DOWN 1 LINE # RIGHT, LEFT MOVE CURSOR RIGHT OR LEFT 1 COLUMN # # CALL VTSEND (ESCAPE) CALL VTSEND (FUNC) CALL VTSEND (FLUSH) #FORCE IMMEDIATE OUTPUT # RETURN END # # VTLABL - SUBROUTINE TO WRITE VERTICALLY ON THE VT52 # SUBROUTINE VTLABL (OUTBUF) # CHARACTER OUTBUF(1) # # CURSOR MUST FIRST BE MOVED TO STARTING POSITION ON SCREEN # FOR (I=1; OUTBUF(I) != EOF; INCREMENT(I)) [ CALL VTSEND (OUTBUF(I)) CALL VTCURS (1,-1) #BACKUP 1 COL AND GO DOWN 1 LINE ] RETURN END # # VTSEND - SUBROUTINE TO BUFFER AND SEND CHARACTERS TO THE VT52 # SUBROUTINE VTSEND (CHAR) # INCLUDE CVTLIB CHARACTER CHAR, BUFR(40) DATA LAST /0/ # IF (CHAR != FLUSH) [ INCREMENT (LAST) BUFR(LAST)=CHAR ] IF (LAST >= 40 \ CHAR == FLUSH) [ WRITE (VTLUN,1) (BUFR(N),N=1,LAST) ; 1 FORMAT ($,"+",40A1) LAST=0 #RESET COUNTER ] # RETURN END