#ifndef __ARG_H #define __ARG_H #include #include #include #include #define ARGT_NONE 0 //nothing #define ARGT_IP 1 //ip addr #define ARGT_RANGE 2 //range of values #define ARGT_FLOAT 3 //could be float #define ARGT_LIST 4 //list of values #define ARGT_FILE 5 //path to file #define ARGT_VAL 6 //command line direct val #define ARGT_FLAG 7 //flag value on/off #define ARG_ENTRY(P,T,V) {.param=P,.type=ARGT_##T,.def=V,.used=0} typedef struct def_arg { char *param; //parametr that comes from shell uint32_t type; //type of argument void *def; //define default values, NULL if no default values uint8_t used; } def_arg; typedef struct argv_t { int type; uint8_t *val; // points to arg_{ip|range|..} } argv_t; typedef struct arg_t { int size; argv_t **arg; } arg_t; typedef struct arg_ip { int used; //value is in cmd int def; //says if default should be used if no value in cmd uint32_t ip; uint32_t default_ip; uint16_t port; uint32_t default_port; } arg_ip; typedef struct s_arg_ip { uint32_t ip; uint16_t port; } s_arg_ip; typedef struct arg_range { int used; int def; uint32_t start; uint32_t default_start; uint32_t end; uint32_t default_end; uint32_t step; uint32_t default_step; } arg_range; typedef struct s_arg_range { uint32_t start; uint32_t end; uint32_t step; } s_arg_range; typedef struct arg_float { int used; int def; float val; float default_val; } arg_float; typedef struct s_arg_float { float val; } s_arg_float; typedef struct arg_list { int used; int def; uint32_t num; void **vals; char *default_val; } arg_list; typedef struct s_arg_list { uint32_t num; void *default_val; void **vals; } s_arg_list; typedef struct arg_file { int used; int def; char *name; char *default_name; char *abspath; //dire where to search stuff? char *default_abspath; } arg_file; typedef struct s_arg_file { char *name; char *abspath; } s_arg_file; typedef struct arg_val { int used; int def; char *ptr; char *default_ptr; } arg_val; typedef struct s_arg_val { char *ptr; } s_arg_val; typedef struct arg_flag { int used; int flag; } arg_flag; //no need as there is no default values /* typedef struct s_arg_flag { int flag; } s_arg_flag; */ arg_t* arg_load( int argc, char **argv, def_arg *argl ); void arg_free( arg_t *arg ); int arg_type( arg_t *arg, int num ); argv_t* arg_get( arg_t *arg, int num ); arg_ip* arg_c_ip( uint32_t ip, uint16_t port ); arg_range* arg_c_range( uint32_t start, uint32_t end, uint32_t step ); arg_float* arg_c_float( float val ); arg_list* arg_c_list( uint32_t num, void **vals, void *def ); arg_file* arg_c_file( char *name ); arg_val* arg_c_val( char *ptr ); arg_flag* arg_c_flag(); void arg_print( arg_t *arg ); #endif