2 * Parse command line arguments.
12 char buffer[BUFLEN+1];
21 # A buffer to collect argurments
23 # Append to the buffer.
25 if ( fsm->buflen < BUFLEN )
26 fsm->buffer[fsm->buflen++] = fc;
31 if ( fsm->buflen < BUFLEN )
32 fsm->buffer[fsm->buflen++] = 0;
35 # Clear out the buffer
36 action clear { fsm->buflen = 0; }
38 action help { printf("help\n"); }
39 action version { printf("version\n"); }
40 action output { printf("output: \"%s\"\n", fsm->buffer); }
41 action spec { printf("spec: \"%s\"\n", fsm->buffer); }
42 action mach { printf("machine: \"%s\"\n", fsm->buffer); }
44 # Helpers that collect strings
45 string = [^\0]+ >clear $append %term;
47 # Different arguments.
48 help = ( '-h' | '-H' | '-?' | '--help' ) 0 @help;
49 version = ( '-v' | '--version' ) 0 @version;
50 output = '-o' 0? string 0 @output;
51 spec = '-S' 0? string 0 @spec;
52 mach = '-M' 0? string 0 @mach;
65 void params_init( struct params *fsm )
71 void params_execute( struct params *fsm, const char *data, int len )
74 const char *pe = data + len;
79 int params_finish( struct params *fsm )
83 if ( fsm->cs == params_error )
85 if ( fsm->cs >= params_first_final )
92 int main( int argc, char **argv )
97 params_init( ¶ms );
98 for ( a = 1; a < argc; a++ )
99 params_execute( ¶ms, argv[a], strlen(argv[a])+1 );
100 if ( params_finish( ¶ms ) != 1 )
101 fprintf( stderr, "params: error processing arguments\n" );