All pastes #9704 Raw Edit

C or C

public text v1 · immutable
#9704 ·published 2005-04-17 18:31 UTC
rendered paste body
C++ stuff:


int splashy_child_boot()
{
        IDirectFB              dfb;
        IDirectFBImageProvider provider;
        IDirectFBSurface       surface;
        DFBSurfaceDescription  desc;
        IDirectFBInputDevice keyboard;
        //load configuration
        
	xml_parser config("/etc/splashy/config.xml");
        config.read("splashy");
        
	//initializing Directfb
        DirectFB::Init();

        dfb = DirectFB::Create();
		
        dfb.SetCooperativeLevel( DFSCL_FULLSCREEN); //used to disable inputs from mouse and reduce overhead (about 15% of CPU usage)
	//begin hight development section to find out te width and height of framebuffer
	
	//look at http://directfb.org/docs/DirectFB_Reference/IDirectFB_EnumVideoModes.html

	//end development section 
		
        provider = dfb.CreateImageProvider((config.get("boot")).c_str());

        provider.GetSurfaceDescription( &desc );
		
        //flags to set the default surface as main surface
        desc.flags = DSDESC_CAPS;
        desc.caps = DSCAPS_PRIMARY;
	 
        surface = dfb.CreateSurface( desc );

        provider.RenderTo( surface, NULL ); //it writes on the framebuffer the background image
		
        //setting up keyboard
        keyboard = dfb.GetInputDevice(DIDID_KEYBOARD);
        DFBInputDeviceKeyState botton = DIKS_UP;
                        
        //starting bars stuff!
        DFBRectangle progressbar;
        
        int screenWidth, screenHeight;
        
        surface.GetSize(&screenWidth, &screenHeight); //retrieve informations
        progressbar.x = screenWidth*config.get_int("x")/100;
        progressbar.y = screenHeight*config.get_int("y")/100;
        progressbar.w = screenWidth*config.get_int("width")/100;
        progressbar.h = screenHeight*config.get_int("height")/100;
        
        surface.DrawRectangle(progressbar);
                        
        //set the filling color of the progressbar
        if(config.get_int("red") > 255 || config.get_int("green") > 255 || config.get_int("blue") > 255 || config.get_int("alpha") > 255)
        {
                cout << "error: red, green, blue or alpha tags in the configuration file contains wrong value" << endl;
                return 3;
        }



C stuff


int splashy_child_boot()
{
	splashy_video_t video;

	video_start_splash(&video, "/etc/splashy/background.jpg");

        /*starting bars stuff!*/
	DFBRectangle progressbar;
	video_draw_progressbar(&video, &progressbar);

	GString *screen_text = NULL;   /* Host the screen text read for processing */
	gchar   *screen_position,      /* Host the last position or NULL if isn't found */
		*last_screen_position, /* Host the last real position */
		*percent_symbol;       /* Host the address of % symbol */

        /*setting up keyboard*/
	DFBInputDeviceKeyState botton;
	IDirectFBInputDevice *keyboard;
	video.dfb->GetInputDevice(video.dfb, DIDID_KEYBOARD, &keyboard);

	gint i; /* Used to iterate inside of for */
	for(i = 0;;i++)
	{
                /*see keyboard and exit if F2 is pressed */
		keyboard->GetKeyState(keyboard, DIKI_F2, &botton);
		if( botton == DIKS_DOWN) /* verbose mode */
			return 1;

		keyboard->GetKeyState(keyboard, DIKI_ESCAPE, &botton);
		if( botton == DIKS_DOWN) /* exit if escape is pressed */
			return 1;

                /* Read the screen */
		screen_text = load_text(']');

                /* Locate the last 'Booting process at ' string and
                   check what is the value there. */
		last_screen_position = 0;
		while ((screen_position = strstr(screen_text->str, "Booting process at ")) != NULL)
			last_screen_position = screen_position;

                /* If not found, wait and try again. */
		if ( last_screen_position == 0 ) {
			usleep(10);
			continue;
		}

		percent_symbol = strchr(last_screen_position, '%');
		video_update_progressbar(&video,
					 &progressbar,
					 strtol(last_screen_position,
						&percent_symbol, 10));