Initialize Tizen 2.3
[external/ragel.git] / examples / params.rl
1 /*
2  * Parse command line arguments.
3  */
4
5 #include <stdio.h>
6 #include <string.h>
7
8 #define BUFLEN 1024
9
10 struct params
11 {
12         char buffer[BUFLEN+1];
13         int buflen;
14         int cs;
15 };
16
17 %%{
18         machine params;
19         access fsm->;
20
21         # A buffer to collect argurments
22
23         # Append to the buffer.
24         action append {
25                 if ( fsm->buflen < BUFLEN )
26                         fsm->buffer[fsm->buflen++] = fc;
27         }
28
29         # Terminate a buffer.
30         action term {
31                 if ( fsm->buflen < BUFLEN )
32                         fsm->buffer[fsm->buflen++] = 0;
33         }
34
35         # Clear out the buffer
36         action clear { fsm->buflen = 0; }
37
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); }
43
44         # Helpers that collect strings
45         string = [^\0]+ >clear $append %term;
46
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;
53
54         main := ( 
55                 help | 
56                 version | 
57                 output |
58                 spec |
59                 mach
60         )*;
61 }%%
62
63 %% write data;
64
65 void params_init( struct params *fsm )
66 {
67         fsm->buflen = 0;
68         %% write init;
69 }
70
71 void params_execute( struct params *fsm, const char *data, int len )
72 {
73         const char *p = data;
74         const char *pe = data + len;
75
76         %% write exec;
77 }
78
79 int params_finish( struct params *fsm )
80 {
81         if ( fsm->cs == params_error )
82                 return -1;
83         if ( fsm->cs >= params_first_final )
84                 return 1;
85         return 0;
86 }
87
88 #define BUFSIZE 2048
89
90 int main( int argc, char **argv )
91 {
92         int a;
93         struct params params;
94
95         params_init( &params );
96         for ( a = 1; a < argc; a++ )
97                 params_execute( &params, argv[a], strlen(argv[a])+1 );
98         if ( params_finish( &params ) != 1 )
99                 fprintf( stderr, "params: error processing arguments\n" );
100
101         return 0;
102 }