Вверх ↑
Этот топик читают: Гость
Ответов: 176
Рейтинг: 12
#1: 2010-10-11 12:58:17 ЛС | профиль | цитата
В HiAsm имеется замечательный язык для написания исходников компонентов - FTCG. Но есть у него минус - писать на нём программы можно только в текстовом редакторе HiAsm. Уж очень я привык рисовать схемы, а тут занялся написанием пакета языка программирования MQL5. Чтобы долго не сидеть с написанием исходников сложных компонентов решил сначала написать пакет для рисования схем самого FTCG.

Установка пакета:

1. Распаковать архив в папку ...HiAsmElements
2. В папке пакета FTCG_pack запустить файл FTCG_pack.his.
3. Запустить HiAsm, нажать кнопку создания нового проекта. Выбрать так как показано на рисунке:
ftcg_pack_new.jpg
4. После нажатия кнопки Ok создастся новый проект. Попробуйте его скомпилировать. Если кнопочка компиляции активна и сама компиляция проходит успешно, то пакет готов к работе.


Для написания компонента нужно выполнить:

1. Первый этап проектирования компонента как всегда начинается с запуска редактора компонентов (Сервис >> Редактор компонентов). Прописываются все точки.

2. После создания конфигурационного файла создаём новый проект в пакете FTCG_pack и сохраняем его в папку code того пакета для которого создаётся компонент. Естественно имя сохранённого файла должно начинаться с префикса hi. Например вот так hiName.sha.

2. После компиляции создаётся исходник с именем hiName.hws

В папке code пакета FTCG_pack уже имеются примеры компонентов, написанных в данном пакете.

Пакет хорошо показал себя при разработке компонентов с многочисленными и разветвлёнными условиями. В частности это пакет MQL5, который тоже будет представлен на этом форуме в будущем.

Набор компонентов будет пополняться по мере их написания.

Пакет имеет версию beta и могут быть ошибки.

Скачать пакет (версия 1.0): ftcg_pack.zip

После установки пакета следует произвести обновление из репозитория SVN.

SVN репозиторий пакета: https://mysvn.ru/toropchin/FTCG_pack/
карма: 0
Время верстки: %cr_time% Текущее время: %time%
4
файлы: 2ftcg_pack.zip [116.2KB] [589], ftcg_pack_new.jpg [25.8KB] [1816]
Голосовали:flud, Konst, wss60, Ravilr
Ответов: 758
Рейтинг: 112
#2: 2010-10-11 13:16:37 ЛС | профиль | цитата
Сначала опиши, как прописать твой FTCG_pack в hiAsm и какие нужно проделать настройки для нормальной работы
карма: 1

0
Ответов: 176
Рейтинг: 12
#3: 2010-10-11 19:22:20 ЛС | профиль | цитата
miver писал(а):
Сначала опиши, как прописать твой FTCG_pack в hiAsm и какие нужно проделать настройки для нормальной работы

См. первое сообщение. Дополнил инструкцией по установке.
------------ Дoбавленo в 19.22:
Dilma, хотелось бы узнать есть ли какие-нибудь незадокументированные возможности FTCG в хелп файле HiAsm?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 215
Рейтинг: 45
#4: 2010-10-13 02:17:51 ЛС | профиль | цитата
Мелкая правка If_Else (добавлены отступы)
Имхо, лучше было бы привести к строчному виду println, print, isdef, isndef в ini соответствующих элементов.
карма: 0

0
файлы: 1hiftcg_if_else.rar [981B] [400]
Ответов: 875
Рейтинг: 101
#5: 2010-10-13 04:14:19 ЛС | профиль | цитата
trace нету нада сделать а так все даже очень хорошо.

[flood]вот надо теперь лень прогнать, а пёрку позвать [/flood]
карма: 1

0
Ответов: 841
Рейтинг: 17
#6: 2010-10-13 09:57:06 ЛС | профиль | цитата
у меня не появилася FTCG_Pack в новых
карма: 0

0
Ответов: 176
Рейтинг: 12
#7: 2010-10-13 11:10:32 ЛС | профиль | цитата
flud писал(а):
trace нету нада сделать а так все даже очень хорошо.

Сделаю trace()
А ведь можно уже сейчас начинать писать компоненты с помощью этого пакета для этого же пакета . Так, что у вас самих он получится минут за пять.
------------ Дoбавленo в 11.10:
GAv писал(а):
у меня не появилася FTCG_Pack в новых

И никаких ошибок HiAsm не выдаёт при запуске файла FTCG_pack.his? Думаю Dilma поможет разобраться
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2010-10-13 11:33:55 ЛС | профиль | цитата
toropchin писал(а):
хотелось бы узнать есть ли какие-нибудь незадокументированные возможности FTCG в хелп файле HiAsm?

не очень понимаю о чем речь идет

toropchin писал(а):
А ведь можно уже сейчас начинать писать компоненты с помощью этого пакета для этого же пакета

не совсем ясно зачем у всех элементов пакета стоит префикс FTCG_ - предполагается встраивание куда-то?

toropchin писал(а):
И никаких ошибок HiAsm не выдаёт при запуске файла FTCG_pack.his?

при установке пакета никаких ошибок и не может быть. Все очень просто: если пользователь не знает, как ставить пакет, то писать ему элементы еще рано.
карма: 27
0
Ответов: 176
Рейтинг: 12
#9: 2010-10-13 11:47:15 ЛС | профиль | цитата
Dilma писал(а):
не очень понимаю о чем речь идет

Хотел спросить, может в FTCG появились какие-нибудь новые функции уже после выпуска справки, которая лежит в дистрибутиве HiAsm.

Dilma писал(а):
не совсем ясно зачем у всех элементов пакета стоит префикс FTCG_ - предполагается встраивание куда-то?

Можно этот префикс и убрать. Просто изначально, когда только начал писать пакет, не дошло, что нужно прописать для этого пакета свой компилятор. Я использовал стандартный Copy. Естественно при компиляции, если исходник сохранён в папке code файл с расширением hws никак не появлялся. Вот и колдовал с префиксом, пока не докумекал о правильном решении.

[flood]
Dilma писал(а):
при установке пакета никаких ошибок и не может быть. Все очень просто: если пользователь не знает, как ставить пакет, то писать ему элементы еще рано.

Это точно![/flood]
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2010-10-13 13:24:02 ЛС | профиль | цитата
toropchin писал(а):
может в FTCG появились какие-нибудь новые функции уже после выпуска справки, которая лежит в дистрибутиве HiAsm.

справка более менее обновляется, только смотрень нужно через WikiCenter
карма: 27
0
Ответов: 176
Рейтинг: 12
#11: 2010-10-16 10:58:46 ЛС | профиль | цитата
Пакет можно обновлять через SVN репозиторий по ссылке https://mysvn.ru/toropchin/FTCG_pack/
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 176
Рейтинг: 12
#12: 2010-10-22 10:55:06 ЛС | профиль | цитата
Нужно создать блок внутри уже существующиего блока. Блок планируется использовать для объявления в нём переменных. В качестве примера привожу код исходника компонента FTCG_Function.


func doFunc()
block.reg('BLK_VARS')

switch(Type)
case(0):
println('func '+code(Name)+'('+code(DataFromIn)+')')
block.inclvl()
block.select('BLK_VARS')
println('Тут будем объявлять переменные')
block.select(BLK_DEFAULT)
event(onFunc)
block.declvl()
println('end')
case(1):
println('func '+code(Name)+'()')
block.inclvl()
event(onFunc)
if(isndef(Return) or linked(Return))
println('return('+code(Return)+')')
end
block.declvl()
println('end')
end
end

Компонент должен формировать вот такой код при компиляции:

func Init()
Тут будем объявлять переменные
end
func doStop()
Тут будем объявлять переменные
end

А выдаёт вот такой:

func Init()
end
func doStop()
end

Тут будем объявлять переменные
Тут будем объявлять переменные


То есть строчку "Тут будем объявлять переменные" выности в конец кода. Как сделать чтобы получался первый вариант?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 463
Рейтинг: 9
#13: 2010-10-22 11:05:36 ЛС | профиль | цитата
Dilma писал(а):
Все очень просто: если пользователь не знает, как ставить пакет, то писать ему элементы еще рано.

toropchin писал(а):
Уж очень я привык рисовать схемы,


но можно же создать элемент просто контейнером, (без писания ручками , стандартными средствами) а потом в редакторе элемента прописать нужное или я ошибаюсь?
карма: 0

0
Ответов: 5446
Рейтинг: 323
#14: 2010-10-22 21:03:04 ЛС | профиль | цитата
toropchin, основные моменты по памяти нарисую, остальное сам. Также посмотри пакет wxWidgets, как там декларируются переменные.

// Создаём блок для хранения объявлений переменных
// reggen здесь нужен, чтобы имя блоко было уникальным (не было путаницы)
// в BLK_BODY будем собирать тело функции
// в BLK_DEFAULT (который также reggen-ом был создан) - храним текущий текст модуля; текст этого блока пойдёт в результате в файл
var(BLK_VARS, BLK_BODY)
fvar(old)
BLK_VARS = block.reggen()
BLK_BODY = block.reggen()
block.select(BLK_BODY)
//... тут создаём тело функции ...
// добавляем переменную:
old = block.select(BLK_VARS)
println(........)
block.select(old)

// Завершаем генерацию:
block.select(BLK_DEFAULT)
println('func '+code(Name)+'(_data)') //например
block.select(BLK_VARS)
block.copyto(BLK_DEFAULT)
block.select(BLK_BODY)
block.copyto(BLK_DEFAULT)
block.select(BLK_DEFAULT)
block.delete(BLK_BODY)
block.delete(BLK_VARS)
карма: 1

0
Ответов: 176
Рейтинг: 12
#15: 2010-12-16 09:18:36 ЛС | профиль | цитата
Возник такой вопросик. Не могу добиться, чтобы работали точки Event контейнера. Контейнер брал из пакета VBS. Все остальные точки работают, а event не генерирует событие.


Add(FTCG_EntryPoint,8756036,49,420)
{
link(onStart,12089099:doInline,[])
}
Add(FTCG_MultiElementEx,12089099,105,420)
{
link(onEvent2,2154060:doInline,[])
}
BEGIN_SDK
Add(EditMultiEx,382000,21,21)
{
WorkCount=#8:doInline|
EventCount=#8:onEvent2|
link(doInline,14182020:doEvent1,[(53,27)(53,62)])
}
Add(Inline,13592119,140,28)
{
InlineCode="trace('код внутри контейнера')"
}
Add(FTCG_Hub,14182020,84,56)
{
link(onEvent1,13592119:doInline,[(119,62)(119,34)])
link(onEvent2,382000:onEvent2,[(210,69)(210,27)])
}
END_SDK
Add(Inline,2154060,161,420)
{
InlineCode="trace('Код снаружи контейнера')"
}

------------ Дoбавленo в 09.18:
Уже разобрался. Нехватало исходника внутреннего редактора контейнера.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)