diff options
Diffstat (limited to 'arg.h')
-rw-r--r-- | arg.h | 167 |
1 files changed, 167 insertions, 0 deletions
@@ -0,0 +1,167 @@ +#ifndef __ARG_H +#define __ARG_H + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> + +#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
\ No newline at end of file |