<1>/* Graphics Not Rendered in HTML */











#define STRING_CENTER_X_OFFSET  6
#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",     "Powered by Cosmic Divinity\0"
                                                        "Divine Intellect Inside\0"
                                                        "Professional Recreation\0"
                                                        "Enlightenment By Code\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, <1>); // plot the sprite directly at the position of dc.

        dc->color = DKGRAY;
        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 = DKGRAY;
        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              theta = 0.3, phi = 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, phi);
                Mat4x4RotX(splash_r, theta);

                Sleep(20);
                phi += .03;
                WinToTop;
        }

        gr.fp_draw_mouse = &DrawStdMouse;
        MouseHardEnable(TRUE);
        FlushMessages;
        Kill(bg_task);
        AutoComplete(ON);
}

ZSplash;