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  */
17typedef 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
23extern ARGV *argv_alloc(ssize_t);
24extern ARGV *argv_sort(ARGV *);
25extern void argv_add(ARGV *,...);
26extern void argv_addn(ARGV *,...);
27extern void argv_terminate(ARGV *);
28extern void argv_truncate(ARGV *, ssize_t);
29extern void argv_insert_one(ARGV *, ssize_t, const char *);
30extern void argv_replace_one(ARGV *, ssize_t, const char *);
31extern void argv_delete(ARGV *, ssize_t, ssize_t);
32extern ARGV *argv_free(ARGV *);
33
34extern ARGV *argv_split(const char *, const char *);
35extern ARGV *argv_split_count(const char *, const char *, ssize_t);
36extern ARGV *argv_split_append(ARGV *, const char *, const char *);
37
38#define ARGV_FAKE_BEGIN(fake_argv, arg) { \
39	ARGV fake_argv; \
40	char *__fake_argv_args__[2]; \
41	__fake_argv_args__[0] = (char *) (arg); \
42	__fake_argv_args__[1] = 0; \
43	fake_argv.argv = __fake_argv_args__; \
44	fake_argv.argc = fake_argv.len = 1;
45
46#define ARGV_FAKE_END	}
47
48#define ARGV_END	((char *) 0)
49
50/* LICENSE
51/* .ad
52/* .fi
53/*	The Secure Mailer license must be distributed with this software.
54/* AUTHOR(S)
55/*	Wietse Venema
56/*	IBM T.J. Watson Research
57/*	P.O. Box 704
58/*	Yorktown Heights, NY 10598, USA
59/*--*/
60
61#endif
62