1a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt/*
2a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * Command line options parser.
3a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt *
410c41e43e1703e11ebbf4707af3174850163024bDmitry Shmidt * Copyright (C) 1999-2012, Broadcom Corporation
5a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt *
610c41e43e1703e11ebbf4707af3174850163024bDmitry Shmidt *      Unless you and Broadcom execute a separate written software license
7a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * agreement governing use of this software, this software is licensed to you
8a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * under the terms of the GNU General Public License version 2 (the "GPL"),
9a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * following added to such license:
11a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt *
12a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt *      As a special exception, the copyright holders of this software give you
13a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * permission to link this software with independent modules, and to copy and
14a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * distribute the resulting executable under terms of your choice, provided that
15a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * you also meet, for each linked independent module, the terms and conditions of
16a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * the license of that module.  An independent module is a module which is not
17a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * derived from this software.  The special exception does not apply to any
18a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * modifications of the software.
19a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt *
20a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt *      Notwithstanding the above, under no circumstances may you combine this
21a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * software in any way with any other Broadcom software provided under a license
22a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt * other than the GPL, without Broadcom's express prior written consent.
2310c41e43e1703e11ebbf4707af3174850163024bDmitry Shmidt * $Id: miniopt.h 241182 2011-02-17 21:50:03Z $
24a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt */
25a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
26a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
27a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#ifndef MINI_OPT_H
28a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#define MINI_OPT_H
29a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
30a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#ifdef __cplusplus
31a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidtextern "C" {
32a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#endif
33a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
34a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt/* ---- Include Files ---------------------------------------------------- */
35a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt/* ---- Constants and Types ---------------------------------------------- */
36a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
37a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#define MINIOPT_MAXKEY	128	/* Max options */
38a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidttypedef struct miniopt {
39a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
40a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	/* These are persistent after miniopt_init() */
41a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	const char* name;		/* name for prompt in error strings */
42a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	const char* flags;		/* option chars that take no args */
43a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	bool longflags;		/* long options may be flags */
44a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	bool opt_end;		/* at end of options (passed a "--") */
45a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
46a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	/* These are per-call to miniopt() */
47a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
48a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	int consumed;		/* number of argv entries cosumed in
49a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 * the most recent call to miniopt()
50a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 */
51a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	bool positional;
52a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	bool good_int;		/* 'val' member is the result of a sucessful
53a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 * strtol conversion of the option value
54a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 */
55a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	char opt;
56a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	char key[MINIOPT_MAXKEY];
57a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	char* valstr;		/* positional param, or value for the option,
58a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 * or null if the option had
59a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 * no accompanying value
60a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt				 */
61a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	uint uval;		/* strtol translation of valstr */
62a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	int  val;		/* strtol translation of valstr */
63a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt} miniopt_t;
64a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
65a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidtvoid miniopt_init(miniopt_t *t, const char* name, const char* flags, bool longflags);
66a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidtint miniopt(miniopt_t *t, char **argv);
67a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
68a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
69a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt/* ---- Variable Externs ------------------------------------------------- */
70a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt/* ---- Function Prototypes ---------------------------------------------- */
71a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
72a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
73a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#ifdef __cplusplus
74a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt	}
75a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#endif
76a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt
77a2d116668045dd40f3fed04e7430b01becd1bf8dDmitry Shmidt#endif  /* MINI_OPT_H  */
78