информацию о ИС Дракон и философию смотрим здесь
1.
oberoncore.ru2.
drakon.su3.
easyelectronics.ruхочу поделиться опытом как настроить работу ИС Дракон совместно с SPF фортом.
a) создаем новую папку (директорию) для опытов и экспериментов, скачиваем туда файл dragon.exe
(последнюю версию
ИС Дракон можно брать здесь)
При первом запуске dragon.exe формируется два файла - dragon.ini здесь хранятся настройки программы и файл dragon.ust - это файл установки. Программа полнофункциональна в течении ознакомительного периода (2-3 недели), в случае принятия решения о покупке программы необходимо связаться с автором, договорится и получить настроенный под Ваш компьютер и/или флешку файл dragon.ust
b) Далее копируем в рабочую директорию собственно сам форт - файл spf4.exe
c) Создаем файл dragon.bat, его содержимое: spf4.exe %1
d) Создаем файл langprogr.lpr - файл настройки ИС Дракон на язык форт, содержимое:
Цитата:
; Описание языка программирования Forth
[Operator]
; Комментарий
Comment=\ <Comment/>
; Метка
Label=[ <NN/> ] LABEL:
; Безусловный переход
Goto=[ <NN/> ] GOTO
; Переход по условию ДА
YesGoto=<Usl/> IF [ <NN/> ] GOTO THEN
; Переход по условию НЕТ
NotGoto=<Usl/> 0= IF [ <NN/> ] GOTO THEN
e) Актуализируем этот файл настроек на форт - запускаем dragon.exe, заходим в подменю Вид, ставим птичку на пункте Программирование. Справа в строке меню появляется пункт Программирование, входим в него, кликаем на пункт открыть описание языка, указываем и открываем наш файл langprogr.lpr Еще разок заходим в пукт меню Программирование и ставим птичку на пункте - и выполнить Dragon.bat, это даст нам возможность по нажатию на
клавишу F9 собрать форт файл и запустить на исполнение spf4.exe
Ну вот и все, теперь можно сконструировать "Hello, world!"
Запускаем dragon.exe, меню: Файл->Новый или Ctrl+N - создали новый лист, позиционируем указатель мыши на белом листе, клик правой кнопкой и в контекстном меню вибираем Гном. На листе отображается пунктиром схема-гном, а внутри икона комментарий. Двойной клик на тексте ?Комментарий и в появившейся внизу зеленой области набираем слово тест или любое другое, кликаем в любом месте листа и этот текст появляется на иконе. Подобным образом вводится и другая текстовая информация в иконах ИС Дракон.
Давайте сохраним нашу работу - меню: Файл->Сохранить лист как ... дадим имя hello. Видим что заголовок
листа имеет теперь имя hello.drt Кликаем левой кнопкой внутри схемы гном и видим что выше и ниже иконы комментарий есть маленькие белые квадратики. Позиционируем на нижнем и клик правой кнопкой, выбирам
Модуль. Кликаем на слове ?Модуль и внизу набираем две строчки. На первой hello.f на второй hello.drt, таким образом в иконе модуль мы указали ИС Дракон, что программный код из схем и икон листа hello.drt надо скомпоновать в файл hello.f
Есть два носителя алгоритмов схема-примитив и схема-силуэт, для нашей задачи достаточна схема-примитив. Кликаем правой кнопкой на листе вне схемы гном,выбираем из контектного меню Примитив, на листе отображается заготовка схемы-примитива, вместо слова ?Заголовок набираем например текст привет.
между иконами с текстами привет и Конец есть линия и на ней маленький квадратик с символом ? справа, позиционируем на него указатель и клик правойкнопкой, выбираем из контекстного меню Вывод. Вместо слов ?Вывод куда набираем например на экран, вместо ?Вывод что слово HELLO!
Мы с помощью схемы-примитива отобразили алгоритм с именем привет,который выводит на экран слово HELLO!, а где-же форт код писать? Код записывается в так называемых Р-точках икон и схем. У нас они есть у иконы Вывод - третий маленький квадратик в правом нижнем углу и у схемы-примитива в в заголовке в левой стороне, тоже третий по порядку. Если кликнуть по нему то в зеленом поле увидим текст //Shema это слово-метка которое будет заменено при сборке текстом из P-точек икон схемы-примитива.Будем полагать что схема-примитив должна соответствовать форт-слову, Перед словом-меткой //Shema поставим начало форт слова например : hello
а после слова-метки строку завершение - ;
таким образом текст P-точки примитива привет должен состоять из трех строк
: hello
//Shema
;носителем требуемого действия у нас в примитиве является икона Вывод, в P-точке ее запишем форт код
." HELLO!" CRВернемся теперь к схеме гном и иконе Модуль, кликнем на P-точку иконы Модуль и увидим внизу в зеленом поле уже знакомое слово-метку //Shema. Здесь будет собран код со всех схем-примитивов и схем-силуэтов нащего листа. перед этим словом-меткой надо поставить либо коменнтарий либо вызов необходимых библиотек для нашего листа, либо код а после слова-метки аналогично либо коментарий либо слова запуска нашего проекта.
Пусть текст P-точки модуля у нас будет состоять из трех строк
CR CR
//Shema
hello CR .( === test OK ===) CR
Рядом с P-точкой модуля есть S-точка модуля (четвертый черный квадратик) кликнув по нему можно наблюдать весь собранный код с листа.
Теперь пришло время запустить наш код - нажимаем F9 и смотрим результат.
Давайте немного усложним наш пример, пусть если нажат пробел, то повторить вывод HELLO, а если нет, то завершить цикл.
Открываем наш проект hello.drt, меняем в модуле имена файлов на hello1.f и hello1.drt, сохраняем наш новый проект как hello1.drt; левой кнопкой кликаем в схеме привет на линии между Выводом и Конец, далее на квадратике правой кнопкой и в контекстном меню выбираем Обычный цикл, вместо ?Вопрос вписываем нажат пробел?, в Р-точке пишем форт-код
KEY BL = и далее кликаем на иконе Вывод, правой кнопкой и в контекстнов меню выбираем Вырезать, позиционируем на квадратике между иконой Вопрос и большой стрелкой,
кликаем правой кнопкой и из контекстного меню выбираем вставить из буфера. Возврат в начало у нас должен идти по ветке Да иконы вопрос, чтобы установить так кликаем левой копкой по иконе Вопрос, затем правой
и в контекстном меню выбираем пункт Да/Нет.
После вырезки/вставки икон желательно кликнуть правой кнопкой на листе вне гнома и схем и в контекстном меню выбрать пункт обновить номера.
Теперь мы подошли к важному моменту. В ИС Дракон существует два способа сборки кода из Р-точек икон - с использованием Маршрутного транслятора или без. По умолчанию стоит настройка собирать с использованием Маршрутного транслятора, чтобы отказаться от этого в строке меню выбираем Программирование, и ставим птичку на -Сборка без Маршрутного транслятора. Когда мы используем Маршрутный транслятор, то ИС Дракон по составленному нами алгоритму из развилок, циклов и переключателей автоматически строит систему переходов, раставляя метки (LABEL) и передачи управления (GOTO).
Поскольку подходящей бибилиотеки реализации GOTO в SPF4 не нашлось, то на основе некоторых вариантов предложенных ранее здесь на форуме Михаилом Максимовым и ~chess разработал вариант с большим количеством меток (до 1000) в форт слове:
Код:
CREATE XSOURCE 0x10000 ALLOT
CREATE XLABEL 1000 CELLS ALLOT
0 VALUE X>IN
0 VALUE XDP
0 VALUE XN
VARIABLE XFP 0 ,
VARIABLE XCURSTR
: PLACE ( addr len dest -- ) SWAP 0 MAX 0xFF AND SWAP 2DUP 2>R CHAR+ SWAP MOVE 2R> C! ;
: [BEGIN]
>IN @ TO X>IN DP @ TO XDP SOURCE XSOURCE PLACE
SOURCE-ID FILE-POSITION DROP XFP 2! CURSTR @ XCURSTR ! ; IMMEDIATE
: [AGAIN]
XSOURCE COUNT DUP #TIB ! TIB SWAP MOVE XCURSTR @ CURSTR ! X>IN 1+ >IN ! XDP DP !
XFP 2@ SOURCE-ID REPOSITION-FILE DROP ; IMMEDIATE
: L: DIS-OPT 1 TO XN XLABEL 1000 CELLS ERASE : POSTPONE [BEGIN] ;
: L; XN IF XN 1- TO XN POSTPONE [AGAIN] EXIT THEN HERE XLABEL ! POSTPONE ; SET-OPT ; IMMEDIATE
: LABEL: XN 0 > IF HERE SWAP CELLS XLABEL + ! ELSE DROP THEN ; IMMEDIATE
: GOTO XN 0 > IF 0 AND THEN CELLS XLABEL + @ BRANCH, ; IMMEDIATE
\ adds for ИС Дракон
: NOTFOUND ( a u - ) OVER 4 S" _end" COMPARE 0= IF 4 - SWAP 4 + SWAP ?SLITERAL ELSE NOTFOUND THEN ;
: //Shema 1 PARSE 2DROP ; IMMEDIATE
: ...... 1 PARSE 2DROP ; IMMEDIATE
Эту бибилиотечку сохраним в файле goto.f и подключим его прописав в первой строчке Р-точки в иконе Модуль. Все форт слова с использованием меток и переходов должны начинаться с L: вместо : и завершаться L; вместо ;
поэтому поправим текст в Р-точке схемы-примитива с именем привет. Сохраняем наш проект и нажав F9
убеждаемся что все работает как надо.
А можно ли собрать работающий код без Маршрутного транслятора? Конечно. В данном режиме ИС Дракон не формирует меток и переходов, а формирует код из Р-точек проходя проект по схемам и веткам слева на право и сверху вниз.
Берем наш проект hello1.drt, сохраняем как hello2.drt, перключаем ИС Дракон на сборку без Маршрутного траслятора, модифицируем наш проект. Выкидываем строчку подключения goto.f из Р-точки модуля, в схеме привет в Р-точке меняем L: и L; на обычные. В Р-точке иконы Вывод должен быть форт-код
BEGIN ." HELLO!" CR а в иконе Вопрос
KEY BL = 0= UNTIL вот и все.
Мы воспользовались тем фактом что ИС Дракон скомпонует первой икону номер 6 (Вывод) а затем икону номер 7 (Вопрос) и поставили в нужных местах BEGIN,UNTIL и подправили условие для соответствия алгоритму.
Поработав с этими простейшими примерами, Вы наверно заметили, что принцип работы в ИС Дракон прост: левой кнопкой выбираем (активируем) обьект схемы и листа, а правой выбираем действие из контекстного меню.
Я специально расказал о работе до уровня клика, чтобы первый механический этап прошел быстрее и легче и
наше внимание больше было на алгоритмах и формируемом форт-коде.