/* * 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); }