Как шутят в народе, "У дураков мысли сходятся".
Очень правильный подход к разработке, почему-то тут редко встречаемый. Делал похожее и тоже на С для CP/M когда экспериментировал с IDE/FAT:
- экран VT52 с собственной текстовой буферизацией чтобы организовывать буфер окон без лазания в видео-ОЗУ или в какие-то расширенные свойства VT-52 (использую только базовые искейпы VT - вывод символа, основные очистки экрана/строк и позиционирование курсора) отчего программа нормально отображается даже в Hyperterm Windows если заломиться им с Винды в CPM Ориона по RS-232 (модуль screen.c)
- псевдообъектное программирование на структурах и адресах процедур (типа методы), "наследование" - расширением родительской структуры новыми членами и обращение к методам через typecast.
- "объекты" оконные (стек окон есть) и не оконные (типа TStrings), оконным можно рассылать сообщения (messages) а-ля как у Борланда в VCL было сделано и эти сообщения обрабатывать в тех "классах" (windows.h, controls.h), основной цикл оконного приложения выглядит прям как в VCL CBuilder
Код:
void ApplicationLoop()
{
short Msg;
short Param;
while (GetMessage(&Msg, &Param)) {
SendMessage(ActiveWindow(), Msg, Param); /* DispatchMessage(&Msg); */
}
}
- сделал несколько оконных объектов (Окна модальные и немодальные, листбокc, кнопка) - минимум для двухпанельного коммандера, и сам коммандер - оболочку над популярной FatFS от ELM Chan - моего порта под CP/M (menu2.c, menu1.c). Очень понравилась получившаяся организация труда: вместо намолачивания функционала "по месту", заранее пишешь объекты со свойствами, а далее в командере назначаешь их связи, и любое изменение (например количество столбцов в панели=листбоксе - full/brief, или количество кнопок на форме) уже элементарно: присвоил свойству значение, вызвал Object.Update() и всё заверте....
ЗЫ. Как там наш ESP-адаптер?