OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 10:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
ilovb писал(а):
Большое спасибо!
Это вам спасибо за интересный проект и, тем более, за поддержку XDS!
ilovb писал(а):
А насчет псевдонимов функций не подскажете?
Подскажу, раз такое дело.

Чтобы переименовать функции надо lib-файл создавать не сразу из DLL, а из IDF-файла (import definition). В этом самом IDF-файле задаёте переименования какие вам нужны. Удобнее всего получить IDF-файл из EDF-файла путём ручной или автоматической правки (я использовал SED).

Например, получаем EDF-файл: xlib /edf iup.edf iup.dll
Цитата:
LIBRARY iup.dll

EXPORTS
IupAlarm
IupAppend
IupButton
IupCanvas
IupCbox
IupCboxv
...

Обрабатываем и создаём IDF-файл:
Цитата:
FROM iup.dll IMPORT
IupAlarm AS Alarm,
IupAppend AS Append,
IupButton AS Button,
IupCanvas AS Canvas,
IupCbox,
IupCboxv,
...
;
Если что-то переименовывать не нужно, оставляете просто имя импортируемой функции, не добавляя часть "AS ...". То есть, это просто список импортируемых функций через запятую, в конце должна быть точка с запятой.

Затем из этого текстового списка формируем бинарный lib-файл для линкера: xlib /implib iup.lib iup.idf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 10:46 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
ilovb писал(а):
Допилю этот бинд сегодня вечером и выложу на google code.

Лучше на http://GitHub.com, там заметно удобнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 10:59 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Александр, отлично! Спасибо еще раз. А я уж было подумал что никак :)

Димыч, а чем github лучше?

Мне google code нравится за:
1. высокая скорость работы
2. простота интерфейса
3. возможность писать описания к файлам
4. удобно делать ссылки на исходники
5. нет нужды делать readme.md
6. много настроек интерфейса
7. можно указывать ключевые слова для проекта
и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 11:22 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
ilovb писал(а):
Димыч, а чем github лучше?

Мне google code нравится за:
...
и т.д.


Это GIT, в первую очередь.
Ну а все остальное - удобство и пр. - относится и к github.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 12:23 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Так google code тоже GIT (и SVN и Mercurial)
Я пользуюсь Mercurial (не знаю чем он отличается от GIT, но мне нравится оболочка http://tortoisehg.bitbucket.org/)

Предлагаю всем заинтересованным проголосовать где лучше разместить, и под какую VCS.
Размещу там, где большинству будет удобнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 12:28 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
ilovb писал(а):
Размещу там, где большинству будет удобнее.

Размести там, где считаешь нужным, не спрашивая.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 12:32 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
В таком случае я размещу на google code под GIT.
А на github сделаю зеркало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 13:47 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Все привязки к различным библиотекам я держу в одном проекте-репозитарии на BitBucket. Суть в том, что всё централизованно. Не создаю для каждого чиха новый репозиторий, а добавляю в папку ещё один binding.

https://bitbucket.org/Romiras/bindings

Принципиальной разницы в выборе хостинга для меня нет. Главное, чтобы поддерживались Subversion, Git и не был платным. Они примерно одинаковы.
Один лишь нюанс (на любителя, конечно): исходники в репозитории я держу лишь в текстовом формате в кодировке UTF-8 (CpcUtf8Conv), для простоты просмотра людьми, броузером.
И ещё для любой привязки к библиотеке я использую в имени модуля префикс "Libs" (потому что "Lib" уже занят в коллекции CPC).
А поверх той API я строю КП компоненты в отдельной подсистеме (такие как Cairo).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 19:57 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Люди, подскажите еще как в XDS адрес процедуры получить. SYSTEM.ADR процедуры не принимает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 20:26 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Получение адреса процедуры нужно для установки колбэков.
Вот все их виды:
Код:
typedef int (*IFidle)(void);  /* idle */

typedef void (*IFii)(int, int); /* globalkeypress_cb */
typedef void (*IFiis)(int, int, char*);  /* globalmotion_cb */
typedef void (*IFiiiis)(int, int, int, int, char*);  /* globalbutton_cb */
typedef void (*IFfiis)(float,int,int,char*);  /* globalwheel_cb */

typedef int (*IFn)(Ihandle*);  /* default definition, same as Icallback (ncols_cb, nlines_cb)*/
typedef int (*IFni)(Ihandle*, int);   /* k_any, show_cb, toggle_action, spin_cb, branchopen_cb, branchclose_cb, executeleaf_cb, showrename_cb, rightclick_cb, extended_cb, height_cb, width_cb */
typedef int (*IFnii)(Ihandle*, int, int);  /* resize_cb, caret_cb, matrix_mousemove_cb, enteritem_cb, leaveitem_cb, scrolltop_cb, dropcheck_cb, selection_cb, select_cb, switch_cb, scrolling_cb, vspan_cb, hspan_cb */
typedef int (*IFniii)(Ihandle*, int, int, int); /* trayclick_cb, edition_cb */
typedef int (*IFniiii)(Ihandle*, int, int, int, int); /* dragdrop_cb */
typedef int (*IFniiiiiiC)(Ihandle*, int, int, int, int, int, int, void*);  /* draw_cb */
typedef int (*IFniiiiii)(Ihandle*, int, int, int, int, int, int);  /* OLD draw_cb */

typedef int (*IFnff)(Ihandle*, float, float);    /* canvas_action */
typedef int (*IFniff)(Ihandle*,int,float,float);  /* scroll_cb */
typedef int (*IFnfiis)(Ihandle*,float,int,int,char*);  /* wheel_cb */

typedef int (*IFnsCi)(Ihandle*, char*, void*, int);  /* dragdata_cb */
typedef int (*IFnsCiii)(Ihandle*, char*, void*, int, int, int);  /* dropdata_cb */
typedef int (*IFnsiii)(Ihandle*, char*, int, int, int);  /* dropfiles_cb */

typedef int (*IFnnii)(Ihandle*, Ihandle*, int, int); /* drop_cb */
typedef int (*IFnnn)(Ihandle*, Ihandle*, Ihandle*); /* tabchange_cb */
typedef int (*IFnss)(Ihandle*, char *, char *);  /* file_cb */
typedef int (*IFns)(Ihandle*, char *);  /* multiselect_cb */
typedef int (*IFnsi)(Ihandle*, char *, int);  /* copydata_cb */
typedef int (*IFnis)(Ihandle*, int, char *);  /* text_action, multiline_action, edit_cb, rename_cb */
typedef int (*IFnsii)(Ihandle*, char*, int, int);  /* list_action */
typedef int (*IFniis)(Ihandle*, int, int, char*);  /* motion_cb, click_cb, value_edit_cb */
typedef int (*IFniiis)(Ihandle*, int, int, int, char*);  /* touch_cb */
typedef int (*IFniiiis)(Ihandle*, int, int, int, int, char*);  /* button_cb, matrix_action, mousemotion_cb */
typedef int (*IFniiiiiis)(Ihandle*, int, int, int, int, int, int, char*);  /* mouseclick_cb */

typedef int (*IFnIi)(Ihandle*, int*, int); /* multiselection_cb, multiunselection_cb */
typedef int (*IFnd)(Ihandle*, double);  /* mousemove_cb, button_press_cb, button_release_cb */
typedef int (*IFniiIII)(Ihandle*, int, int, int*, int*, int*); /* fgcolor_cb, bgcolor_cb */
typedef int (*IFniinsii)(Ihandle*, int, int, Ihandle*, char*, int, int); /* dropselect_cb */
typedef int (*IFnccc)(Ihandle*, unsigned char, unsigned char, unsigned char); /* drag_cb, change_cb */
typedef int (*IFniIIII)(Ihandle*, int, int*, int*, int*, int*); /* multitouch_cb */

typedef char* (*sIFnii)(Ihandle*, int, int);  /* value_cb */
typedef char* (*sIFni)(Ihandle*, int);  /* cell_cb */


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Понедельник, 06 Май, 2013 23:30 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
В общем я решил таки использовать Mercurial :roll: : https://code.google.com/p/o2-iup/
И сделал зеркало на github: https://github.com/ilovb/o2-iup

Бинд почти готов к использованию. Осталось только с колбэками разобраться.

Функции с переменным количеством параметров работают. Т.е. бинд можно использовать практически один в один как на Си.

Во вложении проект с биндом, библиотекой и примером.

Изображение

ps Очень рекомендую попробовать вставить в примере такую строчку :) :
...
Iup.Show(dlg);
Iup.Show(Iup.LayoutDialog(dlg));
Iup.MainLoop();
...


Вложения:
o2iup.zip [374.57 КБ]
Скачиваний: 403
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 09:27 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
ilovb писал(а):
Люди, подскажите еще как в XDS адрес процедуры получить. SYSTEM.ADR процедуры не принимает.
Покажите пример, как предполагается использовать колбэки. Куда их передавать или устанавливать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 09:49 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вот как я в CP сделал: viewtopic.php?f=24&t=3865&p=79803#p79803

Колбэк в бинде определен так:
Код:
Icallback*    = INTEGER;

Функция установки колбэка так:
Код:
PROCEDURE [ccall] SetCallback*   ["IupSetCallback" ] (ih: Ihandle; name: Istring; func: Icallback): Icallback;

Используется так:
Код:
PROCEDURE [ccall] BtnCB(self: Iup.Ihandle); (* наш колбэк *)
BEGIN
    Iup.SetAttribute(ml, "VALUE", "Hello!")     
END BtnCB;
...
bt := Iup.Button("Button", "btn_test"); (* кнопка на форме *)
prev := Iup.SetCallback(bt, "ACTION", SYSTEM.ADR(BtnCB)); (* действие при нажатии на кнопку *)


В CP это возможно т.к. SYSTEM.ADR определена так:
Цитата:
ADR(v) любой INTEGER адрес переменной v
ADR(P) P: PROCEDURE INTEGER адрес процедуры P


В XDS же SYSTEM.ADR не принимает процедуры.

В связи с этим на данный момент я определил колбэк только одного вида (для примера):
Код:
Icallback*    = PROCEDURE ["C"] (self: Ihandle);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 10:10 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Спасибо за пример, вопрос стал гораздо понятнее.
ilovb писал(а):
Колбэк в бинде определен так:
Код:
Icallback*    = INTEGER;
Будьте осторожны: тип INTEGER в XDS Oberon-2 имеет размер два байта, а адрес должен быть четырёхбайтовым. Размер типа INTEGER в XDS Modula-2 определяется директивой M2BASE16.

Для ваших целей нужно использовать приведение к типу LONGINT с помощью SYSTEM.VAL(LONGINT, <ProcName>).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 10:15 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Я это уже понял. :) В бинде к XDS Oberon-2 везде LONGINT https://code.google.com/p/o2-iup/source/browse/iup.ob2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 16:56 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Победил колбэки: https://code.google.com/p/o2-iup/source ... 9e928ae6dc

Самое смешное, что об этом сказано тут: viewtopic.php?f=27&t=4340&start=20#p79807
Цитата:
...pointer, address, opaque, and procedure type values are converted to ADDRESS ...

:D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 17:35 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Александр Ильин писал(а):
Спасибо за пример, вопрос стал гораздо понятнее.
Для ваших целей нужно использовать приведение к типу LONGINT с помощью SYSTEM.VAL(LONGINT, <ProcName>).


Вот я слепой :( Вы же написали решение, а я не обратил внимание на <ProcName> и вложил другой смысл в предложение.

Теперь не знаю какое решение лучше...
Ваше мне кажется более правильным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотеки виджетов для XDS?
СообщениеДобавлено: Вторник, 07 Май, 2013 22:57 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Остановился на варианте с SYSTEM.VAL

На github зеркало пересоздал. Что-то оно у меня никак не заводилось. Сейчас вроде заработало.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB