libc: Solid-C совместимость (П3) + rename/isatty (П4); scanf-семейство
- <dos.h>: getdate/gettime/setdate/settime (структуры Turbo-C, обёртки над getdatetime), getdisk/setdisk (ESTEX $02/$01), absread/abswrite (BIOS $55/$56, rst 8 — номера найдены в solid-c DOS.ASM; сектор 0 = boot логического диска) - scanf/fscanf/sscanf: своё C-ядро _scanf_core (%d %u %x %o %c %s, модификатор l, ширина, подавление '*', %%); в SDCC z80 scanf нет, asm solid-c не портируем из-за чужого ABI; 22 хост-теста ядра - хвост П2: fdopen/freopen/fclosall/fgetpos/fsetpos поверх таблицы FILE; парсер режима и выдача слота вынесены в _file_mode/_file_slot - rename() — ESTEX RENAME $10; isatty(fd) = fd <= 0 (tty только псевдо-fd 0/-1/-2: из CLI DSS манипуляторы идут с 1 — verified, fd 1 не резерв, под Flex Navigator его держит навигатор) - errno.h: Solid-C имена ошибок (EZERO/EINVFNC/ENOFILE/...) как алиасы - <sprinter_solid.h> — зонтичный заголовок для портирования; ltell/_setargv в sprinter_compat.h; div/ldiv — из SDCC (проверено) - tests/solidt — smoke всех П3/П4 API, зелёный в MAME (вкл. absread boot-сектора с сигнатурой 55AA) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -130,6 +130,31 @@ These will be in `docs/solid_c_diff.md`:
|
||||
|
||||
To make porting easier, add a single `<sprinter_solid.h>` that includes all the standard headers (`stdio.h`, `string.h`, `conio.h`, etc.) — Solid-C programs can `#include <sprinter_solid.h>` and have most functions available.
|
||||
|
||||
## Status 2026-07-06 — Phase 1/2/3 ЗАКРЫТЫ
|
||||
|
||||
Всё из категорий A/B/C реализовано или закрыто решением:
|
||||
|
||||
- **A (алиасы)**: все на месте в sprinter_compat.h (+ ltell, _setargv
|
||||
добавлены 2026-07-06); div/ldiv — из SDCC z80.lib (проверено).
|
||||
- **B**: getdisk/setdisk (ESTEX $02/$01, libc/io), getdate/gettime/
|
||||
setdate/settime (обёртки над getdatetime, структуры Turbo-C в
|
||||
<dos.h>), остальное было готово ранее.
|
||||
- **C**: fdopen/freopen/fclosall/fgetpos/fsetpos — реализованы поверх
|
||||
таблицы FILE v2 (libc/file); ungetc — есть (FILE v2);
|
||||
**absread/abswrite — BIOS $55/$56** (rst 8, A=диск, HL:IX=сектор,
|
||||
DE=буфер, B=счётчик; найдено в solid-c DOS.ASM) — реализованы в
|
||||
libc/io; **scanf/fscanf/sscanf — реализованы** (своё C-ядро
|
||||
_scanf_core с семантикой Solid-C: %d %u %x %o %c %s, l, ширина, %*;
|
||||
в SDCC z80 scanf нет); isatty — fd < 2 (см. memory/dss_fd_limit).
|
||||
bdos/bdosh/intdos — НЕ экспонируем (решение: типизированные
|
||||
обёртки); brk/sbrk — НЕ нужны (heap SDCC); ioctl — скип.
|
||||
- **errno**: Solid-C имена (EZERO/EINVFNC/ENOFILE/…) — алиасы в errno.h.
|
||||
- **Зонтичный заголовок**: <sprinter_solid.h>.
|
||||
- Тест: tests/solidt (MAME).
|
||||
|
||||
## History
|
||||
|
||||
- 2026-07-06 — Phase 1/2/3 закрыты: dos.h (даты/диски/сектора),
|
||||
scanf-семейство, fdopen/freopen/fclosall/fgetpos/fsetpos,
|
||||
rename/isatty (П4), errno-алиасы, sprinter_solid.h, тест solidt
|
||||
- 2026-06-01 — initial gap analysis vs Solid-C v2004
|
||||
|
||||
Reference in New Issue
Block a user