#include #include #include #include #include"libmgfx.h" #define SPLASH_FILE "splash.jpg" static int splash_thread_pid; static char * splash_thread_stk; static mgfx_image_t * splash=NULL; static int xres,yres,bpp,bpscan; void I_EndSplash(void); static void repaint_splash_wnd(void) { __menuet__window_redraw(1); __menuet__define_window( (xres-splash->width)>>1, (yres-splash->height)>>1, splash->width, splash->height+20, 0x01000000, 0x00000000, 0x00000000); paint_image(0,0,splash); __menuet__window_redraw(2); } static int __tmp=0; static void splash_thread(void) { __menuet__dga_get_caps(&xres,&yres,&bpp,&bpscan); repaint_splash_wnd(); for(;;) { __menuet__delay100(5); __menuet__bar(0,splash->height+1,splash->width,20,0); __menuet__bar(0,splash->height+1,__tmp,20,0x404040); __tmp+=4; if(__tmp>=splash->width) __tmp=0; } } void I_BeginSplash(void) { init_mgfx_library(); if(load_image(SPLASH_FILE,&splash)!=_PIC_OK) { splash=NULL; __libclog_printf("Unable to open %s for splash screen !!!\n",SPLASH_FILE); return; } splash_thread_stk=__menuet__exec_thread(splash_thread,4096,&splash_thread_pid); if(splash_thread_pid<1) { __libclog_printf("Unable to create splash screen thread\n"); // I_EndSplash(); return; } __libclog_printf("Splash screen created\n"); } void I_EndSplash(void) { int i; if(!splash) return; if(splash_thread_pid>1) __asm__ __volatile__("int $0x40"::"a"(18),"b"(2),"c"(splash_thread_pid)); free_image(splash); free(splash); splash=NULL; free(splash_thread_stk); }