Files
Sprinter-SDCC/tests/hello/hello.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

66 lines
1.9 KiB
C

/*
* hello — smoke test for the two output APIs:
*
* stdio (printf/puts/putchar) — FAST, no attribute (ambient colour)
* conio (cprintf/cputs/putch) — SLOWER, applies textcolor/textbackground
*
* Demonstrates textcolor/textbackground (Turbo-C-compatible names).
*/
#include <stdio.h>
#include <conio.h>
#include <gfx.h>
#include <sprinter.h>
#include <sprinter_exit.h>
#include <errno.h>
int main(void)
{
errno = -1;
int16_t a0 = 0, a1 = 0;
a0 = get_text_attr();
uint8_t vMode = gettextmode();
settextmode(TEXT_MODE_80x32);
/* Wipe the screen with a known attribute so stdio printf/puts inherit
* a clean colour for the cursor. */
clrscr_attr(COLOR(COLOR_LIGHTGRAY, COLOR_BLACK));
/* --- stdio set: fast, no attribute ------------------------------- */
puts("hello (stdio) - fast PCHARS, ambient colour");
printf("printf: a0=%d (initial attr)\n", a0);
/* --- conio set: applies textcolor / textbackground --------------- */
textcolor(COLOR_YELLOW);
textbackground(COLOR_BLUE);
cputs("conio: yellow on blue\r\n");
textcolor(COLOR_LIGHTRED);
textbackground(COLOR_BLACK);
cprintf("cprintf %d %d %s\r\n", 42, -7, "args");
/* set_text_attr / textattr replace the whole byte. */
textattr(COLOR(COLOR_LIGHTGREEN, COLOR_BLACK));
cputs("conio: light-green via textattr\r\n");
/* Opting out of attribute control — conio falls back to fast path. */
set_text_attr(KEEP_EXIST_ATTR);
cputs("conio with KEEP_EXIST_ATTR (fast path)\r\n");
a1 = get_text_attr();
/* Back to a normal attribute so the goodbye reads cleanly. */
textattr(COLOR(COLOR_LIGHTGRAY, COLOR_BLACK));
cprintf("a0=%d a1=%d now=%d errno=%d\n\r",
a0, a1, get_text_attr(), errno);
#ifdef DEBUG_RT
printf("w2_self_allocated = %u\n", w2_self_allocated);
#endif
cputs("Press any key to exit...");
(void)getchar();
settextmode(vMode);
return 0;
}