Tcl/Tk Interpretator

Стандартные интерпретаторы

ИНТЕРПРЕТАТОР tclsh ИНТЕРПРЕТАТОР wish Дополнительные возможности

ИНТЕРПРЕТАТОР tclsh

ИНТЕРПРЕТАТОР 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 не была задана, то для незаконченных команд не будет выводиться никакого приглашения.

Все права защищены 1992-1999 DataX/FLORIN, Inc.