#define MANDOC_DB "mandoc.db"
#define MANDOCDB_MAGIC 0x3a7d0cdb
#define MANDOCDB_VERSION 1
#define MACRO_MAX 36
#define KEY_arch 0
#define KEY_sec 1
#define KEY_Nm 38
#define KEY_Nd 39
#define KEY_MAX 40
#define TYPE_arch 0x0000000000000001ULL
#define TYPE_sec 0x0000000000000002ULL
#define TYPE_Xr 0x0000000000000004ULL
#define TYPE_Ar 0x0000000000000008ULL
#define TYPE_Fa 0x0000000000000010ULL
#define TYPE_Fl 0x0000000000000020ULL
#define TYPE_Dv 0x0000000000000040ULL
#define TYPE_Fn 0x0000000000000080ULL
#define TYPE_Ic 0x0000000000000100ULL
#define TYPE_Pa 0x0000000000000200ULL
#define TYPE_Cm 0x0000000000000400ULL
#define TYPE_Li 0x0000000000000800ULL
#define TYPE_Em 0x0000000000001000ULL
#define TYPE_Cd 0x0000000000002000ULL
#define TYPE_Va 0x0000000000004000ULL
#define TYPE_Ft 0x0000000000008000ULL
#define TYPE_Tn 0x0000000000010000ULL
#define TYPE_Er 0x0000000000020000ULL
#define TYPE_Ev 0x0000000000040000ULL
#define TYPE_Sy 0x0000000000080000ULL
#define TYPE_Sh 0x0000000000100000ULL
#define TYPE_In 0x0000000000200000ULL
#define TYPE_Ss 0x0000000000400000ULL
#define TYPE_Ox 0x0000000000800000ULL
#define TYPE_An 0x0000000001000000ULL
#define TYPE_Mt 0x0000000002000000ULL
#define TYPE_St 0x0000000004000000ULL
#define TYPE_Bx 0x0000000008000000ULL
#define TYPE_At 0x0000000010000000ULL
#define TYPE_Nx 0x0000000020000000ULL
#define TYPE_Fx 0x0000000040000000ULL
#define TYPE_Lk 0x0000000080000000ULL
#define TYPE_Ms 0x0000000100000000ULL
#define TYPE_Bsx 0x0000000200000000ULL
#define TYPE_Dx 0x0000000400000000ULL
#define TYPE_Rs 0x0000000800000000ULL
#define TYPE_Vt 0x0000001000000000ULL
#define TYPE_Lb 0x0000002000000000ULL
#define TYPE_Nm 0x0000004000000000ULL
#define TYPE_Nd 0x0000008000000000ULL
#define NAME_SYN 0x0000004000000001ULL
#define NAME_FIRST 0x0000004000000004ULL
#define NAME_TITLE 0x0000004000000006ULL
#define NAME_HEAD 0x0000004000000008ULL
#define NAME_FILE 0x0000004000000010ULL
#define NAME_MASK 0x000000000000001fULL
enum form {
FORM_SRC = 1,
FORM_CAT,
FORM_NONE
};
enum argmode {
ARG_FILE = 0,
ARG_NAME,
ARG_WORD,
ARG_EXPR
};
struct manpage {
char *file;
char *names;
char *output;
uint64_t bits;
size_t ipath;
int sec;
enum form form;
};
struct mansearch {
const char *arch;
const char *sec;
const char *outkey;
enum argmode argmode;
int firstmatch;
};
struct manpaths;
int mansearch(const struct mansearch *cfg,
const struct manpaths *paths,
int argc,
char *argv[],
struct manpage **res,
size_t *ressz);
void mansearch_free(struct manpage *, size_t);