8e389c03f8
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
44 lines
1.3 KiB
C
44 lines
1.3 KiB
C
/* sc_tree.h — пошаговый BFS-обход дерева для рекурсивных файловых jobs. */
|
|
|
|
#ifndef SC_TREE_H
|
|
#define SC_TREE_H
|
|
|
|
#include <stdint.h>
|
|
#include "sc_copy.h"
|
|
#include "sc_entry.h"
|
|
|
|
#define SC_TREE_STEP_ERROR (-1)
|
|
#define SC_TREE_STEP_DONE 0
|
|
#define SC_TREE_STEP_FILE 1
|
|
#define SC_TREE_STEP_DIRECTORY 2
|
|
#define SC_TREE_STEP_SCAN_DIR 3
|
|
|
|
typedef struct {
|
|
uint8_t block;
|
|
uint8_t page;
|
|
uint8_t active;
|
|
uint8_t scan_state;
|
|
uint16_t head;
|
|
uint16_t tail;
|
|
uint16_t current;
|
|
uint16_t reverse;
|
|
uint16_t created_directories;
|
|
uint16_t files_seen;
|
|
int error;
|
|
} ScTreeJob;
|
|
|
|
int sc_tree_begin(ScTreeJob *job, ScCopyJob *copy) __banked;
|
|
int sc_tree_add_root(ScTreeJob *job, ScCopyJob *copy,
|
|
const char *source_base, const char *target_base,
|
|
const char *name) __banked;
|
|
int sc_tree_add_delete_root(ScTreeJob *job, const char *name) __banked;
|
|
int sc_tree_next(ScTreeJob *job, ScCopyJob *copy,
|
|
const char *source_base, const char *target_base,
|
|
ScDirEntry *entry) __banked;
|
|
int sc_tree_delete_next(ScTreeJob *job, ScCopyJob *copy,
|
|
const char *source_base,
|
|
ScDirEntry *entry) __banked;
|
|
int sc_tree_finish(ScTreeJob *job, ScCopyJob *copy) __banked;
|
|
|
|
#endif
|