build system revision
[vg.git] / vg_opt.h
index c817d0674c011e4ac6ea761e5154176637c66f9b..6f2d8792f8acd230230fc3d8befc8ce4921dcec3 100644 (file)
--- a/vg_opt.h
+++ b/vg_opt.h
 /*
- * 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 <stdlib.h>
-#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);