          proc name args body
               The proc command creates a new Tcl  command  procedure,
               name,  replacing  any  existing  command there may have
               been  by  that  name.   Whenever  the  new  command  is
               invoked,  the  contents of body will be executed by the
               Tcl interpreter.  Args specifies the  formal  arguments
               to  the  procedure.   It  consists  of a list, possibly
               empty, each of whose elements specifies  one  argument.
               Each  argument specifier is also a list with either one
               or two fields.  If there is only a single field in  the
               specifier,  then  it  is  the  name of the argument; if
               there are two fields, then the first  is  the  argument
               name  and  the second is its default value.  braces and
               backslashes may be used in the  usual  way  to  specify
               complex default values.

               When name is invoked, a local variable will be  created
               for  each of the formal arguments to the procedure; its
               value will be the value of  corresponding  argument  in
               the  invoking  command or the argument's default value.
               Arguments with default values need not be specified  in
               a  procedure invocation.  However, there must be enough
               actual arguments for  all  the  formal  arguments  that
               don't  have  defaults,  and there must not be any extra
               actual arguments.  There is one special case to  permit
               procedures  with variable numbers of arguments.  If the
               last formal argument has the name args, then a call  to
               the  procedure  may  contain more actual arguments than
               the procedure has formals.  In this case,  all  of  the
               actual  arguments  starting  at  the  one that would be
               assigned to args are combined into a list  (as  if  the
               list  command  had  been  used); this combined value is
               assigned to the local variable args.

               When body is being executed,  variable  names  normally
               refer   to   local   variables,   which   are   created
               automatically when  referenced  and  deleted  when  the
               procedure returns.  One local variable is automatically
               created for each of the procedure's arguments.   Global
               variables  can  only be accessed by invoking the global
               command.

               The proc command  returns  the  null  string.   When  a
               procedure  is  invoked, the procedure's return value is
               the value  specified  in  a  return  command.   If  the
               procedure  doesn't execute an explicit return, then its
               return value is the value of the last command  executed
               in  the  procedure's  body.   If  an error occurs while
               executing the procedure body, then the  procedure-as-a-
               whole will return that same error.
