/*
 * 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;
}
