Page 1 of 4

Kolibri Foundation Classes (KFC)

Posted: Thu Dec 27, 2007 3:31 pm
by SHREDER
Короче я тоже начал делать нечто подобное основанное на libc пока окрестил kfc (Kolibri Foundation Classes). Буду выкладывать код по мере написания. Пока вот есть файл для поддержки цветов для GUI. Можно юзать уже сейчас.

Сейчас работаю над классом Window думаю реализовать обработчики событий через функторы и биндеры (связыватели и адаптеры).

Собственно вот colors.hpp на #define _32_BIT_OS 1 #define _64_BIT_OS 0 пока что необращайте внимания.

Re: С++ библиотека

Posted: Thu Dec 27, 2007 9:03 pm
by SHREDER
Вот что я собственно навоял, пока что перво-черная версия CWindow и вообще не работает в Kolibri.
Но реализована модель событий. Cобствено если убрать заглушку libc функций
пожалуй это будет работать (но пока не ручаюсь).
(Почему-то под виндами и MinGW libc наглухо отказался собиратся)

Инструкции для тех кто хочет подключится к проекту:

Инструкции по запуску всего этого. Привожу пока только пример который еще в KOS не работает (скоро поправлю).
1. Необходимый софт - установленная OS Window либо Linux.
2. libc - см. суда http://diamondz.land.ru/hll/hll.htm#gcc
3. boost (если у вас Linux то с большой долей вероятности boost у вас уже есть установленный и лежит в папке
/usr/include/boost). В случае с Windows его нужно скачать с http://www.boost.org (11MB) после чего
разархивировать в какую нибудь папку. Т.к я не использую библиотеки в cpp файлах то билдить его не нужно.
4.Code::Blocks (http://www.codeblocks.org 2MB) т.к. пока что нет make файлов (ну и вообще рефактор потребуется в дальнейшем). Для большинства распространенных Linux есть пакет и есть версия для Windows. Если вы устанавливаете версию для Windows то советую качать сразу версию с встроенным mingw.
5. Компилятор gcc (хотя в пирнципе пойдет любой С++ копилятор поддерживающий стандарт) в Linux - gcc 3.3 or hi
в Windows сойдет MinGW.
Собственно и все.

После установки откройте проект - console.cbp из приатаченного к посту зипа.

1.Идите суда - Buid->Compiller options (в самом низу)
2. В открывшемся окне - переходите на вкладку Directories
3. Жмете add и прописываете путь к boost
В винде напирмер у меня это E:\boost\boost_1_34_1
В Linux обычно /usr/include/boost
4. Для libc дейсвия аналогичны boost (но пока вместо libc функций заглушки).

Все можно компилировать и запускать (думаю как разберетесь).

Собственно пример показывет как пользоватся CWindow классом. Для того что-бы обработать сообщение от операционной системы нужно создать функцию - обработчик. Она дожна иметь сигнатуру
void <function name>(void);

После чего прибиндить ее к функтору с помощью boost::bind см. main.cpp
Вначале следует прибиндить функцию которая инициализирует окно
window.setInitialization(boost::bind(oninit));
Это может быть функция - метод класса или просто функция как в demo (см. документацию по boost:bind а лучше сразу суда - http://www.boost.org/libs/bind/bind.html#with_functions для начала).
Если вы вызовете handleEvent() до того как присоединили эту функцию - выбросится исключение.
Функция обязательно должна окончится вызовом из libc __menuet__window_redraw(2) если это будет рабочее
ПО для колибри. (Потом подумаю как исправить).

Заглушки висят в файле window.cpp где __menuet__wait_for_event() выдает что произошло событие EVENT_KEY т.е. нажата клавиша клавиатуры. И функции сигнализируют о том что произошла обработка события банальным методом
"cout<<". Если запустить получнный exe/a можно увидеть что событийная модель (а это патерн Command) работает.

Для тех кто будет писать "типа зачем выкладываеш то что в KOS не работает". Это собственно первая итерация разработки цель которой определить архитектуру и принцип работы библиотеки. Я не хочу чтоб потом все строилось на моем ИМХО. И возможно часть кода пока не правильная.

P.S. libc к сожалению - полная ж()па, ей можно пользоватся но это ИМХО маразм (покрайней мере те сорцы которые есть у меня) .Функции практически никак не документированы :(. Посему я попросил у кого есть libc нормальном виде скинуть куда нить и дать линк.

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Dec 29, 2007 12:06 pm
by shamaz.mazum
Про libc - согласен, но и в исправленном виде - это маразм

Надо делать что-нибудь объектно-ориентированное. С для данных целей не пригоден

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Dec 29, 2007 7:05 pm
by bw
libc обязательно нужен для развития KOS. Так же как и большинство стандартов POSIX. Нужны не как состовляющие, а как довесок, хотя вы можете относиться к ним и как к основополагающим. Это реальность, с которой нужно мириться. Это все ИМХО и спорить я не буду :-). То что делает SHREDER, тоже очень нужно. К названию претензий нет, собственно мне безразлично название, если это будет отлично ездить.

..bw

Re: Kolibri Foundation Classes (KFC)

Posted: Thu Jan 03, 2008 11:05 pm
by kooser
2shamaz.mazum
>Верно мыслите. Но не такой. Индусы делали.
нишариш

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 8:59 am
by Melian
2kooser

shamaz.mazum шарит. Мне тоже не понравилось. Хотя могу исправить. Дело в том, что некоторые функции делают вообще НЕ ТО, что должны, судя по документации. Так что никакого POSIX

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 11:03 am
by kooser
Все косяки libc исправятся после рекомпиляции программ с новой версией. а без оной этих программ не будет вобще.

Вы не познали Дзен колибри %)

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 11:19 am
by Melian
Ну да. Не проникся.
kooser wrote:Все косяки libc исправятся после рекомпиляции программ с новой версией
Ну я на это надеюсь. А можно эту самую новую версию libc? Для ознакомления

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 1:57 pm
by andrew_programmer
Это вы про какую новую версию libC говорите ?
Про ту, что описана в конце этой темы viewtopic.php?f=2&t=929&start=0 ?
Это та самая libC, что и на сайте diamond + несколько новых функций.
Есть еще и libCk (libC for KolibriOS) она пишется с нуля и пока что значительно уступает menuetlibc
по количеству функций.

P.S.

Чтобы не вводить в заблуждение, скажу, что обе libC для KolibriOS. Просто есть несколько причин,
почему пишется libCk, а не дополняется menuetlibc.

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 3:38 pm
by Melian
Ну тогда, там багов дофига. Косорукие писали. Хотите пример идиотской функции?

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 3:52 pm
by andrew_programmer
Melian

Насколько я понимаю, menuetlibc основана на libC для DOS из проекта DJGPP (порт GCC под DOS).

Если ты можеш что-то сделать лучше - делай. У нас всё на таком принципе основано. Можеш сделать лучше - делай (при этом не опплёвывая труд других людей).

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 4:04 pm
by Melian
andrew_programmer wrote:Насколько я понимаю, menuetlibc основана на libC для DOS из проекта DJGPP (порт GCC под DOS).
Нафиг ДОС
andrew_programmer wrote:не опплёвывая труд других людей
Энто не труд, энто почесывание рук об клавиатуру. Пример ща будет. См след пост.

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 4:12 pm
by andrew_programmer
Melian, надеюсь ты не такой как shamaz.mazum и не shamaz.mazum под новым ником.

P.S.

Конструктивная критика принимается.

Re: Kolibri Foundation Classes (KFC)

Posted: Sat Jan 05, 2008 4:35 pm
by Melian
Пример того же чела, которого вы не любите:

int bcmp(const void *s1, const void *s2, size_t len);
Interface Level
Architecture independent level 1 (DDI/DKI).
Parameters
s1
Pointer to the first character string.
s2
Pointer to the second character string.
len
Number of bytes to be compared.

Description
The bcmp() function compares two byte arrays of length len.

Return Values
The bcmp() function returns 0 if the arrays are identical, or 1 if they are not.

Это дока с сайта sun, ещё можно смотреть в linux man pages
Ваш код: (кошмар имхо)

Code: Select all

int bcmp(const void *ptr1, const void *ptr2, int length)
{
  char a;
  char b;

  if (ptr1 == ptr2) return 0;

  if (ptr1 == 0 || ptr2 == 0) return -1;

  while (length)
  {
    a=*((const char *)ptr1);
    b=*((const char *)ptr2);
    if (a !=b) return length;

    //if (*((char)ptr1)++ != *((char)ptr2)++)
    // return length;
    ptr1++;
    ptr2++;
    length--;
  }

  return 0;
}
Бред какой-то.
Вот как надо:

Code: Select all

int bcmp (const void *s1, const void *s2, int len)
{
  for (int i = 0; i<len; i++)
  {
    if ((const char*) (*s1)!=(const char*) (*s2)) return 1;
    s1++;
    s2++;
  }
  return 0;
}
Всё!

Re: Kolibri Foundation Classes (KFC)

Posted: Sun Jan 06, 2008 12:10 am
by andrew_programmer
Из-за того, что menuetlibc алгоритмически сильно неоптимальна, я решил, что легче
написать новую libC чем переписывать menuetlibc. halyvin писал libC с нуля, а
потом это дело заглохло из за нехватки времени. Я взял исходные коды этой библиотеки
за основу. Вычистил из неё ошибки(их там было очень много). Добавил новые функции.
В частности функции форматированного вывода. Не все функции полность соответствуют
стандарту, так как дописать их до конца у меня просто нет времени. Я пишу только те
функции, которые мне нужны для моей научной программы.

Melian, как насчёт присоединения к разработкам libCk ?
Недостающие обертки на ассемблере для системных вызовов я могу написать. В текущей
libCk часть обёрток уже есть. А высокоуровневая часть libC написана на C.
Можно, например, добавить функцию для форматированного ввода. И на её основе сделать
остальные функции форматированного ввода. Ну так как насчёт присоединения ?