mdocml: upstream sync
[dragonfly.git] / contrib / mdocml / apropos_db.h
1 /*      $Id: apropos_db.h,v 1.13 2012/03/24 01:46:25 kristaps Exp $ */
2 /*
3  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 #ifndef APROPOS_H
18 #define APROPOS_H
19
20 enum    restype {
21         RESTYPE_MAN, /* man(7) file */
22         RESTYPE_MDOC, /* mdoc(7) file */
23         RESTYPE_CAT /* pre-formatted file */
24 };
25
26 struct  res {
27         enum restype     type; /* input file type */
28         char            *file; /* file in file-system */
29         char            *cat; /* category (3p, 3, etc.) */
30         char            *title; /* title (FOO, etc.) */
31         char            *arch; /* arch (or empty string) */
32         char            *desc; /* description (from Nd) */
33         unsigned int     rec; /* record in index */
34         /*
35          * The index volume.  This indexes into the array of directories
36          * searched for manual page databases.
37          */
38         unsigned int     volume;
39         /*
40          * The following fields are used internally.
41          *
42          * Maintain a binary tree for checking the uniqueness of `rec'
43          * when adding elements to the results array.
44          * Since the results array is dynamic, use offset in the array
45          * instead of a pointer to the structure.
46          */
47         int              lhs;
48         int              rhs;
49         int              matched; /* expression is true */
50         int             *matches; /* partial truth evaluations */
51 };
52
53 struct  opts {
54         const char      *arch; /* restrict to architecture */
55         const char      *cat; /* restrict to manual section */
56 };
57
58 __BEGIN_DECLS
59
60 struct  expr;
61
62 int              apropos_search(int, char **, const struct opts *,
63                         const struct expr *, size_t, 
64                         void *, size_t *, struct res **,
65                         void (*)(struct res *, size_t, void *));
66 struct  expr    *exprcomp(int, char *[], size_t *);
67 void             exprfree(struct expr *);
68 void             resfree(struct res *, size_t);
69 struct  expr    *termcomp(int, char *[], size_t *);
70
71 __END_DECLS
72
73 #endif /*!APROPOS_H*/