Note about multiplexing.
[rsync/rsync.git] / popt-1.2 / test1.c
CommitLineData
62402cb1
MP
1/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING
2 file accompanying popt source distributions, available from
3 ftp://ftp.redhat.com/pub/code/popt */
4
5#include <stdio.h>
6#include <stdlib.h>
7
8#include "popt.h"
9
10void option_callback(poptContext con, enum poptCallbackReason reason,
11 const struct poptOption * opt,
12 char * arg, void * data) {
13 fprintf(stdout, "callback: %c %s %s ", opt->val, (char *) data, arg);
14}
15
16int main(int argc, char ** argv) {
17 int rc;
18 int arg1 = 0;
19 char * arg2 = "(none)";
20 poptContext optCon;
21 char ** rest;
22 int arg3 = 0;
23 int inc = 0;
24 int help = 0;
25 int usage = 0;
26 int shortopt = 0;
27 struct poptOption moreCallbackArgs[] = {
28 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
29 option_callback, 0, NULL },
30 { "cb2", 'c', POPT_ARG_STRING, NULL, 'c', "Test argument callbacks" },
31 { NULL, '\0', 0, NULL, 0 }
32 };
33 struct poptOption callbackArgs[] = {
34 { NULL, '\0', POPT_ARG_CALLBACK, option_callback, 0, "sampledata" },
35 { "cb", 'c', POPT_ARG_STRING, NULL, 'c', "Test argument callbacks" },
36 { "long", '\0', 0, NULL, 'l', "Unused option for help testing" },
37 { NULL, '\0', 0, NULL, 0 }
38 };
39 struct poptOption moreArgs[] = {
40 { "inc", 'i', 0, &inc, 0, "An included argument" },
41 { NULL, '\0', 0, NULL, 0 }
42 };
43 struct poptOption options[] = {
44 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, &moreCallbackArgs, 0, "arg for cb2" },
45 { "arg1", '\0', 0, &arg1, 0, "First argument with a really long"
46 " description. After all, we have to test argument help"
47 " wrapping somehow, right?", NULL },
48 { "arg2", '2', POPT_ARG_STRING, &arg2, 0, "Another argument", "ARG" },
49 { "arg3", '3', POPT_ARG_INT, &arg3, 0, "A third argument", "ANARG" },
50 { "shortoption", '\0', POPT_ARGFLAG_ONEDASH, &shortopt, 0,
51 "Needs a single -", NULL },
52 { "hidden", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, NULL, 0,
53 "This shouldn't show up", NULL },
54 { "unused", '\0', POPT_ARG_STRING, NULL, 0,
55 "Unused option for help testing", "UNUSED" },
56 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, &moreArgs, 0, NULL },
57 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, &callbackArgs, 0, "Callback arguments" },
58 POPT_AUTOHELP
59 { NULL, '\0', 0, NULL, 0 }
60 };
61
62 optCon = poptGetContext("test1", argc, argv, options, 0);
63 poptReadConfigFile(optCon, "./test-poptrc");
64
65 if ((rc = poptGetNextOpt(optCon)) < -1) {
66 fprintf(stderr, "test1: bad argument %s: %s\n",
67 poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
68 poptStrerror(rc));
69 return 2;
70 }
71
72 if (help) {
73 poptPrintHelp(optCon, stdout, 0);
74 return 0;
75 } if (usage) {
76 poptPrintUsage(optCon, stdout, 0);
77 return 0;
78 }
79
80 fprintf(stdout, "arg1: %d arg2: %s", arg1, arg2);
81
82 if (arg3)
83 fprintf(stdout, " arg3: %d", arg3);
84 if (inc)
85 fprintf(stdout, " inc: %d", inc);
86 if (shortopt)
87 fprintf(stdout, " short: %d", shortopt);
88
89 rest = poptGetArgs(optCon);
90 if (rest) {
91 fprintf(stdout, " rest:");
92 while (*rest) {
93 fprintf(stdout, " %s", *rest);
94 rest++;
95 }
96 }
97
98 fprintf(stdout, "\n");
99
100 return 0;
101}