summaryrefslogtreecommitdiffstats
path: root/contrib/groff/lookbib
diff options
context:
space:
mode:
authorpst <pst@FreeBSD.org>1996-09-07 16:18:32 +0000
committerpst <pst@FreeBSD.org>1996-09-07 16:18:32 +0000
commit7fdf49473c970aa96ee1bae16928d1db23643228 (patch)
tree0abcbad9804fcf7a7157983937cadcf61449b840 /contrib/groff/lookbib
downloadFreeBSD-src-7fdf49473c970aa96ee1bae16928d1db23643228.zip
FreeBSD-src-7fdf49473c970aa96ee1bae16928d1db23643228.tar.gz
Virgin import of FSF groff v1.10
Diffstat (limited to 'contrib/groff/lookbib')
-rw-r--r--contrib/groff/lookbib/Makefile.dep3
-rw-r--r--contrib/groff/lookbib/Makefile.sub7
-rw-r--r--contrib/groff/lookbib/lookbib.cc128
-rw-r--r--contrib/groff/lookbib/lookbib.man75
4 files changed, 213 insertions, 0 deletions
diff --git a/contrib/groff/lookbib/Makefile.dep b/contrib/groff/lookbib/Makefile.dep
new file mode 100644
index 0000000..341a3b9
--- /dev/null
+++ b/contrib/groff/lookbib/Makefile.dep
@@ -0,0 +1,3 @@
+lookbib.o: lookbib.cc ../include/errarg.h ../include/error.h \
+ ../include/lib.h ../include/cset.h ../include/refid.h \
+ ../include/search.h
diff --git a/contrib/groff/lookbib/Makefile.sub b/contrib/groff/lookbib/Makefile.sub
new file mode 100644
index 0000000..1183812
--- /dev/null
+++ b/contrib/groff/lookbib/Makefile.sub
@@ -0,0 +1,7 @@
+PROG=lookbib
+MAN1=lookbib.n
+XLIBS=$(LIBBIB) $(LIBGROFF)
+MLIB=$(LIBM)
+OBJS=lookbib.o
+CCSRCS=lookbib.cc
+NAMEPREFIX=$(g)
diff --git a/contrib/groff/lookbib/lookbib.cc b/contrib/groff/lookbib/lookbib.cc
new file mode 100644
index 0000000..7154a01
--- /dev/null
+++ b/contrib/groff/lookbib/lookbib.cc
@@ -0,0 +1,128 @@
+// -*- 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "errarg.h"
+#include "error.h"
+#include "lib.h"
+#include "cset.h"
+
+#include "refid.h"
+#include "search.h"
+
+extern "C" {
+ int isatty(int);
+}
+
+static void usage()
+{
+ fprintf(stderr, "usage: %s [-v] [-i XYZ] [-t N] database ...\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 opt;
+ while ((opt = getopt(argc, argv, "vVi:t:")) != EOF)
+ switch (opt) {
+ case 'V':
+ verify_flag = 1;
+ 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 lookbib version %s\n", version_string);
+ fflush(stderr);
+ break;
+ }
+ case '?':
+ usage();
+ default:
+ assert(0);
+ }
+ if (optind >= argc)
+ usage();
+ search_list list;
+ for (int i = optind; i < argc; i++)
+ list.add_file(argv[i]);
+ if (list.nfiles() == 0)
+ fatal("no databases");
+ char line[1024];
+ int interactive = isatty(fileno(stdin));
+ for (;;) {
+ if (interactive) {
+ fputs("> ", stderr);
+ fflush(stderr);
+ }
+ if (!fgets(line, sizeof(line), stdin))
+ break;
+ char *ptr = line;
+ while (csspace(*ptr))
+ ptr++;
+ if (*ptr == '\0')
+ continue;
+ search_list_iterator iter(&list, line);
+ const char *start;
+ int len;
+ int count;
+ for (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');
+ }
+ fflush(stdout);
+ if (interactive) {
+ fprintf(stderr, "%d found\n", count);
+ fflush(stderr);
+ }
+ }
+ if (interactive)
+ putc('\n', stderr);
+ return 0;
+}
+
diff --git a/contrib/groff/lookbib/lookbib.man b/contrib/groff/lookbib/lookbib.man
new file mode 100644
index 0000000..465990b
--- /dev/null
+++ b/contrib/groff/lookbib/lookbib.man
@@ -0,0 +1,75 @@
+.ig \"-*- nroff -*-
+Copyright (C) 1989-1995 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that this permission notice may be included in
+translations approved by the Free Software Foundation instead of in
+the original English.
+..
+.TH @G@LOOKBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+@g@lookbib \- search bibliographic databases
+.SH SYNOPSIS
+.B @g@lookbib
+[
+.B \-v
+]
+[
+.BI \-i string
+]
+[
+.BI \-t n
+]
+.IR filename \|.\|.\|.
+.SH DESCRIPTION
+@g@lookbib prints a prompt on the standard error (unless the standard input is not a terminal),
+reads from the standard input a line containing a set of keywords,
+searches the bibliographic databases
+.IR filename \|.\|.\|.
+for references containing those keywords,
+prints any references found on the standard output,
+and repeats this process until the end of input.
+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 \-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 FILES
+.TP \w'\fIfilename\fB@INDEX_SUFFIX@'u+2n
+.IB filename @INDEX_SUFFIX@
+Index files.
+.SH "SEE ALSO"
+.BR @g@refer (@MAN1EXT@),
+.BR lkbib (@MAN1EXT@),
+.BR @g@indxbib (@MAN1EXT@)
OpenPOWER on IntegriCloud