diff options
Diffstat (limited to 'gnu/usr.bin/groff/lkbib')
-rw-r--r-- | gnu/usr.bin/groff/lkbib/Makefile.dep | 2 | ||||
-rw-r--r-- | gnu/usr.bin/groff/lkbib/Makefile.sub | 6 | ||||
-rw-r--r-- | gnu/usr.bin/groff/lkbib/lkbib.cc | 122 | ||||
-rw-r--r-- | gnu/usr.bin/groff/lkbib/lkbib.man | 90 |
4 files changed, 220 insertions, 0 deletions
diff --git a/gnu/usr.bin/groff/lkbib/Makefile.dep b/gnu/usr.bin/groff/lkbib/Makefile.dep new file mode 100644 index 0000000..b6845ea --- /dev/null +++ b/gnu/usr.bin/groff/lkbib/Makefile.dep @@ -0,0 +1,2 @@ +lkbib.o : lkbib.cc ../include/lib.h ../include/errarg.h ../include/error.h \ + ../include/defs.h ../include/refid.h ../include/search.h diff --git a/gnu/usr.bin/groff/lkbib/Makefile.sub b/gnu/usr.bin/groff/lkbib/Makefile.sub new file mode 100644 index 0000000..30035bc --- /dev/null +++ b/gnu/usr.bin/groff/lkbib/Makefile.sub @@ -0,0 +1,6 @@ +PROG=lkbib +MAN1=lkbib.n +XLIBS=$(LIBBIB) $(LIBGROFF) +MLIB=$(LIBM) +OBJS=lkbib.o +CCSRCS=lkbib.cc diff --git a/gnu/usr.bin/groff/lkbib/lkbib.cc b/gnu/usr.bin/groff/lkbib/lkbib.cc new file mode 100644 index 0000000..74459b7 --- /dev/null +++ b/gnu/usr.bin/groff/lkbib/lkbib.cc @@ -0,0 +1,122 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include <stdlib.h> +#include <stdio.h> +#include <errno.h> +#include <string.h> +#include <assert.h> + +#include "lib.h" +#include "errarg.h" +#include "error.h" + +#include "defs.h" +#include "refid.h" +#include "search.h" + +static void usage() +{ + fprintf(stderr, "usage: %s [-nv] [-p database] [-i XYZ] [-t N] keys ...\n", + program_name); + exit(1); +} + +int main(int argc, char **argv) +{ + program_name = argv[0]; + static char stderr_buf[BUFSIZ]; + setbuf(stderr, stderr_buf); + int search_default = 1; + search_list list; + int opt; + while ((opt = getopt(argc, argv, "nvVi:t:p:")) != EOF) + switch (opt) { + case 'V': + verify_flag = 1; + break; + case 'n': + search_default = 0; + break; + case 'i': + linear_ignore_fields = optarg; + break; + case 't': + { + char *ptr; + long n = strtol(optarg, &ptr, 10); + if (n == 0 && ptr == optarg) { + error("bad integer `%1' in `t' option", optarg); + break; + } + if (n < 1) + n = 1; + linear_truncate_len = int(n); + break; + } + case 'v': + { + extern const char *version_string; + fprintf(stderr, "GNU lkbib version %s\n", version_string); + fflush(stderr); + break; + } + case 'p': + list.add_file(optarg); + break; + case '?': + usage(); + default: + assert(0); + } + if (optind >= argc) + usage(); + char *filename = getenv("REFER"); + if (filename) + list.add_file(filename); + else if (search_default) + list.add_file(DEFAULT_INDEX, 1); + if (list.nfiles() == 0) + fatal("no databases"); + int total_len = 0; + for (int i = optind; i < argc; i++) + total_len += strlen(argv[i]); + total_len += argc - optind - 1 + 1; // for spaces and '\0' + char *buffer = new char[total_len]; + char *ptr = buffer; + for (i = optind; i < argc; i++) { + if (i > optind) + *ptr++ = ' '; + strcpy(ptr, argv[i]); + ptr = strchr(ptr, '\0'); + } + search_list_iterator iter(&list, buffer); + const char *start; + int len; + for (int count = 0; iter.next(&start, &len); count++) { + if (fwrite(start, 1, len, stdout) != len) + fatal("write error on stdout: %1", strerror(errno)); + // Can happen for last reference in file. + if (start[len - 1] != '\n') + putchar('\n'); + putchar('\n'); + } + return !count; +} diff --git a/gnu/usr.bin/groff/lkbib/lkbib.man b/gnu/usr.bin/groff/lkbib/lkbib.man new file mode 100644 index 0000000..6450764 --- /dev/null +++ b/gnu/usr.bin/groff/lkbib/lkbib.man @@ -0,0 +1,90 @@ +.\" -*- nroff -*- +.ds g \" empty +.ds G \" empty +.\" Like TP, but if specified indent is more than half +.\" the current line-length - indent, use the default indent. +.de Tp +.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP +.el .TP "\\$1" +.. +.TH LKBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +lkbib \- search bibliographic databases +.SH SYNOPSIS +.B lkbib +[ +.B \-v +] +[ +.BI \-i fields +] +[ +.BI \-p filename +] +[ +.BI \-t n +] +.IR key \|.\|.\|. +.SH DESCRIPTION +.B lkbib +searches bibliographic databases for references that contain the keys +.IR key \|.\|.\|. +and prints any references found on the standard output. +.B lkbib +will search any databases given by +.B \-p +options, and then a default database. +The default database is taken from the +.SB REFER +environment variable if it is set, +otherwise it is +.BR @DEFAULT_INDEX@ . +For each database +.I filename +to be searched, +if an index +.IB filename @INDEX_SUFFIX@ +created by +.BR @g@indxbib (@MAN1EXT@) +exists, then it will be searched instead; +each index can cover multiple databases. +.SH OPTIONS +.TP +.B \-v +Print the version number. +.TP +.BI \-p filename +Search +.IR filename . +Multiple +.B \-p +options can be used. +.TP +.BI \-i string +When searching files for which no index exists, +ignore the contents of fields whose names are in +.IR string . +.TP +.BI \-t n +Only require the first +.I n +characters of keys to be given. +Initially +.I n +is 6. +.SH ENVIRONMENT +.TP \w'\fBREFER'u+2n +.SB REFER +Default database. +.SH FILES +.Tp \w'\fB@DEFAULT_INDEX@'u+2n +.B @DEFAULT_INDEX@ +Default database to be used if the +.SB REFER +environment variable is not set. +.IB filename @INDEX_SUFFIX@ +Index files. +.SH "SEE ALSO" +.BR @g@refer (@MAN1EXT@), +.BR @g@lookbib (@MAN1EXT@), +.BR @g@indxbib (@MAN1EXT@) |