Kolibri Foundation Classes (KFC)

Discussing libraries simplifying applications development
  • Вот что я собственно навоял, пока что перво-черная версия 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 нормальном виде скинуть куда нить и дать линк.
    Attachments
    KFC.zip (7.31 KiB)
    Downloaded 463 times
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • Про libc - согласен, но и в исправленном виде - это маразм

    Надо делать что-нибудь объектно-ориентированное. С для данных целей не пригоден
  • libc обязательно нужен для развития KOS. Так же как и большинство стандартов POSIX. Нужны не как состовляющие, а как довесок, хотя вы можете относиться к ним и как к основополагающим. Это реальность, с которой нужно мириться. Это все ИМХО и спорить я не буду :-). То что делает SHREDER, тоже очень нужно. К названию претензий нет, собственно мне безразлично название, если это будет отлично ездить.

    ..bw
  • 2shamaz.mazum
    >Верно мыслите. Но не такой. Индусы делали.
    нишариш
  • 2kooser

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

    Вы не познали Дзен колибри %)
  • Ну да. Не проникся.
    kooser wrote:Все косяки libc исправятся после рекомпиляции программ с новой версией
    Ну я на это надеюсь. А можно эту самую новую версию libc? Для ознакомления
  • Это вы про какую новую версию libC говорите ?
    Про ту, что описана в конце этой темы viewtopic.php?f=2&t=929&start=0 ?
    Это та самая libC, что и на сайте diamond + несколько новых функций.
    Есть еще и libCk (libC for KolibriOS) она пишется с нуля и пока что значительно уступает menuetlibc
    по количеству функций.

    P.S.

    Чтобы не вводить в заблуждение, скажу, что обе libC для KolibriOS. Просто есть несколько причин,
    почему пишется libCk, а не дополняется menuetlibc.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Ну тогда, там багов дофига. Косорукие писали. Хотите пример идиотской функции?
  • Melian

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

    Если ты можеш что-то сделать лучше - делай. У нас всё на таком принципе основано. Можеш сделать лучше - делай (при этом не опплёвывая труд других людей).
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • andrew_programmer wrote:Насколько я понимаю, menuetlibc основана на libC для DOS из проекта DJGPP (порт GCC под DOS).
    Нафиг ДОС
    andrew_programmer wrote:не опплёвывая труд других людей
    Энто не труд, энто почесывание рук об клавиатуру. Пример ща будет. См след пост.
  • Melian, надеюсь ты не такой как shamaz.mazum и не shamaz.mazum под новым ником.

    P.S.

    Конструктивная критика принимается.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Пример того же чела, которого вы не любите:

    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;
    }
    Всё!
  • Из-за того, что menuetlibc алгоритмически сильно неоптимальна, я решил, что легче
    написать новую libC чем переписывать menuetlibc. halyvin писал libC с нуля, а
    потом это дело заглохло из за нехватки времени. Я взял исходные коды этой библиотеки
    за основу. Вычистил из неё ошибки(их там было очень много). Добавил новые функции.
    В частности функции форматированного вывода. Не все функции полность соответствуют
    стандарту, так как дописать их до конца у меня просто нет времени. Я пишу только те
    функции, которые мне нужны для моей научной программы.

    Melian, как насчёт присоединения к разработкам libCk ?
    Недостающие обертки на ассемблере для системных вызовов я могу написать. В текущей
    libCk часть обёрток уже есть. А высокоуровневая часть libC написана на C.
    Можно, например, добавить функцию для форматированного ввода. И на её основе сделать
    остальные функции форматированного ввода. Ну так как насчёт присоединения ?
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Who is online

    Users browsing this forum: No registered users and 4 guests