Команды стандартной библиотеки процедур Tcl.
auto_execok cmd auto_load cmd auto_mkindex dir pattern pattern auto_reset parray arrayName tcl_endOfWord str start tcl_startOfNextWord str start tcl_startOfPreviousWord str start tcl_wordBreakAfter str start tcl_wordBreakBefore str start
Tcl содержит библиотеку Tcl-процедур общего назначения.
Местонахождение библиотеки Tcl можно получить с помощью команды info library. Обычно, помимо этой библиотеки, приложения имеют собственные библиотеки служебных процедур. Местонахождение процедур приложения обычно содержит глобальная переменная $app_library, где app - имя приложения. Например, для Tk это переменная $tk_library.
Для того, чтобы использовать процедуры из Tcl-библиотеки, приложению необходимо прочитать файл init.tcl библиотеки, например, командой
source [file join [info library] init.tcl]
Если в приложении процедура Tcl_AppInit вызывает библиотечную процедуру Tcl_Init, то такая команда выполняется автоматически. Код в файле init.tcl определит процедуру unknown и позволит остальным процедурам загружаться по требованию при помощи механизма автозагрузки, описанного ниже.
Библиотека Tcl предоставляет пользователю следующие процедуры:
Эта команда загружает определение для Tcl-команды cmd. Для этого она просматривает путь автозагрузки, являющийся списком из одного или более каталогов. Он содержится в глобальной переменной auto_path, если она существует. В противном случае используется переменная окружения TCLLIBPATH. Если же и она не существует, список автозагрузки состоит из каталога, в котором находится Tcl-библиотека.
В каждом из каталогов, входящих в путь автозагрузки, должен находиться файл tclIndex, список команд, определенных в этом каталоге, и скрипты для загрузки каждой команды. Файл tclIndex должен быть создан с помощью команды auto_mkindex.
Если команда была успешно загружена, то auto_load возвращает 1. Команда возвращает 0, если нужная команда не была найдена в списках команд или указанная команда загрузки не позволила создать команду (например, если файл tclIndex устарел). Если при выполнении указанного загрузочного скрипта возникла ошибка, команда возвращает ошибку.
Команда auto_load читает индексные файлы только один раз и сохраняет полученную информацию в массиве auto_index. При последующих обращениях к команде auto_load сначала проверяется массив и только если информация о процедуре не найдена, приступает к просмотру индексных файлов. Эта информация может быть удалена с помощью команды auto_reset. После команды auto_reset следующий вызов auto_load к повторному чтению индексных файлов.
Команда создает индекс для использования его командой auto_load. Для этого команда просматривает каталог dir в поисках файлов с именами, удовлетворяющими аргументам pattern (сравнение выполняется командой glob), и создает индекс всех командных процедур Tcl, определенных в обнаруженных файлах, и сохраняет индекс в файле tclIndex в этой dir. Если не задано ни одного шаблона pattern, то по умолчанию принимается *.tcl. Например, команда
auto_mkindex foo *.tcl
просматривает все .tcl-файлы в каталоге foo и создает новый индексный файл foo/tclIndex.
Команда auto_mkindex просматривает Tcl-скрипты очень простым способом: если в очередной строке, начиная с первого символа, написано слово proc, считается, что это определение процедуры, а следующее слово есть имя процедуры. Процедуры, определение которых не подходит под описанное (например, если перед словом proc стоят пробелы), не попадают в индексный файл.
Процедуры Tcl используют или определяют следующие глобальные переменные.
auto_execs - используется командой auto_execok для записи информации о том, существуют ли конкретная команда в виде исполняемого файла.
auto_index - используется auto_load для сохранения индексной информации, считанной с диска.
auto_noexec - если переменная задана с любым значением, то команда unknown не будет пытаться автоматически исполнить какую-либо команду.
auto_noload - если переменная задана с любым значением, то команда unknown не будет пытаться автоматически загрузить какую-либо команду.
auto_path - если переменная задана, то она должна содержать Tcl-список с каталогами для просмотра при операциях автозагрузки.
env(TCL_LIBRARY) - если переменная задана, то она указывает местоположение каталога с библиотечными скриптами (команда info library возвращает значение этой переменной). Если переменная не определена, то используется значение по умолчанию.
env(TCLLIBPATH) - если переменная задана, то она должна содержать действующий Tcl список каталогов для поиска при операциях автозагрузки. Эта переменная используется только тогда, когда не определена переменная auto_path.
tcl_nonwordchars - переменная содержит регулярное выражение, используемое такими процедурами, как tcl_endOfWord для определения, является ли символ частью слова или нет. Если образец соответствует символу, то символ считается не принадлежащим к слову. В Unix такими символами являются все символы, кроме цифр, букв и символа подчеркивания.
tcl_wordchars - переменная содержит регулярное выражение, используемое такими процедурами, как tcl_endOfWord для определения, является ли символ частью слова или нет. Если образец соответствует символу, то символ считается частью слова. В Unix слова состоят из цифр, букв и символа подчеркивания.
unknown_active - эта переменная служит флагом для индикации активности команды unknown: команда сама устанавливает ее. Переменная используется для выявления ошибок, при которых unknown бесконечно рекурсивно обращается к себе. Перед окончанием работы unknown переменная сбрасывается.