Esempio n. 1
0
File: fb.c Progetto: CurlyMoo/Splash
int fb_gc(void) {
	fb_clear_mem();
	fb_clear_screen();
	fb_cleanup();
	sfree((void *)&zmap);
	close(fbfd);
	return EXIT_SUCCESS;
}
Esempio n. 2
0
void Fatal(const char *fmt, ...)
{
    va_list ap;

    va_start(ap, fmt);
    PrintMessage(TXT_FATAL, fmt, ap);
    va_end(ap);
    fb_cleanup();
    exit(1);
}
Esempio n. 3
0
int main(int argc, char *argv[])
{
    page_mask = ~(sysconf(_SC_PAGE_SIZE)-1);
    ProgramName = argv[0];

    while (argc > 1 && argv[1][0] == '-') {
	if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
	    Usage();
	else if (!strcmp(argv[1], "-f") || !strcmp(argv[1], "--fbdev")) {
	    if (argc <= 2)
		Usage();
	    else {
		Opt_Fbdev = argv[2];
		argv += 2;
		argc -= 2;
	    }
	} else if (!strcmp(argv[1], "-d") || !strcmp(argv[1], "--debug")) {
	    Opt_Debug = 1;
	    argv++;
	    argc--;
	} else if (!strcmp(argv[1], "-l") || !strcmp(argv[1], "--list")) {
	    Opt_List = 1;
	    argv++;
	    argc--;
	} else if(!strcmp(argv[1], "-q") || !strcmp(argv[1], "--quiet")) {
	    Opt_Quiet = 1;
	    argv++;
	    argc--;
	} else if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--verbose")) {
	    Opt_Verbose = 1;
	    argv++;
	    argc--;
	} else
	    Usage();
    }

    /*
     *  Install signal handlers
     */
    signal(SIGINT, SigHandler);
    signal(SIGQUIT, SigHandler);
    signal(SIGILL, SigHandler);
    signal(SIGFPE, SigHandler);
    signal(SIGSEGV, SigHandler);
    signal(SIGTERM, SigHandler);

    if (Opt_List) {
	if (argc < 2) {
	    Message("Listing all tests\n");
	    test_list(NULL, Opt_Verbose);
	} else
	    while (argc > 1) {
		test_list(argv[1], Opt_Verbose);
		argc--;
		argv++;
	    }
    } else {
	fb_init();
	drawops_init();
	visops_init();

	if (argc < 2) {
	    Message("Running all tests\n");
	    test_run(NULL);
	} else
	    while (argc > 1) {
		test_run(argv[1]);
		argc--;
		argv++;
	    }
	fb_cleanup();
    }
    exit(0);
}
Esempio n. 4
0
File: fb.c Progetto: CurlyMoo/Splash
void fb_init(void) {

	unsigned long page_mask;
    struct vt_stat vts;
	
	fb_setvt();
	
	if(ioctl(tty, VT_GETSTATE, &vts) == -1) {
		logprintf(LOG_ERR, "ioctl VT_GETSTATE: %s (not a linux console?)\n", strerror(errno));
		exit(EXIT_FAILURE);
    }
	
	fbfd = open(DEFAULT_FB, O_RDWR);
	if (fbfd == -1) {
        logprintf(LOG_ERR, "cannot open framebuffer device");
        exit(EXIT_FAILURE);
    }	

    if(ioctl(fbfd, FBIOGET_VSCREENINFO, &ovinfo) == -1) {
        logprintf(LOG_ERR, "cannnot read variable screen information");
        exit(EXIT_FAILURE);
    }

    if(ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) {
        logprintf(LOG_ERR, "cannot read fixed screen information");
        exit(EXIT_FAILURE);
    }		
	
	if(ovinfo.bits_per_pixel == 8 || finfo.visual == FB_VISUAL_DIRECTCOLOR) {
		if(ioctl(fbfd, FBIOGETCMAP, &ocmap) == -1) {
			logprintf(LOG_ERR, "ioctl FBIOGETCMAP");
			exit(EXIT_FAILURE);
		}
    }
	
	if(ioctl(tty, KDGETMODE, &kd_mode) == -1) {
		logprintf(LOG_ERR, "ioctl KDGETMODE");
		exit(EXIT_FAILURE);
	}
    if(ioctl(tty, VT_GETMODE, &vt_omode) == -1) {
		logprintf(LOG_ERR, "ioctl VT_GETMODE");
		exit(EXIT_FAILURE);
    }

    tcgetattr(tty, &term);

    if(ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
		logprintf(LOG_ERR,"ioctl FBIOGET_VSCREENINFO");
		exit(EXIT_FAILURE);
    }
 
    if(ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) {
		logprintf(LOG_ERR, "ioctl FBIOGET_FSCREENINFO");
		exit(EXIT_FAILURE);
    }

    screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

	page_mask = (unsigned long)getpagesize()-1;
	fb_mem_offset = (unsigned long)(finfo.smem_start) & page_mask;
    fbp = (char *)mmap(0, finfo.smem_len+fb_mem_offset, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);

	if((int)fbp == -1) {
        logprintf(LOG_ERR, "failed to map framebuffer device to memory");
        exit(EXIT_FAILURE);
    }
 
	if(ioctl(tty, KDSETMODE, KD_GRAPHICS) == -1) {
		logprintf(LOG_ERR, "ioctl KDSETMODE");
		fb_cleanup();
		exit(EXIT_FAILURE);
    }

	fb_memset(fbp+fb_mem_offset, 0, finfo.line_length * vinfo.yres);
	
	fb_init_zmap();
}