1 #ifndef _ARGV_H_INCLUDED_ 2 #define _ARGV_H_INCLUDED_ 3 4 /*++ 5 /* NAME 6 /* argv 3h 7 /* SUMMARY 8 /* string array utilities 9 /* SYNOPSIS 10 /* #include "argv.h" 11 /* DESCRIPTION 12 /* .nf 13 14 /* 15 * External interface. 16 */ 17 typedef struct ARGV { 18 ssize_t len; /* number of array elements */ 19 ssize_t argc; /* array elements in use */ 20 char **argv; /* string array */ 21 } ARGV; 22 23 extern ARGV *argv_alloc(ssize_t); 24 extern ARGV *argv_sort(ARGV *); 25 extern void argv_add(ARGV *,...); 26 extern void argv_addn(ARGV *,...); 27 extern void argv_terminate(ARGV *); 28 extern void argv_truncate(ARGV *, ssize_t); 29 extern void argv_insert_one(ARGV *, ssize_t, const char *); 30 extern void argv_replace_one(ARGV *, ssize_t, const char *); 31 extern void argv_delete(ARGV *, ssize_t, ssize_t); 32 extern ARGV *argv_free(ARGV *); 33 34 extern ARGV *argv_split(const char *, const char *); 35 extern ARGV *argv_split_count(const char *, const char *, ssize_t); 36 extern ARGV *argv_split_append(ARGV *, const char *, const char *); 37 38 extern ARGV *argv_splitq(const char *, const char *, const char *); 39 extern ARGV *argv_splitq_count(const char *, const char *, const char *, ssize_t); 40 extern ARGV *argv_splitq_append(ARGV *, const char *, const char *, const char *); 41 42 extern ARGV *argv_split_at(const char *, int); 43 extern ARGV *argv_split_at_count(const char *, int, ssize_t); 44 extern ARGV *argv_split_at_append(ARGV *, const char *, int); 45 46 #define ARGV_FAKE_BEGIN(fake_argv, arg) { \ 47 ARGV fake_argv; \ 48 char *__fake_argv_args__[2]; \ 49 __fake_argv_args__[0] = (char *) (arg); \ 50 __fake_argv_args__[1] = 0; \ 51 fake_argv.argv = __fake_argv_args__; \ 52 fake_argv.argc = fake_argv.len = 1; 53 54 #define ARGV_FAKE_END } 55 56 #define ARGV_END ((char *) 0) 57 58 /* LICENSE 59 /* .ad 60 /* .fi 61 /* The Secure Mailer license must be distributed with this software. 62 /* AUTHOR(S) 63 /* Wietse Venema 64 /* IBM T.J. Watson Research 65 /* P.O. Box 704 66 /* Yorktown Heights, NY 10598, USA 67 /*--*/ 68 69 #endif 70