validProc

Difference between version 1 and 2 - Previous - Next
'''Name:''' ''validProc''

'''Description:'''
Determines if a procedure is valid in the context
within which it is called.  Just allows a clean test
for usability.

'''Parameters:'''
''name'' - a proc name or wildcard in any number of forms:
  1. foo - a plain proc name in ANY child namespace
  2. ::foo* - all procs in the namespace foo
  3. ::foo::* - same
  4. ::foo::valid* - all procs named like this one

'''Usage:'''
       if { ! [ validProc "procname" ] } { complain } 

'''Comments:'''
Best made use of in the negated sense as shown above.
 ======
proc validProc { { name * } } {
      set namesp [ namespace children ]
     
      ;## if the argument was namespace aware
      if { [ regexp {::} $name ] } {
         set namesp {}         }
     
      ;## if the arg was of the form ::foo*
      if { [ regexp {^(::[^:]+)\*} $name -> tmp ] } {
         set name ${tmp}::*         }
     
      ;## examine all namespaces visible locally
      foreach ns $namesp {
         if { ! [ regexp {::$} $ns ] } {
            set ns ${ns}::
            }
         if { [ llength [ info commands $ns$name ] ] } {
            return 1            }
         }
     
      ;## if the argument was a non-namespace proc
      if { [ llength [ info commands $name ] ] } {
         return 1         }
      return 0
 }
======

--[Phil Ehrens]----
!!!!!!
%| [C<<categoryies Dev. Tools] |%
!!!!!!>>