2 * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved
6 #include "vg_platform.h"
13 * short options | -a value
14 * multi-set options | -ab value
16 * long gnu options | --long-value=test
17 * standard agument | regular_thing
20 static int vg_argi
= 1;
21 static int vg_argj
= 1;
22 static int vg_argc
= 0;
23 static int vg_consume_next
= 0;
24 static char **vg_argv
;
26 /* Will return 0 if exhausted */
27 int vg_argp( int argc
, char *argv
[] )
32 static int delta_i
= 0;
33 static int delta_j
= 0;
35 if( vg_argj
!= 1 && !vg_argv
[ vg_argi
][ vg_argj
] )
50 if( (delta_i
== vg_argi
) && (delta_j
== vg_argj
) )
52 char *cur
= &vg_argv
[ vg_argi
][ vg_argj
];
56 vg_error( "Unknown opt '-%c'\n", *cur
);
60 vg_error( "Unknown opt '--%s'\n", cur
+ 1 );
72 /* Example: see if -c is set */
75 char *carg
= vg_argv
[ vg_argi
];
82 if( carg
[ vg_argj
] == c
)
93 /* Example: get -c *value* */
94 char *vg_opt_arg( char c
)
98 if( vg_argi
< vg_argc
-1 )
100 if( vg_argv
[ vg_argi
+ 1 ][0] != '-' )
103 return vg_argv
[ vg_argi
+ 1 ];
107 vg_error( "Option '%c' requires argument!\n", c
);
114 /* Example see if --big is set */
115 int vg_long_opt( char *name
)
117 char *carg
= vg_argv
[ vg_argi
];
123 if( !strcmp( name
, carg
+2 ) )
134 /* Example: get --big=value */
135 char *vg_long_opt_arg( char *name
)
137 char *carg
= vg_argv
[ vg_argi
];
143 int k
= 2; int set
= 0;
146 if( carg
[ k
] == '=' )
155 if( !strncmp( name
, carg
+2, k
-2 ) )
166 vg_error( "Long option '%s' requires argument\n", name
);
175 /* Example: get regular_thing */
178 char *carg
= vg_argv
[ vg_argi
];