|
|||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
![]() |
|
State Machine |
call | statename | global | bind | |
fcall | local | form | expire | quit |
scall | private | img | clearquery | |
return | public | limg | option |
При использовании вне форм, тег call заменяется на
Например, если во входном потоке стоит:
<!#fcall program="help.sh main_context">Help</a>
то к пользователю попадет нечто вроде
<a href="state&4234234&call">Help</a>
и при активизации этой ссылки SM активизирует соответствующее состояние как дочернее к текущему и запустит программу help.sh c аргументом командной строки main_context. Заметим, что стандартная семантика cgi-вызовов не позволяет передавать аргументы командной строки, что иногда весьма неудобно.
Атрибут return определяет имя переменной окружения, в которую будет помещен результат (см. <!#return>).
Если задан атрибут prefix, то его значение добавляется перед значением href. Это иногда необходимо для управления состояниями "вручную" - например, для смены текущего с точки зрения web-сервера каталога, для изменения прав доступа или перекодировки.
При использовании в формах директива <!#call ...> заменяется на <input type=submit ...> или, если передан атрибут src, на <input type=image ...>, атрибут url_src - исходный URL изображения.
Например,
<!#form>
...
<!#call program="forward.sh" value="forward" size=20>
...
</form>
директива вызова call будет заменена на
<input type=hidden name=_C_1 value="_N_1">
<input type=submit name="_N_1" value="forward" size="20">
или, с использованием атрибута src:
<!#form>
...
<!#call program="forward.sh" value="forward" size=20 src="forward.gif">
...
</form>
директива вызова call будет заменена на
<input type=hidden name=_C_1 value="_N_1">
<input type=image name="_N_1" value="forward" size="20" src="/images/imail/forward.gif">
Атрибут src тега <input type=image ...> принимает значение атрибута imagedir файла конфигураций SM плюс значение атрибута src управляющей директивы <!#call ...>
Директива imagedir файла конфигурации SM (sm.cfg) в данном примере, имеет
значение /images/imail
См. также <!#form> и директивы файла конфигураций SM (sm.cfg)
imagedir
2.2. Директива scall.
Синтаксис:
<!#scall program="program_scall">
Директива используется в программах JavaScript для создания
состояний.
Например:
<script language="JavaScript">
...
window.open(<!#scall program="asdf.sh">, ...);
...
</script>
в выходном потоке будет:
<script language="JavaScript">
...
window.open("state&121212&scall", ...);
...
</script>,
где 121212 - номер состояния
2.3. Возврат return.
Синтаксис:
<!#return [return="retval"] [statename="state_name"]
[href="localref"] [query="query"] [prefix="url_prefix"]>
return во входном потоке заменяется на ссылку, возвращающую в родительское состояние,
например, если родительское состояние имеет номер 1234, то
<!#return>back</a>
будет заменено на
<a href="state&1234&return">back </a>.
Атрибут return задает возвращаемое в родительское состояние значение.
Это значение будет присвоено переменной окружения, указанной в директиве
call
Например,
main.sh
...
<!#call program="file.sh" return="asdf">
...
file.sh:
...
<!#return return="0">
...
Переменной окружения asdf после выполнения cgi-программы file.sh
будет присвоено значение 0.
Если задан атрибут statename, то возврат производится в состояние с именем
"state_name"
Если задан атрибут href, то его значение добавляется после знака # к результирующему
URL (т.е. как ссылка внутри страницы). Значение query добавляется к результирующему
URL после знака "?". prefix используется точно так же, как и в <!#call ...>.
При возврате в любое состояние все состояния-потомки автоматически уничтожаются.
2.4. Задание имени состояния statename
Синтаксис:
<!#statename "some_name">
Любому новому, вновь созданному состоянию, автоматически присваивается
уникальное имя. Директива
Это имя можно впоследствии использовать для возврата в состояние из
состояний-потомков.
Например,
mine.sh
...
<!#statename "my_state">
...
<!#call program="file.sh">
file.sh
...
<!#return statename="my_state">
...
(см. <!#return>).
2.5. Создание переменных.
Программа, выполняемая под SM, может определить для себя (и состояний - потомков) переменные окружения и присвоить им значения. Переменные могут иметь область видимости local, public, private и global и создаются управляющей директивой вида:
<!#local name1=value1 ... nameN=valueN>
<!#private name1=value1 ... nameN=valueN>
<!#public name1=value1 ... nameN=valueN>
<!#global name1=value1 ... nameN=valueN>
local переменные принадлежат только состоянию, в котором они созданы.
private переменные принадлежат состоянию, в котором они созданы, но передаются состояниям-потомкам. При этом состояние-потомок не может изменить private переменную предка, т.к. private создаст новую переменную, скрывающую переменную предка.
public переменные передаются по наследству состояниям-потомком и разделяются с ними. Т.е. если состояние-потомок присваивает значение public переменной, то изменяется и значение родительской public-переменной.
global являются public-переменными, принадлежащими самому верхнему (корневому)
состоянию. Если несколько переменных имеют одно имя, то приоритет имеет
local, затем private, затем public.
Замечание: переменные окружения, общие для всего приложения, можно
определить директивой envar файла конфигурации SM sm.cfg.
2.6. Создание форм form
Синтаксис:
<!#form ... >... </form>
Директива <!#form ... >понимает те же атрибуты, что и
стандартный тег <form>.
Например, если во входном потоке стоит:
<!#form target="asdf">...</form>
то к пользователю попадет нечто вроде
<form action=state&12345&form target="asdf">,
где 12345 номер текущего состояния. В форме, для создания кнопок
передачи можно использовать
директиву call. В этом случае управление будет передано cgi-программе,
заданной атрибутом program директивы
<input type=submit ...> и <input type=image ...>.
В последнем случае управление будет передано в эту же форму.
2.7. Создание изображений.
Синтаксис:
<!#img src="url_src" ...>
или
<!#limg src="url_src" ...>
Директивы понимают стандартные для тега <img> атрибуты.
В выходном потоке получается: Устанавливает время timeout_sec в секундах, по
истечении которого сбрасывается состояние SM.
Очищает переменную среды QUERY_STRING.
Определяет метод обработки SM-ой атрибута href тега
Если strict=off|no - метод по умолчанию -, то в выходном потоке будет: Атрибут program определяеет cgi-программу печати. Заменяется
на тег-гиперссылка и требует закрывающего тега. on - разрешает вывод на печать, off - запрещает.
Уничтожает все состояния SM и по завершении выполняет
cgi-программу с именем quit.
Устанавливает уровень вывода сообщений в log-файл.
Задает строку, используемую для обозначения
конца запроса при диалоге с серверами. Задает имя файла, в котором хранится pid процесса SM Задает имя log-файла. Его содержимое зависит от директивы
debuglevel. Кроме того, в этот файл попадает вся
информация об ошибках SM, старт и стоп машины состояний.
Программа executable-name обрабатывает запросы, посылаемые cgi-программами
SM.
Задает общую для всего приложения переменную окружения. Определяет имена executable-name-1[ ...executable-name-N], как разрешенные
точки входа в приложение. Строка HTTP заголовка отклика.
Рабочий каталог cgi-программ Задает максимальное количество открытых файловых дескрипторов. Если
количество открытых дескрипторов превышает number, то не позволяет
открывать новые.
Устанавливает время minuts в минутах, по
истечении которого сбрасывается состояние SM. Это значение принимается
по умолчанию, если исходный URL не содержит управляющей директивы expire.
Задает путь для файлов сообщений.
SM проверяет настройки броузера - текущий язык просмотра - и используя
файл сообщений, заменяет все вхождения конструкции _(текст сообщения)_ на
соответствующие установленному языку просмотра.
Например, если в cgi-программе встречается конструкция
_(Press any key to continue...)_
то в выходной поток в зависимости от настроек попадет
en
Press any key to continue...
ru
Для продолжения работы нажмите любую клавишу...
Задает каталог для изображений.
<img src="dir_for_image/url_src">
или
<img src="dir_for_image/kod_language/url_src"> для директивы
<!#limg ...>
url_src - URL изображения.
dir_for_image - задается директивой файла конфигурации sm.cfg
imagedir
kod_language - двухбуквенная аббревиатура языка, используемого броузером
для отображения содержимого страниц. Язык просмотра задается
настройками броузера.
2.8. Директива bind.
Синтаксис:
<!#bind cid="content_ID" program="bind_program [param1 ...]">
Связывает идентификатор ресурса 2.9. Директива expire.
Синтаксис:
<!#expire timeout=timeout_sec>
2.10. Директива clearquery.
Синтаксис:
<!#clearquery>
2.11. Директива option.
Синтаксис:
<!#option strict=on|yes|off|no>
strict=on|yes - "жесткая" обработка атрибута href,
т.е., если в cgi-программе
<a href="asdf.sh">Call asdf.sh </a>,
то в выходном потоке так и будет:
<a href="asdf.sh">Call asdf.sh </a>
<a href="state&12345&call">Call asdf.sh </a>
И к имени asdf.sh будет добавлен путь
work_dir_name- рабочий каталог.
2.12. Директива печати print.
Синтаксис:
<!#print program="program_name">
или
<!#print on|off>
Например,
<!#print program="program_name"> Печать документа </a>
будет заменена на
<a href="state&1234&print"> Печать документа </a>
cgi-программе в STDIN передается поток - текущая страница документа.
2.13. Директива quit.
Синтаксис:
<!#quit>
3. Директивы файла конфигурации SM sm.cfg
debuglevel logname alow fdlimit imagedir end-of-request server header expire pidname enver workdir locale 3.1 debuglevel
Синтаксис:
debuglevel <numberlevel>
numberlevel
3.2 end-of-request
Синтаксис:
end-of-request <eor-string>
Например:
end_of_request "<<<EOR>>>"
3.3. pidname
Синтаксис:
pidname <file-with-pid-name>
Например,
pidname ./spool/sm.pid
3.4. logname
Синтаксис:
logname <log-file-name>
Например,
logname ./spool/sm.log
3.5. server
Синтаксис:
server <"pipe"|"pty"|"socket"> <name><executable-name>[<arg1>... <argN>]
pipe|pty|socket - задают тип связи программы со SM.
name - имя обрабатывающей программы, известное машине состояний, а
arg1, ..., argN - принимаемые ею параметры.
Например,
server pipe cgi ./progs/cgiutil
или
server pipe users ./progs/dbmutil spool/users
3.6. envar
Синтаксис:
envar <name><value>
Например,
envar FORTUNE "/usr/games/fortune"
3.7. allow
Синтаксис:
allow <executable-name-1>[ ...<executable-name-N>]
Например,
allow init
Программа init единственная точка входа:
http://last/cgi-bin/mail/smconn/init
3.8. header
Синтаксис:
header <header-string>
3.9. workdir
Синтаксис:
workdir <work-dir-name>
Например,
workdir /usr/program/cgi-bin/mail/progs
3.10. fdlimit
Синтаксис:
fdlimit <number>
3.11. expire
Синтаксис:
expire <minuts>
3.12. locale
Синтаксис:
locale <locale-name> <locale-file>
3.13. imagedir
Синтаксис:
imagedir <dir-for-images>
Например,
imagedir /images/imail
© ООО "Инженерно-Техническая Компания"
(ИТК) 2006 426072, Удмуртская республика, Ижевск а/я 1247, uri at itk dot ru |
![]() |