mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-06-07 00:04:48 +00:00
134 lines
3.8 KiB
HolyC
Executable File
134 lines
3.8 KiB
HolyC
Executable File
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
$SP,"<1>",BI=1$
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#define STRING_CENTER_X_OFFSET 1
|
||
#define STRING_CENTER_Y_OFFSET 80
|
||
#define DISPLAY_RECT_HEIGHT 8
|
||
#define WIN_TOP TEXT_ROWS / 3 // each 1 represents
|
||
#define WIN_LEFT TEXT_COLS / 3 // 8 pixels.
|
||
|
||
DefineListLoad("ST_MOTTOS", "Divine Intellect Inside\0"
|
||
"Modern Innovation\0"
|
||
"Programming Enlightenment\0"
|
||
"LoseThos Resurrected\0"
|
||
"Unrestricted Potential\0"
|
||
"Ring-0 64-Bit Operating System\0"
|
||
"Simplicity Perfected\0");
|
||
|
||
Sleep((Now + counts.timer) & 0x7F); // increase entropy of motto selection
|
||
|
||
U8* display_string = MStrPrint("%S", "DD_OS_NAME_VERSION");
|
||
U8* motto_string = MStrPrint("%Z", RandU8 % DefineCount("ST_MOTTOS"), "ST_MOTTOS");
|
||
I64 display_string_offset = StrLen(display_string) / 2 * 8 - STRING_CENTER_X_OFFSET;
|
||
I64 motto_string_offset = StrLen(motto_string) / 2 * 8;
|
||
I64 splash_r[4][4];
|
||
|
||
U0 DrawIt(CTask *,CDC *dc)
|
||
{
|
||
I64 *old_r = dc->r;
|
||
I64 screen_center_x_pix = GR_WIDTH / 2; // each 1 represents
|
||
I64 screen_center_y_pix = (GR_HEIGHT / 2); // single pixels.
|
||
|
||
dc->x = screen_center_x_pix - (WIN_LEFT * 8); // to plot in the center, we put dc at the screen center in pixels,
|
||
dc->y = screen_center_y_pix - (WIN_TOP * 8); // minus the window position (times 8 since win row/col variables are 1:8 ratio.)
|
||
dc->z = GR_Z_ALL; // the result is the position in the current window that aligns to center of screen.
|
||
|
||
dc->flags |= DCF_TRANSFORMATION;
|
||
DCDepthBufAlloc(dc);
|
||
DCMat4x4Set(dc, splash_r); //This assigns to dc->r and sets r_norm.
|
||
DCDepthBufReset(dc);
|
||
|
||
Sprite3(dc, 0, 0, 0, $IB,"<1>",BI=1$); // plot the sprite directly at the position of dc.
|
||
|
||
dc->color = LTGRAY;
|
||
GrRect(dc, dc->x - display_string_offset, dc->y - STRING_CENTER_Y_OFFSET, StrLen(display_string) * 8, DISPLAY_RECT_HEIGHT);
|
||
dc->color = BLACK;
|
||
GrPrint(dc, dc->x - display_string_offset, dc->y - STRING_CENTER_Y_OFFSET, display_string);
|
||
|
||
dc->color = LTGRAY;
|
||
GrRect(dc, dc->x - motto_string_offset, dc->y + STRING_CENTER_Y_OFFSET, StrLen(motto_string) * 8, DISPLAY_RECT_HEIGHT);
|
||
dc->color = BLACK;
|
||
GrPrint(dc, dc->x - motto_string_offset, dc->y + STRING_CENTER_Y_OFFSET, motto_string);
|
||
|
||
dc->r = old_r;
|
||
}
|
||
|
||
U0 DrawNoMouse(CDC *dc,I64 x,I64 y)
|
||
{
|
||
no_warn dc, x, y;
|
||
}
|
||
|
||
U0 ZSplash()
|
||
{
|
||
F64 <EFBFBD> = 0.3, <EFBFBD> = 0;
|
||
CTask *bg_task = User;
|
||
|
||
WinToTop(bg_task);
|
||
WinBorder(, bg_task);
|
||
WinMax(bg_task);
|
||
DocClear(bg_task->put_doc);
|
||
Bts(&bg_task->put_doc->flags, DOCf_HIDE_CURSOR);
|
||
AutoComplete(OFF);
|
||
|
||
WinToTop;
|
||
|
||
Fs->win_top = WIN_TOP;
|
||
Fs->win_left = WIN_LEFT;
|
||
Fs->win_right = WIN_LEFT * 2;
|
||
Fs->win_bottom = WIN_TOP * 2;
|
||
|
||
Fs->draw_it = &DrawIt;
|
||
|
||
DocClear(Fs->border_doc, TRUE);
|
||
|
||
StrCopy(Fs->task_title, display_string);
|
||
|
||
gr.fp_draw_mouse = &DrawNoMouse;
|
||
|
||
Bts(&Fs->put_doc->flags, DOCf_HIDE_CURSOR);
|
||
MouseHardEnable(FALSE);
|
||
|
||
while (!CharScan)
|
||
{
|
||
Mat4x4IdentEqu(splash_r);
|
||
Mat4x4RotY(splash_r, <EFBFBD>);
|
||
Mat4x4RotX(splash_r, <EFBFBD>);
|
||
|
||
Sleep(20);
|
||
<EFBFBD> += .03;
|
||
WinToTop;
|
||
}
|
||
|
||
gr.fp_draw_mouse = &DrawStdMouse;
|
||
MouseHardEnable(TRUE);
|
||
FlushMessages;
|
||
Spawn(&MouseHardDriverInstall);
|
||
Kill(bg_task);
|
||
AutoComplete(ON);
|
||
}
|
||
|
||
ZSplash; |