AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
options_popt.h
Go to the documentation of this file.
1 
5 /* This file is a port of the popt library for use with the AJA SDK.
6  * The code for the library was consolidated into a .h and .cpp file
7  * to simplify building demonstration applications. Not all the features
8  * of popt have been tested. Only simple command line parameter parsing
9  * was needed for the SDK, but popt was ported to allow enhancing our
10  * applications with additional functionality as needed.
11 */
12 
13 /* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING
14  file accompanying popt source distributions, available from
15  ftp://ftp.rpm.org/pub/rpm/dist. */
16 
17 /* Here is the contents of the COPYING file:
18 */
19 
20 /*
21 Copyright (c) 1998 Red Hat Software
22 
23 Permission is hereby granted, free of charge, to any person obtaining a copy
24 of this software and associated documentation files (the "Software"), to deal
25 in the Software without restriction, including without limitation the rights
26 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27 copies of the Software, and to permit persons to whom the Software is
28 furnished to do so, subject to the following conditions:
29 
30 The above copyright notice and this permission notice shall be included in
31 all copies or substantial portions of the Software.
32 
33 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
37 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
38 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39 
40 Except as contained in this notice, the name of the X Consortium shall not be
41 used in advertising or otherwise to promote the sale, use or other dealings
42 in this Software without prior written authorization from the X Consortium.
43 */
44 
45 #ifndef H_POPT
46 #define H_POPT
47 
48 #include <stdio.h> /* for FILE * */
49 #include "export.h"
50 
51 #define POPT_OPTION_DEPTH 10
52 
56 #define POPT_ARG_NONE 0U
57 #define POPT_ARG_STRING 1U
58 #define POPT_ARG_INT 2U
59 #define POPT_ARG_LONG 3U
60 #define POPT_ARG_INCLUDE_TABLE 4U
61 #define POPT_ARG_CALLBACK 5U
65 #define POPT_ARG_INTL_DOMAIN 6U
69 #define POPT_ARG_VAL 7U
70 #define POPT_ARG_FLOAT 8U
71 #define POPT_ARG_DOUBLE 9U
72 #define POPT_ARG_LONGLONG 10U
74 #define POPT_ARG_MAINCALL 16U+11U
75 #define POPT_ARG_ARGV 12U
76 #define POPT_ARG_SHORT 13U
77 #define POPT_ARG_BITSET 16U+14U
79 #define POPT_ARG_MASK 0x000000FFU
80 #define POPT_GROUP_MASK 0x0000FF00U
81 
85 #define POPT_ARGFLAG_ONEDASH 0x80000000U
86 #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000U
87 #define POPT_ARGFLAG_STRIP 0x20000000U
88 #define POPT_ARGFLAG_OPTIONAL 0x10000000U
90 #define POPT_ARGFLAG_OR 0x08000000U
91 #define POPT_ARGFLAG_NOR 0x09000000U
92 #define POPT_ARGFLAG_AND 0x04000000U
93 #define POPT_ARGFLAG_NAND 0x05000000U
94 #define POPT_ARGFLAG_XOR 0x02000000U
95 #define POPT_ARGFLAG_NOT 0x01000000U
96 #define POPT_ARGFLAG_LOGICALOPS \
97  (POPT_ARGFLAG_OR|POPT_ARGFLAG_AND|POPT_ARGFLAG_XOR)
98 
99 #define POPT_BIT_SET (POPT_ARG_VAL|POPT_ARGFLAG_OR)
100 
101 #define POPT_BIT_CLR (POPT_ARG_VAL|POPT_ARGFLAG_NAND)
102 
104 #define POPT_ARGFLAG_SHOW_DEFAULT 0x00800000U
105 #define POPT_ARGFLAG_RANDOM 0x00400000U
106 #define POPT_ARGFLAG_TOGGLE 0x00200000U
111 #define POPT_CBFLAG_PRE 0x80000000U
112 #define POPT_CBFLAG_POST 0x40000000U
113 #define POPT_CBFLAG_INC_DATA 0x20000000U
115 #define POPT_CBFLAG_SKIPOPTION 0x10000000U
116 #define POPT_CBFLAG_CONTINUE 0x08000000U
121 #define POPT_ERROR_NOARG -10
122 #define POPT_ERROR_BADOPT -11
123 #define POPT_ERROR_OPTSTOODEEP -13
124 #define POPT_ERROR_BADQUOTE -15
125 #define POPT_ERROR_ERRNO -16
126 #define POPT_ERROR_BADNUMBER -17
127 #define POPT_ERROR_OVERFLOW -18
128 #define POPT_ERROR_BADOPERATION -19
129 #define POPT_ERROR_NULLARG -20
130 #define POPT_ERROR_MALLOC -21
131 #define POPT_ERROR_BADCONFIG -22
136 #define POPT_BADOPTION_NOALIAS (1U << 0)
141 #define POPT_CONTEXT_NO_EXEC (1U << 0)
142 #define POPT_CONTEXT_KEEP_FIRST (1U << 1)
143 #define POPT_CONTEXT_POSIXMEHARDER (1U << 2)
144 #define POPT_CONTEXT_ARG_OPTS (1U << 4)
148 struct poptOption {
149  const char * longName;
150  char shortName;
151  unsigned int argInfo;
152  void * arg;
153  int val;
154  const char * descrip;
155  const char * argDescrip;
156 };
157 
161 struct poptAlias {
162  const char * longName;
163  char shortName;
164  int argc;
165  const char ** argv;
166 };
167 
171 typedef struct poptItem_s {
173  int argc;
174  const char ** argv;
175 } * poptItem;
176 
184 extern struct poptOption poptAliasOptions[];
185 #define POPT_AUTOALIAS { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptAliasOptions, \
186  0, "Options implemented via popt alias/exec:", NULL },
187 
193 typedef struct poptContext_s * poptContext;
194 
201 };
202 
203 #ifdef _MSC_VER
204 #define __attribute__(x)
205 #endif
206 // TODO(paulh): Can we get rid of the UNUSED macro?
207 #define UNUSED(x) x __attribute__((__unused__))
208 AJA_EXPORT extern void displayArgs(poptContext con,
209  UNUSED(enum poptCallbackReason foo),
210  struct poptOption * key,
211  UNUSED(const char * arg),
212  UNUSED(void * data));
213 
214 #define N_(foo) foo
215 #define POPT_TABLEEND { NULL, '\0', 0, NULL, 0, NULL, NULL }
216 
217 extern struct poptOption * poptHelpOptionsAutoHelp;
218 extern struct poptOption * poptHelpOptionsI18N;
219 
220 #define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptionsAutoHelp, \
221  0, "Help options:", NULL },
222 
225 #ifndef __cplusplus
226 typedef struct poptOption * poptOption;
227 #endif
228 
229 #ifdef __cplusplus
230 extern "C" {
231 #endif
232 
241 typedef void (*poptCallbackType) (poptContext con,
242  enum poptCallbackReason reason,
243  const struct poptOption * opt,
244  const char * arg,
245  const void * data);
246 
253 
264  const char * name,
265  int argc, const char ** argv,
266  const struct poptOption * options,
267  unsigned int flags);
268 
275 
285 poptContext poptInit(int argc, const char ** argv,
286  const struct poptOption * options,
287  const char * configPaths);
288 
293 void poptResetContext(poptContext con);
294 
301 
308 
314 AJA_EXPORT const char * poptGetArg(/*@null@*/poptContext con);
315 
321 const char * poptPeekArg(poptContext con);
322 
328 const char ** poptGetArgs(poptContext con);
329 
336 AJA_EXPORT const char * poptBadOption(poptContext con, unsigned int flags);
337 
344 int poptStuffArgs(poptContext con, const char ** argv);
345 
355 int poptAddAlias(poptContext con, struct poptAlias alias, int flags);
356 
364 int poptAddItem(poptContext con, poptItem newItem, int flags);
365 
371 int poptSaneFile(const char * fn);
372 
381 int poptReadFile(const char * fn, char ** bp,
382  size_t * nbp, int flags);
383 #define POPT_READFILE_TRIMNEWLINES 1
384 
391 int poptReadConfigFile(poptContext con, const char * fn);
392 
402 int poptReadConfigFiles(poptContext con, const char * paths);
403 
410 int poptReadDefaultConfig(poptContext con, int useEnv);
411 
423 int poptDupArgv(int argc, const char **argv,
424  int * argcPtr,
425  const char *** argvPtr);
426 
438 int poptParseArgvString(const char * s,
439  int * argcPtr, const char *** argvPtr);
440 
487 int poptConfigFileToString(FILE *fp, char ** argstrp, int flags);
488 
494 AJA_EXPORT const char * poptStrerror(const int error);
495 
502 void poptSetExecPath(poptContext con, const char * path, int allowAbsolute);
503 
510 void poptPrintHelp(poptContext con, FILE * fp, int flags);
511 
518 void poptPrintUsage(poptContext con, FILE * fp, int flags);
519 
525 void poptSetOtherOptionHelp(poptContext con, const char * text);
526 
532 const char * poptGetInvocationName(poptContext con);
533 
541 int poptStrippedArgv(poptContext con, int argc, char ** argv);
542 
550 int poptSaveString(const char *** argvp, unsigned int argInfo,
551  const char * val);
552 
561 int poptSaveLongLong(long long * arg, unsigned int argInfo,
562  long long aLongLong);
563 
572 int poptSaveLong(long * arg, unsigned int argInfo, long aLong);
573 
582 int poptSaveShort(short * arg, unsigned int argInfo, long aLong);
583 
592 int poptSaveInt(int * arg, unsigned int argInfo, long aLong);
593 
594 /* The bit set typedef. */
595 typedef struct poptBits_s {
596  unsigned int bits[1];
597 } * poptBits;
598 
599 #define _POPT_BITS_N 1024U /* estimated population */
600 #define _POPT_BITS_M ((3U * _POPT_BITS_N) / 2U)
601 #define _POPT_BITS_K 16U /* no. of linear hash combinations */
602 
603 extern unsigned int _poptBitsN;
604 extern unsigned int _poptBitsM;
605 extern unsigned int _poptBitsK;
606 
607 int poptBitsAdd(poptBits bits, const char * s);
608 int poptBitsChk(poptBits bits, const char * s);
609 int poptBitsClr(poptBits bits);
610 int poptBitsDel(poptBits bits, const char * s);
611 int poptBitsIntersect(poptBits * ap, const poptBits b);
612 int poptBitsUnion(poptBits * ap, const poptBits b);
613 int poptBitsArgs(poptContext con, poptBits * ap);
614 
622 int poptSaveBits(poptBits * bitsp, unsigned int argInfo,
623  const char * s);
624 
625 #ifdef __cplusplus
626 }
627 #endif
628 
629 #endif
poptItem_s::option
struct poptOption option
Definition: options_popt.h:172
poptSaveLongLong
int poptSaveLongLong(long long *arg, unsigned int argInfo, long long aLongLong)
Definition: options_popt.cpp:2970
poptGetArgs
const char ** poptGetArgs(poptContext con)
Definition: options_popt.cpp:3510
poptCallbackReason
poptCallbackReason
Definition: options_popt.h:197
poptStuffArgs
int poptStuffArgs(poptContext con, const char **argv)
Definition: options_popt.cpp:3663
poptOption
Definition: options_popt.h:148
poptBitsChk
int poptBitsChk(poptBits bits, const char *s)
Definition: options_popt.cpp:2804
poptDupArgv
int poptDupArgv(int argc, const char **argv, int *argcPtr, const char ***argvPtr)
Definition: options_popt.cpp:1939
poptItem_s::argc
int argc
Definition: options_popt.h:173
poptPrintHelp
void poptPrintHelp(poptContext con, FILE *fp, int flags)
poptFreeContext
poptContext poptFreeContext(poptContext con)
Definition: options_popt.cpp:3539
poptSetExecPath
void poptSetExecPath(poptContext con, const char *path, int allowAbsolute)
Definition: options_popt.cpp:2170
AJA_EXPORT
#define AJA_EXPORT
Definition: export.h:34
poptSaneFile
int poptSaneFile(const char *fn)
Definition: options_popt.cpp:361
poptOption::descrip
const char * descrip
Definition: options_popt.h:154
poptAliasOptions
struct poptOption poptAliasOptions[]
Definition: options_popt.cpp:777
poptBits
struct poptBits_s * poptBits
poptGetInvocationName
const char * poptGetInvocationName(poptContext con)
Definition: options_popt.cpp:3686
POPT_CALLBACK_REASON_OPTION
@ POPT_CALLBACK_REASON_OPTION
Definition: options_popt.h:200
poptBitsIntersect
int poptBitsIntersect(poptBits *ap, const poptBits b)
Definition: options_popt.cpp:2857
poptReadConfigFile
int poptReadConfigFile(poptContext con, const char *fn)
Definition: options_popt.cpp:579
poptBitsArgs
int poptBitsArgs(poptContext con, poptBits *ap)
Definition: options_popt.cpp:2897
poptStrippedArgv
int poptStrippedArgv(poptContext con, int argc, char **argv)
Definition: options_popt.cpp:3691
poptBitsDel
int poptBitsDel(poptBits bits, const char *s)
Definition: options_popt.cpp:2838
poptAlias::argv
const char ** argv
Definition: options_popt.h:165
poptHelpOptionsAutoHelp
struct poptOption * poptHelpOptionsAutoHelp
Definition: options_popt.cpp:258
poptContext_s
Definition: options_popt.cpp:289
poptSaveBits
int poptSaveBits(poptBits *bitsp, unsigned int argInfo, const char *s)
poptAlias::shortName
char shortName
Definition: options_popt.h:163
poptFini
poptContext poptFini(poptContext con)
Definition: options_popt.cpp:714
poptOption
struct poptOption * poptOption
Definition: options_popt.h:226
poptBitsClr
int poptBitsClr(poptBits bits)
Definition: options_popt.cpp:2827
poptAlias::longName
const char * longName
Definition: options_popt.h:162
poptOption::longName
const char * longName
Definition: options_popt.h:149
poptOption::argInfo
unsigned int argInfo
Definition: options_popt.h:151
poptResetContext
void poptResetContext(poptContext con)
Definition: options_popt.cpp:2310
POPT_CALLBACK_REASON_POST
@ POPT_CALLBACK_REASON_POST
Definition: options_popt.h:199
poptGetOptArg
char * poptGetOptArg(poptContext con)
Definition: options_popt.cpp:3484
poptOption::arg
void * arg
Definition: options_popt.h:152
poptGetArg
const char * poptGetArg(poptContext con)
Definition: options_popt.cpp:3494
poptSaveString
int poptSaveString(const char ***argvp, unsigned int argInfo, const char *val)
poptOption::shortName
char shortName
Definition: options_popt.h:150
poptPrintUsage
void poptPrintUsage(poptContext con, FILE *fp, int flags)
poptSaveShort
int poptSaveShort(short *arg, unsigned int argInfo, long aLong)
Definition: options_popt.cpp:3049
poptAlias::argc
int argc
Definition: options_popt.h:164
poptAlias
Definition: options_popt.h:161
poptSetOtherOptionHelp
void poptSetOtherOptionHelp(poptContext con, const char *text)
Definition: options_popt.cpp:1515
poptReadConfigFiles
int poptReadConfigFiles(poptContext con, const char *paths)
Definition: options_popt.cpp:629
poptItem_s
Definition: options_popt.h:171
poptBits_s
Definition: options_popt.h:595
poptReadFile
int poptReadFile(const char *fn, char **bp, size_t *nbp, int flags)
Definition: options_popt.cpp:377
poptOption::argDescrip
const char * argDescrip
Definition: options_popt.h:155
poptAddItem
int poptAddItem(poptContext con, poptItem newItem, int flags)
Definition: options_popt.cpp:3580
poptContext
struct poptContext_s * poptContext
Definition: options_popt.h:193
poptSaveInt
int poptSaveInt(int *arg, unsigned int argInfo, long aLong)
Definition: options_popt.cpp:3025
poptAddAlias
int poptAddAlias(poptContext con, struct poptAlias alias, int flags)
poptItem_s::argv
const char ** argv
Definition: options_popt.h:174
poptHelpOptionsI18N
struct poptOption * poptHelpOptionsI18N
Definition: options_popt.cpp:270
poptSaveLong
int poptSaveLong(long *arg, unsigned int argInfo, long aLong)
Definition: options_popt.cpp:3001
POPT_CALLBACK_REASON_PRE
@ POPT_CALLBACK_REASON_PRE
Definition: options_popt.h:198
UNUSED
#define UNUSED(x)
Definition: options_popt.h:207
poptPeekArg
const char * poptPeekArg(poptContext con)
Definition: options_popt.cpp:3502
poptGetNextOpt
int poptGetNextOpt(poptContext con)
Definition: options_popt.cpp:3236
poptConfigFileToString
int poptConfigFileToString(FILE *fp, char **argstrp, int flags)
_poptBitsK
unsigned int _poptBitsK
Definition: options_popt.cpp:2765
poptGetContext
poptContext poptGetContext(const char *name, int argc, const char **argv, const struct poptOption *options, unsigned int flags)
Definition: options_popt.cpp:2264
poptBitsAdd
int poptBitsAdd(poptBits bits, const char *s)
Definition: options_popt.cpp:2785
_poptBitsN
unsigned int _poptBitsN
Definition: options_popt.cpp:2763
poptStrerror
const char * poptStrerror(const int error)
Definition: options_popt.cpp:3633
poptOption::val
int val
Definition: options_popt.h:153
poptBitsUnion
int poptBitsUnion(poptBits *ap, const poptBits b)
Definition: options_popt.cpp:2877
poptReadDefaultConfig
int poptReadDefaultConfig(poptContext con, int useEnv)
poptBadOption
const char * poptBadOption(poptContext con, unsigned int flags)
Definition: options_popt.cpp:3623
poptItem
struct poptItem_s * poptItem
poptCallbackType
void(* poptCallbackType)(poptContext con, enum poptCallbackReason reason, const struct poptOption *opt, const char *arg, const void *data)
Definition: options_popt.h:241
displayArgs
void displayArgs(poptContext con, enum poptCallbackReason foo __attribute__((__unused__)), struct poptOption *key, const char *arg __attribute__((__unused__)), void *data __attribute__((__unused__)))
Definition: options_popt.cpp:760
poptBits_s::bits
unsigned int bits[1]
Definition: options_popt.h:596
poptParseArgvString
int poptParseArgvString(const char *s, int *argcPtr, const char ***argvPtr)
Definition: options_popt.cpp:1980
poptInit
poptContext poptInit(int argc, const char **argv, const struct poptOption *options, const char *configPaths)
Definition: options_popt.cpp:720
_poptBitsM
unsigned int _poptBitsM
Definition: options_popt.cpp:2764
export.h
Declares system-dependent import/export macros and libraries.