ИНТЕРПРЕТАТОР tclsh представляет
собой простую оболочку с алфавитно-цифровым интерфейсом пользователя. ИНТЕРПРЕТАТОР
может работать в интерактивном или пакетном режиме. В первом случае он
считывает команды Tcl со стандартного входа: пользователь вводит команды
с клавиатуры, tclsh обрабатывает их и выводит результат или сообщение об
ошибке на стандартный вывод. Во втором случае источником команд для обработки
служит указанный дисковый файл. ⌠Интерпретатор■ будет работать до тех пор,
пока не будет подана команда exit, или пока на стандартный вход не поступит
символ конца файла.
Для запуска интерпретатора
необходимо в ответ на приглашение операционной системы подать команду
tclsh ?fileNamearg
arg ┘?
Если никаких аргументов указано
не было, то ⌠Интерпретатор■ запустится в интерактивном режиме, изображая
на дисплее приглашение для ввода команд в виде знака процента ▒%▓. В ответ
на приглашение следует ввести команду Tcl и нажать клавишу Enter.
Затем ввести следующую команду и снова нажать Enter.
Если в домашнем каталоге
пользователя существует файл .tclshrc, то tclsh обработает
этот файл как скрипт Tcl до считывания первой команды со стандартного входа.
Когда tclsh запускается
с аргументами, то первый аргумент fileName является именем файла
со скриптом, а все последующие необязательные аргументы передаются скрипту
в качестве переменных. Вместо того, чтобы считывать команды со стандартного
входа, ⌠Интерпретатор■ будет работать в пакетном режиме: считывать их из
указанного файла и завершит свою работу по достижении конца файла. В этом
случае автоматической обработки файла .tclshrc не делается, но если это
необходимо, то можно сослаться на него изнутри файла скрипта.
Переменные
Tclsh задает следующие переменные
Tcl:
Argc≈содержит
счетчик количества аргументов arg (если ни одного, то 0), исключая
имя файла со скриптом.
Argv≈содержит
список Tcl, элементами которого являются аргументы arg, в порядке
их следования, или нулевую строку, если нет ни одного аргумента.
argv0≈ содержит
fileName,
если он был задан. В обратном случае содержит имя, при помощи которого
был вызван tclsh.
tcl_interactive≈ содержит
1, если tclsh работает в интерактивном режиме (не было задано fileName
и стандартный вход есть терминальное устройство). В противном случае содержит
0.
ИНТЕРПРЕТАТОР
wish
ИНТЕРПРЕТАТОР wish представляет
собой простую программу с двумя рабочими окнами, главным и выходным. ИНТЕРПРЕТАТОР
может работать в интерактивном или пакетном режиме. В первом случае он
считывает команды Tcl со стандартного входа: пользователь вводит команды
с клавиатуры в главном окне, wish обрабатывает их и выводит результат или
сообщение об ошибке в выходном окне.
Во втором случае источником
команд для обработки служит указанный дисковый файл. В обоих режимах ⌠Интерпретатор■
будет работать до тех пор, пока не будут удалены все окна приложения, или
пока на стандартный вход не поступит символ конца файла.
Для запуска интерпретатора
необходимо в ответ на приглашение операционной системы подать команду
wish ?fileName
arg arg ┘?
Если никаких аргументов указано
не было, или если первый аргумент начинается с символа ▒-▓, то ⌠Интерпретатор■
запустится в интерактивном режиме, изображая на дисплее приглашение для
ввода команд в виде знака процента ▒%▓. В ответ на приглашение следует
ввести команду Tcl и нажать клавишу Enter. Затем ввести следующую команду
и снова нажать Enter.
Если в домашнем каталоге
пользователя существует файл .wishrc, то wish обработает
этот файл как скрипт Tcl до считывания первой команды со стандартного входа.
Когда wish запускается
с первым аргументом fileName, то аргумент считается именем файла
со скриптом. ⌠Интерпретатор■ обработает файл fileName (создающий
преимущественно интерфейс пользователя) в пакетном режиме и затем будет
откликаться на события до тех пор, пока все окна не будут удалены. Команды
со стандартного входа считываться не будут. В этом случае автоматической
обработки файла .wishrc не делается, но если это необходимо, то файл скрипта
может сослаться на него сам.
Wish ≈ автоматически обработает
все необязательные аргументы arg командной строки из нижеприведенного
списка.
-colormap new ≈ указывает
на то, что окно должно иметь новую собственную цветовую схему (colormap),
а не использовать цветовую схему, заданную по умолчанию.
-display display≈
задает дисплей (и экран) для отображения окна.
-geometry geometry≈
задает начальную геометрию для использования в окне. Если этот параметр
задан, то его значение сохраняется в глобальной переменной geometry интерпретатора
Tcl, работающего с приложением.
-name name≈задает
использование name в качестве заголовка окна и имени интерпретатора
для использования в командах send.
-sync≈
задает синхронное исполнение команд Х сервера, так что все ошибки докладываются
немедленно. Это приведет к гораздо более медленному исполнению,
но такой режим полезен при отладке.
-use id≈дает
директиву встроить главное окно приложения в окно с идентификатором
id,
а не создавать его как отдельное самостоятельное окно верхнего уровня.
Идентификатор id необходимо описать таким же образом, как и значения
параметра -use для примитивов верхнего уровня (т.е., в форме, возвращаемой
командой winfo id).
-visual visual≈
описывает используемый для окна visual. Этот параметр может иметь
любую форму, поддерживаемую процедурой Tk_GetVisual.
-- ≈дает директиву
передать все остальные параметры в переменную скрипта argv без интерпретации.
Это обеспечивает способ передачи аргументов в скрипт вместо интерпретации
их wish.
Любые аргументы командной строки
не из этого списка передаются скрипту с помощью переменных argc и argv.
Имя
и класс приложения
Имя приложения (используемое
для таких целей, как команды send) берется из параметра -name, если он
был задан. В противном случае оно берется из fileName, если оно
было указано, или из командной строки, вызвавшей wish. В последних двух
случаях, если имя содержит символ ▒/▓ (слеш), то только символы после последнего
слеша используются в качестве имени приложения.
Класс приложения (используемый
для таких целей, как описание параметров при помощи свойства RESOURCE_MANAGER
или файла .Xdefaults) совпадает с его именем за исключением первой буквы,
которая делается заглавной.
Переменные
Wish ≈ задает следующие переменные
Tcl:
argc, argv0, tcl_interactive
Эти три переменные выполняют
для wish точно такую же роль, какую выполняют одноименные переменные
для интерпретатора tclsh.
Argv≈содержит
список Tcl, элементами которого являются аргументы arg, которые
следуют в командной строке за параметром -- или не входят в приведенный
выше список различаемых параметров wish, в порядке их следования, или содержит
нулевую строку, если нет ни одного аргумента.
geometry Если параметр -geometry
был задан, то wish копирует его значение в эту переменную. Если
после обработки fileName эта переменная еще существует, то wish
использует значение этой переменной в команде wm geometry для задания
геометрии главного окна.
ДОПОЛНИТЕЛЬНЫЕ
ВОЗМОЖНОСТИ
Интерпретаторы можно запускать
не только в режиме командной строки, но также и из скрипта. Также можно
изменить вид приглашения (символ ▒%▓).
Если создать файл скрипта
(этот и следующий примеры даны для интерпретатора tclsh, для wish
надо заменить в строках имя tclsh на wish) с первой строкой вида
#!/usr/local/bin/tclsh
и пометить файл скрипта, как
исполняемый, то будет можно запускать ⌠Интерпретатор■ прямо из оболочки
Unix. В этом случае предполагается, что ⌠Интерпретатор■ (tclsh, wish)
был установлен в стандартный каталог usr/local/bin; если он был установлен
в какое-нибудь иное место, то надо будет откорректировать путь в названной
выше строке. При этом эта строка должна удовлетворять возможным требованиями
операционной системы Unix на длину строк, начинающихся с #! (не более 30
символов).
Еще удобнее будет начинать
файлы со скриптами следующими тремя строками:
#!/bin/sh # the next line restarts
using tclsh\ exec tclsh "$0" "$@"
Этот второй способ имеет три
преимущества перед предыдущим способом:
местонахождение исполняемого
файла интерпретатора не нужно прописывать в скрипте: исполняемый файл может
находиться в любом месте в пределах пути поиска оболочки пользователя;
нет необходимости учитывать
ограничение на длину строк;
этот способ будет работать даже
тогда, когда файл tclsh или wish сам является скриптом оболочки (иногда
так поступают для того, чтобы иметь возможность работать с несколькими
архитектурами или операционными системами: скрипт tclsh (wish) выберет
для запуска один из нескольких исполняемых файлов).
Эти три строчки позволяют обрабатывать
скрипт и оболочке sh, и интерпретатору (tclsh или wish)
но при этом exec будет запущен только оболочкой
sh. Сначала
скрипт обрабатывает sh, она считает вторую строку комментарием и
исполняет третью строку. Утверждение с exec остановит обработку
оболочкой и вместо этого запустит ⌠Интерпретатор■ для повторной обработки
всего скрипта.
Когда Интерпретатор запустится,
он сочтет все три строки комментариями, потому что обратный слеш в конце
второй строки означает для него, что третья строка есть продолжение комментария
на
второй строке.
Изменить символ приглашения
можно при помощи переменных tcl_prompt1 и tcl_prompt2. Если
переменная tcl_prompt1 существует, то она должна содержать скрипт
Tcl для вывода приглашения; вместо вывода своего приглашения, ⌠Интерпретатор■
будет исполнять скрипт в tcl_prompt1. Переменная tcl_prompt2
используется аналогичным образом, когда при вводе была начата новая строка,
но вводимая команда еще не была закончена. Если переменная tcl_prompt2
не была задана, то для незаконченных команд не будет выводиться никакого
приглашения.