blob: b7c0f853c2afa58989aefd3e08233fd3f1907a02 [file] [log] [blame] [edit]
#!/usr/bin/env tclsh
###############################################################################
# libbrlapi - A library providing access to braille terminals for applications.
#
# Copyright (C) 2006-2023 by Dave Mielke <dave@mielke.cc>
#
# libbrlapi comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################
source [file join [file dirname $argv0] prologue.tcl]
proc putProperties {label properties} {
puts stdout "$label: $properties"
}
proc formatProperty {name value} {
return "$name=$value"
}
proc formatValues {values args} {
set result ""
set delimiter ""
foreach name $args value $values {
append result "$delimiter[formatProperty $name $value]"
set delimiter " "
}
return $result
}
proc ttyShowKeyCode {session code} {
set properties [list]
brlapi describeKeyCode $code description
set description(code) [format "0X%X" $code]
foreach property {flags} {
set description($property) [join $description($property) ","]
}
foreach {property name} {
code code
type type
command cmd
argument arg
flags flg
} {
lappend properties [formatProperty $name $description($property)]
unset description($property)
}
foreach property [lsort [array names description]] {
lappend properties [formatProperty $property $description($property)]
}
set text [join $properties " "]
$session write -text $text
putProperties Key $text
}
proc ttyShowKeys {session timeout} {
$session write -text "press keys (timeout is $timeout seconds)"
while {[string length [set code [$session readKeyWithTimeout $timeout]]] > 0} {
ttyShowKeyCode $session $code
}
}
proc mainProgram {} {
set optionDefinitions {
{host untyped.server "which server to connect to"}
{auth untyped.schemes "which authorization schemes to use"}
{tty untyped.number "which virtual terminal to claim"}
}
processProgramArguments optionValues $optionDefinitions
putProperties "BrlAPI Version" [brlapi getVersionString]
set connectionSettings [list]
if {[info exists optionValues(host)]} {
lappend connectionSettings -host $optionValues(host)
}
if {[info exists optionValues(auth)]} {
lappend connectionSettings -auth $optionValues(auth)
}
if {[catch [list eval brlapi openConnection $connectionSettings] session] == 0} {
putProperties "Session Command" $session
putProperties "Server Host" [$session getHost]
putProperties "Authorization Schemes" [$session getAuth]
putProperties "File Descriptor" [$session getFileDescriptor]
putProperties "Driver Name" [$session getDriverName]
putProperties "Model Identifier" [$session getModelIdentifier]
putProperties "Display Size" [formatValues [$session getDisplaySize] width height]
if {[info exists optionValues(tty)]} {
if {[catch [list $session enterTtyMode -tty $optionValues(tty)] tty] == 0} {
putProperties "TTY Number" $tty
ttyShowKeys $session 10
$session leaveTtyMode
} else {
writeProgramMessage "invalid tty: $tty"
}
unset tty
}
$session closeConnection
} else {
writeProgramMessage "connection failure: $session"
}
unset session
}
mainProgram
exit 0