carl@CITHEX.CALTECH.EDU (07/18/88)
In order to be able to communicate conveniently with some computers connected
to CITHEX via terminal lines, I normally use some unusual terminal settings
(in particular, my VT220 is set to use 7 bits, space parity. This corresponds
to the VMS terminal settings /DEVICE=VT200_Series/NOEIGHT_BIT. I need the
/NOEIGHT_BIT for TPU to work. Since the default for a VT200_Series terminal
is /EIGHT_BIT, setting the terminal /DEVICE=VT200_Series alone screws up
attempts to use TPU. Unfortunately, this is exactly what a captive procedure
I frequently use on another computer on SPAN does. As a result, I've written
two FORTRAN programs to save and restore terminal characteristics, and sent
copies of them to the person who maintains the captive procedure. Since the
programs are useful to me, I thought there might be some people out there who
could use them as well. The programs are short and simple, and are therefore
undocumented. They use the logical name TTY_MODE in the process logical name
table to store terminal characteristics. Since neither checks to make sure
that the device TT is a terminal, if you use these from a command procedure,
they should be invoked with commands of the form:
$ IF F$GETDVI("TT","DEVCLASS") .EQ. 66 THEN RUN SENSEMODE
and
$ IF F$GETDVI("TT","DEVCLASS") .EQ. 66 THEN RUN SETMODE
Hope somebody finds this useful.
!----------------------------- Start SENSEMODE.FOR -----------------------------
! Sense terminal mode and store in logical name TTY_MODE
PROGRAM SENSEMODE
BYTE BUFFER(12)
LOGICAL*2 CHAN,IOSB(4)
LOGICAL*4 STAT, SYS$ASSIGN, SYS$QIOW
INCLUDE '($IODEF)'
STAT = SYS$ASSIGN('TT',CHAN,,)
IF (IAND(STAT,7) .EQ.1) THEN
STAT = SYS$QIOW(,%VAL(CHAN),%VAL(IO$_SENSEMODE),IOSB,,,
1 BUFFER,%VAL(12),,,,)
IF (IAND(STAT,7) .NE. 1) THEN
TYPE 920, STAT
ELSE IF (IAND(IOSB(1),7) .NE. 1) THEN
TYPE 930, IOSB(1)
ELSE
STAT = LIB$SET_LOGICAL('TTY_MODE',%DESCR(BUFFER),,,)
IF (IAND(STAT,7) .NE. 1) THEN
TYPE 910, STAT
ENDIF
ENDIF
ELSE
TYPE 940, STAT
ENDIF
910 FORMAT(' COULD NOT SET LOGICAL; STATUS = %X',Z8.8)
920 FORMAT(' COULD NOT QUEUE IO REQUEST; STATUS = %X',Z8.8)
930 FORMAT(' IO REQUEST FAILED; STATUS = %X',Z8.8)
940 FORMAT(' COULD NOT ASSIGN CHANNEL; STATUS = %X',Z8.8)
END
!------------------------------ End SENSEMODE.FOR ------------------------------
!------------------------------ Start SETMODE.FOR ------------------------------
! Set terminal mode from logical name TTY_MODE
PROGRAM SETMODE
BYTE BUFFER(12)
LOGICAL*2 CHAN,IOSB(4)
LOGICAL*4 STAT, SYS$ASSIGN, SYS$QIOW
INCLUDE '($IODEF)'
STAT = SYS$ASSIGN('TT',CHAN,,)
IF (IAND(STAT,7) .EQ.1) THEN
STAT = LIB$SYS_TRNLOG('TTY_MODE',,%DESCR(BUFFER),,,)
IF (IAND(STAT,7) .NE. 1) THEN
TYPE 910, STAT
ELSE
STAT = SYS$QIOW(,%VAL(CHAN),%VAL(IO$_SETMODE),IOSB,,,
1 BUFFER,%VAL(12),,,,)
IF (IAND(STAT,7).NE.1) THEN
TYPE 920, STAT
ELSE IF (IAND(IOSB(1),7).NE.1) THEN
TYPE 930, IOSB(1)
ENDIF
ENDIF
ELSE
TYPE 940, STAT
ENDIF
910 FORMAT(' COULD NOT TRANSLATE LOGICAL; STATUS = %X',Z8.8)
920 FORMAT(' COULD NOT QUEUE IO REQUEST; STATUS = %X',Z8.8)
930 FORMAT(' IO REQUEST FAILED; STATUS = %X',Z8.8)
940 FORMAT(' COULD NOT ASSIGN CHANNEL; STATUS = %X',Z8.8)
END
!------------------------------- End SETMODE.FOR -------------------------------