Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
/* sc_app.h — состояние и главный цикл Sprinter Commander. */
|
||||
|
||||
#ifndef SC_APP_H
|
||||
#define SC_APP_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "sc_command.h"
|
||||
#include "sc_copy.h"
|
||||
#include "sc_panel.h"
|
||||
|
||||
#define SC_PANEL_COUNT 2u
|
||||
#define SC_PANEL_VISIBLE 27u
|
||||
#define SC_EMM_PAGE_COUNT 4u
|
||||
typedef struct ScApp {
|
||||
ScPanel panels[SC_PANEL_COUNT];
|
||||
uint8_t active_panel;
|
||||
uint8_t running;
|
||||
uint8_t emm_block;
|
||||
uint8_t screen_page;
|
||||
uint8_t copy_page;
|
||||
uint16_t emm_total_before;
|
||||
uint16_t emm_free_before;
|
||||
ScCopyJob copy_job;
|
||||
const char *status;
|
||||
} ScApp;
|
||||
|
||||
int sc_app_init(ScApp *app);
|
||||
void sc_app_run(ScApp *app);
|
||||
int sc_app_cleanup(ScApp *app);
|
||||
|
||||
void sc_draw_all(const ScApp *app) __banked;
|
||||
void sc_draw_panel_rows(const ScApp *app, uint8_t panel_index) __banked;
|
||||
void sc_draw_panel_row(const ScApp *app, uint8_t panel_index,
|
||||
uint8_t row) __banked;
|
||||
void sc_draw_info(const ScApp *app) __banked;
|
||||
void sc_draw_status(const ScApp *app) __banked;
|
||||
|
||||
uint8_t sc_dialog_confirm_quit(void) __banked;
|
||||
uint8_t sc_dialog_confirm(const char *title, const char *message) __banked;
|
||||
void sc_dialog_message(const char *title, const char *message) __banked;
|
||||
uint8_t sc_dialog_choice(const char *title, const char *message,
|
||||
const char *keys, const char *buttons) __banked;
|
||||
uint8_t sc_dialog_input(const char *title, const char *prompt,
|
||||
char *buffer, uint8_t capacity) __banked;
|
||||
/* Возвращает выбранную ASCII-клавишу из keys в верхнем регистре; Esc = 0. */
|
||||
uint8_t sc_dialog_choice(const char *title, const char *message,
|
||||
const char *keys, const char *buttons) __banked;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user