Сценарии


     Сценарии - это последовательности некоторых действий T-Mail, описанные
на специальном  языке сценариев. Эти описания  хранятся в файлах сценариев,
которые  представляют собой  обычные текстовые  файлы. Каждая  инструкция в
файле сценария должна располагаться в  отдельной строке, при этом начальные
и конечные  пробелы  игнорируются.  В  файлах  сценариев можно использовать
комментарии, директивы DEFINE и номера задач так же, как и в основном файле
конфигурации   t-mail.ctl .  При   интерпретации  сценария  T-Mail  выполняет
инструкции в том порядке, в каком  они расположены в файле сценария, если с
помощью языка описания сценариев не задано иное.

     Командой на выполнение соответствующего файла сценария служит ключевое
слово Script.  Сценарий может выполняться  как и любое  другое действие при
обработке Process, Process_Flag, Key, External, а также перед сеансом связи
(при задании Script в  subst.lst ).

     Если  выполнение сценария  вызывается  из  другого сценария,  то после
завершения  второго  (вызванного)  сценария  управление  обратно  в  первый
(инициировавший вызов) сценарий не передается.

     Ниже  перечислены  инструкции,  которые  можно  использовать  в  файле
сценария:

     Timer  время

         Эта   инструкция  задает   максимальную  длительность   выполнения
         сценария  по   времени  в  секундах.   По  умолчанию  максимальная
         длительность  выполнения  сценария  -   60  секунд.  По  истечении
         заданного времени выполнение сценария прекращается.

     Set  переменная=значение

         Эта  инструкция устанавливает  значение любой  переменной из файла
          t-mail.ctl . Первоначальное значение переменной будет восстановлено
         как  и в  случае  выполнения  обычной процедуры  Set ( events.ctl ):
         после  завершения  сеанса  связи  (если  сценарий выполнялся перед
         сеансом связи), либо при любом перечтении файлов конфигурации.

     Disconnect

         Эта инструкция прерывает соединение.

     Xmit   строка

         Эта  инструкция  передает  строку  в  модем.  Символы "|" в этой
         строке будут заменены на символ "возврат каретки" (CR).

     Delay  время

         Эта  инструкция  приостанавливает  выполнение  сценария  на время,
         указанное в параметре время (в секундах).

     Exit

         Эта  инструкция   вызывает  завершение  сценария.   Если  сценарий
         выполнялся   непосредственно   перед   сеансом   связи,  то  после
         завершения этого сценария T-Mail начинает сеанс связи.

*    Exec  команда

         Эта  инструкция выполняет  внешнюю программу  или другие действия.
         Аналогично использованию  Exec в файле   events.ctl  и в  директивах
         Process и Process_Flag ( t-mail.ctl ).

*    Carrier

         Эта  инструкция анализирует  наличие несущей  (carrier). Результат
         анализа может быть использован в последующей инструкции Goto.

*    Baud  скорость

         Эта  инструкция сравнивает  скорость установленного  соединения со
         значением скорость. Результаты сравнения могут быть использованы
         в последующей инструкции Goto.

*    Address  addr list

         Эта инструкция сравнивает адрес  вызываемой системы с addr list.
         Результат   сравнения   может   быть   использован  в  последующей
         инструкции Goto.

*    Wait  [timeout] строка

         Эта  инструкция  ожидает  поступления  из  модема строки символов,
         заданных  в параметре  строка.  Если  параметр строка  имеет в
         конце символ  "|", то принятая строка  должна завершаться символом
         "возврат каретки"  (CR). Необязательный параметр  timeout задает
         время этого ожидания в секундах. Если за это время заданная строка
         принята  не  будет,  то  ожидание  завершается.  Если  же параметр
         timeout  не  определен,  то  ожидание  будет  осуществляться  до
         завершения сценария  по истечении времени,  заданного в инструкции
         Timeout.

     :метка

         Эта инструкция определяет метку в сценарии. В качестве метки может
         быть использована любая текстовая строка без пробелов.

     Goto  метка#1  [метка#2]

         Эта инструкция  вызывает в порядке  выполнения инструкций сценария
         безусловный или условный переход на указанную метку.

         Если в качестве параметра  задана только метка#1, то выполняется
         безусловный переход к выполнению  инструкции, следующей за строкой
         с меткой метка#1.

         Если  в  качестве  параметров  заданы  две  метки,  то выполняется
         переход  к первой  или второй   метке в  зависимости от  того, как
         завершилась предыдущая инструкция (из числа инструкций, отмеченных
         знаком "*"), как показано ниже в таблице:

      Предыдущая        Переход к метке          Переход к метке
      инструкция          метка#1                метка#2
      ---------------------------------------------------------------------

      Carrier        если несущая присутствует   если несущая отсутствует

      Wait           если указанная строка       если до завершения времени
                     была принята                ожидания указанная строка
                                                 принята не была

      Exec           если код завершения         если код завершения
                     (errorlevel) равен 0        (errorlevel) не равен 0

      Address        если адрес вызываемой       если адрес вызываемой
                     системы входит в            системы не входит в
                     заданный список адресов     заданный список адресов

      Baud           если скорость соединения    если скорость соединения
                     больше или равна заданной   меньше заданной

     Пример (example.scr):
     ~~~~~~~~~~~~~~~~~~~~~
------------------------------------------------------------------------
     ; Test script

         Timer   45
         Delay   2
         Baud    14400                    ; check connection baudrate
         Goto    _Start  _Cancel2         ; continue if = 14400
     :_Start
         Wait    10   login
         Goto    _Login  _Cancel
     :_Login
         Xmit         mylogin|             ; send login
         Wait    10   password
         Goto    _Passw  _Cancel
     :_Passw
         Xmit         mypassw|             ; send password
         Delay   3
         Carrier
         Goto    _Smth   _Cancel
     :_Smth
         Exec    Create  SEM32\test.t-m
         Exec    smth.exe
         Set     Files=c:\t-mail\files\tmp
         Xmit    telnet 123.456.789.101    ; establish telnet connection
         Delay   2

     :_Cancel
         Exit

     :_Cancel2
         Disconnect
         Exit

     ; End of script

-------------------------------------------------------------------------

     В  файлах сценариев  можно использовать  значения переменных окружения
DOS или  OS/2. При этом имена  переменных заключаются в символы  "%". Кроме
того,  могут быть  использованы  две  специальные переменные  с аналогичным
синтаксисом - %TASKNO% и %PLATFORM%.  Переменные окружения с такими именами
будут  проигнорированы.  Вместо  %TASKNO%  будет  подставлен  номер  задачи
T-Mail,  который задается  в командной   строке ключом  -N (см.   главу 21 ).
Вместо  %PLATFORM%  будет  подставлено  наименование  операционной системы:
"DOS","OS/2" или "NT". Так, если вы  используете T-Mail для DOS (пусть даже
в окне OS/2) - подставится "DOS".

     В   сценариях,  выполняемых   непосредственно  перед   сеансами  связи
(заданными в   subst.lst ), возможно использование  следующих инструкций Set,
задающих параметры протокола Zmodem для этого сеанса связи:

  Set  ZMinCPS_In    - установка минимальной скорости приема файлов;
  Set  ZMinCPS_Out   - установка минимальной скорости передачи файлов;
  Set  ZStartBlock   - установка начального размера блока;
  Set  ZMaxBlock     - установка максимального размера блока;
  Set  ZTimeout      - установка размера таймаута.

     После  завершения   сеанса  связи  будут   восстановлены  значения  по
умолчанию.  Подробнее  о  настройках   параметров  протокола  Zmodem  можно
прочитать в главах 7 и 30.

     Пример (example2.scr):
     ~~~~~~~~~~~~~~~~~~~~~~
  Set  ZMinCPS_In=400
  Set  ZMinCPS_Out=200
  Set  ZStartBlock=4096
  Set  ZMaxBlock=8192
  Set  ZTimeout=20