kolibrios-fun/programs/games/doom/trunk/i_splash.c

77 lines
1.7 KiB
C
Raw Normal View History

#include<stdlib.h>
#include<stdio.h>
#include<jpeglib.h>
#include<menuet/os.h>
#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);
}