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:
+11
-18
@@ -53,27 +53,20 @@ internal-модули, комментарии на русском, без `= 0`.
|
||||
- [x] Буферизация FILE v2 — **реализован вариант B+** (2026-07-06): единый ленивый буфер BUFSIZ=512 на чтение и запись с автопереключением направления, статическая таблица OPEN_MAX=8 слотов, _fclosall через atexit, fflush(NULL) = все потоки. Дизайн: docs/file-buffering-design.md. Цена: filetest (использует всё) 7411→9929 Б _CODE; не-FILE программы не платят ничего. **Ждёт MAME-прогона: filetest, fdmax (лимит DSS), fbench (замер скорости)**
|
||||
- [ ] fdopen/freopen/fclosall/fgetpos/fsetpos — по мере надобности (Solid-C категория C)
|
||||
|
||||
## П3. Solid-C совместимость — остатки (docs/solid_c_compatibility.md)
|
||||
## П3. Solid-C совместимость — ЗАКРЫТ 2026-07-06
|
||||
|
||||
Phase 1 (алиасы) фактически закрыт — home/inp/outp/enable/disable, ms_*,
|
||||
getc/putc, min/max, dec*/hex*, strlwr/strupr, cgets есть. Осталось:
|
||||
Всё сделано (детали в docs/solid_c_compatibility.md): getdisk/setdisk,
|
||||
getdate/gettime/setdate/settime + <dos.h>, ltell/_setargv, errno-алиасы,
|
||||
<sprinter_solid.h>, div из SDCC (проверено), absread/abswrite (BIOS
|
||||
$55/$56 — номера найдены в solid-c DOS.ASM), **scanf/fscanf/sscanf**
|
||||
(своё C-ядро _scanf_core, 22 хост-теста), fdopen/freopen/fclosall/
|
||||
fgetpos/fsetpos (хвост П2). bdos/brk/ioctl — отказ решением.
|
||||
Тест tests/solidt ждёт MAME-прогона.
|
||||
|
||||
- [ ] getdisk()/setdisk() — ESTEX $02 CURDISK / $01 CHDISK
|
||||
- [ ] getdate/gettime/setdate/settime — обёртки над getdatetime/setdatetime
|
||||
- [ ] seek/tell/ltell, setmem/movmem, isascii, abort(), div(), remove→unlink, _ffirst
|
||||
- [ ] errno-константы Solid-C (EZERO/EINVFNC/…) как алиасы в errno.h
|
||||
- [ ] `<sprinter_solid.h>` — зонтичный compat-заголовок
|
||||
- [ ] обновить статусы/history в solid_c_compatibility.md (Phase 1 done)
|
||||
## П4. Недостающие POSIX-мелочи — ЗАКРЫТ 2026-07-06
|
||||
|
||||
Research (Phase 3): absread/abswrite (найти ESTEX READ_SECT/WRITE_SECT),
|
||||
scanf-семейство (**в SDCC 4.5 z80 его НЕТ** — писать самим или задокументировать
|
||||
отказ), brk/sbrk vs SDCC heap, isatty, ioctl (скорее скип).
|
||||
|
||||
## П4. Недостающие POSIX-мелочи вне Solid-C списка
|
||||
|
||||
- [ ] **rename()** — в gap-анализе отсутствует, ESTEX почти наверняка имеет
|
||||
RENAME (~$0F, рядом с DELETE $0E) — проверить по докам ESTEX и добавить
|
||||
- [ ] isatty(fd) — тривиально (fd<0/флаги)
|
||||
- [x] rename() — ESTEX RENAME $10 (HL=старое, DE=новое), libc/io/rename.c
|
||||
- [x] isatty(fd) — fd < 2 (манипуляторы DSS с 2; консольные псевдо-fd 0/-1/-2)
|
||||
|
||||
## П5. Заголовки и гигиена сборки
|
||||
|
||||
|
||||
Reference in New Issue
Block a user