SprPoP: HDD-раскладка и пути от каталога EXE
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* _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
|
||||
Reference in New Issue
Block a user