Files
Sprinter-SDCC/tests/bgitest/bgitest.c
T
snark13 e761d21505 libc: graphics.h — Turbo-C BGI-слой, Фаза 1 (режим 256)
Функционально-совместимый с Turbo-C <graphics.h> поверх gfx.h.
Архитектура: mode-agnostic математика (libc/bgi/*.c → sprinter.lib) +
driver-leaf'ы per-режим (libc/bgi/drv256/*.c → sprinter_gfx256.lib).
Режим выбирается линковкой: sprinter-cc --gfx 256 (16 — позже, тем же
leaf-split'ом). Один код работает в любом режиме без правок.

API: initgraph/closegraph/graphresult/cleardevice, set/get color+bkcolor,
getmaxx/y/color, put/getpixel, moveto/moverel/getx/gety, line/lineto/
linerel, rectangle, bar, circle, outtext/outtextxy. initgraph грузит
EGA-палитру 0..15. Пакетные примитивы (circle) — одна W3-скобка на
примитив (иначе на порядок медленнее). Проверено в MAME (tests/bgitest).

Попутно: gfx_getpixel256 в libc/gfx. size-check без регресса, baseline
обновлён. Детали: memory/bgi_two_lib_design, docs/TODO.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 15:40:49 +03:00

62 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* bgitest — демонстрация BGI-слоя graphics.h (режим 320×256×256).
*
* Собирается с `--gfx 256` (см. Makefile). Рисует рамку, заголовок,
* палитровую полосу, веер линий, вложенные окружности и залитые бары —
* визуальная проверка ядра BGI (Фаза 1).
*/
#include <graphics.h>
int main(void)
{
int i, mx, my, cx, cy;
initgraph();
mx = getmaxx(); /* 319 */
my = getmaxy(); /* 255 */
cx = mx / 2;
cy = my / 2;
cleardevice();
/* Рамка по краю экрана. */
setcolor(WHITE);
rectangle(0, 0, mx, my);
/* Заголовок. */
setcolor(YELLOW);
outtextxy(88, 6, "SPRINTER BGI 256");
/* Палитровая полоса: 15 залитых баров цветами 1..15. */
for (i = 1; i <= 15; i++) {
int x0 = 8 + (i - 1) * 20;
setcolor(i);
bar(x0, 24, x0 + 16, 44);
}
/* Веер линий из центра к верхней кромке. */
for (i = 0; i <= mx; i += 16) {
setcolor(1 + (i / 16) % 15);
line(cx, cy, i, 52);
}
/* Вложенные окружности. */
for (i = 8; i < 90; i += 8) {
setcolor(9 + (i / 8) % 7);
circle(cx, cy, i);
}
/* Точечная диагональ (putpixel). */
for (i = 0; i < 60; i++)
putpixel(10 + i, 200 + i, LIGHTGREEN);
/* Подпись внизу текущей позицией (outtext). */
setcolor(LIGHTCYAN);
moveto(8, 240);
outtext("Phase 1: lines rects circles text");
for (;;) { } /* держим картинку на экране */
return 0;
}