Files
Sprinter-SDCC/applications/SprPoP/src/_pop_file.h
T

34 lines
1.8 KiB
C

/*
* _pop_file.h — внутренний файловый слой SprPoP для старых версий DSS.
*
* DSS до исправления относительных путей оставляет рабочий каталог внутри
* последнего подкаталога. POP_PATH_CALL восстанавливает абсолютный каталог
* приложения до и после операции. Это макрос намеренно: код исполняется в
* банке вызывающего, где доступен переданный указатель, и не расходует W1.
*/
#ifndef _POP_FILE_H
#define _POP_FILE_H
#include <stdint.h>
#include <errno.h>
/* BANK10: получить каталог EXE через APPINFO B=1 и сделать его текущим. */
int8_t pop_path_init(void) __banked;
int8_t pop_chdir_home(void) __banked;
/* expression вычисляется только после успешного chdir. errno файловой
* операции сохраняется через завершающее восстановление каталога. */
#define POP_PATH_CALL(result, expression) do { \
if (pop_chdir_home() != 0) { \
(result) = -1; \
} else { \
int _pop_path_errno; \
(result) = (expression); \
_pop_path_errno = errno; \
(void)pop_chdir_home(); \
errno = _pop_path_errno; \
} \
} while (0)
#endif