1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * Help index test program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2007-2017 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker * Copyright 1997-2007 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker *
7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker */
9*5e7646d2SAndroid Build Coastguard Worker
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker */
13*5e7646d2SAndroid Build Coastguard Worker
14*5e7646d2SAndroid Build Coastguard Worker #include "cgi.h"
15*5e7646d2SAndroid Build Coastguard Worker
16*5e7646d2SAndroid Build Coastguard Worker
17*5e7646d2SAndroid Build Coastguard Worker /*
18*5e7646d2SAndroid Build Coastguard Worker * Local functions...
19*5e7646d2SAndroid Build Coastguard Worker */
20*5e7646d2SAndroid Build Coastguard Worker
21*5e7646d2SAndroid Build Coastguard Worker static void list_nodes(const char *title, cups_array_t *nodes);
22*5e7646d2SAndroid Build Coastguard Worker static int usage(void);
23*5e7646d2SAndroid Build Coastguard Worker
24*5e7646d2SAndroid Build Coastguard Worker
25*5e7646d2SAndroid Build Coastguard Worker /*
26*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Test the help index code.
27*5e7646d2SAndroid Build Coastguard Worker */
28*5e7646d2SAndroid Build Coastguard Worker
29*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(int argc,char * argv[])30*5e7646d2SAndroid Build Coastguard Worker main(int argc, /* I - Number of command-line arguments */
31*5e7646d2SAndroid Build Coastguard Worker char *argv[]) /* I - Command-line arguments */
32*5e7646d2SAndroid Build Coastguard Worker {
33*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
34*5e7646d2SAndroid Build Coastguard Worker help_index_t *hi, /* Help index */
35*5e7646d2SAndroid Build Coastguard Worker *search; /* Search index */
36*5e7646d2SAndroid Build Coastguard Worker const char *opt, /* Current option character */
37*5e7646d2SAndroid Build Coastguard Worker *dir = ".", /* Directory to index */
38*5e7646d2SAndroid Build Coastguard Worker *q = NULL, /* Query string */
39*5e7646d2SAndroid Build Coastguard Worker *section = NULL, /* Section string */
40*5e7646d2SAndroid Build Coastguard Worker *filename = NULL; /* Filename string */
41*5e7646d2SAndroid Build Coastguard Worker
42*5e7646d2SAndroid Build Coastguard Worker
43*5e7646d2SAndroid Build Coastguard Worker /*
44*5e7646d2SAndroid Build Coastguard Worker * Parse the command-line...
45*5e7646d2SAndroid Build Coastguard Worker */
46*5e7646d2SAndroid Build Coastguard Worker
47*5e7646d2SAndroid Build Coastguard Worker for (i = 1; i < argc; i ++)
48*5e7646d2SAndroid Build Coastguard Worker {
49*5e7646d2SAndroid Build Coastguard Worker if (argv[i][0] == '-')
50*5e7646d2SAndroid Build Coastguard Worker {
51*5e7646d2SAndroid Build Coastguard Worker if (!strcmp(argv[i], "--help"))
52*5e7646d2SAndroid Build Coastguard Worker {
53*5e7646d2SAndroid Build Coastguard Worker usage();
54*5e7646d2SAndroid Build Coastguard Worker return (0);
55*5e7646d2SAndroid Build Coastguard Worker }
56*5e7646d2SAndroid Build Coastguard Worker
57*5e7646d2SAndroid Build Coastguard Worker for (opt = argv[i] + 1; *opt; opt ++)
58*5e7646d2SAndroid Build Coastguard Worker {
59*5e7646d2SAndroid Build Coastguard Worker switch (*opt)
60*5e7646d2SAndroid Build Coastguard Worker {
61*5e7646d2SAndroid Build Coastguard Worker case 'd' : /* -d directory */
62*5e7646d2SAndroid Build Coastguard Worker i ++;
63*5e7646d2SAndroid Build Coastguard Worker if (i < argc)
64*5e7646d2SAndroid Build Coastguard Worker {
65*5e7646d2SAndroid Build Coastguard Worker dir = argv[i];
66*5e7646d2SAndroid Build Coastguard Worker }
67*5e7646d2SAndroid Build Coastguard Worker else
68*5e7646d2SAndroid Build Coastguard Worker {
69*5e7646d2SAndroid Build Coastguard Worker fputs("testhi: Missing directory for \"-d\" option.\n", stderr);
70*5e7646d2SAndroid Build Coastguard Worker return (usage());
71*5e7646d2SAndroid Build Coastguard Worker }
72*5e7646d2SAndroid Build Coastguard Worker break;
73*5e7646d2SAndroid Build Coastguard Worker
74*5e7646d2SAndroid Build Coastguard Worker case 's' : /* -s section */
75*5e7646d2SAndroid Build Coastguard Worker i ++;
76*5e7646d2SAndroid Build Coastguard Worker if (i < argc)
77*5e7646d2SAndroid Build Coastguard Worker {
78*5e7646d2SAndroid Build Coastguard Worker section = argv[i];
79*5e7646d2SAndroid Build Coastguard Worker }
80*5e7646d2SAndroid Build Coastguard Worker else
81*5e7646d2SAndroid Build Coastguard Worker {
82*5e7646d2SAndroid Build Coastguard Worker fputs("testhi: Missing section name for \"-s\" option.\n", stderr);
83*5e7646d2SAndroid Build Coastguard Worker return (usage());
84*5e7646d2SAndroid Build Coastguard Worker }
85*5e7646d2SAndroid Build Coastguard Worker break;
86*5e7646d2SAndroid Build Coastguard Worker
87*5e7646d2SAndroid Build Coastguard Worker default :
88*5e7646d2SAndroid Build Coastguard Worker fprintf(stderr, "testhi: Unknown option \"-%c\".\n", *opt);
89*5e7646d2SAndroid Build Coastguard Worker return (usage());
90*5e7646d2SAndroid Build Coastguard Worker }
91*5e7646d2SAndroid Build Coastguard Worker }
92*5e7646d2SAndroid Build Coastguard Worker }
93*5e7646d2SAndroid Build Coastguard Worker else if (!q)
94*5e7646d2SAndroid Build Coastguard Worker q = argv[i];
95*5e7646d2SAndroid Build Coastguard Worker else if (!filename)
96*5e7646d2SAndroid Build Coastguard Worker filename = argv[i];
97*5e7646d2SAndroid Build Coastguard Worker else
98*5e7646d2SAndroid Build Coastguard Worker {
99*5e7646d2SAndroid Build Coastguard Worker fprintf(stderr, "testhi: Unknown argument \"%s\".\n", argv[i]);
100*5e7646d2SAndroid Build Coastguard Worker return (usage());
101*5e7646d2SAndroid Build Coastguard Worker }
102*5e7646d2SAndroid Build Coastguard Worker }
103*5e7646d2SAndroid Build Coastguard Worker
104*5e7646d2SAndroid Build Coastguard Worker /*
105*5e7646d2SAndroid Build Coastguard Worker * Load the help index...
106*5e7646d2SAndroid Build Coastguard Worker */
107*5e7646d2SAndroid Build Coastguard Worker
108*5e7646d2SAndroid Build Coastguard Worker hi = helpLoadIndex("testhi.index", dir);
109*5e7646d2SAndroid Build Coastguard Worker
110*5e7646d2SAndroid Build Coastguard Worker list_nodes("nodes", hi->nodes);
111*5e7646d2SAndroid Build Coastguard Worker list_nodes("sorted", hi->sorted);
112*5e7646d2SAndroid Build Coastguard Worker
113*5e7646d2SAndroid Build Coastguard Worker /*
114*5e7646d2SAndroid Build Coastguard Worker * Do any searches...
115*5e7646d2SAndroid Build Coastguard Worker */
116*5e7646d2SAndroid Build Coastguard Worker
117*5e7646d2SAndroid Build Coastguard Worker if (q)
118*5e7646d2SAndroid Build Coastguard Worker {
119*5e7646d2SAndroid Build Coastguard Worker search = helpSearchIndex(hi, q, section, filename);
120*5e7646d2SAndroid Build Coastguard Worker
121*5e7646d2SAndroid Build Coastguard Worker if (search)
122*5e7646d2SAndroid Build Coastguard Worker {
123*5e7646d2SAndroid Build Coastguard Worker list_nodes(argv[1], search->sorted);
124*5e7646d2SAndroid Build Coastguard Worker helpDeleteIndex(search);
125*5e7646d2SAndroid Build Coastguard Worker }
126*5e7646d2SAndroid Build Coastguard Worker else
127*5e7646d2SAndroid Build Coastguard Worker printf("%s (0 nodes)\n", q);
128*5e7646d2SAndroid Build Coastguard Worker }
129*5e7646d2SAndroid Build Coastguard Worker
130*5e7646d2SAndroid Build Coastguard Worker helpDeleteIndex(hi);
131*5e7646d2SAndroid Build Coastguard Worker
132*5e7646d2SAndroid Build Coastguard Worker /*
133*5e7646d2SAndroid Build Coastguard Worker * Return with no errors...
134*5e7646d2SAndroid Build Coastguard Worker */
135*5e7646d2SAndroid Build Coastguard Worker
136*5e7646d2SAndroid Build Coastguard Worker return (0);
137*5e7646d2SAndroid Build Coastguard Worker }
138*5e7646d2SAndroid Build Coastguard Worker
139*5e7646d2SAndroid Build Coastguard Worker
140*5e7646d2SAndroid Build Coastguard Worker /*
141*5e7646d2SAndroid Build Coastguard Worker * 'list_nodes()' - List nodes in an array...
142*5e7646d2SAndroid Build Coastguard Worker */
143*5e7646d2SAndroid Build Coastguard Worker
144*5e7646d2SAndroid Build Coastguard Worker static void
list_nodes(const char * title,cups_array_t * nodes)145*5e7646d2SAndroid Build Coastguard Worker list_nodes(const char *title, /* I - Title string */
146*5e7646d2SAndroid Build Coastguard Worker cups_array_t *nodes) /* I - Nodes */
147*5e7646d2SAndroid Build Coastguard Worker {
148*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
149*5e7646d2SAndroid Build Coastguard Worker help_node_t *node; /* Current node */
150*5e7646d2SAndroid Build Coastguard Worker
151*5e7646d2SAndroid Build Coastguard Worker
152*5e7646d2SAndroid Build Coastguard Worker printf("%s (%d nodes):\n", title, cupsArrayCount(nodes));
153*5e7646d2SAndroid Build Coastguard Worker for (i = 1, node = (help_node_t *)cupsArrayFirst(nodes);
154*5e7646d2SAndroid Build Coastguard Worker node;
155*5e7646d2SAndroid Build Coastguard Worker i ++, node = (help_node_t *)cupsArrayNext(nodes))
156*5e7646d2SAndroid Build Coastguard Worker {
157*5e7646d2SAndroid Build Coastguard Worker if (node->anchor)
158*5e7646d2SAndroid Build Coastguard Worker printf(" %d: %s#%s \"%s\"", i, node->filename, node->anchor,
159*5e7646d2SAndroid Build Coastguard Worker node->text);
160*5e7646d2SAndroid Build Coastguard Worker else
161*5e7646d2SAndroid Build Coastguard Worker printf(" %d: %s \"%s\"", i, node->filename, node->text);
162*5e7646d2SAndroid Build Coastguard Worker
163*5e7646d2SAndroid Build Coastguard Worker printf(" (%d words)\n", cupsArrayCount(node->words));
164*5e7646d2SAndroid Build Coastguard Worker }
165*5e7646d2SAndroid Build Coastguard Worker }
166*5e7646d2SAndroid Build Coastguard Worker
167*5e7646d2SAndroid Build Coastguard Worker
168*5e7646d2SAndroid Build Coastguard Worker /*
169*5e7646d2SAndroid Build Coastguard Worker * 'usage()' - Show program usage.
170*5e7646d2SAndroid Build Coastguard Worker */
171*5e7646d2SAndroid Build Coastguard Worker
172*5e7646d2SAndroid Build Coastguard Worker static int /* O - Exit status */
usage(void)173*5e7646d2SAndroid Build Coastguard Worker usage(void)
174*5e7646d2SAndroid Build Coastguard Worker {
175*5e7646d2SAndroid Build Coastguard Worker puts("Usage: ./testhi [options] [\"query\"] [filename]");
176*5e7646d2SAndroid Build Coastguard Worker puts("Options:");
177*5e7646d2SAndroid Build Coastguard Worker puts("-d directory Specify index directory.");
178*5e7646d2SAndroid Build Coastguard Worker puts("-s section Specify search section.");
179*5e7646d2SAndroid Build Coastguard Worker
180*5e7646d2SAndroid Build Coastguard Worker return (1);
181*5e7646d2SAndroid Build Coastguard Worker }
182