1*61d06d6bSBaptiste Daroussin.\" $Id: mansearch.3,v 1.5 2017/03/30 22:22:05 schwarze Exp $ 2*61d06d6bSBaptiste Daroussin.\" 3*61d06d6bSBaptiste Daroussin.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org> 4*61d06d6bSBaptiste Daroussin.\" 5*61d06d6bSBaptiste Daroussin.\" Permission to use, copy, modify, and distribute this software for any 6*61d06d6bSBaptiste Daroussin.\" purpose with or without fee is hereby granted, provided that the above 7*61d06d6bSBaptiste Daroussin.\" copyright notice and this permission notice appear in all copies. 8*61d06d6bSBaptiste Daroussin.\" 9*61d06d6bSBaptiste Daroussin.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*61d06d6bSBaptiste Daroussin.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*61d06d6bSBaptiste Daroussin.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*61d06d6bSBaptiste Daroussin.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*61d06d6bSBaptiste Daroussin.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*61d06d6bSBaptiste Daroussin.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*61d06d6bSBaptiste Daroussin.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*61d06d6bSBaptiste Daroussin.\" 17*61d06d6bSBaptiste Daroussin.Dd $Mdocdate: March 30 2017 $ 18*61d06d6bSBaptiste Daroussin.Dt MANSEARCH 3 19*61d06d6bSBaptiste Daroussin.Os 20*61d06d6bSBaptiste Daroussin.Sh NAME 21*61d06d6bSBaptiste Daroussin.Nm mansearch 22*61d06d6bSBaptiste Daroussin.Nd search manual page databases 23*61d06d6bSBaptiste Daroussin.Sh SYNOPSIS 24*61d06d6bSBaptiste Daroussin.In stdint.h 25*61d06d6bSBaptiste Daroussin.In manconf.h 26*61d06d6bSBaptiste Daroussin.In mansearch.h 27*61d06d6bSBaptiste Daroussin.Ft int 28*61d06d6bSBaptiste Daroussin.Fo mansearch 29*61d06d6bSBaptiste Daroussin.Fa "const struct mansearch *search" 30*61d06d6bSBaptiste Daroussin.Fa "const struct manpaths *paths" 31*61d06d6bSBaptiste Daroussin.Fa "int argc" 32*61d06d6bSBaptiste Daroussin.Fa "char *argv[]" 33*61d06d6bSBaptiste Daroussin.Fa "struct manpage **res" 34*61d06d6bSBaptiste Daroussin.Fa "size_t *sz" 35*61d06d6bSBaptiste Daroussin.Fc 36*61d06d6bSBaptiste Daroussin.Sh DESCRIPTION 37*61d06d6bSBaptiste DaroussinThe 38*61d06d6bSBaptiste Daroussin.Fn mansearch 39*61d06d6bSBaptiste Daroussinfunction returns information about manuals matching a search query from a 40*61d06d6bSBaptiste Daroussin.Xr mandoc.db 5 41*61d06d6bSBaptiste Daroussindatabase. 42*61d06d6bSBaptiste Daroussin.Pp 43*61d06d6bSBaptiste DaroussinThe query arguments are as follows: 44*61d06d6bSBaptiste Daroussin.Bl -tag -width Ds 45*61d06d6bSBaptiste Daroussin.It Fa "const struct mansearch *search" 46*61d06d6bSBaptiste DaroussinSearch options, defined in 47*61d06d6bSBaptiste Daroussin.In mansearch.h . 48*61d06d6bSBaptiste Daroussin.It Fa "const struct manpaths *paths" 49*61d06d6bSBaptiste DaroussinDirectories to be searched, defined in 50*61d06d6bSBaptiste Daroussin.In manconf.h . 51*61d06d6bSBaptiste Daroussin.It Fa "int argc" , "char *argv[]" 52*61d06d6bSBaptiste DaroussinSearch criteria, usually taken from the command line. 53*61d06d6bSBaptiste Daroussin.El 54*61d06d6bSBaptiste Daroussin.Pp 55*61d06d6bSBaptiste DaroussinThe output arguments are as follows: 56*61d06d6bSBaptiste Daroussin.Bl -tag -width Ds 57*61d06d6bSBaptiste Daroussin.It Fa "struct manpage **res" 58*61d06d6bSBaptiste DaroussinReturns a pointer to an array of result structures defined in 59*61d06d6bSBaptiste Daroussin.In mansearch.h . 60*61d06d6bSBaptiste DaroussinThe user is expected to call 61*61d06d6bSBaptiste Daroussin.Xr free 3 62*61d06d6bSBaptiste Daroussinon the 63*61d06d6bSBaptiste Daroussin.Va file , 64*61d06d6bSBaptiste Daroussin.Va names , 65*61d06d6bSBaptiste Daroussinand 66*61d06d6bSBaptiste Daroussin.Va output 67*61d06d6bSBaptiste Daroussinfields of all structures, as well as the 68*61d06d6bSBaptiste Daroussin.Fa res 69*61d06d6bSBaptiste Daroussinarray itself. 70*61d06d6bSBaptiste Daroussin.It Fa "size_t *sz" 71*61d06d6bSBaptiste DaroussinReturns the number of result structures contained in 72*61d06d6bSBaptiste Daroussin.Fa res . 73*61d06d6bSBaptiste Daroussin.El 74*61d06d6bSBaptiste Daroussin.Sh IMPLEMENTATION NOTES 75*61d06d6bSBaptiste DaroussinFor each manual page tree, the search is done in two steps. 76*61d06d6bSBaptiste DaroussinIn the first step, a list of pages matching the search criteria is built. 77*61d06d6bSBaptiste DaroussinIn the second step, the requested information about these pages is 78*61d06d6bSBaptiste Daroussinretrieved from the database and assembled into the 79*61d06d6bSBaptiste Daroussin.Fa res 80*61d06d6bSBaptiste Daroussinarray. 81*61d06d6bSBaptiste Daroussin.Pp 82*61d06d6bSBaptiste DaroussinAll function mentioned here are defined in the file 83*61d06d6bSBaptiste Daroussin.Pa mansearch.c . 84*61d06d6bSBaptiste Daroussin.Ss Finding matches 85*61d06d6bSBaptiste DaroussinCommand line parsing is done by the function 86*61d06d6bSBaptiste Daroussin.Fn exprcomp 87*61d06d6bSBaptiste Daroussinbuilding a singly linked list of 88*61d06d6bSBaptiste Daroussin.Vt expr 89*61d06d6bSBaptiste Daroussinstructures, using the helper functions 90*61d06d6bSBaptiste Daroussin.Fn expr_and 91*61d06d6bSBaptiste Daroussinand 92*61d06d6bSBaptiste Daroussin.Fn exprterm . 93*61d06d6bSBaptiste Daroussin.Ss Assembling the results 94*61d06d6bSBaptiste DaroussinThe names, sections, and architectures of the manuals found 95*61d06d6bSBaptiste Daroussinare assembled into the 96*61d06d6bSBaptiste Daroussin.Va names 97*61d06d6bSBaptiste Daroussinfield of the result structure by the function 98*61d06d6bSBaptiste Daroussin.Fn buildnames . 99*61d06d6bSBaptiste Daroussin.Sh FILES 100*61d06d6bSBaptiste Daroussin.Bl -tag -width mandoc.db -compact 101*61d06d6bSBaptiste Daroussin.It Pa mandoc.db 102*61d06d6bSBaptiste DaroussinThe manual page database. 103*61d06d6bSBaptiste Daroussin.El 104*61d06d6bSBaptiste Daroussin.Sh SEE ALSO 105*61d06d6bSBaptiste Daroussin.Xr apropos 1 , 106*61d06d6bSBaptiste Daroussin.Xr mandoc.db 5 , 107*61d06d6bSBaptiste Daroussin.Xr makewhatis 8 108*61d06d6bSBaptiste Daroussin.Sh HISTORY 109*61d06d6bSBaptiste DaroussinThe 110*61d06d6bSBaptiste Daroussin.Fn mansearch 111*61d06d6bSBaptiste Daroussinsubsystem first appeared in 112*61d06d6bSBaptiste Daroussin.Ox 5.6 . 113*61d06d6bSBaptiste Daroussin.Sh AUTHORS 114*61d06d6bSBaptiste Daroussin.An -nosplit 115*61d06d6bSBaptiste DaroussinA module to search manual page databases was first written by 116*61d06d6bSBaptiste Daroussin.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv 117*61d06d6bSBaptiste Daroussinin 2011, at first using the Berkeley DB; 118*61d06d6bSBaptiste Daroussinhe rewrote it for SQLite3 in 2012, and 119*61d06d6bSBaptiste Daroussin.An Ingo Schwarze Aq Mt schwarze@openbsd.org 120*61d06d6bSBaptiste Daroussinremoved the dependency on SQLite3 in 2016. 121