Files
Sprinter-SDCC/libc/io/getcwd.c
T
snark13 4a081501d8 libc: сплит «1 функция = 1 модуль» — вся библиотека, wildcard-сборка
- bios/conio/env/errno/gfx/io/mem/mouse/stdio/stdlib/string/sys/time/
  video разложены по модулям: общие статики и helpers — в internal
  _-модулях (_conio.h/_mouse.h/_gfx.h/_palette.h/_atexit.h/_time.h)
- lib/Makefile: LIBC_C = wildcard libc/*/*.c — гранулярность файлов
  = гранулярность DCE линкера
- эффект _CODE: gfx_text 6986→2568 Б, gfx_mous −1745, gfx_demo/d16
  −542; ранее timedir −3270, ls −3098, stattest −2995
- комментарии оставшихся модулей переведены на русский; puts: убран
  мёртвый pchars; videomode_raw разложен на get/set
- docs/libc-split-asm-cases.md — правила asm-связок между модулями;
  docs/libc-roadmap.md — план этапа
- восстановлен examples/mdview/SAMPLE.MD (нужен make floppy)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:08:58 +03:00

29 lines
971 B
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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;
}