/* * strerror — текст ошибки по коду ESTEX (0..32); вне диапазона — * "Unknown error". Таблица повторяет solid-c IO.ASM (английские * формулировки сохранены для grep-ability). Таблица и функция * неразделимы — живут одним модулем. * * Примечание: `_errno` здесь сознательно НЕ определяется — его даёт * SDCC z80.lib/errno.rel (int в _DATA), наши обёртки просто пишут в * `errno`. Это убирает варнинг "multiple definition of _errno". */ #include /* * Хранится как есть — указатель в таблице стоит 2 байта плюс сами * байты сообщения. Заглушки "RESERVED" затыкают дыры, чтобы * индексирование оставалось прямым. */ static const char *const messages[] = { /* 0 */ "No error", /* 1 */ "Invalid function", /* 2 */ "Invalid drive number", /* 3 */ "File not found", /* 4 */ "Path not found", /* 5 */ "Invalid handle", /* 6 */ "Too many open files", /* 7 */ "File already exists", /* 8 */ "File is read-only", /* 9 */ "Root directory overflow", /* 10 */ "No free space", /* 11 */ "Directory not empty", /* 12 */ "Can't delete current directory", /* 13 */ "Invalid media", /* 14 */ "Unknown operation", /* 15 */ "Directory exists", /* 16 */ "Invalid filename", /* 17 */ "Invalid EXE file", /* 18 */ "Not supported EXE file", /* 19 */ "Access denied", /* 20 */ "Device not ready", /* 21 */ "Seek error", /* 22 */ "Sector not found", /* 23 */ "CRC error", /* 24 */ "Write protect", /* 25 */ "Read error", /* 26 */ "Write error", /* 27 */ "Drive failure", /* 28 */ "RESERVED", /* 29 */ "RESERVED", /* 30 */ "Out of memory", /* 31 */ "Invalid memory block", /* 32 */ "Unknown error", }; const int ESTEX_MAX_ERR = sizeof(messages) / sizeof(messages[0]) - 1; const char *strerror(int err) { if (err < 0 || err > ESTEX_MAX_ERR) { err = EUNKERR; } return messages[err]; }