FAQ/ЧаВо
Полный список слов
Пример
RIScriptWriter -- программа автоматизированного порождения описания ресурсов (с on-line help'ом)
Цель RIScript - систематизировать ресурсы RuFIG при минимальной нагрузке на Андрея Черезова. Для этого ответственность за составление индекса ресурсов перекладывается на владельцев ресурсов. Еще одним требованием являлась минимизация усилий на программирование. С этой целью было решено примененить исполнение данных. Так как язык Форт знаком членам RuFIG, применение фортовского синтаксиса для описания ресурсов приемлемо.
Главная идея заключается в следующем: каждый член RuFIG описывает выставляемые во всеобщее пользование ресурсы в файле resource.txt на языке Форт. Скрипт загружает файлы всех членов RuFIG (владельцев ресурсов) и на этой основе создает общий список.
Основной принцип - исполнение данных. В ОЗУ создается база данных, записи которой представлены в виде исполнимого кода. Исполнение этого кода порождает отчет.
Защита обеспечивается недоступностью слов ! TO IS EXECUTE во время загрузки описания ресурсов. (Кроме того, не забывайте про административные меры).
Владелец ресурсов описывает свои ресурсы в теле двоеточечных определений. Последнее созданное определение добавляется в общий список ресурсов, поэтому имеет смысл вызывать из него (прямо или косвенно) все остальные создаваемые определения. Если двоеточечное определение создано, но не вызывается из последнего в файле определения, оно не получит управления.
Внимание! Прописные и строчные буквы в именах слов различаются!
Attention! The Forth system is case-sensitive!
Если Вы обнаружите, что некоторое недопустимое описание данных в файле resource.txt заставляет RIScript вести себя неправильно, сообщите автору (mlg@forth.org). Правильная реакция на ошибку в файле resource.txt - выдать сообщение об ошибке и не показывать ресурсы, описанные в этом файле; ресурсы же, описанные в других файлах, должны показываться как ни в чем не бывало. Более подробную информацию об ошибке можно получить, сохранив выдачу (output) скрипта на диске и просмотрев ее как простой текст. В комментариях HTML можно найти сообщения Форт-системы. Если же выполнить слово DEBUG-ON, то к тому же будет распечатана последовательность вызовов. Большая ко всем просьба не злоупотреблять этим режимом, поскольку при его использовании объем комментариев HTML возрастает, и соответственно увеличивается время загрузки.
Версия 1.4 показывает даты файлов описания ресурсов resource.txt . Кроме того, таблица ресурсов теперь нарезается кусками по 16 (или сколько там) строк, благодаря чему Netscape теперь не ждет загрузки всей таблицы. Дата полностью или частично выделяется жирным шрифтом в соответствии с новизной ресурса.
Версия 1.5 показывает даты файлов, упомянутых в полях Author,
Location, Title, RealFile. Новое слово -
=RealFile,
оно же =RealFiles - позволяет указать файлы,
даты которых датируют ресурс.
Подробнее
Прописные и строчные буквы в именах слов различаются.
Настоятельно рекомендуется пользоваться предопределенными строковыми константами (вида $имя), т.к. автор скрипта имеет возможность поменять их на более удачные. Например, в версии 1.2 с целью получения более компактной таблицы был совершен переход на 2-буквенные обозначения языков. Если какие-то строковые константы кажутся Вам неудачными, лучше напишите автору (mlg@forth.org). Если же Вы вместо константы $Forth используете литерал $ "Форт", то весьма вероятно, что после введения поисковых возможностей Ваше описание никто не сможет найти. То же самое случится, если Вы допустите ошибку, например, напечатаете $ "Forh".
Записи и группы
item - разделитель между пунктами
group{ - открывает группу пунктов с общими полями.
Указанные до слова group{ параметры
становятся параметрами по умолчанию
}group - конец группы (ставить item
перед }group необязательно)
Комментарии
\ - комментарий
// - комментарий, как \
-- - комментарий, как \
( - комментарий
Поддержка отладки
DEBUG-ON - включить распечатку стека возвратов в случае ошибки
DEBUG-OFF - отключить ее
Отладочная печать выводится в поток стандартного вывода,
однако ее не видно т.к. она оказывается в комментариях HTML.
Чтобы увидеть ее, надо сохранить файл и просмотреть как текст.
При возникновении ошибки распечатывается куча информации, в том числе
последовательность вызовов на стеке возвратов.
Большая просьба ко всем владельцам ресурсов не злоупотреблять этим режимом.
Определение слов
: - стандартное двоеточие
; - стандартная точка с запятой
Строковые литералы
" - ( «ccc<">» -- ) как
стандартное C"
$ - ( «<x>ccc<x>» -- ) выбрать
из входного потока литеру-разделитель x,
затем выбрать литеры ccc, используя
как разделитель литеру x.
Задание полей
( addr -- )
Строка по адресу addr задает значение соответствующего поля
=Author - автор
=Comment - описание
=HomePage
=Language - язык (человеческий), на котором написан материал
(предопределенные константы)
=Location - URL ресурса
=ProgLan - использованный язык программирования
(предопределенные константы)
=RealFile - если Location указывает на промежуточную html-страницу,
а не на сам ресурс, то сам(и) файл(ы) с ресурсом можно указать в этой графе.
Имена файлов разделяются пробелами и
используются для указания даты (набора дат) ресурса.
Имя файла должно содержать строку "forth.org.ru/~".
Имеется синоним: =RealFiles.
Подробнее.
=Title - название
=Type - какого рода ресурс (приложение, статья, компилятор, расширение языка)
(предопределенные константы)
Еще одно такое слово существует, но не доступно владельцу ресурса:
=Owner - владелец ресурса (это слово вызывается загрузчиком)
Биты-признаки
Каждый пункт может иметь один или несколько признаков (каждое из слов
устанавливает соответствующий бит переменной item-flags в 1):
( -- )
Изменить соответствующий признак в текущем пункте (установить бит)
Допускаются сокращения:
CrossCompiler CComp MetaCompiler MComp TargetCompiler TComp ForthSystem FSys Application App SourceCode Src Paper Pap Article Art Published Pub ReferenceLocal RefL ReferenceRemote RefR BibliographyItem Bib OtherThanForth NonForth ExtensionPackage Ext Extension ExtPackage Package Implementation Impl Documentation Doc Help Hlp CodeSamples CodeSample Samples Smpl
Универсальная константа:
( -- addr )
Оставить на стеке адрес addr строковой константы
$none - пустая строка
Предопределенные строковые константы для поля Language:
( -- addr )
Оставить на стеке адрес addr строковой константы
$Russian
$English
$French
$German
$Ukrainian
Допускаются сокращения и синонимы:
$Russian $Ru $English $En $French $Fr $Francais $German $De $Deutsch
Предопределенные строковые константы для поля ProgLan:
( -- addr )
Оставить на стеке адрес addr строковой константы
$Forth
$C
$C++
$Scheme
$Lisp
$Pascal
$Asm - ассемблер и тому подобные вопросы
$Hardware - описание аппаратуры (не программирование)
Предопределенные строковые константы для поля Type:
( -- addr )
Оставить на стеке адрес addr строковой константы
$Application - приложение в виде exe-файла
$Compiler - компилятор (сюда же относится обычная Форт-система)
$Paper - статья
$Book - книга (например, описание языка)
$URL - ссылка на интернетовскую страницу
$ExtensionPackage - расширение языка (например, реализация объектов)
$SourceCode - исходники (не подпадающие под другие категории)
$Documentation - документация
$Samples - примеры кода
Допускаются сокращения и синонимы:
$Application $App $Paper $Article $Art $SourceCode $Src $Code $ExtensionPackage $Ext $Package $ExtPackage $Extension $Documentation $Doc $Help
Из-за того, что иногда ссылка указывает на вспомогательную www-страничку, добавлена возможность явного указания файлов, даты которых должны появиться в колонке дат. Cлово =RealFile, оно же =RealFiles, позволяет указать один или несколько файлов, даты которых должны появиться в колонке даты ресурса (не вместо файлов, на которые естиь ссылки, а в дополнение к ним).
Пример. В файле описания ресурсов содержится строка
$ "123 http://www.forth.org.ru/~mlg/resource.txt 456" =RealFilesЧтобы выделить из строки имя файла, RIScript сначала ищет подстроку "forth.org.ru/~":
"123 http://www.forth.org.ru/~mlg/resource.txt 456"Затем он выделяет из строки текст до первого попавшегося разделителя
"123 http://www.forth.org.ru/~mlg/resource.txt 456"Из этого текста путем сцепления со стандартным префиксом "..\..\~" и замены '/' на '\' получается путь к файлу из директории, где запущен RIScript:
"..\..\~mlg\resource.txt"Если такой файл найден, то его дата будет распечатена, после чего поиск имен файлов в описывающих ресурс строках будет продолжен.
В зависимости от числа дней, отделяющих текущую дату от распечатываемой, дата выделяется жирным шрифтом полностью или частично.
| до 10 дней | все жирным шрифтом |
| 10-30 дней | месяц и год жирным шрифтом |
| 30-360 дней | год жирным шрифтом |
Для поиска можно воспользоваться командой "поиск на текущей странице" browser'а.
: xxx
$ 'Waskin' =Author
" WOOS -- Waskin's OO System" =Title
$ "http://www.forth.org.ru/~was/poos.zip"
=Location
$ 'Object-Oriented Extension' =Comment
$Forth =ProgLan
$English =Language
$Ext =Type
Src Ext
item
$ 'Waskin' =Author
$ 'Objects are everywhere' =Title
$ "http://www.forth.org.ru/~was/ooforever.html"
=Location
$ 'A "long live objects" article' =Comment
$Forth =ProgLan
$English =Language
$Art =Type
Art
item
;
То же самое можно сделать, вынося "за скобки" общие параметры
с помощью groups{ ... }groups.
: xxx
$ 'Waskin' =Author
$Forth =ProgLan
$English =Language
group{
" WOOS -- Waskin's OO System" =Title
$ "http://www.forth.org.ru/~was/poos.zip"
=Location
$ 'Object-Oriented Extension' =Comment
$Ext =Type
Src Ext
item
$ 'Objects are everywhere' =Title
$ "http://www.forth.org.ru/~was/ooforever.html"
=Location
$ 'A "long live objects" article' =Comment
$Art =Type
Art
item
}group
;
В результате первая версия порождала следующие строки таблицы:
| .....S.......X | Waskin2 | Waskin | WOOS -- Waskin's OO System | Extension | English | Forth | Object-Oriented Extension |
| ......p....... | Waskin2 | Waskin | Objects are everywhere | Paper | English | Forth | A "long live objects" article |
Чтобы увидеть настоящий работающий файл описания ресурсов, достаточно посмотреть такой у одного из членов RuFIG, например, у автора: http://www.forth.org.ru/~mlg/resource.txt.
A: После загрузки файла resource.txt осуществляется верификация - проверка правильности программы посредством исполнения последнего созданного слова (остальные слова исполняются только тогда, когда они вызываются из последнего слова). Если обнаружена ошибка (аппаратные ошибки перехватываются), то слово бракуется и не участвует в построении индекса ресурсов.
Q: Что это за ошибка - неверное количество элементов на стеке?
Слова, начинающиеся со знака доллара ($), суть строковые константы, оставляющие на стеке адрес строки со счетчиком. Слова, начинающиеся со знака равенства (=) снимают со стека одно значение (адрес строковой константы) и записывают в одну из переменных; в этих словах стоит проверка того, что глубина стека равнв 1 (если стек пуст - ошибка, и если на стеке мусор - тоже ошибка).
05.10.1999 -- ver 1.0 -- made working
06.10.1999 -- ver 1.1 -- added more flags (samples, help, extension package); improved docs; more string constants;
lowercase/uppercese letters now denote paper/published Paper, book/pub.Book, local url/non-local uRl.
11.10.1999 -- ver 1.2 -- improved reaction on invalid data.
Введены константы $Asm $Hardware. Добавил empty-member для тех,
чьих директорий нет на www.forth.org.ru.
15.10.99 -- ver 1.3 -- теперь не вызывается ABORT в случае, если файл resource
owner'а не найден. В результате размер выдачи сокращен на 7.5К (с 25.6 до 17.0),
и соответственно уменьшается время загрузки. Инструкция по получению диагностики
при отсутствии файла теперь также не показывается.
18.12.99 -- ver 1.3 -- добавил FAQ
??.05.00 -- ver 1.4 -- показываются даты файлов resource.txt
05.06.00 -- ver 1.5 -- показываются даты файлов,
указанных в описаниях
(точнее, в полях Location, Comment, Title, RealFile).
Появилось поле RealFile , для упомянутых в нем файов распечатывается дата
в колонке дат.