miniopt.h revision 10c41e43e1703e11ebbf4707af3174850163024b
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