Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пн апр 24, 2017 10:14 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 3 сообщения ] 
Автор Сообщение
СообщениеДобавлено: Сб мар 11, 2017 1:08 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 429
Я уже заикался на форуме про эти расширения. И так. Раньше у нас была доска отладки с функциями записи и чтения байта. Теперь же, при желании, программа может попросить свою личную доску отладки, причём получит сразу две :) Аналог stdin и stdout. В одну пишет, из другой читает. Ну и, конечно, ядро запустит приложение kcon, которому даст те же stdin и stdout, только в обратном направлении. Если наша консольная прога запустит ещё кого-то, то потоки в/в наследуются, и прога будет писать в ту же консоль. Так же прога может запустить кого-то с другими stdin/out, если укажет флаг 4 в структуре ФС. Ну и если окно консоли закрыли, то все приложения, связанные с ней(хоть через 10 перенаправлений) получат событие 4.
Теперь оно извещает о том, что нужно завершиться. Правда его нужно вечно проверять, когда ждёшь ввод от юзера. Не очень мне это нравится, но лучше не придумал.
kcon по сути является тем же board, только оно сначала регистрируется как консоль(иначе не будут посылаться сообщения 4) и весь ввод переправляет в stdout.
В архив положил ядро, kcon, исходники изменённых файлов в ядре(ревизия ядра 6843, в свн сейчас была ревизия 6877 - не очень пока понял, что важнее указывать :) ). Так же примеры консольных прог - ввод с клавы, увеличение символа на 1 и вывод (прога T); дважды запуск предыдущего T с перенаправление(то есть ввод будет на 2 увеличиваться) (прога TS). Что бы всё работало нужно скопировать в /sys/ новое ядро и прогу KCON.
Ну и тут выложу основную часть моего "TODO" листа. С API, надеюсь, понятней будет. Где стоит V - то уже работает.
Спойлер: Показать
ядро:
V.1 запись байта
V.2 чтение байта
V.3 попросить консоль(создаёт в/в, запускает процесс-консольГУИ(KCON) с тем же
в/в(но в обратном направлении))
V.4 узнать свои потоки в/в(*) out: al = output board, ah = input board
V.5 освободить консоль(даёт проге доску 0) in: ecx=0/1 - out/inp
V.6 зарегиcтрироваться как консоль(если завершиться, то пошлёт всем с
этими же в/в сообщ 4)
V.7 создать доску (без создания консоли. если просто создать, но не никому
не дать, то она так и будет занимать место в памяти, пока
кто-то не захочет создать ещё доску)
V.8 установить свои стд в/в. (ch - inp, cl - out)
.9 запись потока(эн байт или до 0) (ecx=size or 0(asciiz), edx=pointer)
.10 чтение потока(всё или до 0) (ecx= 0/1 << 31 + max size,
edx= pointer)

V модификация ф70.7 - наследовать в/в новым процессам
V сообщение 4 о завершении приложения
V модификация функции завершения процесса: если это была консоль, то послать всем прогам с той же доской
сообщение 4 о завершении работы (**)
V модификация при создании процесса: если доска не 0, то увеличить число процессов у доски
V модификация ф70.7 - запустить с другими стд потоками в/в и флаг перенаправления в/в
flags = 0x04 - redirect std output/input (boards)
byte fs+12 - доска вывода
byte fs+13 - доска ввода
новая функция - проверить код выхода для процесса N (eax = SLOT или PID)
модификация ф-1 - завершиться с кодом
массив кодов выхода для слотов(256*dword). Когда прога звершилась, то записывается 0 или код выхода
маловероятно, чтобы программа завершилась, а вторая(с тем же слотом!!!) успела так же завершиться
перезаписать код выхода до того, как кто-то прочитает код выхода первой

Что ещё... Совместимость осталась. В свн пока рановато - слишком сыро. В планах устроить чтение-запись массивов байт(подфункции 9, 10), сделать возможность вернуть код по завершению проги. KCON пока - это просто чуть-чуть доделанная и заметно подрезанная довольно старая версия board(что нашёл на компе :) ), потому нужно её доводить до ума. Перевести на UTF8(я так понял, потихоньку переходим?), новее шрифты, настройки и прочее... только если честно - никакого желания этим заниматься. Пока просто планирую ядерные функции довести до ума.


Вложения:
kern.zip [171.66 КБ]
17 скачиваний

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Вернуться к началу
СообщениеДобавлено: Сб мар 11, 2017 3:27 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1120
Многа букаф... А можно подробней объяснить, какие практические проблемы решаются?


Вернуться к началу
СообщениеДобавлено: Сб мар 11, 2017 3:40 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 429
Ну теперь можно запускать в одном окне консоли программы, а не для каждой проги новое окно. Перенаправление есть. Дает больше возможностей для скриптов(команды-программы для которых ещё писать надо, конечно). Ну и консольный хелловорлд теперь упрощён до максимума.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 3 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB