Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <kernel/myelin.h>
- #include <kernel/console.h>
- #include <boot/splash.h>
- /**
- * \brief Call a splash_action_function
- */
- static void splash_do(splash_action_function func, void* arg)
- {
- func(arg);
- }
- /**
- * \brief Draw the progress bar
- * \param num Current action
- * \param count Number of actions
- * \param screen Screen information
- * \param text Action message
- */
- static void splash_paint(int num, int count, struct splash_screen screen,
- const char* text)
- {
- u32 i, j = screen.width - (count - num), k = screen.width;
- /*
- * Draw bar outline
- */
- console.screen.fore = screen.line;
- console.cursor.x = screen.x - 1;
- console.cursor.y = screen.y - 1;
- console_writechar(218);
- for (i = 0; i < k; ++i)
- console_writechar(196);
- console_writechar(191);
- console.cursor.x = screen.x - 1;
- console.cursor.y++;
- console_writechar(179);
- for (i = 0; i < k; ++i)
- console_writechar(' ');
- console_writechar(179);
- console.cursor.x = screen.x - 1;
- console.cursor.y++;
- console_writechar(192);
- for (i = 0; i < k; ++i)
- console_writechar(196);
- console_writechar(217);
- console.cursor.x = screen.x;
- console.cursor.y++;
- /*
- * Write message
- */
- console.screen.fore = screen.text;
- console_writestring(text);
- /*
- * Draw progress
- */
- console.screen.fore = screen.fill;
- console.cursor.x = screen.x;
- console.cursor.y = screen.y;
- for (i = 0; i < j; ++i)
- console_writechar(219);
- for (; j < k; ++j)
- console_writechar(' ');
- }
- /**
- * \brief Draw a splash screen while booting the system
- * \param screen Splash screen info
- * \param actions Actions which need to be completed to boot the system
- * \param count Number of actions
- */
- void splash(struct splash_screen screen, struct splash_action* actions,
- u32 count)
- {
- u8 saved_fore = console.screen.fore;
- u8 saved_back = console.screen.back;
- u32 saved_flags = console.cursor.flags;
- u32 i = 0;
- console.cursor.flags &= ~(CONSOLE_CURSOR_ENABLED);
- console.screen.back = screen.back;
- console_clear();
- if (!(screen.bar)) {
- console.cursor.x = console.cursor.y = 0;
- console.screen.fore = screen.text;
- console_writestring("MYELIN (booting)...\n\n");
- }
- while (i < count) {
- if (screen.bar) {
- console_clear();
- console.cursor.x = console.cursor.y = 0;
- console.screen.fore = screen.text;
- console_writestring("MYELIN (booting)...\n\n");
- splash_paint(i + 1, count, screen, actions[i].msg);
- splash_do(actions[i].func, actions[i].arg);
- } else {
- /*
- * Save y co-ord in case a callback function prints its
- * own text
- */
- unsigned y1 = console.cursor.y, y2;
- console.screen.fore = screen.text;
- console_writestring(actions[i].msg);
- console.cursor.x = 0;
- console.cursor.y++;
- splash_do(actions[i].func, actions[i].arg);
- console.cursor.x = console.screen.columns - 7;
- y2 = console.cursor.y;
- console.cursor.y = y1;
- console.screen.fore = screen.line;
- console_writestring("[");
- console.screen.fore = screen.fill;
- console_writestring("DONE");
- console.screen.fore = screen.line;
- console_writestring("]\n");
- console.cursor.x = 0;
- console.cursor.y = y2;
- }
- ++i;
- }
- console.screen.fore = saved_fore;
- console.screen.back = saved_back;
- console.cursor.flags = saved_flags;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement