binux-wl/kernel/araclar/print.c

97 lines
1.6 KiB
C

#include "../headerlar/print.h"
const static size_t num_cols = 80;
const static size_t num_rows = 25;
struct Char {
uint8_t character;
uint8_t color;
};
struct Char* buffer = (struct Char*) 0xb8000;
size_t col = 0;
size_t row = 0;
uint8_t color = renk_beyaz | renk_siyah <<4;
void clear_row(size_t row) {
struct Char empty = (struct Char) {
character: ' ',
color: color,
};
for (size_t col = 0; col < num_cols; col++) {
buffer[col + num_cols * row] = empty;
}
}
void print_clear() {
for (int i = 0; i < num_rows; i++) {
clear_row(i);
}
}
void print_newline() {
col = 0;
if (row < num_rows - 1) {
row++;
return;
}
for (size_t row = 1; row < num_rows; row++) {
for (size_t col = 0; col < num_cols; col++) {
struct Char character = buffer[col + num_cols * row];
buffer[col + num_cols * (row - 1)] = character;
}
}
clear_row(num_rows - 1);
}
void print_char(char character) {
if (character == '\n') {
print_newline();
return;
}
if (col >= num_cols - 1) {
buffer[col + num_cols * row] = (struct Char) {
character: (uint8_t) '\\',
color: color,
};
print_newline();
}
buffer[col + num_cols * row] = (struct Char) {
character: (uint8_t) character,
color: color,
};
col++;
}
void print_str(char* str) {
for (size_t i = 0; 1; i++) {
char character = (uint8_t) str[i];
if (character == '\0') {
return;
}
print_char(character);
}
}
void print_set_color(uint8_t yazi, uint8_t arka) {
color = yazi + (arka << 4);
}
void clear(size_t chars) {
struct Char empty = (struct Char) {
character: ' ',
color: color,
};
for (size_t i = 0; i == chars; i++) {
buffer[col + num_cols * row] = empty;
}
}