⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auto.tcl

📁 基于语义本体的单词查询系统
💻 TCL
📖 第 1 页 / 共 2 页
字号:
# auto.tcl --## utility procs formerly in init.tcl dealing with auto execution# of commands and can be auto loaded themselves.## RCS: @(#) $Id: auto.tcl,v 1.7 2000/02/08 10:06:12 hobbs Exp $## Copyright (c) 1991-1993 The Regents of the University of California.# Copyright (c) 1994-1998 Sun Microsystems, Inc.## See the file "license.terms" for information on usage and redistribution# of this file, and for a DISCLAIMER OF ALL WARRANTIES.## auto_reset --## Destroy all cached information for auto-loading and auto-execution,# so that the information gets recomputed the next time it's needed.# Also delete any procedures that are listed in the auto-load index# except those defined in this file.## Arguments: # None.proc auto_reset {} {    global auto_execs auto_index auto_oldpath    foreach p [info procs] {	if {[info exists auto_index($p)] && ![string match auto_* $p]		&& ([lsearch -exact {unknown pkg_mkIndex tclPkgSetup			tcl_findLibrary pkg_compareExtension			tclMacPkgSearch tclPkgUnknown} $p] < 0)} {	    rename $p {}	}    }    catch {unset auto_execs}    catch {unset auto_index}    catch {unset auto_oldpath}}# tcl_findLibrary --##	This is a utility for extensions that searches for a library directory#	using a canonical searching algorithm. A side effect is to source#	the initialization script and set a global library variable.## Arguments:# 	basename	Prefix of the directory name, (e.g., "tk")#	version		Version number of the package, (e.g., "8.0")#	patch		Patchlevel of the package, (e.g., "8.0.3")#	initScript	Initialization script to source (e.g., tk.tcl)#	enVarName	environment variable to honor (e.g., TK_LIBRARY)#	varName		Global variable to set when done (e.g., tk_library)proc tcl_findLibrary {basename version patch initScript enVarName varName} {    upvar #0 $varName the_library    global env errorInfo    set dirs {}    set errors {}    # The C application may have hardwired a path, which we honor        if {[info exist the_library] && [string compare $the_library {}]} {	lappend dirs $the_library    } else {	# Do the canonical search	# 1. From an environment variable, if it exists        if {[info exists env($enVarName)]} {            lappend dirs $env($enVarName)        }	# 2. Relative to the Tcl library        lappend dirs [file join [file dirname [info library]] \		$basename$version]	# 3. Various locations relative to the executable	# ../lib/foo1.0		(From bin directory in install hierarchy)	# ../../lib/foo1.0	(From bin/arch directory in install hierarchy)	# ../library		(From unix directory in build hierarchy)	# ../../library		(From unix/arch directory in build hierarchy)	# ../../foo1.0b1/library (From unix directory in parallel build hierarchy)	# ../../../foo1.0b1/library (From unix/arch directory in parallel build hierarchy)        set parentDir [file dirname [file dirname [info nameofexecutable]]]        set grandParentDir [file dirname $parentDir]        lappend dirs [file join $parentDir lib $basename$version]        lappend dirs [file join $grandParentDir lib $basename$version]        lappend dirs [file join $parentDir library]        lappend dirs [file join $grandParentDir library]        if {![regexp {.*[ab][0-9]*} $patch ver]} {            set ver $version        }        lappend dirs [file join $grandParentDir $basename$ver library]        lappend dirs [file join [file dirname $grandParentDir] $basename$ver library]    }    foreach i $dirs {        set the_library $i        set file [file join $i $initScript]	# source everything when in a safe interpreter because	# we have a source command, but no file exists command        if {[interp issafe] || [file exists $file]} {            if {![catch {uplevel #0 [list source $file]} msg]} {                return            } else {                append errors "$file: $msg\n$errorInfo\n"            }        }    }    set msg "Can't find a usable $initScript in the following directories: \n"    append msg "    $dirs\n\n"    append msg "$errors\n\n"    append msg "This probably means that $basename wasn't installed properly.\n"    error $msg}# ----------------------------------------------------------------------# auto_mkindex# ----------------------------------------------------------------------# The following procedures are used to generate the tclIndex file# from Tcl source files.  They use a special safe interpreter to# parse Tcl source files, writing out index entries as "proc"# commands are encountered.  This implementation won't work in a# safe interpreter, since a safe interpreter can't create the# special parser and mess with its commands.  if {[interp issafe]} {    return	;# Stop sourcing the file here}# auto_mkindex --# Regenerate a tclIndex file from Tcl source files.  Takes as argument# the name of the directory in which the tclIndex file is to be placed,# followed by any number of glob patterns to use in that directory to# locate all of the relevant files.## Arguments: # dir -		Name of the directory in which to create an index.# args -	Any number of additional arguments giving the#		names of files within dir.  If no additional#		are given auto_mkindex will look for *.tcl.proc auto_mkindex {dir args} {    global errorCode errorInfo    if {[interp issafe]} {        error "can't generate index within safe interpreter"    }    set oldDir [pwd]    cd $dir    set dir [pwd]    append index "# Tcl autoload index file, version 2.0\n"    append index "# This file is generated by the \"auto_mkindex\" command\n"    append index "# and sourced to set up indexing information for one or\n"    append index "# more commands.  Typically each line is a command that\n"    append index "# sets an element in the auto_index array, where the\n"    append index "# element name is the name of a command and the value is\n"    append index "# a script that loads the command.\n\n"    if {$args == ""} {	set args *.tcl    }    auto_mkindex_parser::init    foreach file [eval glob $args] {        if {[catch {auto_mkindex_parser::mkindex $file} msg] == 0} {            append index $msg        } else {            set code $errorCode            set info $errorInfo            cd $oldDir            error $msg $info $code        }    }    auto_mkindex_parser::cleanup    set fid [open "tclIndex" w]    puts -nonewline $fid $index    close $fid    cd $oldDir}# Original version of auto_mkindex that just searches the source# code for "proc" at the beginning of the line.proc auto_mkindex_old {dir args} {    global errorCode errorInfo    set oldDir [pwd]    cd $dir    set dir [pwd]    append index "# Tcl autoload index file, version 2.0\n"    append index "# This file is generated by the \"auto_mkindex\" command\n"    append index "# and sourced to set up indexing information for one or\n"    append index "# more commands.  Typically each line is a command that\n"    append index "# sets an element in the auto_index array, where the\n"    append index "# element name is the name of a command and the value is\n"    append index "# a script that loads the command.\n\n"    if {[string equal $args ""]} {	set args *.tcl    }    foreach file [eval glob $args] {	set f ""	set error [catch {	    set f [open $file]	    while {[gets $f line] >= 0} {		if {[regexp {^proc[ 	]+([^ 	]*)} $line match procName]} {		    set procName [lindex [auto_qualify $procName "::"] 0]		    append index "set [list auto_index($procName)]"		    append index " \[list source \[file join \$dir [list $file]\]\]\n"		}	    }	    close $f	} msg]	if {$error} {	    set code $errorCode	    set info $errorInfo	    catch {close $f}	    cd $oldDir	    error $msg $info $code	}    }    set f ""    set error [catch {	set f [open tclIndex w]	puts -nonewline $f $index	close $f	cd $oldDir    } msg]    if {$error} {	set code $errorCode	set info $errorInfo	catch {close $f}	cd $oldDir	error $msg $info $code    }}# Create a safe interpreter that can be used to parse Tcl source files# generate a tclIndex file for autoloading.  This interp contains# commands for things that need index entries.  Each time a command# is executed, it writes an entry out to the index file.namespace eval auto_mkindex_parser {    variable parser ""          ;# parser used to build index    variable index ""           ;# maintains index as it is built    variable scriptFile ""      ;# name of file being processed    variable contextStack ""    ;# stack of namespace scopes    variable imports ""         ;# keeps track of all imported cmds    variable initCommands ""    ;# list of commands that create aliases    proc init {} {	variable parser	variable initCommands	if {![interp issafe]} {	    set parser [interp create -safe]	    $parser hide info	    $parser hide rename	    $parser hide proc	    $parser hide namespace	    $parser hide eval	    $parser hide puts	    $parser invokehidden namespace delete ::	    $parser invokehidden proc unknown {args} {}	    # We'll need access to the "namespace" command within the	    # interp.  Put it back, but move it out of the way.	    $parser expose namespace	    $parser invokehidden rename namespace _%@namespace	    $parser expose eval	    $parser invokehidden rename eval _%@eval	    # Install all the registered psuedo-command implementations	    foreach cmd $initCommands {		eval $cmd	    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -