xref: /aosp_15_r20/external/libcups/cgi-bin/testhi.c (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
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