!************************************************************** & ! & ! >>>>>> ALBRIGHT and WILSON (AUSTRALIA) LTD. <<<<<< & ! ____________________________________ & ! & ! M A I N P R O G R A M T I T L E B L O C K & ! & ! Program : SET_MODE.BAS -- Subroutine & ! & ! Version : V1.0 & ! Date : 15-11-91 & ! Author : PETER DIMOPOULOS & ! & ! & !************************************************************** & ! ! This subroutine will set the current terminal port and ! v.d.u. to the mode specified. ! The modes defined already are :- ! VT52 ! HOSTSYNC ! LOWERCASE ! SCOPE ! ! VT100 ! HOSTSYNC ! LOWERCASE ! SCOPE ! EDITING Line Editing ! ANSICRT ! AVO Advanced Video ! EDIT ANSI-defined advanced Editing ! DECCRT ! ! VT200 ! HOSTSYNC ! LOWERCASE ! SCOPE ! EDITING ! ANSICRT ! AVO ! EDIT ! DECCRT ! DECCRT2 ! ! Any other device type specified will return the message ! Device type .... is undefined in subroutine SET_MODE. ! Sub SET_MODE( String TERM_MODE ) Option Type = EXPLICIT ! External Long Function SYS$ASSIGN, & SYS$QIOW External Long Constant IO$_SETMODE, & IO$_SENSEMODE ! %Include "$TTDEF" %From %Library "SYS$LIBRARY:BASIC$STARLET.TLB" %Include "$TT2DEF" %From %Library "SYS$LIBRARY:BASIC$STARLET.TLB" ! Record CHARACTERISTICS_BUFFER Byte CLASS Byte TERM_TYPE Word PAGE_WIDTH Word TERM_CHAR Byte TERM_CHARS Byte PAGE_LENGTH Long EXT_TERM_CHAR End Record CHARACTERISTICS_BUFFER ! Declare Long STAT, FUNC, & Word CHAN, IOSB(3), & Characteristics_Buffer CHAR_BUF ! STAT = Sys$Assign( 'TT:', CHAN,, ) Call Lib$Stop( STAT By Value ) If (STAT And 1%) = 0% ! ! Read current terminal characteristics ! FUNC = Io$_Sensemode STAT = Sys$Qiow( , CHAN By Value, & FUNC By Value, & IOSB() By Ref,,, & CHAR_BUF By Ref, & 12% By Value,,,, ) ! If ( STAT And 1% ) = 0% Then Call Lib$Stop( STAT By Value ) Else If ( IOSB(0) And 1% ) = 0% Then Call Lib$Stop( IOSB(0) By Value ) End If End If ! Select TERM_MODE Case "VT52" Gosub VT52_MODE ! Case "VT100" Gosub VT100_MODE ! Case "VT200" Gosub VT200_MODE ! Case Else Print BEL; "Device type "; TERM_MODE; " is undefined "; Print "in subroutine SET_MODE." Sleep 1% ! End Select Goto END_SUB ! ! Define VT52 Terminal characteristics ! VT52_MODE: CHAR_BUF::TERM_TYPE = TT$_VT52 CHAR_BUF::TERM_CHAR = ( CHAR_BUF::TERM_CHAR & Or TT$M_HOSTSYNC & Or TT$M_LOWER & Or TT$M_SCOPE ) If ( CHAR_BUF::TERM_CHAR And TT$M_WRAP ) = TT$M_WRAP Then CHAR_BUF::TERM_CHAR = ( CHAR_BUF::TERM_CHAR & Xor TT$M_WRAP ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT$M_EIGHTBIT ) = TT$M_EIGHTBIT Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT$M_EIGHTBIT ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_EDITING ) = TT2$M_EDITING Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_EDITING ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_ANSICRT ) = TT2$M_ANSICRT Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_ANSICRT ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_AVO ) = TT2$M_AVO Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_AVO ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_EDIT ) = TT2$M_EDIT Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_EDIT ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_DECCRT ) = TT2$M_DECCRT Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_DECCRT ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_DECCRT2 ) = TT2$M_DECCRT2 Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_DECCRT2 ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_DECCRT3 ) = TT2$M_DECCRT3 Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_DECCRT3 ) End If FUNC = IO$_SETMODE STAT = Sys$Qiow( , chan BY VALUE, & func BY VALUE, & iosb() BY REF,,, & char_buf BY REF, & 12% BY VALUE,,,, ) ! If ( stat AND 1% ) = 0% THEN CALL lib$stop( stat BY VALUE ) Else If ( iosb(0) AND 1% ) = 0% THEN CALL lib$stop( iosb(0) BY VALUE ) End If End If ! Print ESC;'<'; ESC;'[?2l' Return ! ! Define VT100 Terminal characteristics ! VT100_MODE: CHAR_BUF::TERM_TYPE = TT$_VT100 CHAR_BUF::TERM_CHAR = ( CHAR_BUF::TERM_CHAR & Or TT$M_HOSTSYNC & Or TT$M_LOWER & Or TT$M_SCOPE ) CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Or TT2$M_EDITING & Or TT2$M_ANSICRT & Or TT2$M_AVO & Or TT2$M_EDIT & Or TT2$M_DECCRT ) If ( CHAR_BUF::TERM_CHAR And TT$M_WRAP ) = TT$M_WRAP Then CHAR_BUF::TERM_CHAR = ( CHAR_BUF::TERM_CHAR & Xor TT$M_WRAP ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_DECCRT2 ) = TT2$M_DECCRT2 Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_DECCRT2 ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_DECCRT3 ) = TT2$M_DECCRT3 Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_DECCRT3 ) End If FUNC = IO$_SETMODE STAT = Sys$Qiow( , chan BY VALUE, & func BY VALUE, & iosb() BY REF,,, & char_buf BY REF, & 12% BY VALUE,,,, ) ! If ( stat AND 1% ) = 0% THEN CALL lib$stop( stat BY VALUE ) Else If ( iosb(0) AND 1% ) = 0% THEN CALL lib$stop( iosb(0) BY VALUE ) End If End If ! Print ESC;'<'; ESC;'[61"p' Return ! ! Define VT200 Terminal characteristics ! VT200_MODE: CHAR_BUF::TERM_TYPE = TT$_VT200_Series CHAR_BUF::TERM_CHAR = ( CHAR_BUF::TERM_CHAR & Or TT$M_HOSTSYNC & Or TT$M_LOWER & Or TT$M_SCOPE & Or TT$M_EIGHTBIT ) CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Or TT2$M_EDITING & Or TT2$M_ANSICRT & Or TT2$M_AVO & Or TT2$M_EDIT & Or TT2$M_DECCRT & Or TT2$M_DECCRT2 ) If ( CHAR_BUF::TERM_CHAR And TT$M_WRAP ) = TT$M_WRAP Then CHAR_BUF::TERM_CHAR = ( CHAR_BUF::TERM_CHAR & Xor TT$M_WRAP ) End If If ( CHAR_BUF::EXT_TERM_CHAR And TT2$M_DECCRT3 ) = TT2$M_DECCRT3 Then CHAR_BUF::EXT_TERM_CHAR = ( CHAR_BUF::EXT_TERM_CHAR & Xor TT2$M_DECCRT3 ) End If FUNC = IO$_SETMODE STAT = Sys$Qiow( , chan BY VALUE, & func BY VALUE, & iosb() BY REF,,, & char_buf BY REF, & 12% BY VALUE,,,, ) ! If ( stat AND 1% ) = 0% THEN CALL lib$stop( stat BY VALUE ) Else If ( iosb(0) AND 1% ) = 0% THEN CALL lib$stop( iosb(0) BY VALUE ) End If End If ! Print ESC;'<'; ESC;'[62;2"p' Return END_SUB: Subend