From 03a9f78b3e83d328f104d21d23c847e2704d17a7 Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 31 May 2008 21:01:12 +0000 Subject: [PATCH] move multiplexer's arg parsing into new lib.tcl --- hostside/lib.tcl | 38 ++++++++++++++++++++++++++++++++++++++ hostside/multiplex | 18 ++++++++++-------- 2 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 hostside/lib.tcl diff --git a/hostside/lib.tcl b/hostside/lib.tcl new file mode 100644 index 0000000..04fa119 --- /dev/null +++ b/hostside/lib.tcl @@ -0,0 +1,38 @@ +proc badusage {m} { + global argv0 + puts stderr "$argv0: bad usage: $m" + exit 8 +} + +proc parse_argv {formalargs} { + # formalargs: list; if list is [list *] then any is allowed + # sets argv to list of non-option args + # checks settings($var) + global argv settings + for {set i 0} {$i < [llength $argv]} {incr i} { + set a [lindex $argv $i] + if {[regexp {^--(\w+)\=(.*)$} $a dummy var val]} { + if {[info exist settings] && ![info exists settings($var)]} { + badusage "unknown variable setting --$var=..." + } + upvar #0 $var varset + set varset $val + } elseif {[regexp {^--$} $a]} { + incr i + break + } elseif {[regexp {^-} $a]} { + badusage "unknown command line option $a" + } else { + break + } + } + set argv [lrange $argv $i end] + if {[llength $formalargs]==1 && [string compare * [lindex $formalargs 0]] \ + && [llength $formalargs] != [llength $argv]} { + if {![llength $formalargs]} { + badusage "no non-option arguments expected" + } else { + badusage "needed non-option arguments: [concat $formalargs]" + } + } +} diff --git a/hostside/multiplex b/hostside/multiplex index cd04917..84545fd 100755 --- a/hostside/multiplex +++ b/hostside/multiplex @@ -43,6 +43,8 @@ # picio out polarity ... # 70 detect 0|1 +source lib.tcl + #---------- replay, general utilities, etc. ---------- proc compile-glob-patterns {pats procname} { @@ -668,20 +670,20 @@ proc binding {addr blist} { } proc startup {} { - global queueing executing argv me realtime port + global queueing executing me realtime port catch { close $master }; catch { unset master } + set port 2883 + set settings(me) {^[01]$} + set me 0 + + parse_argv {} + uplevel #0 source multiplex-config set queueing {} set executing 0 realtime-notrunning-init - foreach e $argv { - if {[regexp {^--(\w+)\=(.*)$} $e dummy var val]} { - set e [list set $var $val] - } - uplevel #0 $e - } - if {![info exists me]} { + if {$me} { commandloop -async -prompt1 { return "% " } -prompt2 { return "> " } } else { fconfigure stdin -translation binary -buffering line -blocking 0 -- 2.30.2