/* sc_tree.h — пошаговый BFS-обход дерева для рекурсивных файловых jobs. */ #ifndef SC_TREE_H #define SC_TREE_H #include #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