| /* | |
| * Help index test program for CUPS. | |
| * | |
| * Copyright 2007-2017 by Apple Inc. | |
| * Copyright 1997-2007 by Easy Software Products. | |
| * | |
| * Licensed under Apache License v2.0. See the file "LICENSE" for more information. | |
| */ | |
| /* | |
| * Include necessary headers... | |
| */ | |
| #include "cgi.h" | |
| /* | |
| * Local functions... | |
| */ | |
| static void list_nodes(const char *title, cups_array_t *nodes); | |
| static int usage(void); | |
| /* | |
| * 'main()' - Test the help index code. | |
| */ | |
| int /* O - Exit status */ | |
| main(int argc, /* I - Number of command-line arguments */ | |
| char *argv[]) /* I - Command-line arguments */ | |
| { | |
| int i; /* Looping var */ | |
| help_index_t *hi, /* Help index */ | |
| *search; /* Search index */ | |
| const char *opt, /* Current option character */ | |
| *dir = ".", /* Directory to index */ | |
| *q = NULL, /* Query string */ | |
| *section = NULL, /* Section string */ | |
| *filename = NULL; /* Filename string */ | |
| /* | |
| * Parse the command-line... | |
| */ | |
| for (i = 1; i < argc; i ++) | |
| { | |
| if (argv[i][0] == '-') | |
| { | |
| if (!strcmp(argv[i], "--help")) | |
| { | |
| usage(); | |
| return (0); | |
| } | |
| for (opt = argv[i] + 1; *opt; opt ++) | |
| { | |
| switch (*opt) | |
| { | |
| case 'd' : /* -d directory */ | |
| i ++; | |
| if (i < argc) | |
| { | |
| dir = argv[i]; | |
| } | |
| else | |
| { | |
| fputs("testhi: Missing directory for \"-d\" option.\n", stderr); | |
| return (usage()); | |
| } | |
| break; | |
| case 's' : /* -s section */ | |
| i ++; | |
| if (i < argc) | |
| { | |
| section = argv[i]; | |
| } | |
| else | |
| { | |
| fputs("testhi: Missing section name for \"-s\" option.\n", stderr); | |
| return (usage()); | |
| } | |
| break; | |
| default : | |
| fprintf(stderr, "testhi: Unknown option \"-%c\".\n", *opt); | |
| return (usage()); | |
| } | |
| } | |
| } | |
| else if (!q) | |
| q = argv[i]; | |
| else if (!filename) | |
| filename = argv[i]; | |
| else | |
| { | |
| fprintf(stderr, "testhi: Unknown argument \"%s\".\n", argv[i]); | |
| return (usage()); | |
| } | |
| } | |
| /* | |
| * Load the help index... | |
| */ | |
| hi = helpLoadIndex("testhi.index", dir); | |
| list_nodes("nodes", hi->nodes); | |
| list_nodes("sorted", hi->sorted); | |
| /* | |
| * Do any searches... | |
| */ | |
| if (q) | |
| { | |
| search = helpSearchIndex(hi, q, section, filename); | |
| if (search) | |
| { | |
| list_nodes(argv[1], search->sorted); | |
| helpDeleteIndex(search); | |
| } | |
| else | |
| printf("%s (0 nodes)\n", q); | |
| } | |
| helpDeleteIndex(hi); | |
| /* | |
| * Return with no errors... | |
| */ | |
| return (0); | |
| } | |
| /* | |
| * 'list_nodes()' - List nodes in an array... | |
| */ | |
| static void | |
| list_nodes(const char *title, /* I - Title string */ | |
| cups_array_t *nodes) /* I - Nodes */ | |
| { | |
| int i; /* Looping var */ | |
| help_node_t *node; /* Current node */ | |
| printf("%s (%d nodes):\n", title, cupsArrayCount(nodes)); | |
| for (i = 1, node = (help_node_t *)cupsArrayFirst(nodes); | |
| node; | |
| i ++, node = (help_node_t *)cupsArrayNext(nodes)) | |
| { | |
| if (node->anchor) | |
| printf(" %d: %s#%s \"%s\"", i, node->filename, node->anchor, | |
| node->text); | |
| else | |
| printf(" %d: %s \"%s\"", i, node->filename, node->text); | |
| printf(" (%d words)\n", cupsArrayCount(node->words)); | |
| } | |
| } | |
| /* | |
| * 'usage()' - Show program usage. | |
| */ | |
| static int /* O - Exit status */ | |
| usage(void) | |
| { | |
| puts("Usage: ./testhi [options] [\"query\"] [filename]"); | |
| puts("Options:"); | |
| puts("-d directory Specify index directory."); | |
| puts("-s section Specify search section."); | |
| return (1); | |
| } |