allbery@ncoast.UUCP (09/29/87)
An Improved VAX/VMS "SHOW TERMINAL" Display -D.A. Munroe
How many times have you typed "SHOW TERMINAL" only to spend time
hunting around the display for the set of characteristics you need to
know about? This program not only displays terminal characteristics
in a much more organized format, but also shows some additional ones
such as modem signals. A sample display is shown below.
The program is written in MACRO, so anyone with VAX/VMS can use it.
Once installed as a foreign command, it behaves just like the regular
"SHOW TERMINAL", with the exception that output cannot be sent to
disk.
Terminal: _TXD1: Owner process: TA1
Device type: FT2 Username: TYPESETTING
--- speed --- --- comm. line --- --- flow --- --- generic ---
Transmit: 9600 Full duplex No Host sync Scope
Receive: 9600 No Modem No TT sync No ANSI CRT
No Autobaud No Dialup line No Read sync No DEC CRT
No Set speed priv No Remote No Force XON No DEC CRT2
No Hangup Type ahead No Block mode
--- bits --- No Modify hangup Alt. type ahead No Edit mode
Passall No Disconnect proc DMA No Advanced video
Pasthru CR fill: 0 No Printer port
No Escape LF fill: 0 No Soft characters
Eightbit --- format --- No SIXEL graphics
No Fallback Width: 80 No ReGIS graphics
Odd Parity Page: 24 --- user/appl ---
Terminate on errors No Wrap No Broadcast
Lowercase Line editing
Tab Overstrike editing
--- security --- Form Numeric Keypad
No Secure server No Echo MBX Enable
No Sys. password No Local echo No Broadcast MBX
------------------------ Cut Here ---------------------------------
.title TERM Improved "Show Terminal"
;----------------------------------------------------------------
; TERM 3/87 D.A. Munroe
;
; This utility improves upon the SHOW TERMINAL command,
; not only by displaying more terminal characteristics,
; but by showing those characteristics in terms of these
; basic categories:
;
; - transmission speed
; - bit interpretation
; - communication
; - terminal formatting
; - flow control
; - user and application settings
; - generic capabilities
;
; status:
; output can only be to a terminal, but the program is
; otherwise complete
;
;
; notes:
; should be installed or used with the priviliges: log_io,
; share, world, and sysprv.
;
; comments, corrections, and suggestions should be sent to:
;
; David A. Munroe
; Capital Cities Communications/ABC
; 7818 SE Stark Ave
; Portland, Oregon 97215
; (503) 251-7533
;
; uucp: ...tektronix!reed!omen!safari!dave
; ...ptsfa!safari!dave
; ...ihnp4!safari!dave
;
;
; Revision history:
;
; v1.00 13-Mar-87 dm Initial release
; v1.01 06-Apr-87 dm Use "Hardcopy" instead of "No Scope"
;
;------------------------------------------------------------------------
; Bring in definitions
$DVIDEF ; for dvi item codes
$DEVDEF ; for device characteristics
$JPIDEF ; for device owner & username
$DCDEF ; for device class request
$TTDEF ; for basic characteristics
$TT2DEF ; for extended characteristics
; macro to generate general purpose string descriptor
.macro string_dsc buffer, size
.word size ; output buffer size
.byte DSC$K_DTYPE_T ; text data type
.byte DSC$K_CLASS_S ; string descriptor class
.address buffer ; address of output buffer
.endm
; macro to generate general purpose item descriptor
.macro item_dsc item, buffer, size, return_length_address
.word size ; output buffer size
.word item ; item code (e.g. $DVI$_*)
.address buffer ; output buffer
.address return_length_address
.endm
.ident \v1.01\ ; 06-Apr-1987, D.A. Munroe
.psect CODE,nowrt,exe
.entry TERM,^m<r2,r3,r4,r5,r6,r7,r8> ; movc3 stomps on r0..r5
;----------------------------------------------------------------
; Assign an I/O channel to SYS$OUTPUT
;----------------------------------------------------------------
$assign_s -
devnam = outdev_dsc,-
chan = outdev_chan
blbs r0,gcml
brw exit
;----------------------------------------------------------------
; Look at the command line to determine the terminal
; under test. If TERM is invoked with a command
; line such as:
; $ TERM OPA0
;
; then the effect of calling lib$get_foreign is to
; put "OPA0" in tt_buff (via tt_dsc).
;----------------------------------------------------------------
gcml: pushaw tt_len ; where to put length of terminal name
clrl -(sp) ; no prompt string
pushaq tt_dsc ; descriptor for terminal name
calls #3,g^lib$get_foreign ; look at command line
blbs r0,assn_term ; continue if ok
brw exit
;----------------------------------------------------------------
; Assign an I/O channel to the terminal under test.
; If no terminal name was given, we use SYS$OUTPUT.
; We need to do this in order to give tt_chan to the
; $QIO, below.
;----------------------------------------------------------------
assn_term:
tstw tt_len ; any terminal specified?
bneq 10$ ; branch if so
; otherwise use SYS$OUTPUT
movc3 #outdev_size,outdev_dsc,tt_dsc
movw outdev_chan,tt_chan
10$: $assign_s -
devnam = tt_dsc,-
chan = tt_chan
blbs r0,20$
brw exit
20$:
;----------------------------------------------------------------
; Get terminal characteristics associated with the
; device on tt_chan. The IO$_SENSEMODE request provides
; additional terminal characteristics than that given by
; $GETDVI
;----------------------------------------------------------------
get_ch:
$qiow_s -
efn = #0,-
chan = tt_chan,-
func = #IO$_SENSEMODE,-
iosb = sense_iosb,-
p1 = ch_buff,-
p2 = #ch_size
blbs r0,10$
brw exit
10$: movzwl sense_iosb,r0
blbs r0,20$
brw exit
20$:
;----------------------------------------------------------------
; If the terminal has the modem characteristic, look at
; the modem signals. This is also a good time to place
; those signals in the prototype screen.
;----------------------------------------------------------------
get_modem_ch:
bbs #TT$V_MODEM,ch_basic,5$
brw 70$ ; branch if not modem
5$: $qiow_s -
efn = #0,-
chan = tt_chan,-
func = #IO$_SENSEMODE!IO$M_RD_MODEM,-
iosb = modem_iosb,-
p1 = modem_buff
blbs r0,10$
brw exit
10$: movzwl modem_iosb,r0
blbs r0,20$
brw exit
20$: bbc #TT$V_DS_DSR,modem_buff+2,21$ ; show any modem signals
movl dsr,dsr_msg
21$: bbc #TT$V_DS_RING,modem_buff+2,22$
movl ri,ri_msg
22$: bbc #TT$V_DS_CARRIER,modem_buff+2,23$
movl cd,cd_msg
23$: bbc #TT$V_DS_CTS,modem_buff+2,24$
movl cts,cts_msg
24$: bbc #TT$V_DS_SECREC,modem_buff+2,25$
movl srd,srd_msg
25$:
70$:
;----------------------------------------------------------------
; Deassign the channel
; (otherwise we will appear as the terminal owner)
;----------------------------------------------------------------
deassign:
$dassgn_s -
chan = tt_chan
blbs r0,10$
brw exit
10$:
;----------------------------------------------------------------
; Get device information (e.g. terminal name)
;----------------------------------------------------------------
dev_info:
$getdviw_s -
efn = #0,-
devnam = tt_dsc,-
itmlst = device_itemlist,-
iosb = dvi_iosb
blbs r0,30$
brw exit
30$: movzwl dvi_iosb,r0
blbs r0,40$
brw exit
40$:
movw devnam_retlen,r0
beql 45$
movc3 r0,devnam_buff,term_name
brb 50$
45$: movc3 devnam2_retlen,devnam2_buff,term_name
50$:
;----------------------------------------------------------------
; Get terminal owner and username
;----------------------------------------------------------------
job_info:
tstl pid_buff ; does the terminal have an owner?
bneq 20$ ; if so, find owner & username
tstl pid2_buff ; else check secondary characteristics
beql 10$ ; branch if really no owner
movl pid2_buff,pid_buff ; set owner pid for $GETJPI call
brb 20$ ; find owner & username
; arrive here if no owner
10$: movc3 #no_owner_size,no_owner_msg,owner_msg
brb 70$
20$: $getjpiw_s -
efn = #0,-
pidadr = pid_buff,-
itmlst = job_itemlist,-
iosb = jpi_iosb
blbs r0,30$
brw exit
30$: movzwl jpi_iosb,r0
blbs r0,40$
brw exit
;----------------------------------------------------------------
; Although VMS blank fills the username, the process name
; is zero filled, so we have to move it from a separate
; buffer.
;----------------------------------------------------------------
40$: movc3 owner_retlen,owner_buff,owner_msg ; set owner name
70$:
;----------------------------------------------------------------
; Here we scan the basic and extended characteristics bits and
; modify the display accordingly. In order to understand the
; method used, we need to consider column alignment. For
; example:
;
; No Modem No TT Sync No ANSI CRT
; No Dialup line No Read sync No DEC CRT
;
; When the "No "-condition is not present, we cannot simply
; blank it out, because that would produce a ragged looking
; display:
;
; Modem No TT Sync ANSI CRT
; No Dialup line Read sync DEC CRT
;
; The following technique is efficient with both memory and
; time: a prototype screen in memory will have characteristics
; given in their "asserted" form, such as "Wrap" (as opposed
; to "No Wrap"). For "normal" characteristics, such as "Wrap",
; a clear bit indicates "No Wrap" and a set bit indicates "Wrap".
; We check the characteristic, and if it's set, we leave the
; screen alone. If it's clear, we move the text right by three
; characters and insert a "No ". Note that we couldn't have
; used the reverse method (with the prototype having the "No "
; initially, and moving the text left) since that would leave
; trailing characters on the right.
;
; Some characteristics are "inverted", such as "No Broadcast".
; Here, a clear bit means "Broadcast" and a set one means "No
; Broadcast". To handle this, we use a longword bit map to
; indicate whether a characteristic is normal or inverted, and
; decide what to do based on that. Also, some characteristics
; (such as those for parity) require special handling, so there
; is a longword bit map for those, too.
;----------------------------------------------------------------
text_size = 15. ; excludes "No "
clrl r6 ; r6 = bit index
movab line1,r7 ; r7 = address of line1
basic_loop:
bbs r6,basic_special,60$ ; branch (ignore) if special
bbc r6,basic_attr,20$ ; branch if inverted
; else attribute is normal
bbs r6,ch_basic,60$ ; bit set means leave alone
10$: movzwl o_basic[r6],r8 ; grab offset to display entry
addl2 r7,r8 ; get absolute pointer to it
movc3 #text_size,(r8),3(r8) ; shift right 3 characters
movw #^a\No\,(r8) ; insert "No"
movb #^a\ \,2(r8) ; insert " "
brb 60$
20$: bbs r6,ch_basic,10$ ; bit set means put in "No "
60$: aobleq #basic_count,r6,basic_loop
;----------------------------------------------------------------
; Loop for testing extended characteristics
;----------------------------------------------------------------
clrl r6 ; clear bit index
extend_loop:
bbs r6,extend_special,60$ ; branch (ignore) if special
bbc r6,extend_attr,20$ ; branch if inverted
; else attribute is normal
bbs r6,ch_extend,60$ ; bit set means leave alone
10$: movzwl o_extend[r6],r8 ; grab offset to display entry
addl2 r7,r8 ; get absolute pointer to it
movc3 #text_size,(r8),3(r8) ; shift right 3 characters
movw #^a\No\,(r8) ; insert "No"
movb #^a\ \,2(r8) ; insert " "
brb 60$
20$: bbs r6,ch_extend,10$ ; bit set means put in "No "
60$: aobleq #extend_count,r6,extend_loop
;----------------------------------------------------------------
; Here we put in special descriptions. For example,
; instead of "No Passall" we have "Interactive".
;----------------------------------------------------------------
specials:
; passall/interactive
bbs #TT$V_PASSALL,ch_basic,10$
movc3 #interactive_size,interactive,passall_msg
; half/full duplex
10$: bbs #TT$V_HALFDUP,ch_basic,20$
movc3 #fullduplex_size,fullduplex,halfduplex_msg
; insert/overstrike editing
20$: bbs #TT2$V_INSERT,ch_extend,30$
movc3 #overstrike_size,overstrike,insert_edit_msg
; application/numeric keypad
30$: bbs #TT2$V_APP_KEYPAD,ch_extend,40$
movc3 #numeric_size,numeric,keypad_msg
; mailbox disable/enable
40$: bbs #TT$V_MBXDSABL,ch_basic,50$
movc3 #mbxenable_size,mbxenable,mbxdisable_msg
DISMISS_PARITY = 1 ; TT$V_DISPARERR is defined as 9, it should be 1
50$: bbc #TT$V_PARITY,sense_iosb+6,60$ ; branch if no parity
bbc #DISMISS_PARITY,sense_iosb+6,52$ ; branch if terminating on parity errors
movc3 #dismiss_size,dismiss,parity_err_msg
brb 54$
52$: movc3 #terminate_size,terminate,parity_err_msg
54$: bbs #TT$V_ODD,sense_iosb+6,56$ ; branch if odd parity
movc3 #evenparity_size,evenparity,parity_msg
brb 60$
56$: movc3 #oddparity_size,oddparity,parity_msg
60$:
bbc #DEV$V_SPL,devchar_buff,70$ ; branch if not spooled
movc3 spooldev_retlen,spooldev_buff,spooldev_msg
movc3 #spooled_size,spooled,spooled_msg
; Scope/Hardcopy
70$: bbs #TT$V_SCOPE,ch_basic,77$
movc3 #hardcopy_size,hardcopy,scope_msg
77$:
;----------------------------------------------------------------
; Format numerical values (baud rate, screen width, etc.)
;----------------------------------------------------------------
format:
; transmit speed
movzbl sense_iosb+2,r0 ; look up encoded baudrate
movl baudrate[r0],r0 ; get numeric value of baudrate
$fao_s -
ctrstr = transmit_fmt,- ; descriptor for format control string
outlen = out_len,- ; where to store length of formatted output
outbuf = transmit_dsc,- ; descriptor for formatted output buffer
p1 = r0 ; where the transmit speed resides
blbs r0,10$
brw exit
10$: ; receive speed
tstb sense_iosb+3 ; receive speed same as transmit?
bneq 15$ ; branch if different
movc3 #transmit_size,transmit_val,receive_val
brb 20$
15$: movzbl sense_iosb+3,r0 ; look up encoded baudrate
movl baudrate[r0],r0 ; get numeric value of baudrate
$fao_s - ; receive speed
ctrstr = receive_fmt,-
outlen = out_len,-
outbuf = receive_dsc,-
p1 = r0
blbs r0,20$
brw exit
20$: $fao_s - ; terminal page width
ctrstr = width_fmt,-
outlen = out_len,-
outbuf = width_dsc,-
p1 = ch_pgwid
blbs r0,30$
brw exit
30$: $fao_s - ; terminal page length
ctrstr = page_fmt,-
outlen = out_len,-
outbuf = page_dsc,-
p1 = ch_pglen
blbs r0,40$
brw exit
40$: $fao_s - ; CR fill
ctrstr = cr_fill_fmt,-
outlen = out_len,-
outbuf = cr_fill_dsc,-
p1 = sense_iosb+4
blbs r0,50$
brw exit
50$: $fao_s - ; LF fill
ctrstr = lf_fill_fmt,-
outlen = out_len,-
outbuf = lf_fill_dsc,-
p1 = sense_iosb+5
blbs r0,60$
brw exit
60$:
;----------------------------------------------------------------
; Find the terminal type
;
; Entries in the terminal list table have the form:
;
; .byte term_id
; .byte length_of_terminal_name
; .ascii \terminal_name\
;
; The last entry in the table has an id of 0
;
;----------------------------------------------------------------
movb ch_type,r0 ; r0 is terminal id
movab terminal_list,r1 ; r1 = ptr to list of id's
70$: movb (r1)+,r2 ; look at next id in table
beql 75$ ; if entry = 0, not found
cmpb r0,r2 ; terminal id matches entry?
beql 75$ ; branch if match
movzbl (r1)+,r2 ; for longw arith. with count
addl2 r2,r1 ; skip to next entry
brb 70$
75$: ; at match or "Unknown" entry
movb (r1)+,r0 ; r0 = character count
movc3 r0,(r1),term_type
;----------------------------------------------------------------
; Show prototype screen
;----------------------------------------------------------------
$qiow_s -
efn = #0,-
chan = outdev_chan,-
func = #IO$_WRITEVBLK,-
iosb = write_iosb,-
p1 = line1,-
p2 = #screen_size,-
p4 = #0
blbc r0,exit
movzwl write_iosb,r0
exit: ret
.psect RWDATA,wrt,noexe
;----------------------------------------------------------------
; Data structures for the $ASSIGN service
;----------------------------------------------------------------
outdev_chan: .blkw
outdev_dsc: .ascid \SYS$OUTPUT\
outdev_size = . - outdev_dsc
tt_chan: .blkw
tt_buffsize = 32.
tt_dsc: ; descriptor for the terminal
tt_len: .word tt_buffsize ; in: tt_buff size; out: length of terminal name
.byte DSC$K_DTYPE_T ; text data type
.byte DSC$K_CLASS_S ; string descriptor class
.address tt_buff ; address of terminal name
tt_buff: .blkb tt_buffsize ; for name of terminal we're interested in
;----------------------------------------------------------------
; Data structures for the $GETDVI service
;
; If the terminal is spooled, the primary characteristics
; are for the intermediate device (i.e. the disk) and the
; secondary characteristics are those of the terminal
;----------------------------------------------------------------
device_itemlist: ; list of addresses for items we want
item_dsc -
DVI$_DEVCHAR!DVI$C_SECONDARY,-
devchar_buff,devchar_size,devchar_retlen
item_dsc -
DVI$_PID,-
pid_buff,pid_size,pid_retlen
item_dsc -
DVI$_PID!DVI$C_SECONDARY,-
pid2_buff,pid2_size,pid2_retlen
item_dsc -
DVI$_TT_PHYDEVNAM,-
devnam_buff,devnam_size,devnam_retlen
item_dsc -
DVI$_TT_PHYDEVNAM!DVI$C_SECONDARY,-
devnam2_buff,devnam2_size,devnam2_retlen
item_dsc -
DVI$_DEVNAM,-
spooldev_buff,spooldev_size,spooldev_retlen
.long 0
; data structures for device-independent characteristics
devchar_buff: .blkl
devchar_size = . - devchar_buff
devchar_retlen: .blkw
; data structures for owner PID
pid_buff: .blkl
pid_size = . - pid_buff
pid_retlen: .blkw
; data structures for owner PID
; (if primary pid was 0)
pid2_buff: .blkl
pid2_size = . - pid2_buff
pid2_retlen: .blkw
; data structures for physical device name
devnam_buff: .blkb 64
devnam_size = . - devnam_buff
devnam_retlen: .blkw
; data structures for physical device name
; (if devnam_retlen was 0)
devnam2_buff: .blkb 64
devnam2_size = . - devnam2_buff
devnam2_retlen: .blkw
; data structures for name of spooling device (if any)
spooldev_buff: .blkb 64
spooldev_size = . - spooldev_buff
spooldev_retlen:.blkw
dvi_iosb: .blkq
;----------------------------------------------------------------
; Data structures for the $GETJPI service
;----------------------------------------------------------------
MAX_PROC_NAME = 15
MAX_USER_NAME = 12
job_itemlist: ; list of addresses for items we want
owner_dsc: item_dsc JPI$_PRCNAM,owner_buff,MAX_PROC_NAME,owner_retlen
username_dsc: item_dsc JPI$_USERNAME,username_msg,MAX_USER_NAME,username_retlen
.long 0
owner_buff: .blkb MAX_PROC_NAME
owner_retlen: .blkw
username_retlen:.blkw
jpi_iosb: .blkq
;----------------------------------------------------------------
; Data structures for the $QIO service
;----------------------------------------------------------------
ch_buff: ; terminal characteristics buffer
.byte DC$_TERM ; device class (input to $QIO)
ch_type: .blkb ; terminal type (e.g. vt100)
ch_pgwid: .blkw ; page width (max is 255)
ch_basic: .blkb 3 ; basic characteristics
ch_pglen: .blkb ; page length
ch_extend: .blkl ; extended characteristics
ch_size = . - ch_buff
out_len: .blkl
write_iosb: .blkq
sense_iosb: .blkq
modem_iosb: .blkq
modem_buff: .blkq
;----------------------------------------------------------------
; Screen prototype
;
; Text descriptions which can have a "No " prefixed to
; them must be no longer than text_size bytes.
;----------------------------------------------------------------
cr = ^o15
lf = ^o12
no_owner_msg: .ascii \no owner\
no_owner_size = . - no_owner_msg
line1:
.ascii \Terminal: \
term_name: .ascii \ \
.ascii \Owner process: \
owner_msg: .ascii \ \<cr><lf> ; should be MAX_PROC_NAME or larger
line2:
.ascii \Device type \
term_type: .ascii \ \
.ascii \Username: \
username_msg: .ascii \ \<cr><lf> ; should be MAX_USER_NAME or larger
line3:
spooled_msg: .ascii \ \<cr><lf>
line4: .ascii <cr><lf>
line5:
.ascii \--- speed --- --- comm. line --- \
.ascii \--- flow --- --- generic ---\<cr><lf>
line6:
.ascii \Transmit: \
transmit_val: .ascii \ \
transmit_size = . - transmit_val
halfduplex = . - line1
halfduplex_msg: .ascii \Half duplex \
hostsync = . - line1
.ascii \Host sync \
scope = . - line1
scope_msg: .ascii \Scope \<cr><lf>
line7:
.ascii \Receive: \
receive_val: .ascii \ \
receive_size = . - receive_val
modem = . - line1
.ascii \Modem \
ttsync = . - line1
.ascii \TT sync \
ansi = . - line1
.ascii \ANSI CRT \<cr><lf>
line8:
autobaud = . - line1
.ascii \Autobaud \
dialup = . - line1
.ascii \Dialup line \
readsync = . - line1
.ascii \Read sync \
crt = . - line1
.ascii \DEC CRT \<cr><lf>
line9:
set_speed = . - line1
.ascii \Set speed priv \
remote = . - line1
.ascii \Remote \
force_xon = . - line1
.ascii \Force XON \
crt2 = . - line1
.ascii \DEC CRT2 \<cr><lf>
line10:
.ascii \ \
hangup = . - line1
.ascii \Hangup \
type_ahead = . - line1
.ascii \Type ahead \
block = . - line1
.ascii \Block mode \<cr><lf>
line11:
.ascii \--- bits --- \
modhangup = . - line1
.ascii \Modify hangup \
altypeahd = . - line1
.ascii \Alt. type ahead \
edit_mode = . - line1
.ascii \Edit mode \<cr><lf>
line12:
passall = . - line1
passall_msg: .ascii \Passall \
disconnect = . - line1
.ascii \Disconnect proc \
dma = . - line1
.ascii \DMA \
avo = . - line1
.ascii \Advanced video \<cr><lf>
line13:
pasthru = . - line1
.ascii \Pasthru \
dsr_msg: .ascii \ \
ri_msg: .ascii \ \
cd_msg: .ascii \ \
cts_msg: .ascii \ \
srd_msg: .ascii \ \
.ascii \CR fill: \
cr_fill = . - line1
cr_fill_val: .ascii \ \
cr_fill_size = . - cr_fill_val
printer = . - line1
.ascii \Printer port \<cr><lf>
line14:
escape = . - line1
.ascii \Escape \
.ascii \ \
.ascii \LF fill: \
lf_fill = . - line1
lf_fill_val: .ascii \ \
lf_fill_size = . - lf_fill_val
softchars = . - line1
.ascii \Soft characters \<cr><lf>
line15:
eightbit = . - line1
.ascii \Eightbit \
.ascii \--- format --- \
.ascii \ \
sixel = . - line1
.ascii \SIXEL graphics \<cr><lf>
line16:
fallback = . - line1
.ascii \Fallback \
.ascii \Width: \
width_val: .ascii \ \
width_size = . - width_val
.ascii \ \
regis = . - line1
.ascii \ReGIS graphics \<cr><lf>
line17:
parity = . - line1
parity_msg: .ascii \No Parity \
.ascii \Page: \
page_val: .ascii \ \
page_size = . - page_val
.ascii \--- user/appl --- \
.ascii <cr><lf>
line18:
parity_err_msg: .ascii \ \
wrap = . - line1
.ascii \Wrap \
broadcast = . - line1
.ascii \Broadcast \
.ascii <cr><lf>
line19:
.ascii \ \
lowercase = . - line1
.ascii \Lowercase \
line_edit = . - line1
.ascii \Line editing \
.ascii <cr><lf>
line20:
.ascii \ \
tab = . - line1
.ascii \Tab \
insert_edit = . - line1
insert_edit_msg:.ascii \Insert editing \
.ascii <cr><lf>
line21:
.ascii \--- security --- \
form = . - line1
.ascii \Form \
keypad = . - line1
keypad_msg: .ascii \Application keypad \
.ascii <cr><lf>
line22:
secure = . - line1
.ascii \Secure server \
echo = . - line1
.ascii \Echo \
mbxdisable = . - line1
mbxdisable_msg: .ascii \MBX Disable \
.ascii <cr><lf>
line23:
syspassword = . - line1
.ascii \Sys. password \
local_echo = . - line1
.ascii \Local echo \
nobrdcstmbx = . - line1
.ascii \Broadcast MBX \
.ascii <cr>
screen_size = . - line1
.even
;----------------------------------------------------------------
; Alternate descriptions for special characteristics
;----------------------------------------------------------------
interactive: .ascii \Interactive\ ; overwrites "passall"
interactive_size = . - interactive
fullduplex: .ascii \Full duplex\ ; overwrites "half duplex"
fullduplex_size = . - fullduplex
overstrike: .ascii \Overstrike editing\ ; overwrites "insert editing"
overstrike_size = . - overstrike
numeric: .ascii \Numeric keypad \ ; overwrites "application keypad"
numeric_size = . - numeric
mbxenable: .ascii \MBX Enable \ ; overwrites "MBX disable"
mbxenable_size = . - mbxenable
dismiss: .ascii \Dismiss parity errs\
dismiss_size = . - dismiss
terminate: .ascii \Terminate on errors\
terminate_size = . - terminate
hardcopy: .ascii \Hardcopy\
hardcopy_size = . - hardcopy
; the even and odd parity messages overwrite "No Parity"
evenparity: .ascii \Even Parity\
evenparity_size = . - evenparity
oddparity: .ascii \Odd Parity\
oddparity_size = . - oddparity
spooled: .ascii \Spooled to \
spooldev_msg: .ascii \ \
spooled_size = . - spooled
dsr: .ascii \DSR \
ri: .ascii \RI \
cd: .ascii \CD \
cts: .ascii \CTS \
srd: .ascii \SRD \
;----------------------------------------------------------------
; offset_tables: o_basic, o_extend
;
; Entries in these tables are ordered by the TT$V and TT2$V
; bit numbers which represent terminal characteristics as
; known by VMS. The contents of an entry is the offset
; into the screen display for that characteristic.
;----------------------------------------------------------------
UNUSED = 0 ; also flagged in the *_special masks
o_basic: .word passall
.word echo
.word type_ahead
.word escape
.word hostsync
.word ttsync
.word UNUSED ; script
.word lowercase
.word tab
.word wrap
.word cr_fill
.word lf_fill
.word scope
.word remote
.word UNUSED ; holdscreen
.word eightbit
.word mbxdisable
.word broadcast
.word readsync
.word form
.word halfduplex
.word modem
basic_count = < . - o_basic > / 2 ; count of basic attributes
o_extend: .word local_echo
.word autobaud
.word hangup
.word modhangup
.word nobrdcstmbx
.word force_xon
.word dma
.word altypeahd
.word set_speed
.word UNUSED ; dclmailbx
.word UNUSED ; dcloutbnd
.word UNUSED ; dclctrlc
.word line_edit
.word insert_edit
.word fallback
.word dialup
.word secure
.word disconnect
.word pasthru
.word syspassword
.word sixel
.word softchars
.word printer
.word keypad
.word ansi
.word regis
.word block
.word avo
.word edit_mode
.word crt
.word crt2
extend_count = < . - o_extend > / 2 ; count of extended attributes
;----------------------------------------------------------------
; bit masks: basic_special, basic_attr
; extend_special, extend_attr
;
; Entries in these masks are ordered by the TT$V and TT2$V
; bit numbers which represent terminal characteristics as
; known by VMS. The contents of an entry determines how
; the state of a bit affects the display.
;
; For basic_special and extend_special:
;
; 0 = not special
; 1 = special display handling required
;
; For basic_attr and extend_attr:
;
; 1 = "normal attribute" where the characteristic
; bit means:
; 0 => put in "No "
; 1 => leave alone
;
; 0 = "inverted attribute" where the characteristic
; bit means:
; 0 => leave alone
; 1 => put in "No "
;
;----------------------------------------------------------------
basic_special: .long ^b0100010101110001000001
basic_attr: .long ^b1111011111111111111001
extend_special: .long ^b0000000100000000010111000000000
extend_attr: .long ^b1111111111111111111111111111111
;----------------------------------------------------------------
; Data structures for $FAO
;----------------------------------------------------------------
transmit_fmt: .ascid \!SL\
receive_fmt: .ascid \!SL\
width_fmt: .ascid \!SW\
page_fmt: .ascid \!SB\
cr_fill_fmt: .ascid \!SB\
lf_fill_fmt: .ascid \!SB\
transmit_dsc: string_dsc transmit_val, transmit_size
receive_dsc: string_dsc receive_val, receive_size
width_dsc: string_dsc width_val, width_size
page_dsc: string_dsc page_val, page_size
cr_fill_dsc: string_dsc cr_fill_val, cr_fill_size
lf_fill_dsc: string_dsc lf_fill_val, lf_fill_size
;----------------------------------------------------------------
; Baud rate table -- ordered by TT$C_BAUD_*
;----------------------------------------------------------------
baudrate: .long 0, 50, 75, 110, 134, 150, 300, 600, 1200, 1800, 2000, 2400
.long 3600, 4800, 7200, 9600, 19200, 38400
;----------------------------------------------------------------
; Terminal type is indicated by a terminal-id number.
; These numbers have a large range and are not contiguous,
; so we have a macro to generate entries in the terminal
; type lookup table.
;----------------------------------------------------------------
.macro term_entry term_id,term_name,?l1,?l2
.byte term_id
.byte l2 - l1 ; indicates length of name
l1: .ascii \term_name\
l2:
.endm
terminal_list:
term_entry 1,VT05
term_entry 2,VK100
term_entry 3,VT173
term_entry 10,TEK401x
term_entry 16,FT1
term_entry 17,FT2
term_entry 18,FT3
term_entry 19,FT4
term_entry 20,FT5
term_entry 21,FT6
term_entry 22,FT7
term_entry 23,FT8
term_entry 32,LA36
term_entry 33,LA120
term_entry 34,LA34
term_entry 35,LA38
term_entry 36,LA12
term_entry 37,LA100
term_entry 38,LQP02
term_entry 39,LA84
term_entry 40,LA210
term_entry 41,LN03
term_entry 42,LN01K
term_entry 43,LA80
term_entry 64,VT52
term_entry 65,VT55
term_entry 96,VT100
term_entry 97,VT101
term_entry 98,VT102
term_entry 99,VT105
term_entry 100,VT125
term_entry 101,VT131
term_entry 102,VT132
term_entry 103,VT80
term_entry 110,<VT200 Series>
term_entry 111,<Pro Series>
term_entry 0,Unknown
.end TERM
;----------------- end of posting ------------------------