Board.KolibriOS.org

Official KolibriOS board
It is currently Mon May 20, 2019 8:54 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 53 posts ]  Go to page 1 2 3 4 Next
Author Message
PostPosted: Thu Dec 27, 2007 3:31 pm 
Offline

Joined: Thu Dec 21, 2006 10:51 am
Posts: 88
Короче я тоже начал делать нечто подобное основанное на libc пока окрестил kfc (Kolibri Foundation Classes). Буду выкладывать код по мере написания. Пока вот есть файл для поддержки цветов для GUI. Можно юзать уже сейчас.

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

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


Attachments:
color.hpp [2.67 KiB]
Downloaded 301 times

_________________
Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
Top
   
PostPosted: Thu Dec 27, 2007 9:03 pm 
Offline

Joined: Thu Dec 21, 2006 10:51 am
Posts: 88
Вот что я собственно навоял, пока что перво-черная версия 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 252 times

_________________
Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
Top
   
PostPosted: Sat Dec 29, 2007 12:06 pm 
Про libc - согласен, но и в исправленном виде - это маразм

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


Top
   
PostPosted: Sat Dec 29, 2007 7:05 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
libc обязательно нужен для развития KOS. Так же как и большинство стандартов POSIX. Нужны не как состовляющие, а как довесок, хотя вы можете относиться к ним и как к основополагающим. Это реальность, с которой нужно мириться. Это все ИМХО и спорить я не буду :-). То что делает SHREDER, тоже очень нужно. К названию претензий нет, собственно мне безразлично название, если это будет отлично ездить.

..bw


Top
   
PostPosted: Thu Jan 03, 2008 11:05 pm 
Offline

Joined: Sun Oct 14, 2007 12:23 pm
Posts: 15
2shamaz.mazum
>Верно мыслите. Но не такой. Индусы делали.
нишариш


Top
   
PostPosted: Sat Jan 05, 2008 8:59 am 
Offline

Joined: Fri Jan 04, 2008 11:58 pm
Posts: 19
2kooser

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


Top
   
PostPosted: Sat Jan 05, 2008 11:03 am 
Offline

Joined: Sun Oct 14, 2007 12:23 pm
Posts: 15
Все косяки libc исправятся после рекомпиляции программ с новой версией. а без оной этих программ не будет вобще.

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


Top
   
PostPosted: Sat Jan 05, 2008 11:19 am 
Offline

Joined: Fri Jan 04, 2008 11:58 pm
Posts: 19
Ну да. Не проникся.

kooser wrote:
Все косяки libc исправятся после рекомпиляции программ с новой версией

Ну я на это надеюсь. А можно эту самую новую версию libc? Для ознакомления


Top
   
PostPosted: Sat Jan 05, 2008 1:57 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Это вы про какую новую версию 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!


Top
   
PostPosted: Sat Jan 05, 2008 3:38 pm 
Offline

Joined: Fri Jan 04, 2008 11:58 pm
Posts: 19
Ну тогда, там багов дофига. Косорукие писали. Хотите пример идиотской функции?


Top
   
PostPosted: Sat Jan 05, 2008 3:52 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Melian

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

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

_________________
KolibriOS-перспективная ос!

Kolibri is best operation system in the world!


Top
   
PostPosted: Sat Jan 05, 2008 4:04 pm 
Offline

Joined: Fri Jan 04, 2008 11:58 pm
Posts: 19
andrew_programmer wrote:
Насколько я понимаю, menuetlibc основана на libC для DOS из проекта DJGPP (порт GCC под DOS).

Нафиг ДОС

andrew_programmer wrote:
не опплёвывая труд других людей

Энто не труд, энто почесывание рук об клавиатуру. Пример ща будет. См след пост.


Top
   
PostPosted: Sat Jan 05, 2008 4:12 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Melian, надеюсь ты не такой как shamaz.mazum и не shamaz.mazum под новым ником.

P.S.

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

_________________
KolibriOS-перспективная ос!

Kolibri is best operation system in the world!


Top
   
PostPosted: Sat Jan 05, 2008 4:35 pm 
Offline

Joined: Fri Jan 04, 2008 11:58 pm
Posts: 19
Пример того же чела, которого вы не любите:

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:
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:
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;
}

Всё!


Top
   
PostPosted: Sun Jan 06, 2008 12:10 am 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Из-за того, что menuetlibc алгоритмически сильно неоптимальна, я решил, что легче
написать новую libC чем переписывать menuetlibc. halyvin писал libC с нуля, а
потом это дело заглохло из за нехватки времени. Я взял исходные коды этой библиотеки
за основу. Вычистил из неё ошибки(их там было очень много). Добавил новые функции.
В частности функции форматированного вывода. Не все функции полность соответствуют
стандарту, так как дописать их до конца у меня просто нет времени. Я пишу только те
функции, которые мне нужны для моей научной программы.

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

_________________
KolibriOS-перспективная ос!

Kolibri is best operation system in the world!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 53 posts ]  Go to page 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited