<%= header 'c.hdr' %> #include "main.h" #include #include #include #include #include #include static int verbose = 0; /** * my_error - print an error message on stderr then : if(code) exit(code) */ static void my_error( int code, const char *fmt, ... ) { va_list ap; if ( *fmt ) { va_start( ap, fmt ); (void)vfprintf( stderr, fmt, ap ); va_end( ap ); fmt += strlen( fmt ); if ( fmt[-1] != '\n' ) (void) fputc( '\n', stderr ); } if( code ) exit( code ); /* NOTREACHED */ } /** * usage - print usage on stderr */ static void usage( const char *program_name, const char* optstring ) { fprintf( stderr, "usage : %s [-%s]\n", program_name, optstring ); fprintf( stderr, "\t --verbose (-v) : verbose mode.\n" "\t --version (-V) : print version number.\n" "\t --help (-h) : print this screen.\n" "\t --arg (-a) : a numeric argument.\n" "\n" ); } /** * MAIN */ int main( int argc, char **argv ) { int optch; /* returned by getopts_long */ int index; /* index of longopts[] */ int a; /** * name - has_arg (bool) - flag (int *) - val (int) * * if(!longopts[x].flag) * return longopts[x].val; * else * *(longopts[x].flag) = longopts[x].val; * return 0; * */ static struct option longopts[] = { { "help", 0, 0, 'h' }, { "version", 0, 0, 'V' }, { "verbose", 0, &verbose, 1 }, { "arg", 1, 0, 'a' }, { 0, 0, 0, 0, } }; static char *optstring = "hvVa:"; static const char *program_name = PACKAGE_NAME; /* const char *program_name = file_name( argv[0] ); */ opterr=0; /* no default advise for bad options */ optind=0; a=0; #ifdef DEBUG printf( "DEBUG mode is set.\n" ); #endif /* process options */ while( ( optch = getopt_long( argc, argv, optstring, longopts, &index ) ) !=-1 ) { switch( optch ){ case 'h': usage( program_name, optstring ); return EXIT_FAILURE; case 'V': fprintf( stdout, " %s version : %s\n", program_name, VERSION ); return EXIT_FAILURE; case 'v': verbose = 1; break; case 'a': a = atoi( optarg ); break; case 0: /* longopt used flag */ break; default: my_error(EXIT_FAILURE,"invalid option %s\n\ttype : %s --help\n",argv[optind-1],program_name); } } printf("a : %d\n",a); /* process other arguments */ while(optind