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