1 /* 2 ** petopt.h - Command line argument parser header file 3 ** 4 ** Copyright (c) 1999 Peter Eriksson <pen@lysator.liu.se> 5 ** 6 ** This program is free software; you can redistribute it and/or 7 ** modify it as you wish - as long as you don't claim that you wrote 8 ** it. 9 ** 10 ** This program is distributed in the hope that it will be useful, 11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13 */ 14 15 #ifndef PETOPT_H 16 #define PETOPT_H 17 18 /* Option types and flags */ 19 #define POF_TYPEMASK 0x00FF 20 21 #define POF_NONE 0x0000 22 #define POF_INT 0x0001 /* Argument is an 'int' number */ 23 #define POF_STR 0x0002 /* Argument is a 'char *' string */ 24 #define POF_BOOL 0x0003 /* Argument is a 'int' boolean */ 25 26 #define POF_OPT 0x0100 /* Argument is optional */ 27 #define POF_DUP 0x0200 /* strdup() the assigned var (if string) */ 28 29 /* Global flags */ 30 #define POF_SYSLOG 0x1000 /* Send errors to syslog */ 31 #define POF_NOERRPRINT 0x2000 /* Do not print errors to stderr */ 32 #define POF_PRDEFAULT 0x4000 /* Print default values in usage text */ 33 34 /* Error returns */ 35 #define POE_EOF -1 36 37 #define POE_OPTION -2 /* Invalid option */ 38 #define POE_MULTI -3 /* Option is not unique */ 39 #define POE_MISSING -4 /* Required argument to option is missing */ 40 #define POE_INVALID -5 /* Invalid argument to option */ 41 #define POE_INTERNAL -6 /* Internal error */ 42 43 44 typedef struct petopt_option 45 { 46 int s; /* Short option character */ 47 int f; /* Argument flags */ 48 char *l; /* Long option name */ 49 void *v; /* Variable pointer */ 50 char *h; /* Help/usage string */ 51 } PETOPTS; 52 53 54 typedef struct petopt 55 { 56 int f; 57 int ai; 58 int ci; 59 int saved_ai; 60 int saved_ci; 61 int argc; 62 const char **argv; 63 PETOPTS *pov; 64 int (*parse)(struct petopt *pp, PETOPTS *pov, const char *arg); 65 int (*errpr)(struct petopt *pp, PETOPTS *pov, int err, FILE *fp); 66 int oac; 67 char **oav; 68 } PETOPT; 69 70 71 extern int 72 petopt_setup(PETOPT **popp, 73 int f, 74 int argc, 75 char **argv, 76 PETOPTS *pov, 77 int (*parse)(PETOPT *pop, PETOPTS *pov, const char *arg), 78 int (*errpr)(PETOPT *pop, PETOPTS *pov, int err, FILE *fp)); 79 80 81 extern int 82 petopt_parse(PETOPT *pop, 83 int *o_argc, 84 char ***o_argv); 85 86 extern int 87 petopt_print_error(PETOPT *pop, 88 PETOPTS *pov, 89 int err, 90 FILE *fp); 91 92 extern int 93 petopt_print_usage(PETOPT *pop, 94 FILE *fp); 95 96 extern int 97 petopt_cleanup(PETOPT *pop); 98 99 #endif 100