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