Многие люди задаются вопросом: «Можно ли написать программу на Си под KolibriOS?»
Ответ: «Да, можно!», и ниже я расскажу, как это сделать.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/314/bde/b15/314bdeb15c457841ac57a62067920919.png)
Для написания программы, нам понадобятся:
В KolibriOS существует два вида программ: оконные и консольные. Программа с GUI пишется при помощи системных функций и библиотеки BoxLib. Консольная программа пишется с использованием библиотеки console.obj. О работе с библиотеками будет рассказано в следующих статьях; сегодня мы напишем оконное приложение на основе системных функций.
Оконное приложение состоит из функции main(), в которой есть специальный обработчик сообщений:
В нашей программе мы будем обрабатывать только события клавиатуры и нажатия на кнопки. Их обработка происходит в цикле while при помощи switch — case.
Разберём эти события:
2 — нажата клавиша на клавиатуре;
3 — нажата кнопка, определённая ранее кнопка (в данном примере это только крестик закрытия программы, который является кнопкой создаваемой вместе с окном);
Более подробно о системе событий можно прочитать на нашей Wiki или в документации, поставляемой с ОС (программа Docpack на рабочем столе).
Для удобства разработки, мы вынесем команды, которые отвечают за внешний вид окна, в отдельную функцию draw_window().
Теперь пришло время разобраться, как же нарисовать окно.
Рисование окна начинается с функции _ksys_window_redraw(1), и заканчивается _ksys_window_redraw(2). Для рисования окна, нужно воспользоваться функцией _ksys_draw_window (координата окна по х, координата окна по у, ширина, высота, цвет, тип окна, цвет заголовка окна, неперемещаемое ли окно, цвет рамки окна);
Типы окон:
0 — тип I — окно фиксированных размеров (без скина)
1 — только определить область окна, ничего не рисовать
2 — тип II — окно изменяемых размеров (без скина)
3 — окно со скином (изменяемых размеров)
4 — окно со скином фиксированных размеров
И наконец, чтобы нарисовать текст, нужно воспользоваться: _ksys_write_text (координата х, координата у, тип шрифта, строка, длина строки);
Писать программу можно прямо в КолибриОС. Открываем Tinypad, и пишем такой код:
Если вы писали код не в Колибри, сбросьте его на флешку вместе с компилятором. Например, я сохраню файл под именем hello.c.
Для людей, которые не могут установить Колибри, можно подключить флешку к виртуальной машине:
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/fb5/e6f/38d/fb5e6f38db10ed8e636a70d3af2aaac3.jpg)
Для компиляции, откроем в консоли (Shell) директорию, где лежит компилятор, и введём такую команду
Если всё сделано правильно, мы увидим нашу программу в той же директории. Теперь её можно запустить.
И получим следующую картину:
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/efa/a80/2eb/efaa802eb81c4cc8bc472e387baf56d8.jpg)
Для тех кто не любит много читать, видеоурок по теме:
Повторюсь, что обсудить ktcc (и программы для него) можно на нашем форуме.
Ответ: «Да, можно!», и ниже я расскажу, как это сделать.
![](https://habrastorage.org/getpro/habr/post_images/314/bde/b15/314bdeb15c457841ac57a62067920919.png)
Для написания программы, нам понадобятся:
- Компьютер или виртуальная машина с KolibriOS (если у Вас не установлена KolibriOS, её можно скачать с нашего сайта). Напомню, что KolibriOS для работы требует минимум 8MB RAM и Pentium-совместимый CPU.
- Флешка (если Вы пишете код не в самой Колибри).
- Компилятор TCC (Tiny C Compiler). Сборку для Колибри (mini_c_dev) можно скачать на нашем форуме. Тема с обсуждением ktcc (Kolibri TCC) находится здесь: board.kolibrios.org/viewtopic.php?f=45&t=565
Немного теории
В KolibriOS существует два вида программ: оконные и консольные. Программа с GUI пишется при помощи системных функций и библиотеки BoxLib. Консольная программа пишется с использованием библиотеки console.obj. О работе с библиотеками будет рассказано в следующих статьях; сегодня мы напишем оконное приложение на основе системных функций.
Оконное приложение состоит из функции main(), в которой есть специальный обработчик сообщений:
while (!0) {
switch (_ksys_wait_for_event(10)) {
case 2:
return 0;
case 3:
if (_ksys_get_button_id() == 1)
return 0;
break;
default:
//Здесь задаются команды, с помощью которых можно нарисовать окно.
break;
}
}
}
В нашей программе мы будем обрабатывать только события клавиатуры и нажатия на кнопки. Их обработка происходит в цикле while при помощи switch — case.
Разберём эти события:
2 — нажата клавиша на клавиатуре;
3 — нажата кнопка, определённая ранее кнопка (в данном примере это только крестик закрытия программы, который является кнопкой создаваемой вместе с окном);
Более подробно о системе событий можно прочитать на нашей Wiki или в документации, поставляемой с ОС (программа Docpack на рабочем столе).
Для удобства разработки, мы вынесем команды, которые отвечают за внешний вид окна, в отдельную функцию draw_window().
Теперь пришло время разобраться, как же нарисовать окно.
Рисование окна начинается с функции _ksys_window_redraw(1), и заканчивается _ksys_window_redraw(2). Для рисования окна, нужно воспользоваться функцией _ksys_draw_window (координата окна по х, координата окна по у, ширина, высота, цвет, тип окна, цвет заголовка окна, неперемещаемое ли окно, цвет рамки окна);
Типы окон:
0 — тип I — окно фиксированных размеров (без скина)
1 — только определить область окна, ничего не рисовать
2 — тип II — окно изменяемых размеров (без скина)
3 — окно со скином (изменяемых размеров)
4 — окно со скином фиксированных размеров
И наконец, чтобы нарисовать текст, нужно воспользоваться: _ksys_write_text (координата х, координата у, тип шрифта, строка, длина строки);
Теперь можно приступить к самому коду
Писать программу можно прямо в КолибриОС. Открываем Tinypad, и пишем такой код:
#include <stdio.h>
#include <string.h>
#include <kolibrisys.h>
#define FONT0 0
#define FONT1 0x10000000
char header[] = {"Hello World!"};
#define BT_NORMAL 0
#define BT_DEL 0x80000000
#define BT_HIDE 0x40000000
#define BT_NOFRAME 0x20000000
void draw_window () {
_ksys_window_redraw(1);
_ksys_draw_window(100, 100, 300, 120, 0xaabbcc, 4, 0x5080d0, 0, 0x5080d0);
_ksys_write_text(50,30,FONT0, header, strlen(header));
_ksys_window_redraw(2);
}
int main (int argc, char **argv) {
while (!0) {
switch (_ksys_wait_for_event(10)) {
case 2:
return 0;
case 3:
if (_ksys_get_button_id() == 1)
return 0;
break;
default:
draw_window();
break;
}
}
}
Теперь настало время компилировать!
Если вы писали код не в Колибри, сбросьте его на флешку вместе с компилятором. Например, я сохраню файл под именем hello.c.
Для людей, которые не могут установить Колибри, можно подключить флешку к виртуальной машине:
![image](https://habrastorage.org/getpro/habr/post_images/fb5/e6f/38d/fb5e6f38db10ed8e636a70d3af2aaac3.jpg)
Для компиляции, откроем в консоли (Shell) директорию, где лежит компилятор, и введём такую команду
ktcc.kex <имя_исходного_файла> libck.a –o <имя_готовой_программы>
Если всё сделано правильно, мы увидим нашу программу в той же директории. Теперь её можно запустить.
И получим следующую картину:
![image](https://habrastorage.org/getpro/habr/post_images/efa/a80/2eb/efaa802eb81c4cc8bc472e387baf56d8.jpg)
Для тех кто не любит много читать, видеоурок по теме:
Повторюсь, что обсудить ktcc (и программы для него) можно на нашем форуме.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Нужна ли на Хабре статья об использовании кросс-компиляторов C для KolibriOS?
79.94% Да283
20.06% Нет71
Проголосовали 354 пользователя. Воздержались 146 пользователей.