naja:
/*
* Include Files:
*/
#include <stdlib.h> /* Standard library */
#include <stdio.h> /* Standard In-/Output routines */
#include <string.h> /* String processing routines */
typedef enum arg {
ARG_UNKNOWN = 0x00,
ARG_HELP = 0x01,
ARG_VERSION = 0x02
} arg;
/*
* Argument Table:
*/
char arga_short[] = {
'h',
'v',
'\0'
};
char *arga_long[] = {
"help",
"version",
"\0"
};
char *arga_help[] = {
"Displays this text",
"Displays version information and exits",
"\0"
};
/*
* Function Prototypes:
*/
char *get_fname( char *str );
void unknown_arg( char *arg );
void cmdl_help( void );
void cmdl_version( void );
int main( int argc, char **argv )
{
char *app_name = 0;
char *argn = 0;
arg arg_num = ARG_UNKNOWN;
app_name = get_fname( *argv++ );
if( !app_name )
return EXIT_FAILURE;
if( argc > 1 ) {
while( !argv ) {
argn = *argv;
arg_num = ARG_UNKNOWN;
if( ( argn[0] == '-' ) && ( argn[1] == '-' ) ) {
argn += 2;
for( ; arga_long[ arg_num ]; ++arg_num )
if( stricmp( argn, arga_long[ arg_num ] ) == 0 )
break;
arg_num = !arga_long[ arg_num ] ? ARG_UNKNOWN : arg_num + 1;
} else if( argn[0] == '-' ) {
++argn;
for( ; arga_short[ arg_num ]; ++arg_num )
if( ( ( argn[0] == arga_short[ arg_num ] )
|| ( argn[0] == ( arga_short[ arg_num ] & ~0x20 ) ) )
&& ( argn[1] == '\0' ) )
break;
arg_num = !arga_short[ arg_num ] ? ARG_UNKNOWN : arg_num + 1;
}
switch( arg_num ) {
case ARG_HELP:
cmdl_help( );
break;
case ARG_VERSION:
cmdl_version( );
break;
default:
unknown_arg( argn );
*argv = NULL;
break;
} /* switch( arg_num ) */
++argv;
} /* while( *argv ) */
} /* if( argc > 1 ) */
free( app_name );
return EXIT_SUCCESS;
}
char* get_fname( char *str )
{
char *last = NULL;
char *fname = NULL;
do {
++str;
if( *str == '\\' ) {
last = str;
++str;
}
} while( !( ( *str == '\\' ) || ( *str == '\0' ) ) );
if( !last )
return NULL;
++last;
fname = ( char* ) malloc( strlen( last ) + 1 );
if( !fname )
return NULL;
strcpy( fname, last );
return fname;
}
void unknown_arg( char *arg )
{
printf( "unknown argument \"%s\"!\n", arg );
}
void cmdl_help( void )
{
int i = 0;
cmdl_version( );
printf( "\nCopyright (c) by you\n" );
printf( "\nCommand line arguments:\n" );
while( arga_short[ i ] ) {
printf( " -%c -%s %s\n", arga_short[i], arga_long[i], arga_help[i] );
++i;
}
}
void cmdl_version( void )
{
printf( "prog, version 0.1\n" );
}
so könnte man es sehr allgemein machen...
Greetz, Swordfish