I like this but can it be list instead of oneof

ns_proc connect {{-eightbit flag} {{-speed list {1200 2400 4800}} 4800} {port /dev/ttya}}


-------- Original Message -------- To: naviserver-devel@lists.sourceforge.net From: Zoran Vasiljevic Subject: Re: [naviserver-devel] ns_parseargs example Am 27.05.2005 um 18:44 schrieb Stephen Deasey: > Right, but the option list is type checking. One of the syntaxes we > talked about was: > > ns_parseargs {-a:int -b:bool -s:switch} $args > Which seems really as the only meaningful, simple and easy way to do this, I must admit, after thinking awhile. So: ns_parseargs {{-varname?:type? ?default?} ...} where -varname is going to set the variable "varname" and it will first check, according to the ?:type? what it gets. The best is to make some examples: -option would expect an argument and set "option" to argument value and if the -option is not given, will do nothing -option default if option is given, it will take it, otherwise will set the default value -option:flag if the option is given it will set it to the boolean true, otherwise to boolean false -option:oneof {a b c} if the option is given it will check the argument for being one of the a, b or c and set the variable accordingly. Alternatively, one could use lists instead of ":" like this: {-option flag} {-option oneof {a b c}} This is more Tcl-like and allows you freedom in the variable name. Example: ns_proc connect {{-eightbit flag} {{-speed oneof {1200 2400 4800}} 4800} {port /dev/ttya}} { # ... } So I can say: connect and it will use 7bit comm, will take speed 4800 to connect to / dev/ttya connect /dev/ttyb as above but will connect to /dev/ttyb connect -speed 2400 /dev/ttyb as above but will use 2400bps instead of 4800bps connect -speed 9600 /dev/ttyc will throw error connect -eightbit /dev/ttyc will use 8bit comm to connect to /dev/ttyc Apart from "flag" and "oneof" we can later introduce "int", "bool", "wide" etc in order to additionaly check the given value: {{-number_of_retries int} 4} Will expect number_of_retries to be an interger and if not given will set it to 4. What do you think? Zoran 

Reply via email to