Lines Matching +full:im +full:-
4 * Copyright (c) 2013-2018 Ingo Schwarze <schwarze@openbsd.org>
97 int argi, chdir_status, getcwd_status, im; in mansearch() local
110 if (search->outkey != NULL) in mansearch()
111 for (im = 0; im < KEY_MAX; im++) in mansearch()
112 if (0 == strcasecmp(search->outkey, in mansearch()
113 mansearch_keynames[im])) { in mansearch()
114 outkey = im; in mansearch()
141 for (i = 0; i < paths->sz; i++) { in mansearch()
142 if (chdir_status && paths->paths[i][0] != '/') { in mansearch()
144 warnx("%s: getcwd: %s", paths->paths[i], buf); in mansearch()
146 } else if (chdir(buf) == -1) { in mansearch()
151 if (chdir(paths->paths[i]) == -1) { in mansearch()
152 warn("%s", paths->paths[i]); in mansearch()
157 if (dbm_open(MANDOC_DB) == -1) { in mansearch()
159 warn("%s/%s", paths->paths[i], MANDOC_DB); in mansearch()
170 page = dbm_page_get(rp->page); in mansearch()
172 if (lstmatch(search->sec, page->sect) == 0 || in mansearch()
173 lstmatch(search->arch, page->arch) == 0 || in mansearch()
174 (search->argmode == ARG_NAME && in mansearch()
175 rp->bits <= (int32_t)(NAME_SYN & NAME_MASK))) in mansearch()
188 mandoc_asprintf(&mpage->file, "%s/%s", in mansearch()
189 paths->paths[i], page->file + 1); in mansearch()
190 if (access(chdir_status ? page->file + 1 : in mansearch()
191 mpage->file, R_OK) == -1) { in mansearch()
192 warn("%s", mpage->file); in mansearch()
195 page->file + 1, paths->paths[i]); in mansearch()
196 free(mpage->file); in mansearch()
200 mpage->names = buildnames(page); in mansearch()
201 mpage->output = buildoutput(outkey, page); in mansearch()
202 mpage->bits = search->firstmatch ? rp->bits : 0; in mansearch()
203 mpage->ipath = i; in mansearch()
204 mpage->sec = *page->sect - '0'; in mansearch()
205 if (mpage->sec < 0 || mpage->sec > 9) in mansearch()
206 mpage->sec = 10; in mansearch()
207 mpage->form = *page->file; in mansearch()
220 if (cur && search->firstmatch) in mansearch()
225 if (chdir_status && getcwd_status && chdir(buf) == -1) in mansearch()
239 switch (e->type) { in manmerge()
243 return manmerge_or(e->child, htab); in manmerge()
245 return manmerge_and(e->child, htab); in manmerge()
257 int im; in manmerge_term() local
264 for (im = 0, ib = 1; im < KEY_MAX; im++, ib <<= 1) { in manmerge_term()
265 if ((e->bits & ib) == 0) in manmerge_term()
270 dbm_page_byarch(&e->match); in manmerge_term()
273 dbm_page_bysect(&e->match); in manmerge_term()
276 dbm_page_byname(&e->match); in manmerge_term()
279 dbm_page_bydesc(&e->match); in manmerge_term()
282 dbm_page_bymacro(im - 2, &e->match); in manmerge_term()
294 if (res.page == -1) in manmerge_term()
299 rp->bits |= res.bits; in manmerge_term()
315 e = e->next; in manmerge_or()
331 while ((e = e->next) != NULL) { in manmerge_and()
349 (char *)res, sizeof(res->page), in manmerge_and()
350 res->page)) == NULL) in manmerge_and()
354 (char *)res, sizeof(res->page), in manmerge_and()
355 res->page), res); in manmerge_and()
377 (char *)res, sizeof(res->page), res->page); in manmerge_and()
414 if ((diff = mp2->bits - mp1->bits) || in manpage_compare()
415 (diff = mp1->sec - mp2->sec)) in manpage_compare()
419 sz1 = strcspn(mp1->names, "("); in manpage_compare()
420 sz2 = strcspn(mp2->names, "("); in manpage_compare()
423 if ((diff = strncasecmp(mp1->names, mp2->names, sz1))) in manpage_compare()
426 /* For identical names and sections, prefer arch-dependent. */ in manpage_compare()
427 cp1 = strchr(mp1->names + sz1, '/'); in manpage_compare()
428 cp2 = strchr(mp2->names + sz2, '/'); in manpage_compare()
430 cp1 != NULL ? -1 : cp2 != NULL ? 1 : 0; in manpage_compare()
439 sz = lstlen(page->name, 2) + 1 + lstlen(page->sect, 2) + in buildnames()
440 (page->arch == NULL ? 0 : 1 + lstlen(page->arch, 2)) + 2; in buildnames()
443 lstcat(buf, &i, page->name, ", "); in buildnames()
445 lstcat(buf, &i, page->sect, ", "); in buildnames()
446 if (page->arch != NULL) { in buildnames()
448 lstcat(buf, &i, page->arch, ", "); in buildnames()
457 * Count the buffer space needed to print the NUL-terminated
458 * list of NUL-terminated strings, when printing sep separator
493 * Print the NUL-terminated list of NUL-terminated strings
531 * in the NUL-terminated string list *have, or 0 otherwise.
549 * Build a list of values taken by the macro im in the manual page.
552 buildoutput(size_t im, struct dbm_page *page) in buildoutput() argument
558 switch (im) { in buildoutput()
560 return mandoc_strdup(page->desc); in buildoutput()
562 input = page->name; in buildoutput()
565 input = page->sect; in buildoutput()
568 input = page->arch; in buildoutput()
588 dbm_macro_bypage(im - 2, page->addr); in buildoutput()
631 if (strcmp("-o", argv[*argi]) == 0) { in exprcomp()
634 warnx("ignoring -o after %s", in exprcomp()
635 argv[*argi - 1]); in exprcomp()
637 warnx("ignoring initial -o"); in exprcomp()
650 parent->type = EXPR_OR; in exprcomp()
651 parent->next = NULL; in exprcomp()
652 parent->child = child; in exprcomp()
654 child->next = expr_and(search, argc, argv, argi); in exprcomp()
655 child = child->next; in exprcomp()
658 warnx("ignoring trailing %s", argv[*argi - 1]); in exprcomp()
678 if (strcmp("-o", argv[*argi]) == 0) in expr_and()
680 if (strcmp("-a", argv[*argi]) == 0) { in expr_and()
683 warnx("ignoring -a after %s", in expr_and()
684 argv[*argi - 1]); in expr_and()
686 warnx("ignoring initial -a"); in expr_and()
703 parent->type = EXPR_AND; in expr_and()
704 parent->next = NULL; in expr_and()
705 parent->child = child; in expr_and()
707 child->next = exprterm(search, argc, argv, argi); in expr_and()
708 if (child->next != NULL) { in expr_and()
709 child = child->next; in expr_and()
714 warnx("ignoring trailing %s", argv[*argi - 1]); in expr_and()
738 if (strcmp("-i", argv[*argi]) == 0 && *argi + 1 < argc) { in exprterm()
745 e->type = EXPR_TERM; in exprterm()
746 e->bits = 0; in exprterm()
747 e->next = NULL; in exprterm()
748 e->child = NULL; in exprterm()
750 if (search->argmode == ARG_NAME) { in exprterm()
751 e->bits = TYPE_Nm; in exprterm()
752 e->match.type = DBM_EXACT; in exprterm()
753 e->match.str = argv[(*argi)++]; in exprterm()
762 if (search->argmode == ARG_WORD) { in exprterm()
763 e->bits = TYPE_Nm; in exprterm()
764 e->match.type = DBM_REGEX; in exprterm()
771 "(^|[^a-zA-Z01-9_])%s([^a-zA-Z01-9_]|$)", argv[*argi]); in exprterm()
775 e->bits = TYPE_Nm | TYPE_Nd; in exprterm()
776 e->match.type = DBM_REGEX; in exprterm()
781 e->bits = TYPE_Nm | TYPE_Nd; in exprterm()
783 e->match.type = DBM_SUB; in exprterm()
784 e->match.str = val + 1; in exprterm()
786 e->match.type = DBM_REGEX; in exprterm()
794 if (e->match.type == DBM_REGEX) { in exprterm()
795 e->match.re = mandoc_malloc(sizeof(*e->match.re)); in exprterm()
796 irc = regcomp(e->match.re, val, in exprterm()
799 regerror(irc, e->match.re, errbuf, sizeof(errbuf)); in exprterm()
802 if (search->argmode == ARG_WORD) in exprterm()
805 free(e->match.re); in exprterm()
812 if (e->bits) { in exprterm()
827 e->bits |= iterbit; in exprterm()
835 e->bits |= ~0ULL; in exprterm()
846 if (e->next != NULL) in exprfree()
847 exprfree(e->next); in exprfree()
848 if (e->child != NULL) in exprfree()
849 exprfree(e->child); in exprfree()