737c974400
- Split tests/ (libc feature tests) and examples/ (real apps); shared
app.mk in repo root, was examples/example.mk
- libc/io/* split into libc/{conio,env,errno,file,mouse,string,sys,
time,video}/ — clearer module boundaries
- New examples/mdview/: markdown viewer (Phases 1-5 + light nested
lists). Headers (H1-H4), HR, ulist/olist/quote with nesting via
leading spaces, fenced code blocks, inline emphasis (bold/italic/
underscore/code), wrap/unwrap mode with soft wrap (F2), horizontal
pan (← →) with '>' truncation indicator
- libc additions: scroll() in conio (ESTEX SCROLL), strlwr/strupr,
gets() test
- Makefile updates across tests/ for the new shared app.mk path
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
66 lines
1.9 KiB
C
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 = get_videotextmode();
|
|
set_videotextmode(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));
|
|
printf("a0=%d a1=%d now=%d errno=%d\n",
|
|
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();
|
|
set_videotextmode(vMode);
|
|
return 0;
|
|
}
|