summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/groff/lkbib
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/groff/lkbib')
-rw-r--r--gnu/usr.bin/groff/lkbib/Makefile.dep2
-rw-r--r--gnu/usr.bin/groff/lkbib/Makefile.sub6
-rw-r--r--gnu/usr.bin/groff/lkbib/lkbib.cc122
-rw-r--r--gnu/usr.bin/groff/lkbib/lkbib.man90
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@)
OpenPOWER on IntegriCloud