Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 17:04

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: C++ -> Qt, Python -> PyQt, SPF -> ???
СообщениеДобавлено: Ср фев 24, 2010 14:29 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Может кто делал что то похожее? Нужна DLL или SO, как промежуточный слой перед Qt. Причем не обязательно делать привязку ко всей Qt, хоть примерчик но именно с SPF.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 24, 2010 20:15 
Не в сети

Зарегистрирован: Чт ноя 23, 2006 00:44
Сообщения: 494
Откуда: СПб
Благодарил (а): 19 раз.
Поблагодарили: 8 раз.
А ещё лучше замастрячить Форт под Symbian!!!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 24, 2010 21:20 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Удалось получить первый результат в Linux. Из формы QT, определенной в DLL по нажатию кнопки вызвать
слово SPF. Таким образом, совершенно реально изготовить DLL с графикой для SPF.
Эту DLL можно дописывать на С++ при необходимости в новых графических функциях, т.к. она фактически
обертка для Qt. Изобретать велосипед не охота, неуже ли нет готовой?
Код:
USE libQtGui.so.4
USE libgena.so.1.0.0
S" adrExecZIM" DROP dlsym2 CONSTANT adrExecZIM      \ Адрес callback
S" adrForthWord" DROP dlsym2 CONSTANT adrForthWord  \ Адрес выполняемого слова forth
: hello S" Привет из SPF ... " TYPE ;
' hello adrForthWord ! \ Запишем в переменную которая в dll
: e DUP EXECUTE 0 ; ' e 1 CELLS CALLBACK: Test  \ Процедура, которая будет вызвана из dll
' Test adrExecZIM !  \  Запишем в переменную которая в dll
(( ARGC ARGV )) init_qt DROP  \ Инициализируем QT
(( )) f2 DROP                 \ Вызыаем форму и реагируем на нажатие кнопки

Выдержки из кода С++ загружаемой libgena.so.1.0.0
Код:
typedef void (*ExecZIM)(void *);    //  определим  тип  для вызываемой функции
extern "C" { void *adrExecZIM;   }              // Адрес под Вызов CALLBACK
extern "C" { void *adrForthWord; }              // Адрес под аргумент CALLBACK
QApplication *qt_app;   // Указатель на приложение
MyWidget::MyWidget(QWidget *parent)   : QWidget(parent)
{
     setFixedSize(200, 120);
     QPushButton *quit = new QPushButton("Quit", this);
     quit->setGeometry(62, 40, 75, 30);
     connect( quit, SIGNAL(clicked()), this, SLOT(tt()) );
}
void MyWidget::tt(void) {
  ((ExecZIM)adrExecZIM)((void *)adrForthWord);
}
extern "C"  void *init_qt(int qargc, char *qargv[]) {
     qt_app = new QApplication(qargc, qargv);
     return (void *)qt_app;
}
extern "C" void f2(void) {
    MyWidget *wf1;
    wf1 = new MyWidget();
    wf1->show();
    qt_app->exec();
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 14:25 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Нужна ли форту кросплатформенная графика? Допустимо ли ввести в дистрибутив форта DLL или SO для вызова графики?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:34 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mgw писал(а):
Нужна ли форту кросплатформенная графика? Допустимо ли ввести в дистрибутив форта DLL или SO для вызова графики?


www.msyst.ru/quark.pdf

Вобщем-то целый Форт в виде dll, который работает с виртуальной графической поверхностью, отображаемой в OpenGL. На Qt оно тоже есть, но несколько не так, как заявлено в теме.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 19:10 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Под графикой я понимаю библиотеку элементов графики, ориентированную на построение пользовательского интерфейса, причем кросплатформенную, ориентированную на ту же QT например. Причем, она должна быть доступна в исходных кодах и входить как рекомендованное расширение в дистрибутив. Сделать её на чистом форте не представляется возможным (хотя могу и ошибаться) вот и вижу пока единственный путь в написании на C++ загружаемой библиотеки, выступающей прослойкой между SPF и QT.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 19:32 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mgw писал(а):
Под графикой я понимаю библиотеку элементов графики, ориентированную на построение пользовательского интерфейса, причем кросплатформенную, ориентированную на ту же QT например. Причем, она должна быть доступна в исходных кодах и входить как рекомендованное расширение в дистрибутив. Сделать её на чистом форте не представляется возможным (хотя могу и ошибаться) вот и вижу пока единственный путь в написании на C++ загружаемой библиотеки, выступающей прослойкой между SPF и QT.

Тут у меня пока два соображения/направления. Первое: реализовывать элементы управления непосредственно на Форте. Так сказать, наперекор всему. ( http://www.msyst.ru/qide.jpg )
Второе - привязывать слова Форта к элементам управления Qt. Это уже было реализовано в среде Proton в рамках пробы и в САПР QuarkCAD. Общая идея - нажатие на кнопку (и прочие действия) не вызывают некий фиксированный код, а сбрасывают в Форт-машину строку вида "ACTION-BUTTON1". Соответственно, Форт-машина должна сначала определить такие слова, а при необходимости привязать к ним что-то другое.
Следующий шаг, который сейчас "образмеривается" - двусторонняя клиент-серверная модель общения между Фортом и Qt. То есть Форт вызывает программу-сервер, которая динамически создает элементы управления Qt. А эти элементы, в свою очередь, будут передавать строки Форту.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 20:09 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Цитата:
Первое: реализовывать элементы управления непосредственно на Форте.

Красиво, но наверное очень трудоёмко. Больше подходит к Форт ОС.
Цитата:
Следующий шаг, который сейчас "образмеривается" - двусторонняя клиент-серверная модель общения между Фортом и Qt. То есть Форт вызывает программу-сервер, которая динамически создает элементы управления Qt. А эти элементы, в свою очередь, будут передавать строки Форту.

Зачем строки? Это динамический поиск в форте, а это время. Быстрее осуществлять вызов CALLBACK слова форта, передавая ему параметры при необходимости. Таким образом форт будет обрабатывать события QT (пример на Linux и SPF выше).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 20:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mgw писал(а):
Красиво, но наверное очень трудоёмко. Больше подходит к Форт ОС.

Я бы не сказал, что особо трудоемко. Сейчас библиотека имеет размер порядка 30 кб, но элементы там самые простые - кнопки, bmp, статический текст, чекбокс.
mgw писал(а):
Зачем строки? Это динамический поиск в форте, а это время. Быстрее осуществлять вызов CALLBACK слова форта, передавая ему параметры при необходимости. Таким образом форт будет обрабатывать события QT (пример на Linux и SPF выше).

Callback тоже пробовали, но какой-то принципиальный выигрыш при этом не наблюдается. Общение с помощью текста получается более регулярным, к тому же допускает массу интересных интерфейсных бонусов. Например, в свойствах элемента управления можно посмотреть, что он вызовет, отредактировать эту строку, или сбросить ее в буфер, чтобы собрать макрос из строк, принадлежащих нескольким элементам управления.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 05, 2010 18:58 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Хитро! А строку чем выполняете EVALUATE или дополнительным интерпретатором?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 05, 2010 19:20 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mgw писал(а):
Хитро! А строку чем выполняете EVALUATE или дополнительным интерпретатором?

EVALUATE. В dll (Quark-Forth, например) такая функция экспортируется, в qt-версии это h-файл, где Evaluate - просто функция, которая при необходимости подключается к какому-либо классу.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB