/* * _bgi_draw_scaled — строка растровым шрифтом 8×8 с целочисленным * масштабом и направлением, цветом _bgi_fg, прозрачным фоном. * * HORIZ_DIR: пиксель глифа (c,r) → экран (x+c*size, y+r*size). * VERT_DIR (поворот 90° против часовой): (c,r) → (x+r*size, y-c*size). * Каждый «пиксель» глифа — блок size×size из raw-плотов, всё в одной * W3-скобке. */ #include "_bgi.h" void _bgi_draw_scaled(int x, int y, const char *s) { uint8_t rows[8]; uint8_t b, fg, size, dir; int r, c, bx, by, px, py; fg = _bgi_fg; size = _bgi_text_size ? _bgi_text_size : 1; dir = _bgi_text_dir; _bgi_begin(); while (*s) { _bgi_font_rows((unsigned char)*s, rows); for (r = 0; r < 8; r++) { b = rows[r]; for (c = 0; c < 8; c++) { if (!((b >> (7 - c)) & 1)) continue; for (by = 0; by < size; by++) { for (bx = 0; bx < size; bx++) { if (dir == VERT_DIR) { px = x + r * size + by; py = y - c * size - bx; } else { px = x + c * size + bx; py = y + r * size + by; } _bgi_plot_raw(px, py, fg); } } } } if (dir == VERT_DIR) y -= 8 * size; else x += 8 * size; s++; } _bgi_end(); }