/*
 * getcwd — путь текущего каталога в buf.  ESTEX CURDIR ($1E) пишет в
 * буфер (ESTEX всегда рассчитывает на 256 байт — параметр size
 * игнорируется).  Возвращает buf или NULL + errno.
 */

#include <unistd.h>

char *getcwd(char *buf, size_t size) __naked
{
    (void)buf; (void)size;
    __asm
        ;; HL = buf, DE = size (игнорируется — ESTEX хочет 256 байт).
        push  ix
        push  hl                    ; сохранить buf через RST
        ld    c, #0x1E              ; ESTEX CURDIR
        rst   #0x10
        pop   hl                    ; вернуть buf
        pop   ix
        jr    c, _gc_err
        ex    de, hl                ; вернуть buf в DE (SDCC ptr return)
        ret
    _gc_err:
        call  __errno_set
        ld    de, #0                ; NULL при ошибке
        ret
    __endasm;
}
