Fix: scrolling bug + shell void input

This commit is contained in:
xamidev
2024-07-24 11:17:48 +02:00
parent 01a4016f15
commit d83299cb48
5 changed files with 24 additions and 8 deletions

Binary file not shown.

BIN
os.iso

Binary file not shown.

View File

@@ -14,8 +14,11 @@ void shell_install()
printf("\n"); printf("\n");
// Childish shell // Childish shell
if (strcmp(input_buffer, "") == 0)
if (strcmp(input_buffer, "help") == 0) {
continue;
}
else if (strcmp(input_buffer, "help") == 0)
{ {
printf("This is the Blank Operating System\ndesigned for fun by xamidev\n\nCommand help:\n\n\thelp - shows this message\n\tpanic - makes the kernel panic\n"); printf("This is the Blank Operating System\ndesigned for fun by xamidev\n\nCommand help:\n\n\thelp - shows this message\n\tpanic - makes the kernel panic\n");
} }
@@ -23,6 +26,8 @@ void shell_install()
{ {
printf("%d", 4/0); printf("%d", 4/0);
} }
else {
puts("Unknown command\n");
}
} }
} }

0
src/libc/crypto.c Normal file
View File

View File

@@ -57,12 +57,14 @@ unsigned int getcolor(int x, int y)
void scroll(int lines) void scroll(int lines)
{ {
for (unsigned int y = lines; y < VGA_HEIGHT; y++) if (lines <= 0 || (unsigned int)lines >= VGA_HEIGHT) return;
for (unsigned int y = 0; y < VGA_HEIGHT-lines; y++)
{ {
for (unsigned int x = 0; x < VGA_WIDTH; x++) for (unsigned int x = 0; x < VGA_WIDTH; x++)
{ {
putchar(x, y-lines, getchar(x, y)); putchar(x, y, getchar(x, y+lines));
putcolor(x, y-lines, getcolor(x, y)); putcolor(x, y, getcolor(x, y+lines));
} }
} }
@@ -70,10 +72,15 @@ void scroll(int lines)
{ {
for (unsigned int x = 0; x < VGA_WIDTH; x++) for (unsigned int x = 0; x < VGA_WIDTH; x++)
{ {
putchar(x, y, '\0'); putchar(x, y, ' ');
putcolor(x, y, COLOR); putcolor(x, y, COLOR);
} }
} }
VGA_Y -= lines;
if ((int)VGA_Y < 0) {
VGA_Y = 0;
}
} }
void putc(char c) void putc(char c)
@@ -89,6 +96,10 @@ void putc(char c)
break; break;
case '\t': case '\t':
VGA_X += 4; VGA_X += 4;
if (VGA_X >= VGA_WIDTH) {
VGA_X -= VGA_WIDTH;
VGA_Y++;
}
break; break;
default: default:
putchar(VGA_X, VGA_Y, c); putchar(VGA_X, VGA_Y, c);