Page 2 of 4

Re: рисовалка графиков

Posted: Sun Jun 08, 2008 11:30 pm
by vectoroc
Круто (про mgtk, хотя рисовался тоже крута ;))
Насколько mgtk реализует функционал gtk ?

Re: рисовалка графиков

Posted: Mon Jun 09, 2008 6:39 am
by Albom
В mgtk под Менуэт (да, именно под Менуэт!) реализовано всё, что нужно для построения простого интерфейса. Отличие от GTK - использование классов. А так есть классы приложения, виджета в общем, а также конкретно битмапа, кнопки (как обычной, так и радио или чекбокса), события, пера, слайдера, текста (ну и может ещё какие-то классы добавились - я библиотеку пол года назад скачивал).

Re: рисовалка графиков

Posted: Mon Jun 09, 2008 7:05 pm
by barsuk
Версия 0.4.
Исправлены указанные баги, улучшена работа с памятью.
Пока приостанавливаю разработку этого приложения, переключаюсь на панель задач (viewtopic.php?f=9&t=809&start=15).

Albom, mgtk полезная библиотека, но в прилагавшемся примере у меня не работает GInputLine (возможно, потому что пример скомпилен под Menuet, а не под Koilibri?).

Re: рисовалка графиков

Posted: Tue Jun 10, 2008 1:16 pm
by Nable
to barsuk
Я ради интереса скачал mgtk и потестил. В общем фишка такая: текстовое поле воспринимает только латинские буквы и цифры, в общем-то всё кроме кириллицы. Этот контрол (элемент) надо переделать, т.к. работа с клавиатурой в Менуэте и Колибри отличается, да и сам контрол реализован ч\ж.

Re: рисовалка графиков

Posted: Wed Jun 11, 2008 6:49 am
by Albom
контрол реализован ч\ж
как и многое в этой (да и не только этой) ОС! :)
текстовое поле воспринимает только латинские буквы и цифры, в общем-то всё кроме кириллицы
а зачем больше? для ввода формул сойдёт!

Re: рисовалка графиков

Posted: Thu Oct 23, 2008 9:56 pm
by barsuk
Наконец сумел прикрутить edit_box от <Lrz>. В честь этого версия 0.5.
И добавил кнопку "Edit", которая открывает указанный файл в tinypad для редактирования.

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 7:31 am
by <Lrz>
Что-то я компонента не наблюдаю в программе при запуске. В самом бинарнике есть обширные области инициализированные как 0х0 О_о . Если нужен кусок памяти, можно попросить у системы выделить его, в крайнем случае инициализировать область в конце программы. К примеру, так:
- иницализация массива из 500 байт в конце программы

Code: Select all

use32                ; транслятор, использующий 32 разрядных команды
    org 0x0                 ; базовый адрес кода, всегда 0x0
    db 'MENUET01'           ; идентификатор исполняемого файла (8 байт)
    dd 0x1                  ; версия формата заголовка исполняемого файла
    dd start                ; адрес, на который система передаёт управление
                            ; после загрузки приложения в память
    dd i_end      ; размер приложения
    dd i_end      ; Объем используемой памяти, для стека отведем 0х100 байт
    dd i_end      ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
    dd 0x0,0x0                ; указатель на строку с параметрами.

start:
.....
array_of_500:
rb 500 ; резервирует 500 байт
align 16
rb 0x100 ; это место для стека
i_end:
Вот такая последовательность обеспечит инициализацию 500 байт за кодом приложения и без включения кода типа 0x0 в бинарник. Конечно, перед использованием, нужно очистить массив.

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 10:30 am
by Heavyiron
А я что-то так и не понял, что в архиве: graph.kex (от 23.10), которая не запускается и просто graph, которая запускается нормально, но это версия от 16.06

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 12:35 pm
by barsuk
<Lrz>, а чем плох такой подход: выделять массив как придется, а затем сжимать kpack'ом, и все нули сожмутся в несколько байт?
Heavyiron wrote:А я что-то так и не понял, что в архиве: graph.kex (от 23.10), которая не запускается и просто graph, которая запускается нормально, но это версия от 16.06
Просто graph попал по ошибке, это старая версия. Новая - graph.kex. Для запуска необходим box_lib.obj. Если используется эмулятор KlbrInWin, box_lib.obj нужно поместить на рамдиск.

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 12:47 pm
by <Lrz>
barsuk
1. Если нет kpack, то размер приложения увеличивается.
2. Если тебе нужен массив данных, то его можно выделять в стеке, или как я предложил (для небольших данных). Твой подход, не совсем правильный, т.к. пользователь не всегда использует kpaсk.
Все это имхо. Я не использую области в коде, когда мне нужно выделить значительные участки памяти.

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 1:11 pm
by Serge
barsuk

Если надо динамически выделять память то смотри ф. 68.11 68.12 68.13
P.S. Эту память не надо обнулять.

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 2:20 pm
by mike.dld
Пример, когда не нужно объявлять данные посреди кода прост: может случиться так, что в результате недостаточности проверок, данные затрут код. Утверждение, конечно же, не относится к константным инициализированным данным.

Re: рисовалка графиков

Posted: Fri Oct 24, 2008 4:31 pm
by barsuk
<Lrz>, расположение данных за кодом просто осуществить в FASM и непонятно как в Visual C++, так что использую динамическую память (но для буфера для параметров вызова приложения этот способ не годится).
Serge, в модулях Колибри для С++ была реализация malloc/free через функцию 64. Я переписал их под 68.11/68.12 (раз они предпочтительнее для использования).
mike.dld, если объявить данные после кода, они в такой ситуации выйдут за границы выделенной памяти или затрут другие данные... Проверки важны в любом случае, но затирание кода, имхо, легче заметить (по падению приложения), чем затирание других данных.

Re: рисовалка графиков

Posted: Sat Oct 25, 2008 9:57 am
by Heavyiron
barsuk wrote:Для запуска необходим box_lib.obj. Если используется эмулятор KlbrInWin, box_lib.obj нужно поместить на рамдиск.
Так он есть в папке sys/lib, или у тебя какая-то своя версия? Если такая же, как в eolite и htmlview, то ИМХО не нужно городить огород из бокс-либов в каждой папке, а прописать в программе путь к /rd/1/lib/box_lib.obj. К тому же программа перестала понимать параметры запуска - если запускать из eolite файлы *.cvs, то открывается пустое окно программы, типа файл не загружен.

Re: рисовалка графиков

Posted: Sat Oct 25, 2008 4:39 pm
by barsuk
Теперь box_lib.obj берется из /sys/lib/. Годится любая версия, но я тестировал с последней (29.09.2008).
С параметрами запуска был баг. Теперь они работают как нужно.