Теперь оно извещает о том, что нужно завершиться. Правда его нужно вечно проверять, когда ждёшь ввод от юзера. Не очень мне это нравится, но лучше не придумал.
kcon по сути является тем же board, только оно сначала регистрируется как консоль(иначе не будут посылаться сообщения 4) и весь ввод переправляет в stdout.
В архив положил ядро, kcon, исходники изменённых файлов в ядре(ревизия ядра 6843, в свн сейчас была ревизия 6877 - не очень пока понял, что важнее указывать ). Так же примеры консольных прог - ввод с клавы, увеличение символа на 1 и вывод (прога T); дважды запуск предыдущего T с перенаправление(то есть ввод будет на 2 увеличиваться) (прога TS). Что бы всё работало нужно скопировать в /sys/ новое ядро и прогу KCON.
Ну и тут выложу основную часть моего "TODO" листа. С API, надеюсь, понятней будет. Где стоит V - то уже работает.
Spoiler:
ядро: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 или код выхода
маловероятно, чтобы программа завершилась, а вторая(с тем же слотом!!!) успела так же завершиться
перезаписать код выхода до того, как кто-то прочитает код выхода первой