Exemplo n.º 1
0
int FB_exit()
{
	int ioctl_err;
	char *errstr;
	
	if(!FB_visible && (b_store != NULL))
	{
		free(b_store);
		b_store = NULL;
	}
	
	ioctl_err = ioctl(fbufd,FBIOPUT_VSCREENINFO,&backup_var_info);
	if(ioctl_err < 0)
	{
		errstr = strerror(errno);
		fprintf(stderr,"FBlib:ioctl FBIOPUT_VSCREENINFO failed: %s \n",errstr);
		return IOCTL_ERR;
	}
	fb_unmap();
	close(fbufd);
	if(uses_keyboard)
		FB_kb_end();
	printf("\n"); /* Cause a redraw to align the bottom of the screen */
	return OK;
}
Exemplo n.º 2
0
void fb_cleanup(void)
{
    Debug("fb_cleanup()\n");
    if (saved_fb)
	fb_restore();
    if (fb)
	fb_unmap();
    if (fb_fd != -1) {
	if (saved_cmap.len) {
	    fb_cmap = saved_cmap;
	    RESTORE_AND_FREE_COMPONENT(red);
	    RESTORE_AND_FREE_COMPONENT(green);
	    RESTORE_AND_FREE_COMPONENT(blue);
	    if (fb_cmap.transp)
		RESTORE_AND_FREE_COMPONENT(transp);
	    fb_set_cmap();
	}
	//fb_var = saved_var;
	memcpy(&fb_var, &saved_var, sizeof(struct fb_var_screeninfo));
	fb_set_var();
	fb_get_var();
	/* FIXME: compare fb_var with saved_var */
	fb_get_fix();
	/* FIXME: compare fb_fix with saved_fix */
	fb_close();
    }
}
Exemplo n.º 3
0
void fb_switch(int n_sig)
{
	static int switching=0;
	
	signal(SIGUSR2, fb_switch); /* reset signal handler */
	if(switching && (n_sig == SIGUSR2))
		return;
	if(switching == 0)
		switching = 1;
	if(FB_visible)
	{
		b_store = (char*)malloc(visiblesize);
		if(b_store == NULL)
			fprintf(stderr,"FBlib:cannot use backing store for VT switch");
		else
			memcpy(b_store, fbp, visiblesize);
		fb_unmap();
		fbp = b_store;
		FB_visible = 0;
		if(ioctl(TTY,VT_RELDISP,1) < 0)
		{
			fprintf(stderr,"FBlib:ioctl VT_RELDISP failed: %s \n",strerror(errno));
			fb_map();
			free(b_store);
			FB_visible=1;
		}
	}
	else
	{
		if(ioctl(TTY,VT_RELDISP,VT_ACKACQ) < 0)
		{
			fprintf(stderr,"FBlib:ioctl VT_RELDISP failed: %s (FATAL error)\n",strerror(errno));
			FB_exit();
			exit(1);
		}
		fb_map();
		memcpy(fbp, b_store, visiblesize);
		free(b_store);
		b_store=NULL;
		FB_visible=1;
	}
	switching=0;
	return;
}