mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-12-30 15:34:01 +03:00
95 lines
2.1 KiB
C
95 lines
2.1 KiB
C
/*
|
|
* Copyright 1993, 1995 Christopher Seiwald.
|
|
*
|
|
* This file is part of Jam - see jam.c for Copyright information.
|
|
*/
|
|
|
|
# include "jam.h"
|
|
# include "option.h"
|
|
|
|
/*
|
|
* option.c - command line option processing
|
|
*
|
|
* {o >o
|
|
* \<>) "Process command line options as defined in <option.h>.
|
|
* Return the number of argv[] elements used up by options,
|
|
* or -1 if an invalid option flag was given or an argument
|
|
* was supplied for an option that does not require one."
|
|
*/
|
|
|
|
int getoptions( int argc, char * * argv, char * opts, bjam_option * optv )
|
|
{
|
|
int i;
|
|
int optc = N_OPTS;
|
|
|
|
memset( (char *)optv, '\0', sizeof( *optv ) * N_OPTS );
|
|
|
|
for ( i = 0; i < argc; ++i )
|
|
{
|
|
char *arg;
|
|
|
|
if ( ( argv[ i ][ 0 ] != '-' ) ||
|
|
( ( argv[ i ][ 1 ] != '-' ) && !isalpha( argv[ i ][ 1 ] ) ) )
|
|
continue;
|
|
|
|
if ( !optc-- )
|
|
{
|
|
printf( "too many options (%d max)\n", N_OPTS );
|
|
return -1;
|
|
}
|
|
|
|
for ( arg = &argv[ i ][ 1 ]; *arg; ++arg )
|
|
{
|
|
char * f;
|
|
|
|
for ( f = opts; *f; ++f )
|
|
if ( *f == *arg )
|
|
break;
|
|
|
|
if ( !*f )
|
|
{
|
|
printf( "Invalid option: -%c\n", *arg );
|
|
return -1;
|
|
}
|
|
|
|
optv->flag = *f;
|
|
|
|
if ( f[ 1 ] != ':' )
|
|
{
|
|
optv++->val = "true";
|
|
}
|
|
else if ( arg[ 1 ] )
|
|
{
|
|
optv++->val = &arg[1];
|
|
break;
|
|
}
|
|
else if ( ++i < argc )
|
|
{
|
|
optv++->val = argv[ i ];
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
printf( "option: -%c needs argument\n", *f );
|
|
return -1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
|
|
/*
|
|
* Name: getoptval() - find an option given its character.
|
|
*/
|
|
|
|
char * getoptval( bjam_option * optv, char opt, int subopt )
|
|
{
|
|
int i;
|
|
for ( i = 0; i < N_OPTS; ++i, ++optv )
|
|
if ( ( optv->flag == opt ) && !subopt-- )
|
|
return optv->val;
|
|
return 0;
|
|
}
|