/*
 * sysenv — снять всё окружение в буфер вызывающего.
 * ESTEX ENVIRON ($46, subfn 0): HL = буфер; на выходе буфер заполнен
 * ASCIIZ-строками "NAME=value" подряд, конец — дополнительный NUL:
 *   "PATH=...\0SOLID=H\0\0"
 * Буфер должен вмещать всё окружение.  Возвращает buf или -1 + errno.
 */

#include <stdint.h>
#include <sprinter.h>

char *sysenv(char *buf) __naked
{
    (void)buf;
    __asm
        push  ix
        push  hl                        ; спрятать указатель (= возврат)
        ld    bc, #0x0046               ; ESTEX ENVIRON; subfn 0 = sysenv
        rst   #0x10
        pop   de                        ; DE = указатель буфера
        pop   ix
        ret   nc                        ; успех: DE уже держит buf
        ;; CF=1 → A = код ошибки ESTEX.
        call  __errno_set
        ld    de, #-1
        ret
    __endasm;
}
