X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=vg_opt.h;fp=vg_opt.h;h=6f2d8792f8acd230230fc3d8befc8ce4921dcec3;hp=c817d0674c011e4ac6ea761e5154176637c66f9b;hb=3b14f3dcd5bf9dd3c85144f2123d667bfa4bb63f;hpb=fce86711735b15bff37de0f70716808410fcf269 diff --git a/vg_opt.h b/vg_opt.h index c817d06..6f2d879 100644 --- a/vg_opt.h +++ b/vg_opt.h @@ -1,191 +1,23 @@ /* - * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved + * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved */ -#ifndef VG_OPT_H -#define VG_OPT_H - -#include -#include "vg_platform.h" -#include "vg_log.h" - -/* - * Supported: - * short flags | -abc - * short options | -a value - * multi-set options | -ab value - * - * long gnu options | --long-value=test - * standard agument | regular_thing - */ - -static int vg_argi = 1; -static int vg_argj = 1; -static int vg_argc = 0; -static int vg_consume_next = 0; -static char **vg_argv; +#pragma once /* Will return 0 if exhausted */ -int vg_argp( int argc, char *argv[] ) -{ - vg_argv = argv; - vg_argc = argc; - - static int delta_i = 0; - static int delta_j = 0; - - if( vg_argj != 1 && !vg_argv[ vg_argi ][ vg_argj ] ) - { - vg_argj = 1; - vg_argi ++; - } - - if( vg_consume_next ) - { - vg_consume_next = 0; - vg_argi ++; - } - - if( vg_argi >= argc ) - return 0; - - if( (delta_i == vg_argi) && (delta_j == vg_argj) ) - { - char *cur = &vg_argv[ vg_argi ][ vg_argj ]; - - if( *cur != '-' ) - { - vg_error( "Unknown opt '-%c'\n", *cur ); - } - else - { - vg_error( "Unknown opt '--%s'\n", cur + 1 ); - } - - exit(0); - } - - delta_i = vg_argi; - delta_j = vg_argj; - - return 1; -} +int vg_argp( int argc, char *argv[] ); /* Example: see if -c is set */ -int vg_opt( char c ) -{ - char *carg = vg_argv[ vg_argi ]; - - if( carg[0] == '-' ) - { - if( carg[1] == '-' ) - return 0; - - if( carg[ vg_argj ] == c ) - { - vg_argj ++; - - return 1; - } - } - - return 0; -} +int vg_opt( char c ); /* Example: get -c *value* */ -char *vg_opt_arg( char c ) -{ - if( vg_opt( c ) ) - { - if( vg_argi < vg_argc-1 ) - { - if( vg_argv[ vg_argi + 1 ][0] != '-' ) - { - vg_consume_next = 1; - return vg_argv[ vg_argi + 1 ]; - } - } - - vg_error( "Option '%c' requires argument!\n", c ); - exit(0); - } - - return NULL; -} +char *vg_opt_arg( char c ); /* Example see if --big is set */ -int vg_long_opt( char *name ) -{ - char *carg = vg_argv[ vg_argi ]; - - if( carg[0] == '-' ) - { - if( carg[1] == '-' ) - { - if( !strcmp( name, carg+2 ) ) - { - vg_consume_next = 1; - return 1; - } - } - } - - return 0; -} +int vg_long_opt( char *name ); /* Example: get --big=value */ -char *vg_long_opt_arg( char *name ) -{ - char *carg = vg_argv[ vg_argi ]; - - if( carg[0] == '-' ) - { - if( carg[1] == '-' ) - { - int k = 2; int set = 0; - while( carg[ k ] ) - { - if( carg[ k ] == '=' ) - { - set = 1; - break; - } - - k ++; - } - - if( !strncmp( name, carg+2, k-2 ) ) - { - vg_consume_next = 1; - - // the rest - if( set ) - { - return carg + k + 1; - } - else - { - vg_error( "Long option '%s' requires argument\n", name ); - } - } - } - } - - return NULL; -} +char *vg_long_opt_arg( char *name ); /* Example: get regular_thing */ -char *vg_arg(void) -{ - char *carg = vg_argv[ vg_argi ]; - - if( carg[0] != '-' ) - { - vg_consume_next = 1; - return carg; - } - - return NULL; -} - -#endif +char *vg_arg(void);