Commit 17284e30 authored by Glenn Morris's avatar Glenn Morris
Browse files

Replace digest-doc and sorted-doc C programs with Lisp commands.

* lib-src/digest-doc.c, lib-src/sorted-doc.c: Remove files.
* lib-src/Makefile.in (UTILITIES): Remove digest-doc and sorted-doc.
(digest-doc${EXEEXT}, sorted-doc${EXEEXT}): Remove rules.
* lib-src/makefile.w32-in (ALL): Remove digest-doc and sorted-doc.
($(BLD)/sorted-doc.exe, $(BLD)/digest-doc.exe, sorted-doc, digest-doc)
($(BLD)/digest-doc.$(O), $(BLD)/sorted-doc.$(O)): Remove rules.
(install): Don't install digest-doc.exe or sorted-doc.exe.

* lisp/help-fns.el (doc-file-to-man, doc-file-to-info): New commands.

* doc/lispref/help.texi (Documentation Basics): Remove mentions of
digest-doc and sorted-doc.

* INSTALL, nt/README, nt/README.W32: Do not mention digest-doc and sorted-doc.

* etc/NEWS: Mention this change.
parent aa02a29f
......@@ -676,8 +676,7 @@ the following steps.
the paths to the values specified in `./Makefile'.
2) Go to directory `./lib-src' and run `make'. This creates
executables named `ctags' and `etags' and `make-docfile' and
`digest-doc' and `test-distrib'. And others.
executables named `etags', `make-docfile', and others.
3) Go to directory `./src' and run `make'. This refers to files in
the `./lisp' and `./lib-src' subdirectories using names `../lisp' and
......@@ -709,8 +708,6 @@ Strictly speaking, not all of the executables in `./lib-src' need be copied.
are intended to be run by users; they are handled below.
- The programs `make-docfile' and `test-distrib' were
used in building Emacs, and are not needed any more.
- The programs `digest-doc' and `sorted-doc' convert a `DOC' file into
a file for users to read. There is no important reason to move them.
2) Copy the files in `./info' to the place specified in
`./lisp/site-init.el' or `./lisp/paths.el'. Note that if the
......
2010-10-23 Glenn Morris <rgm@gnu.org>
* help.texi (Documentation Basics): Remove mentions of digest-doc and
sorted-doc.
2010-10-15 Eli Zaretskii <eliz@gnu.org>
* os.texi (Dynamic Libraries): New node, with slightly modified
......
@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
@c Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../../info/help
@node Documentation, Files, Modes, Top
......@@ -106,12 +107,6 @@ documentation string. The functions @code{documentation} and
documentation string from the appropriate file; this is transparent to
the user.
@c Wordy to prevent overfull hbox. --rjc 15mar92
The @file{emacs/lib-src} directory contains two utilities that you can
use to print nice-looking hardcopy for the file
@file{emacs/etc/DOC-@var{version}}. These are @file{sorted-doc} and
@file{digest-doc}.
@node Accessing Documentation
@section Access to Documentation Strings
......@@ -701,6 +696,3 @@ echo area at first, and display the longer @var{help-text} strings only
if the user types the help character again.
@end defopt
@ignore
arch-tag: ba36b4c2-e60f-49e2-bc25-61158fdcd815
@end ignore
......@@ -209,6 +209,9 @@ directory named "themes/" in `data-directory'.
** The user option `remote-file-name-inhibit-cache' controls whether
the remote file-name cache is used for read access.
** The standalone programs lib-src/digest-doc and sorted-doc have been
replaced with Lisp commands `doc-file-to-man' and `doc-file-to-info'.
* Editing Changes in Emacs 24.1
......
2010-10-23 Glenn Morris <rgm@gnu.org>
* digest-doc.c, sorted-doc.c: Remove files.
* Makefile.in (UTILITIES): Remove digest-doc and sorted-doc.
(digest-doc${EXEEXT}, sorted-doc${EXEEXT}): Remove rules.
* makefile.w32-in (ALL): Remove digest-doc and sorted-doc.
($(BLD)/sorted-doc.exe, $(BLD)/digest-doc.exe, sorted-doc, digest-doc)
($(BLD)/digest-doc.$(O), $(BLD)/sorted-doc.$(O)): Remove rules.
(install): Don't install digest-doc.exe or sorted-doc.exe.
2010-10-10 Dan Nicolaescu <dann@ics.uci.edu>
* Makefile.in (PROFILING_LDFLAGS): Remove, not needed.
......
......@@ -118,8 +118,7 @@ STAMP_INST_SCRIPTS = stamp-rcs-checkin stamp-grep-changelog
# Things that Emacs runs internally, or during the build process,
# which should not be installed in bindir.
UTILITIES = profile${EXEEXT} digest-doc${EXEEXT} sorted-doc${EXEEXT} \
movemail${EXEEXT} fakemail${EXEEXT} \
UTILITIES = profile${EXEEXT} movemail${EXEEXT} fakemail${EXEEXT} \
hexl${EXEEXT} update-game-score${EXEEXT}
DONT_INSTALL= test-distrib${EXEEXT} make-docfile${EXEEXT}
......@@ -353,12 +352,6 @@ make-docfile${EXEEXT}: ${srcdir}/make-docfile.c ../src/config.h
$(CC) ${ALL_CFLAGS} ${srcdir}/make-docfile.c $(LOADLIBES) \
-o make-docfile
digest-doc${EXEEXT}: ${srcdir}/digest-doc.c
$(CC) ${ALL_CFLAGS} ${srcdir}/digest-doc.c $(LOADLIBES) -o digest-doc
sorted-doc${EXEEXT}: ${srcdir}/sorted-doc.c
$(CC) ${ALL_CFLAGS} ${srcdir}/sorted-doc.c $(LOADLIBES) -o sorted-doc
movemail${EXEEXT}: movemail.o pop.o $(GETOPTDEPS)
$(CC) ${LINK_CFLAGS} ${MOVE_FLAGS} movemail.o pop.o \
$(GETOPTOBJS) $(LOADLIBES) $(LIBS_MOVE) -o movemail
......
/* Give this program DOC-mm.nn.oo as standard input and it outputs to
standard output a file of nroff output containing the doc strings.
Copyright (C) 1987, 1994, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs 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 3 of the License, or
(at your option) any later version.
GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
See also sorted-doc.c, which produces similar output
but in texinfo format and sorted by function/variable name. */
#include <stdio.h>
#ifdef DOS_NT
#include <fcntl.h> /* for O_BINARY */
#include <io.h> /* for setmode */
#endif
int
main (void)
{
register int ch;
register int notfirst = 0;
#ifdef DOS_NT
/* DOC is a binary file. */
if (!isatty (fileno (stdin)))
setmode (fileno (stdin), O_BINARY);
#endif
printf (".TL\n");
printf ("Command Summary for GNU Emacs\n");
printf (".AU\nRichard M. Stallman\n");
while ((ch = getchar ()) != EOF)
{
if (ch == '\037')
{
if (notfirst)
printf ("\n.DE");
else
notfirst = 1;
printf ("\n.SH\n");
ch = getchar ();
printf (ch == 'F' ? "Function " : "Variable ");
while ((ch = getchar ()) != '\n') /* Changed this line */
{
if (ch != EOF)
putchar (ch);
else
{
ungetc (ch, stdin);
break;
}
}
printf ("\n.DS L\n");
}
else
putchar (ch);
}
return 0;
}
/* arch-tag: 2ba2c9b0-4157-4eba-bd9f-967e3677e35f
(do not change this comment) */
......@@ -18,7 +18,7 @@
# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
ALL = make-docfile hexl ctags etags movemail ebrowse sorted-doc digest-doc emacsclient
ALL = make-docfile hexl ctags etags movemail ebrowse emacsclient
.PHONY: $(ALL)
......@@ -36,10 +36,6 @@ $(BLD)/hexl.exe: $(BLD)/hexl.$(O)
$(LINK) $(LINK_OUT)$@ $(LINK_FLAGS) $(BLD)/hexl.$(O) $(LIBS)
$(BLD)/fakemail.exe: $(BLD)/fakemail.$(O) $(BLD)/ntlib.$(O)
$(LINK) $(LINK_OUT)$@ $(LINK_FLAGS) $(BLD)/fakemail.$(O) $(BLD)/ntlib.$(O) $(LIBS)
$(BLD)/sorted-doc.exe: $(BLD)/sorted-doc.$(O)
$(LINK) $(LINK_OUT)$@ $(LINK_FLAGS) $(BLD)/sorted-doc.$(O) $(LIBS)
$(BLD)/digest-doc.exe: $(BLD)/digest-doc.$(O)
$(LINK) $(LINK_OUT)$@ $(LINK_FLAGS) $(BLD)/digest-doc.$(O) $(LIBS)
$(BLD)/test-distrib.exe: $(BLD)/test-distrib.$(O)
$(LINK) $(LINK_OUT)$@ $(LINK_FLAGS) $(BLD)/test-distrib.$(O) $(LIBS)
......@@ -50,8 +46,6 @@ ebrowse: stamp_BLD $(BLD)/ebrowse.exe
hexl: stamp_BLD $(BLD)/hexl.exe
movemail: stamp_BLD $(BLD)/movemail.exe
fakemail: stamp_BLD $(BLD)/fakemail.exe
sorted-doc: stamp_BLD $(BLD)/sorted-doc.exe
digest-doc: stamp_BLD $(BLD)/digest-doc.exe
emacsclient: stamp_BLD $(BLD)/emacsclient.exe $(BLD)/emacsclientw.exe
test-distrib: stamp_BLD $(BLD)/test-distrib.exe
......@@ -335,8 +329,6 @@ install: $(INSTALL_FILES)
$(CP) $(BLD)/ctags.exe $(INSTALL_DIR)/bin
$(CP) $(BLD)/hexl.exe $(INSTALL_DIR)/bin
$(CP) $(BLD)/movemail.exe $(INSTALL_DIR)/bin
$(CP) $(BLD)/sorted-doc.exe $(INSTALL_DIR)/bin
$(CP) $(BLD)/digest-doc.exe $(INSTALL_DIR)/bin
$(CP) $(BLD)/emacsclient.exe $(INSTALL_DIR)/bin
$(CP) $(BLD)/emacsclientw.exe $(INSTALL_DIR)/bin
- mkdir "$(INSTALL_DIR)/etc"
......@@ -404,9 +396,6 @@ $(BLD)/ctags.$(O) : \
$(SRC)/ntlib.h \
$(SRC)/getopt.h
$(BLD)/digest-doc.$(O) : \
$(SRC)/digest-doc.c
$(BLD)/emacsclient.$(O) : \
$(SRC)/emacsclient.c \
$(EMACS_ROOT)/src/s/ms-w32.h \
......@@ -496,12 +485,6 @@ $(BLD)/profile.$(O) : \
$(BLD)/qsort.$(O) : \
$(SRC)/qsort.c
$(BLD)/sorted-doc.$(O) : \
$(SRC)/sorted-doc.c \
$(EMACS_ROOT)/src/s/ms-w32.h \
$(EMACS_ROOT)/src/m/intel386.h \
$(EMACS_ROOT)/src/config.h
$(BLD)/tcp.$(O) : \
$(SRC)/tcp.c
......@@ -519,8 +502,6 @@ $(BLD)/timer.$(O) : \
#
$(BLD)/make-docfile.$(O) $(BLD)/hexl.$(O) $(BLD)/fakemail.$(O): stamp_BLD
$(BLD)/sorted-doc.$(O) $(BLD)/digest-doc.$(O): stamp_BLD
$(BLD)/test-distrib.$(O) $(GETOPTOBJS) $(MOVEMAILOBJS): stamp_BLD
$(BLD)/emacsclient.$(O) $(BLD)/etags.$(O) $(BLD)/regex.$(O): stamp_BLD
......
/* Give this program DOC-mm.nn.oo as standard input and it outputs to
standard output a file of texinfo input containing the doc strings.
Copyright (C) 1989, 1992, 1994, 1996, 1999, 2000, 2001, 2002, 2003,
2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs 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 3 of the License, or
(at your option) any later version.
GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* This version sorts the output by function name. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <ctype.h>
#ifdef DOS_NT
#include <fcntl.h> /* for O_BINARY */
#include <io.h> /* for setmode */
#endif
#ifndef HAVE_STDLIB_H /* config.h includes stdlib. */
#ifndef WINDOWSNT /* src/s/ms-w32.h includes stdlib.h */
extern char *malloc ();
#endif
#endif
#define NUL '\0'
#define MARKER '\037'
#define DEBUG 0
typedef struct line LINE;
struct line
{
LINE *next; /* ptr to next or NULL */
char *line; /* text of the line */
};
typedef struct docstr DOCSTR;
struct docstr /* Allocated thing for an entry. */
{
DOCSTR *next; /* next in the chain */
char *name; /* name of the function or var */
LINE *first; /* first line of doc text. */
char type; /* 'F' for function, 'V' for variable */
};
/* Print error message. `s1' is printf control string, `s2' is arg for it. */
void
error (const char *s1, const char *s2)
{
fprintf (stderr, "sorted-doc: ");
fprintf (stderr, s1, s2);
fprintf (stderr, "\n");
}
/* Print error message and exit. */
void
fatal (const char *s1, const char *s2)
{
error (s1, s2);
exit (EXIT_FAILURE);
}
/* Like malloc but get fatal error if memory is exhausted. */
char *
xmalloc (int size)
{
char *result = malloc ((unsigned)size);
if (result == NULL)
fatal ("%s", "virtual memory exhausted");
return result;
}
char *
xstrdup (const char *str)
{
char *buf = xmalloc (strlen (str) + 1);
(void) strcpy (buf, str);
return (buf);
}
/* Comparison function for qsort to call. */
int
cmpdoc (const void *va, const void *vb)
{
DOCSTR *const *a = va;
DOCSTR *const *b = vb;
register int val = strcmp ((*a)->name, (*b)->name);
if (val) return val;
return (*a)->type - (*b)->type;
}
enum state
{
WAITING, BEG_NAME, NAME_GET, BEG_DESC, DESC_GET
};
const char *states[] =
{
"WAITING", "BEG_NAME", "NAME_GET", "BEG_DESC", "DESC_GET"
};
int
main (void)
{
register DOCSTR *dp = NULL; /* allocated DOCSTR */
register LINE *lp = NULL; /* allocated line */
register char *bp; /* ptr inside line buffer */
register enum state state = WAITING; /* state at start */
int cnt = 0; /* number of DOCSTRs read */
DOCSTR *docs = NULL; /* chain of allocated DOCSTRS */
char buf[512]; /* line buffer */
#ifdef DOS_NT
/* DOC is a binary file. */
if (!isatty (fileno (stdin)))
setmode (fileno (stdin), O_BINARY);
#endif
bp = buf;
while (1) /* process one char at a time */
{
/* this char from the DOCSTR file */
register int ch = getchar ();
/* Beginnings */
if (state == WAITING)
{
if (ch == MARKER)
state = BEG_NAME;
}
else if (state == BEG_NAME)
{
cnt++;
if (dp == NULL) /* first dp allocated */
{
docs = dp = (DOCSTR*) xmalloc (sizeof (DOCSTR));
}
else /* all the rest */
{
dp->next = (DOCSTR*) xmalloc (sizeof (DOCSTR));
dp = dp->next;
}
lp = NULL;
dp->next = NULL;
bp = buf;
state = NAME_GET;
/* Record whether function or variable. */
dp->type = ch;
ch = getchar ();
}
else if (state == BEG_DESC)
{
if (lp == NULL) /* first line for dp */
{
dp->first = lp = (LINE*)xmalloc (sizeof (LINE));
}
else /* continuing lines */
{
lp->next = (LINE*)xmalloc (sizeof (LINE));
lp = lp->next;
}
lp->next = NULL;
bp = buf;
state = DESC_GET;
}
/* process gets */
if (state == NAME_GET || state == DESC_GET)
{
if (ch != MARKER && ch != '\n' && ch != EOF)
{
*bp++ = ch;
}
else /* saving and changing state */
{
*bp = NUL;
bp = xstrdup (buf);
if (state == NAME_GET)
dp->name = bp;
else
lp->line = bp;
bp = buf;
state = (ch == MARKER) ? BEG_NAME : BEG_DESC;
}
} /* NAME_GET || DESC_GET */
if (ch == EOF)
break;
}
{
DOCSTR **array;
register int i; /* counter */
/* build array of ptrs to DOCSTRs */
array = (DOCSTR**)xmalloc (cnt * sizeof (*array));
for (dp = docs, i = 0; dp != NULL ; dp = dp->next)
array[i++] = dp;
/* sort the array by name; within each name, by type */
qsort ((char*)array, cnt, sizeof (DOCSTR*), cmpdoc);
/* write the output header */
printf ("\\input texinfo @c -*-texinfo-*-\n");
printf ("@setfilename ../info/summary\n");
printf ("@settitle Command Summary for GNU Emacs\n");
printf ("@finalout\n");
printf ("@unnumbered Command Summary for GNU Emacs\n");
printf ("@table @asis\n");
printf ("\n");
printf ("@iftex\n");
printf ("@global@let@ITEM@item\n");
printf ("@def@item{@filbreak@vskip5pt@ITEM}\n");
printf ("@font@tensy cmsy10 scaled @magstephalf\n");
printf ("@font@teni cmmi10 scaled @magstephalf\n");
printf ("@def\\{{@tensy@char110}}\n"); /* this backslash goes with cmr10 */
printf ("@def|{{@tensy@char106}}\n");
printf ("@def@{{{@tensy@char102}}\n");
printf ("@def@}{{@tensy@char103}}\n");
printf ("@def<{{@teni@char62}}\n");
printf ("@def>{{@teni@char60}}\n");
printf ("@chardef@@64\n");
printf ("@catcode43=12\n");
printf ("@tableindent-0.2in\n");
printf ("@end iftex\n");
/* print each function from the array */
for (i = 0; i < cnt; i++)
{
printf ("\n@item %s @code{%s}\n@display\n",
array[i]->type == 'F' ? "Function" : "Variable",
array[i]->name);
for (lp = array[i]->first; lp != NULL ; lp = lp->next)
{
for (bp = lp->line; *bp; bp++)
{
/* the characters "@{}" need special treatment */
if (*bp == '@' || *bp == '{' || *bp == '}')
{
putchar('@');
}
putchar(*bp);
}
putchar ('\n');
}
printf("@end display\n");
/* Try to avoid a save size overflow in the TeX output
routine. */
if (i%100 == 0 && i > 0 && i != cnt)
printf("\n@end table\n@table @asis\n");
}
printf ("@end table\n");
printf ("@bye\n");
}
return EXIT_SUCCESS;
}
/* arch-tag: ce28f204-1e70-4b34-8210-3d54a5662071
(do not change this comment) */
/* sorted-doc.c ends here */
2010-10-23 Glenn Morris <rgm@gnu.org>
 
* help-fns.el (doc-file-to-man, doc-file-to-info): New commands.
* help.el (finder-by-keyword): Remove unnecessary autoload.
 
2010-10-22 Glenn Morris <rgm@gnu.org>
......
......@@ -887,7 +887,111 @@ BUFFER should be a buffer or a buffer name."
(insert "\nThe parent category table is:")
(describe-vector table 'help-describe-category-set))))))
;;; Replacements for old lib-src/ programs. Don't seem especially useful.
;; Replaces lib-src/digest-doc.c.
;;;###autoload
(defun doc-file-to-man (file)
"Produce an nroff buffer containing the doc-strings from the DOC file."
(interactive (list (read-file-name "Name of DOC file: " doc-directory
internal-doc-file-name t)))
(or (file-readable-p file)
(error "Cannot read file `%s'" file))
(pop-to-buffer (generate-new-buffer "*man-doc*"))
(setq buffer-undo-list t)
(insert ".TH \"Command Summary for GNU Emacs\"\n"
".AU Richard M. Stallman\n")
(insert-file-contents file)
(let (notfirst)
(while (search-forward "" nil 'move)
(if (looking-at "S")
(delete-region (1- (point)) (line-end-position))
(delete-char -1)
(if notfirst
(insert "\n.DE\n")
(setq notfirst t))
(insert "\n.SH ")
(insert (if (looking-at "F") "Function " "Variable "))
(delete-char 1)
(forward-line 1)
(insert ".DS L\n"))))
(insert "\n.DE\n")
(setq buffer-undo-list nil)
(nroff-mode))
;; Replaces lib-src/sorted-doc.c.
;;;###autoload
(defun doc-file-to-info (file)
"Produce a texinfo buffer with sorted doc-strings from the DOC file."
(interactive (list (read-file-name "Name of DOC file: " doc-directory
internal-doc-file-name t)))
(or (file-readable-p file)
(error "Cannot read file `%s'" file))
(let ((i 0) type name doc alist)
(with-temp-buffer
(insert-file-contents file)
;; The characters "@{}" need special treatment.
(while (re-search-forward "[@{}]" nil t)
(backward-char)
(insert "@")
(forward-char 1))
(goto-char (point-min))
(while (search-forward "" nil t)
(unless (looking-at "S")
(setq type (char-after)
name (buffer-substring (1+ (point)) (line-end-position))
doc (buffer-substring (line-beginning-position 2)
(if (search-forward "" nil 'move)
(1- (point))
(point)))
alist (cons (list name type doc) alist))
(backward-char 1))))
(pop-to-buffer (generate-new-buffer "*info-doc*"))
(setq buffer-undo-list t)
;; Write the output header.
(insert "\\input texinfo @c -*-texinfo-*-\n"
"@setfilename emacsdoc.info\n"
"@settitle Command Summary for GNU Emacs\n"
"@finalout\n"
"\n@node Top\n"