      SUBROUTINE SETWID(WIDTH)
C
C     SET A VT100 TERMINAL TO 80 OR 132 COLUMN MODE
C     1982-FEB-16 -- JWB -- REVISION 0
C
C     INPUT:  WIDTH - INTEGER - 80 OR 132
C
      IMPLICIT INTEGER*4 (A-Z)
      INTEGER WIDTH
C
      CHARACTER*2  ESC_NULL
      CHARACTER*63 TT
      INTEGER*4 CHAN_TERM, P3, P4, P5
      INTEGER*2 IOSB(4)
      INTEGER*2 TT_LEN
C
      BYTE ESCAPE / 27 /
      CHARACTER*4 WIDTH_80  / '[?3l' /
      CHARACTER*4 WIDTH_132 / '[?3h' /
C     LOWER CASE L AND H ---------^
      BYTE         ESC_NUL_BYTE(2) / '1B'X, '00'X /
      EQUIVALENCE (ESC_NUL_BYTE,ESC_NULL)
C
      INCLUDE 'OPSDEV:[JWB]DCDEF.SYM'
      INCLUDE 'OPSDEV:[JWB]TTDEF.SYM'
C
C     DEVICE INFORMATION BUFFER --
C
      CHARACTER*64 PRIBUF
      INTEGER*4    INTBUF(16)
      INTEGER*4 DEV_CHAR
      BYTE      DEV_CLASS, DEV_TYPE
      INTEGER*2 DEV_PAGE_WIDTH
      INTEGER*4 DEV_TERMINAL_CHAR
      BYTE      DEV_PAGE_LENGTH
C
      INTEGER  SYS$ASSIGN, SYS$DASSGN, SYS$GETDEV, SYS$QIOW, SYS$TRNLOG
      EXTERNAL SYS$ASSIGN, SYS$DASSGN, SYS$GETDEV, SYS$QIOW, SYS$TRNLOG
      EXTERNAL IO$_SETMODE, SS$_NOTRAN
      INTEGER*2 PRILEN
C
C     DEVICE CHARACTERISTICS BUFFER --
C
      EQUIVALENCE (PRIBUF( 1: 4),DEV_CHAR,INTBUF(1))
      EQUIVALENCE (PRIBUF( 5: 5),DEV_CLASS)
      EQUIVALENCE (PRIBUF( 6: 6),DEV_TYPE)
      EQUIVALENCE (PRIBUF( 7: 8),DEV_PAGE_WIDTH)
      EQUIVALENCE (PRIBUF( 9:12),DEV_TERMINAL_CHAR)
      EQUIVALENCE (PRIBUF(12:12),DEV_PAGE_LENGTH)
C
C     ------------------------------------------------------------------
C     Translate terminal logical name --
D     PRINT *, 'TRANSLATE TERMINAL NAME'
      TT     = 'SYS$OUTPUT'
      TT_LEN = 10
      STATUS = 0
      DO WHILE (STATUS .NE. %LOC(SS$_NOTRAN) )
           STATUS = SYS$TRNLOG(TT(1:TT_LEN),  TT_LEN,TT,,,)
      ENDDO
C
C     Check for <ESC>null string at head of terminal translation string.
      IF ( TT(1:2).EQ.ESC_NULL ) THEN
         TT     = TT(5:TT_LEN)
         TT_LEN = TT_LEN-4
      ENDIF
C
C     ------------------------------------------------------------------
C
D     PRINT *, 'GET DEVICE CHARACTERISTICS'
      STATUS = SYS$GETDEV(TT(1:TT_LEN),  PRILEN,PRIBUF,,)
D     PRINT 800, INTBUF
D 800 FORMAT('  DEVICE CHARACTERISTICS BUFFER:'/2(2X,8Z9.8/))
      IF (DEV_TYPE .EQ. DT$_VT100) THEN
C
C        SET TERMINAL WIDTH - VT100 ONLY
C
         IF     (WIDTH.EQ.132) THEN
            DEV_PAGE_WIDTH = 132
            WRITE (*,1000) ESCAPE, WIDTH_132
         ELSEIF (WIDTH.EQ.80)  THEN
            DEV_PAGE_WIDTH = 80
            WRITE (*,1000) ESCAPE, WIDTH_80
         ENDIF
 1000    FORMAT(1X,A1,A4/)
C
D        PRINT *, 'GET CHANNEL TO TERMINAL'
         STATUS = SYS$ASSIGN(TT(1:TT_LEN),  CHAN_TERM,,)
         IF (.NOT.STATUS) CALL PRMSG(STATUS)
D        PRINT *, 'SET TERMINAL MODE'
         P3 = 0
         P4 = 0
         P5 = 0
         STATUS = SYS$QIOW(,%VAL(CHAN_TERM),IO$_SETMODE,  IOSB,,,
     *                    INTBUF(2),,%VAL(P3),%VAL(P4),%VAL(P5),)
         IF (.NOT.STATUS) CALL PRMSG(STATUS)
D        PRINT *, 'DEASSIGN CHANNEL'
         IDUMMY = SYS$DASSGN(%VAL(CHAN_TERM))
         IF (.NOT.IDUMMY) CALL PRMSG(IDUMMY)
C
      ENDIF
      RETURN
      END
