2025-05-28 14:41:02 -05:00
|
|
|
#include <string.h>
|
|
|
|
|
#include <tty.h>
|
|
|
|
|
#include <stdio.h>
|
2025-10-20 21:57:30 -05:00
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <drivers/ps2_keyboard.h>
|
2025-05-28 14:41:02 -05:00
|
|
|
|
2025-06-13 18:03:39 -05:00
|
|
|
#include <kernel/intro.h>
|
2025-05-28 14:41:02 -05:00
|
|
|
|
2025-10-20 21:57:30 -05:00
|
|
|
void ack_char(char c);
|
|
|
|
|
void start_kernel_shell(void);
|
|
|
|
|
|
|
|
|
|
char char_entered = 0x00;
|
|
|
|
|
|
|
|
|
|
void intro_begin(void)
|
2025-06-13 19:53:54 -05:00
|
|
|
{
|
2025-10-20 21:57:30 -05:00
|
|
|
extern char* kernel_version;
|
|
|
|
|
|
|
|
|
|
char* fin = (char*) malloc(strlen(kernel_version) + 6);
|
|
|
|
|
memset(fin, 0, (strlen(kernel_version) + 5));
|
|
|
|
|
strcpy(fin, kernel_version);
|
2025-05-28 14:41:02 -05:00
|
|
|
|
2025-10-20 21:57:30 -05:00
|
|
|
#ifdef _DEBUG
|
|
|
|
|
strcat(fin, " DEBUG");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
begin_anim(fin);
|
|
|
|
|
}
|
2025-05-28 14:41:02 -05:00
|
|
|
|
|
|
|
|
int16_t begin_anim(const char* version)
|
|
|
|
|
{
|
|
|
|
|
if (strlen(version) < 5)
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char* e = "Espresso";
|
|
|
|
|
const char* v = version;
|
|
|
|
|
const char* n = "Press any key to continue";
|
|
|
|
|
|
|
|
|
|
int32_t pos = 0;
|
|
|
|
|
int32_t v_pos = 0;
|
|
|
|
|
int16_t b = 0;
|
|
|
|
|
int32_t sh_pos = VGA_WIDTH / 2;
|
|
|
|
|
int32_t sv_pos = VGA_HEIGHT / 2;
|
2025-10-20 21:57:30 -05:00
|
|
|
|
|
|
|
|
setup_hook((ps2_hook_t) ack_char);
|
2025-05-28 14:41:02 -05:00
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
terminal_clear();
|
|
|
|
|
|
2025-10-20 21:57:30 -05:00
|
|
|
if (char_entered != 0)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-28 14:41:02 -05:00
|
|
|
for (int32_t i = 0; n[i]; ++i)
|
|
|
|
|
{
|
|
|
|
|
terminal_putentryat(n[i], terminal_getcolor(), sh_pos, sv_pos);
|
|
|
|
|
sh_pos++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int32_t i = 0; e[i]; ++i)
|
|
|
|
|
{
|
|
|
|
|
terminal_putentryat(e[i], terminal_getcolor(), pos + i, v_pos);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((v_pos + 1) == VGA_HEIGHT)
|
|
|
|
|
{
|
|
|
|
|
v_pos = 0;
|
|
|
|
|
b = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int32_t i = 0; v[i]; ++i)
|
|
|
|
|
{
|
|
|
|
|
terminal_putentryat(v[i], terminal_getcolor(), pos + i + 3, (b == 0 ? (v_pos + 1) : v_pos));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pos += 2;
|
|
|
|
|
v_pos++;
|
|
|
|
|
sh_pos = VGA_WIDTH / 2;
|
|
|
|
|
|
|
|
|
|
b = 0;
|
|
|
|
|
|
2025-10-20 21:57:30 -05:00
|
|
|
sleep(1000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (char_entered != 0)
|
|
|
|
|
{
|
|
|
|
|
start_kernel_shell();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
terminal_clear();
|
2025-05-28 14:41:02 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-20 21:57:30 -05:00
|
|
|
void ack_char(char c)
|
|
|
|
|
{
|
|
|
|
|
char_entered = c;
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void start_kernel_shell(void)
|
|
|
|
|
{
|
|
|
|
|
/* terminal_clear() already called by begin_anim() */
|
|
|
|
|
|
|
|
|
|
extern int kshell_start(int argc, char** argv);
|
|
|
|
|
|
|
|
|
|
kshell_start(0, NULL);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|