|  | 
 | /* | 
 |  *  Frame buffer device test suite | 
 |  * | 
 |  *  (C) Copyright 2001-2003 Geert Uytterhoeven | 
 |  * | 
 |  *  This file is subject to the terms and conditions of the GNU General Public | 
 |  *  License. See the file COPYING in the main directory of this archive for | 
 |  *  more details. | 
 |  */ | 
 |  | 
 | #include <signal.h> | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <string.h> | 
 |  | 
 | #include "types.h" | 
 | #include "util.h" | 
 | #include "fb.h" | 
 | #include "drawops.h" | 
 | #include "visual.h" | 
 | #include "visops.h" | 
 | #include "test.h" | 
 |  | 
 | #define DEFAULT_FBDEV	"/dev/fb0" | 
 |  | 
 |  | 
 | const char *ProgramName; | 
 |  | 
 | const char *Opt_Fbdev = DEFAULT_FBDEV; | 
 | int Opt_Debug = 0; | 
 | int Opt_List = 0; | 
 | int Opt_Quiet = 0; | 
 | int Opt_Verbose = 0; | 
 |  | 
 |  | 
 |     /* | 
 |      *  Print the usage template | 
 |      */ | 
 |  | 
 | static void Usage(void) __attribute__ ((noreturn)); | 
 |  | 
 | static void Usage(void) | 
 | { | 
 |     printf("%s: [options] [test ...]\n\n" | 
 | 	   "Valid options are:\n" | 
 | 	   "    -h, --help       Display this usage information\n" | 
 | 	   "    -f, --fbdev dev  Specify frame buffer device (default: %s)\n" | 
 | 	   "    -d, --debug      Enable debug mode\n" | 
 | 	   "    -l, --list       List tests only, don't run them\n" | 
 | 	   "    -q, --quiet      Suppress messages\n" | 
 | 	   "    -v, --verbose    Enable verbose mode\n" | 
 | 	   "\n", | 
 | 	   ProgramName, DEFAULT_FBDEV); | 
 |     exit(1); | 
 | } | 
 |  | 
 |  | 
 |     /* | 
 |      *  Signal handler | 
 |      */ | 
 |  | 
 | static void SigHandler(int signo) | 
 | { | 
 |     signal(signo, SIG_IGN); | 
 |     Fatal("Caught signal %d. Exiting\n", signo); | 
 | } | 
 |  | 
 |  | 
 |     /* | 
 |      *  Main routine | 
 |      */ | 
 |  | 
 | int main(int argc, char *argv[]) | 
 | { | 
 |     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); | 
 | } | 
 |  |