From 14228b6cd174fe61b74c32e4ca1dc6c8bc36747e Mon Sep 17 00:00:00 2001 From: Ralf Corsepius Date: Thu, 13 Feb 2003 16:14:20 +0000 Subject: [PATCH] Remove. --- doc/tools/src2html/.cvsignore | 2 - doc/tools/src2html/ChangeLog | 11 - doc/tools/src2html/Makefile.am | 24 - doc/tools/src2html1.4a/.cvsignore | 2 - doc/tools/src2html1.4a/ChangeLog | 17 - doc/tools/src2html1.4a/Ctags/.cvsignore | 4 - doc/tools/src2html1.4a/Ctags/C.c | 444 ----------- doc/tools/src2html1.4a/Ctags/Makefile.am | 9 - doc/tools/src2html1.4a/Ctags/ctags.1 | 225 ------ doc/tools/src2html1.4a/Ctags/ctags.c | 265 ------- doc/tools/src2html1.4a/Ctags/ctags.h | 81 -- doc/tools/src2html1.4a/Ctags/fortran.c | 155 ---- doc/tools/src2html1.4a/Ctags/lisp.c | 97 --- doc/tools/src2html1.4a/Ctags/print.c | 130 ---- doc/tools/src2html1.4a/Ctags/strerror.c | 6 - doc/tools/src2html1.4a/Ctags/tree.c | 138 ---- doc/tools/src2html1.4a/Ctags/yacc.c | 144 ---- doc/tools/src2html1.4a/Ctags/z.c | 20 - doc/tools/src2html1.4a/FreeBSD/.cvsignore | 2 - doc/tools/src2html1.4a/FreeBSD/FreeBSD.hdr | 25 - doc/tools/src2html1.4a/FreeBSD/FreeBSD.s2h | 68 -- doc/tools/src2html1.4a/FreeBSD/Makefile.am | 6 - doc/tools/src2html1.4a/FreeBSD/conf.hdr | 9 - doc/tools/src2html1.4a/FreeBSD/ddb.hdr | 6 - doc/tools/src2html1.4a/FreeBSD/i386.i386.hdr | 5 - .../src2html1.4a/FreeBSD/i386.include.hdr | 5 - doc/tools/src2html1.4a/FreeBSD/i386.isa.hdr | 10 - doc/tools/src2html1.4a/FreeBSD/i386.stand.hdr | 14 - doc/tools/src2html1.4a/FreeBSD/kern.hdr | 18 - doc/tools/src2html1.4a/FreeBSD/net.hdr | 11 - doc/tools/src2html1.4a/FreeBSD/netinet.hdr | 10 - doc/tools/src2html1.4a/FreeBSD/nfs.hdr | 7 - doc/tools/src2html1.4a/FreeBSD/stand.hdr | 14 - doc/tools/src2html1.4a/FreeBSD/sys.hdr | 6 - doc/tools/src2html1.4a/FreeBSD/ufs.hdr | 10 - doc/tools/src2html1.4a/FreeBSD/vm.hdr | 9 - doc/tools/src2html1.4a/Makefile.am | 8 - doc/tools/src2html1.4a/Readme | 65 -- doc/tools/src2html1.4a/ctags-emacs/.cvsignore | 2 - .../src2html1.4a/ctags-emacs/Makefile.am | 4 - doc/tools/src2html1.4a/ctags-emacs/README | 20 - doc/tools/src2html1.4a/ctags-emacs/ctags | Bin 145997 -> 0 bytes .../ctags-emacs/etags.c-ada-patch | 424 ----------- doc/tools/src2html1.4a/ctags-wr | 41 - doc/tools/src2html1.4a/src2html | 704 ------------------ doc/tools/src2html1.4a/src2html.1 | 244 ------ doc/tools/src2html1.4a/src2html.cgi | 100 --- 47 files changed, 3621 deletions(-) delete mode 100644 doc/tools/src2html/.cvsignore delete mode 100644 doc/tools/src2html/ChangeLog delete mode 100644 doc/tools/src2html/Makefile.am delete mode 100644 doc/tools/src2html1.4a/.cvsignore delete mode 100644 doc/tools/src2html1.4a/ChangeLog delete mode 100644 doc/tools/src2html1.4a/Ctags/.cvsignore delete mode 100644 doc/tools/src2html1.4a/Ctags/C.c delete mode 100644 doc/tools/src2html1.4a/Ctags/Makefile.am delete mode 100644 doc/tools/src2html1.4a/Ctags/ctags.1 delete mode 100644 doc/tools/src2html1.4a/Ctags/ctags.c delete mode 100644 doc/tools/src2html1.4a/Ctags/ctags.h delete mode 100644 doc/tools/src2html1.4a/Ctags/fortran.c delete mode 100644 doc/tools/src2html1.4a/Ctags/lisp.c delete mode 100644 doc/tools/src2html1.4a/Ctags/print.c delete mode 100644 doc/tools/src2html1.4a/Ctags/strerror.c delete mode 100644 doc/tools/src2html1.4a/Ctags/tree.c delete mode 100644 doc/tools/src2html1.4a/Ctags/yacc.c delete mode 100644 doc/tools/src2html1.4a/Ctags/z.c delete mode 100644 doc/tools/src2html1.4a/FreeBSD/.cvsignore delete mode 100644 doc/tools/src2html1.4a/FreeBSD/FreeBSD.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/FreeBSD.s2h delete mode 100644 doc/tools/src2html1.4a/FreeBSD/Makefile.am delete mode 100644 doc/tools/src2html1.4a/FreeBSD/conf.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/ddb.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/i386.i386.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/i386.include.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/i386.isa.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/i386.stand.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/kern.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/net.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/netinet.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/nfs.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/stand.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/sys.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/ufs.hdr delete mode 100644 doc/tools/src2html1.4a/FreeBSD/vm.hdr delete mode 100644 doc/tools/src2html1.4a/Makefile.am delete mode 100644 doc/tools/src2html1.4a/Readme delete mode 100644 doc/tools/src2html1.4a/ctags-emacs/.cvsignore delete mode 100644 doc/tools/src2html1.4a/ctags-emacs/Makefile.am delete mode 100644 doc/tools/src2html1.4a/ctags-emacs/README delete mode 100644 doc/tools/src2html1.4a/ctags-emacs/ctags delete mode 100644 doc/tools/src2html1.4a/ctags-emacs/etags.c-ada-patch delete mode 100644 doc/tools/src2html1.4a/ctags-wr delete mode 100644 doc/tools/src2html1.4a/src2html delete mode 100644 doc/tools/src2html1.4a/src2html.1 delete mode 100644 doc/tools/src2html1.4a/src2html.cgi diff --git a/doc/tools/src2html/.cvsignore b/doc/tools/src2html/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/doc/tools/src2html/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/tools/src2html/ChangeLog b/doc/tools/src2html/ChangeLog deleted file mode 100644 index 11573d57b6..0000000000 --- a/doc/tools/src2html/ChangeLog +++ /dev/null @@ -1,11 +0,0 @@ -2002-03-27 Ralf Corsepius - - * Makefile.am: Remove AUTOMAKE_OPTIONS. - -2002-01-18 Ralf Corsepius - - * Makefile.am: Require automake-1.5. - -2000-08-10 Joel Sherrill - - * ChangeLog: New file. diff --git a/doc/tools/src2html/Makefile.am b/doc/tools/src2html/Makefile.am deleted file mode 100644 index 4b27430d49..0000000000 --- a/doc/tools/src2html/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -# -# COPYRIGHT (c) 1988-2002. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - - -SRC2HTMLDIR = $(top_srcdir)/src2html1.4a - -ctags-wr: $(SRC2HTMLDIR)/ctags-wr - cp $< $@ - chmod 755 $@ - -ctags-new: $(SRC2HTMLDIR)/Ctags/ctags-new - cp $< $@ - -# EMACS ctags with Ada awareness -ctags: $(SRC2HTMLDIR)/ctags-emacs/ctags - cp $< $@ - -src2html: $(SRC2HTMLDIR)/src2html - cp $< $@ diff --git a/doc/tools/src2html1.4a/.cvsignore b/doc/tools/src2html1.4a/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/doc/tools/src2html1.4a/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/tools/src2html1.4a/ChangeLog b/doc/tools/src2html1.4a/ChangeLog deleted file mode 100644 index 42d7427294..0000000000 --- a/doc/tools/src2html1.4a/ChangeLog +++ /dev/null @@ -1,17 +0,0 @@ -2002-03-27 Ralf Corsepius - - * Ctags/Makefile.am: Remove AUTOMAKE_OPTIONS. - * Makefile.am: Remove AUTOMAKE_OPTIONS. - * FreeBSD/Makefile.am: Remove AUTOMAKE_OPTIONS. - * ctags-emacs/Makefile.am: Remove AUTOMAKE_OPTIONS. - -2002-01-18 Ralf Corsepius - - * Makefile.am: Require automake-1.5. - * ctags-emacs/Makefile.am: Ditto. - * FreeBSD/Makefile.am: Ditto. - * Ctags/Makefile.am: Ditto. - -2000-08-10 Joel Sherrill - - * ChangeLog: New file. diff --git a/doc/tools/src2html1.4a/Ctags/.cvsignore b/doc/tools/src2html1.4a/Ctags/.cvsignore deleted file mode 100644 index 93a72f6c91..0000000000 --- a/doc/tools/src2html1.4a/Ctags/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -.deps -Makefile -Makefile.in -ctags-new diff --git a/doc/tools/src2html1.4a/Ctags/C.c b/doc/tools/src2html1.4a/Ctags/C.c deleted file mode 100644 index f091fcedad..0000000000 --- a/doc/tools/src2html1.4a/Ctags/C.c +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)C.c 5.5 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include "ctags.h" - -static int func_entry(), str_entry(); -static void hash_entry(); - -/* - * c_entries -- - * read .c and .h files and call appropriate routines - */ -c_entries() -{ - extern int tflag; /* -t: create tags for typedefs */ - register int c, /* current character */ - level; /* brace level */ - register char *sp; /* buffer pointer */ - int token, /* if reading a token */ - t_def, /* if reading a typedef */ - t_level; /* typedef's brace level */ - char tok[MAXTOKEN]; /* token buffer */ - int st; /* Symbol type */ - int rparen; /* State of last rparen */ - - lineftell = ftell(inf); - sp = tok; token = t_def = NO; t_level = -1; level = 0; lineno = 1; - rparen=0; - while (GETC(!=,EOF)) { - rparen--; - switch ((char)c) { - /* - * Here's where it DOESN'T handle: - * foo(a) - * { - * #ifdef notdef - * } - * #endif - * if (a) - * puts("hello, world"); - * } - */ - case '{': - ++level; - goto endtok; - case '}': - /* - * if level goes below zero, try and fix - * it, even though we've already messed up - */ - if (--level < 0) - level = 0; - goto endtok; - - case '\n': - SETLINE; - /* - * the above 3 cases are similar in that they - * are special characters that also end tokens. - */ -endtok: if (sp > tok) { - *sp = EOS; - token = YES; - sp = tok; - } - else - token = NO; - continue; - - /* we ignore quoted strings and comments in their entirety */ - case '"': - case '\'': - (void)skip_key(c); - break; - /* We ignore everything between [] */ - case '[': - (void)skip_key(']'); - goto storec; - - /* - * comments can be fun; note the state is unchanged after - * return, in case we found: - * "foo() XX comment XX { int bar; }" - */ - case '/': - if (GETC(==,'*')) { - skip_comment(); - continue; - } - (void)ungetc(c,inf); - c = '/'; - goto storec; - - /* hash marks flag #define's. */ - case '#': - if (sp == tok) { - hash_entry(); - break; - } - goto storec; - - /* - * if we have a current token, parenthesis on - * level zero indicates a function. - */ - case '(': - if (!level && token) { - int curline; - - if (sp != tok) - *sp = EOS; - /* - * grab the line immediately, we may - * already be wrong, for example, - * foo\n - * (arg1, - */ - getline(); - curline = lineno; - if (func_entry()) { - ++level; - pfnote(tok,curline,SY_FUN); - } else rparen=2; - break; - } - goto storec; - - /* - * semi-colons indicate the end of a typedef; if we find a - * typedef we search for the next semi-colon of the same - * level as the typedef. Ignoring "structs", they are - * tricky, since you can find: - * - * "typedef long time_t;" - * "typedef unsigned int u_int;" - * "typedef unsigned int u_int [10];" - * - * If looking at a typedef, we save a copy of the last token - * found. Then, when we find the ';' we take the current - * token if it starts with a valid token name, else we take - * the one we saved. There's probably some reasonable - * alternative to this... - */ - case ';': - if (t_def && level == t_level) { - t_def = NO; - getline(); - if (sp != tok) - *sp = EOS; - pfnote(tok,lineno,SY_TYP); - break; - } - /* - * Catch global variables by the fact that they end in ; or , - * and they are at level zero. - */ - case ',': - if (sp != tok) *sp = EOS; - if (level==0 && rparen!=1) { - pfnote(tok,lineno,SY_VAR); - break; - } - goto storec; - - /* - * store characters until one that can't be part of a token - * comes along; check the current token against certain - * reserved words. - */ - default: -storec: if (!intoken(c)) { - if (sp == tok) - break; - *sp = EOS; - if (tflag) { - /* no typedefs inside typedefs */ - if (!t_def && !bcmp(tok,"typedef",8)) { - t_def = YES; - t_level = level; - break; - } - /* catch "typedef struct" */ - if ((!t_def || t_level < level) - && (!bcmp(tok,"struct",7) - || !bcmp(tok,"union",6) - || !bcmp(tok,"enum",5))) { - /* Get type of symbol */ - st=0; - switch (*tok) { - case 's' : st= SY_STR; break; - case 'u' : st= SY_UNI; break; - case 'e' : st= SY_ENU; break; - } - /* - * get line immediately; - * may change before '{' - */ - getline(); - if (str_entry(c,st)) - ++level; - break; - } - } - sp = tok; - } - else if (sp != tok || begtoken(c)) { - *sp++ = c; - token = YES; - } - continue; - } - sp = tok; - token = NO; - } -} - -/* - * func_entry -- - * handle a function reference - */ -static -func_entry() -{ - register int c; /* current character */ - - /* - * we assume that the character after a function's right paren - * is a token character if it's a function and a non-token - * character if it's a declaration. Comments don't count... - */ - (void)skip_key((int)')'); - for (;;) { - while (GETC(!=,EOF) && iswhite(c)) - if (c == (int)'\n') - SETLINE; - if (intoken(c) || c == (int)'{') - break; - if (c == (int)'/' && GETC(==,'*')) - skip_comment(); - else { /* don't ever "read" '/' */ - (void)ungetc(c,inf); - return(NO); - } - } - if (c != (int)'{') - (void)skip_key((int)'{'); - return(YES); -} - -/* - * hash_entry -- - * handle a line starting with a '#' - */ -static void -hash_entry() -{ - extern int dflag; /* -d: non-macro defines */ - register int c, /* character read */ - curline; /* line started on */ - register char *sp; /* buffer pointer */ - char tok[MAXTOKEN]; /* storage buffer */ - - curline = lineno; - for (sp = tok;;) { /* get next token */ - if (GETC(==,EOF)) - return; - if (iswhite(c)) - break; - *sp++ = c; - } - *sp = EOS; - if (bcmp(tok,"define",6)) /* only interested in #define's */ - goto skip; - for (;;) { /* this doesn't handle "#define \n" */ - if (GETC(==,EOF)) - return; - if (!iswhite(c)) - break; - } - for (sp = tok;;) { /* get next token */ - *sp++ = c; - if (GETC(==,EOF)) - return; - /* - * this is where it DOESN'T handle - * "#define \n" - */ - if (!intoken(c)) - break; - } - *sp = EOS; - if (dflag || c == (int)'(') { /* only want macros */ - getline(); - if (c == (int)'(') pfnote(tok,curline,SY_MAC); - else pfnote(tok,curline,SY_DEF); - } -skip: if (c == (int)'\n') { /* get rid of rest of define */ - SETLINE - if (*(sp - 1) != '\\') - return; - } - (void)skip_key((int)'\n'); -} - -/* - * str_entry -- - * handle a struct, union or enum entry - */ -static -str_entry(c,st) - register int c; /* current character */ - int st; /* type of symbol */ -{ - register char *sp; /* buffer pointer */ - int curline; /* line started on */ - char tok[BUFSIZ]; /* storage buffer */ - - curline = lineno; - while (iswhite(c)) - if (GETC(==,EOF)) - return(NO); - if (c == (int)'{') /* it was "struct {" */ - return(YES); - for (sp = tok;;) { /* get next token */ - *sp++ = c; - if (GETC(==,EOF)) - return(NO); - if (!intoken(c)) - break; - } - switch ((char)c) { - case '{': /* it was "struct foo{" */ - --sp; - break; - case '\n': /* it was "struct foo\n" */ - SETLINE; - /*FALLTHROUGH*/ - default: /* probably "struct foo " */ - while (GETC(!=,EOF)) - if (!iswhite(c)) - break; - if (c != (int)'{') { - (void)ungetc(c, inf); - return(NO); - } - } - *sp = EOS; - pfnote(tok,curline,st); - return(YES); -} - -/* - * skip_comment -- - * skip over comment - */ -skip_comment() -{ - register int c, /* character read */ - star; /* '*' flag */ - - for (star = 0;GETC(!=,EOF);) - switch((char)c) { - /* comments don't nest, nor can they be escaped. */ - case '*': - star = YES; - break; - case '/': - if (star) - return; - break; - case '\n': - SETLINE; - /*FALLTHROUGH*/ - default: - star = NO; - } -} - -/* - * skip_key -- - * skip to next char "key" - */ -skip_key(key) - register int key; -{ - register int c, - skip, - retval; - - for (skip = retval = NO;GETC(!=,EOF);) - switch((char)c) { - case '\\': /* a backslash escapes anything */ - skip = !skip; /* we toggle in case it's "\\" */ - break; - case ';': /* special case for yacc; if one */ - case '|': /* of these chars occurs, we may */ - retval = YES; /* have moved out of the rule */ - break; /* not used by C */ - case '\n': - SETLINE; - /*FALLTHROUGH*/ - default: - if (c == key && !skip) - return(retval); - skip = NO; - } - return(retval); -} diff --git a/doc/tools/src2html1.4a/Ctags/Makefile.am b/doc/tools/src2html1.4a/Ctags/Makefile.am deleted file mode 100644 index dac429f883..0000000000 --- a/doc/tools/src2html1.4a/Ctags/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -## $Id$ - - -noinst_PROGRAMS = ctags-new - -ctags_new_SOURCES = C.c ctags.c fortran.c lisp.c print.c tree.c yacc.c \ - strerror.c ctags.h - -EXTRA_DIST = ctags.1 z.c diff --git a/doc/tools/src2html1.4a/Ctags/ctags.1 b/doc/tools/src2html1.4a/Ctags/ctags.1 deleted file mode 100644 index aea23f9826..0000000000 --- a/doc/tools/src2html1.4a/Ctags/ctags.1 +++ /dev/null @@ -1,225 +0,0 @@ -.\" Ctags-new is a modified version of the ctags produced by UCB and -.\" distributed in their BSD distributions. -.\" You should be able to diff this version against theirs to see what I -.\" have changed. -.\" Warren Toomey -.\" -.\" Copyright (c) 1987, 1990 The Regents of the University of California. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)ctags.1 6.8 (Berkeley) 4/24/91 -.\" -.Dd April 24, 1991 -.Dt CTAGS 1 -.Os BSD 4 -.Sh NAME -.Nm ctags-new -.Nd create a tags file -.Sh SYNOPSIS -.Nm ctags-new -.Op Fl BFadtuwvx -.Op Fl f Ar tagsfile -.Ar name ... -.Sh DESCRIPTION -.Nm Ctags-new -makes a tags file for -.Xr ex 1 -from the specified C, -Pascal, Fortran, -.Tn YACC , -lex, and lisp sources. A tags file gives the -locations of specified objects in a group of files. Each line of the -tags file contains the object name, the file in which it is defined, -and a search pattern for the object definition, separated by white-space. -Using the -.Ar tags -file, -.Xr ex 1 -can quickly locate these object -definitions. Depending on the options provided to -.Nm ctags-new , -objects will consist of subroutines, typedefs, defines, structs, -enums and unions. -.Bl -tag -width Ds -.It Fl B -use backward searching patterns -.Pq Li ?...? . -.It Fl F -use forward searching patterns -.Pq Li /.../ -(the default). -.It Fl a -append to -.Ar tags -file. -.It Fl d -create tags for -.Li #defines -that don't take arguments; -.Li #defines -that take arguments are tagged automatically. -.It Fl f -Places the tag descriptions in a file called -.Ar tagsfile . -The default behaviour is to place them in a file -.Ar tags . -.It Fl t -create tags for typedefs, structs, unions, and enums. -.It Fl u -update the specified files in the -.Ar tags -file, that is, all -references to them are deleted, and the new values are appended to the -file. (Beware: this option is implemented in a way which is rather -slow; it is usually faster to simply rebuild the -.Ar tags -file.) -.It Fl v -An index of the form expected by -.Xr vgrind 1 -is produced on the standard output. This listing -contains the object name, file name, and page number (assuming 64 -line pages). Since the output will be sorted into lexicographic order, -it may be desired to run the output through -.Xr sort 1 . -Sample use: -.Bd -literal -offset indent -ctags-new \-v files \&| sort \-f > index -vgrind \-x index -.Ed -.It Fl y -Yet another output format. This produces lines with the information: -symbol, line number, file name, type of symbol, each separated by whitespace. -This is used by the -.Xr src2html 1L -program. -.It Fl w -suppress warning diagnostics. -.It Fl x -.Nm ctags-new -produces a list of object -names, the line number and file name on which each is defined, as well -as the text of that line and prints this on the standard output. This -is a simple index which can be printed out as an off-line readable -function index. -.El -.Pp -Files whose names end in -.Nm \&.c -or -.Nm \&.h -are assumed to be C -source files and are searched for C style routine and macro definitions. -Files whose names end in -.Nm \&.y -are assumed to be -.Tn YACC -source files. -Files whose names end in -.Nm \&.l -are assumed to be lisp files if their -first non-blank character is `;', `(', or `[', -otherwise, they are -treated as lex files. Other files are first examined to see if they -contain any Pascal or Fortran routine definitions, and, if not, are -searched for C style definitions. -.Pp -The tag -.Li main -is treated specially in C programs. The tag formed -is created by prepending -.Ar M -to the name of the file, with the -trailing -.Nm \&.c -and any leading pathname components removed. This -makes use of -.Nm ctags-new -practical in directories with more than one -program. -.Pp -Yacc and lex files each have a special tag. -.Ar Yyparse -is the start -of the second section of the yacc file, and -.Ar yylex -is the start of -the second section of the lex file. -.Sh FILES -.Bl -tag -width tags -compact -.It Pa tags -default output tags file -.El -.Sh DIAGNOSTICS -.Nm Ctags-new -exits with a value of 1 if an error occurred, where -duplicate objects are not considered errors, 0 otherwise. -.Sh SEE ALSO -.Xr ex 1 , -.Xr vi 1 -.Sh BUGS -Recognition of -.Nm functions , -.Nm subroutines -and -.Nm procedures -for -.Tn FORTRAN -and Pascal is done is a very simpleminded way. No attempt -is made to deal with block structure; if you have two Pascal procedures -in different blocks with the same name you lose. -.Nm Ctags-new -doesn't -understand about Pascal types. -.Pp -The method of deciding whether to look for C, Pascal or -.Tn FORTRAN -functions is a hack. -.Pp -.Nm Ctags-new -relies on the input being well formed, and any syntactical -errors will completely confuse it. It also finds some legal syntax -confusing; for example, as it doesn't understand -.Li #ifdef Ns 's , -(incidentally, that's a feature, not a bug) any code with unbalanced -braces inside -.Li #ifdef Ns 's -will cause it to become somewhat disoriented. -In a similar fashion, multiple line changes within a definition will -cause it to enter the last line of the object, rather than the first, as -the searching pattern. The last line of multiple line -.Li typedef Ns 's -will similarly be noted. -.Sh HISTORY -The -.Nm -command appeared in -.Bx 3.0 . diff --git a/doc/tools/src2html1.4a/Ctags/ctags.c b/doc/tools/src2html1.4a/Ctags/ctags.c deleted file mode 100644 index 08d01a2ba0..0000000000 --- a/doc/tools/src2html1.4a/Ctags/ctags.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1987 The Regents of the University of California.\n\ - All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)ctags.c 5.8 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include -#include "ctags.h" - -/* - * ctags: create a tags file - */ - -NODE *head; /* head of the sorted binary tree */ - - /* boolean "func" (see init()) */ -bool _wht[0177],_etk[0177],_itk[0177],_btk[0177],_gd[0177]; - -FILE *inf, /* ioptr for current input file */ - *outf; /* ioptr for tags file */ - -long lineftell; /* ftell after getc( inf ) == '\n' */ - -int lineno, /* line number of current line */ - dflag, /* -d: non-macro defines */ - tflag, /* -t: create tags for typedefs */ - wflag, /* -w: suppress warnings */ - vflag, /* -v: vgrind style index output */ - xflag, /* -x: cxref style output */ - yflag; /* -y: yet another style output */ - -char *curfile, /* current input file name */ - searchar = '/', /* use /.../ searches by default */ - lbuf[BUFSIZ]; - -main(argc,argv) - int argc; - char **argv; -{ - extern char *optarg; /* getopt arguments */ - extern int optind; - static char *outfile = "tags"; /* output file */ - int aflag, /* -a: append to tags */ - uflag, /* -u: update tags */ - exit_val, /* exit value */ - step, /* step through args */ - ch; /* getopts char */ - char cmd[100]; /* too ugly to explain */ - - aflag = uflag = NO; - while ((ch = getopt(argc,argv,"BFadf:tuwvxy")) != EOF) - switch((char)ch) { - case 'B': - searchar = '?'; - break; - case 'F': - searchar = '/'; - break; - case 'a': - aflag++; - break; - case 'd': - dflag++; - break; - case 'f': - outfile = optarg; - break; - case 't': - tflag++; - break; - case 'u': - uflag++; - break; - case 'w': - wflag++; - break; - case 'v': - vflag++; - case 'x': - xflag++; - break; - case 'y': - yflag++; - break; - case '?': - default: - goto usage; - } - argv += optind; - argc -= optind; - if (!argc) { -usage: puts("Usage: ctags [-BFadtuwvx] [-f tagsfile] file ..."); - exit(1); - } - - init(); - - for (exit_val = step = 0;step < argc;++step) - if (!(inf = fopen(argv[step],"r"))) { - perror(argv[step]); - exit_val = 1; - } - else { - curfile = argv[step]; - find_entries(argv[step]); - (void)fclose(inf); - } - - if (head) - if (xflag) - put_entries(head); - else { - if (uflag) { - for (step = 0;step < argc;step++) { - (void)sprintf(cmd,"mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",outfile,argv[step],outfile); - system(cmd); - } - ++aflag; - } - if (!(outf = fopen(outfile, aflag ? "a" : "w"))) { - perror(outfile); - exit(exit_val); - } - put_entries(head); - (void)fclose(outf); - if (uflag) { - (void)sprintf(cmd,"sort %s -o %s",outfile,outfile); - system(cmd); - } - } - exit(exit_val); -} - -/* - * init -- - * this routine sets up the boolean psuedo-functions which work by - * setting boolean flags dependent upon the corresponding character. - * Every char which is NOT in that string is false with respect to - * the pseudo-function. Therefore, all of the array "_wht" is NO - * by default and then the elements subscripted by the chars in - * CWHITE are set to YES. Thus, "_wht" of a char is YES if it is in - * the string CWHITE, else NO. - */ -init() -{ - register int i; - register char *sp; - - for (i = 0; i < 0177; i++) { - _wht[i] = _etk[i] = _itk[i] = _btk[i] = NO; - _gd[i] = YES; - } -#define CWHITE " \f\t\n" - for (sp = CWHITE; *sp; sp++) /* white space chars */ - _wht[*sp] = YES; -#define CTOKEN " \t\n\"'#()[]{}=-+%*/&|^~!<>;,.:?" - for (sp = CTOKEN; *sp; sp++) /* token ending chars */ - _etk[*sp] = YES; -#define CINTOK "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz0123456789" - for (sp = CINTOK; *sp; sp++) /* valid in-token chars */ - _itk[*sp] = YES; -#define CBEGIN "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz" - for (sp = CBEGIN; *sp; sp++) /* token starting chars */ - _btk[*sp] = YES; -#define CNOTGD ",;" - for (sp = CNOTGD; *sp; sp++) /* invalid after-function chars */ - _gd[*sp] = NO; -} - -/* - * find_entries -- - * this routine opens the specified file and calls the function - * which searches the file. - */ -find_entries(file) - char *file; -{ - register char *cp; - - lineno = 0; /* should be 1 ?? KB */ - if (cp = rindex(file, '.')) { - if (cp[1] == 'l' && !cp[2]) { - register int c; - - for (;;) { - if (GETC(==,EOF)) - return; - if (!iswhite(c)) { - rewind(inf); - break; - } - } -#define LISPCHR ";([" -/* lisp */ if (index(LISPCHR,(char)c)) { - l_entries(); - return; - } -/* lex */ else { - /* - * we search all 3 parts of a lex file - * for C references. This may be wrong. - */ - toss_yysec(); - (void)strcpy(lbuf,"%%$"); - pfnote("yylex",lineno); - rewind(inf); - } - } -/* yacc */ else if (cp[1] == 'y' && !cp[2]) { - /* - * we search only the 3rd part of a yacc file - * for C references. This may be wrong. - */ - toss_yysec(); - (void)strcpy(lbuf,"%%$"); - pfnote("yyparse",lineno); - y_entries(); - } -/* fortran */ else if ((cp[1] != 'c' && cp[1] != 'h') && !cp[2]) { - if (PF_funcs()) - return; - rewind(inf); - } - } -/* C */ c_entries(); -} diff --git a/doc/tools/src2html1.4a/Ctags/ctags.h b/doc/tools/src2html1.4a/Ctags/ctags.h deleted file mode 100644 index 7b28018714..0000000000 --- a/doc/tools/src2html1.4a/Ctags/ctags.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ctags.h 5.4 (Berkeley) 2/26/91 - */ - -#include -#define bool char - -#define YES 1 -#define NO 0 -#define EOS '\0' - -#define ENDLINE 50 /* max length of pattern */ -#define MAXTOKEN 250 /* max size of single token */ - -#define SETLINE {++lineno;lineftell = ftell(inf);} -#define GETC(op,exp) ((c = getc(inf)) op (int)exp) - -#define iswhite(arg) (_wht[arg]) /* T if char is white */ -#define begtoken(arg) (_btk[arg]) /* T if char can start token */ -#define intoken(arg) (_itk[arg]) /* T if char can be in token */ -#define endtoken(arg) (_etk[arg]) /* T if char ends tokens */ -#define isgood(arg) (_gd[arg]) /* T if char can be after ')' */ - - /* Symbol types */ -#define SY_MAC 1 /* Preprocessor Macros */ -#define SY_DEF 2 /* Preprocessor Defines */ -#define SY_FUN 3 /* C Functions */ -#define SY_VAR 4 /* C Variables */ -#define SY_STR 5 /* C Structs */ -#define SY_UNI 6 /* C Unions */ -#define SY_TYP 7 /* C Typedefs */ -#define SY_ENU 8 /* C Enums */ - -typedef struct nd_st { /* sorting structure */ - struct nd_st *left, - *right; /* left and right sons */ - char *entry, /* function or type name */ - *file, /* file name */ - *pat; /* search pattern */ - int symbtype; /* Type of symbol */ - int lno; /* for -x option */ - bool been_warned; /* set if noticed dup */ -} NODE; - -extern FILE *inf; /* ioptr for current input file */ -extern long lineftell; /* ftell after getc( inf ) == '\n' */ -extern int lineno, /* line number of current line */ - xflag; /* -x: cxref style output */ -extern bool _wht[0177],_etk[0177],_itk[0177],_btk[0177],_gd[0177]; -extern char lbuf[BUFSIZ]; diff --git a/doc/tools/src2html1.4a/Ctags/fortran.c b/doc/tools/src2html1.4a/Ctags/fortran.c deleted file mode 100644 index 025a204b6b..0000000000 --- a/doc/tools/src2html1.4a/Ctags/fortran.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)fortran.c 5.5 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include "ctags.h" - -static void takeprec(); - -char *lbp; /* line buffer pointer */ - -PF_funcs() -{ - register bool pfcnt; /* pascal/fortran functions found */ - register char *cp; - char tok[MAXTOKEN], - *gettoken(); - - for (pfcnt = NO;;) { - lineftell = ftell(inf); - if (!fgets(lbuf,sizeof(lbuf),inf)) - return(pfcnt); - ++lineno; - lbp = lbuf; - if (*lbp == '%') /* Ratfor escape to fortran */ - ++lbp; - for (;isspace(*lbp);++lbp); - if (!*lbp) - continue; - switch (*lbp | ' ') { /* convert to lower-case */ - case 'c': - if (cicmp("complex") || cicmp("character")) - takeprec(); - break; - case 'd': - if (cicmp("double")) { - for (;isspace(*lbp);++lbp); - if (!*lbp) - continue; - if (cicmp("precision")) - break; - continue; - } - break; - case 'i': - if (cicmp("integer")) - takeprec(); - break; - case 'l': - if (cicmp("logical")) - takeprec(); - break; - case 'r': - if (cicmp("real")) - takeprec(); - break; - } - for (;isspace(*lbp);++lbp); - if (!*lbp) - continue; - switch (*lbp | ' ') { - case 'f': - if (cicmp("function")) - break; - continue; - case 'p': - if (cicmp("program") || cicmp("procedure")) - break; - continue; - case 's': - if (cicmp("subroutine")) - break; - default: - continue; - } - for (;isspace(*lbp);++lbp); - if (!*lbp) - continue; - for (cp = lbp + 1;*cp && intoken(*cp);++cp); - if (cp = lbp + 1) - continue; - *cp = EOS; - (void)strcpy(tok,lbp); - getline(); /* process line for ex(1) */ - pfnote(tok,lineno); - pfcnt = YES; - } - /*NOTREACHED*/ -} - -/* - * cicmp -- - * do case-independent strcmp - */ -cicmp(cp) - register char *cp; -{ - register int len; - register char *bp; - - for (len = 0,bp = lbp;*cp && (*cp &~ ' ') == (*bp++ &~ ' '); - ++cp,++len); - if (!*cp) { - lbp += len; - return(YES); - } - return(NO); -} - -static void -takeprec() -{ - for (;isspace(*lbp);++lbp); - if (*lbp == '*') { - for (++lbp;isspace(*lbp);++lbp); - if (!isdigit(*lbp)) - --lbp; /* force failure */ - else - while (isdigit(*++lbp)); - } -} diff --git a/doc/tools/src2html1.4a/Ctags/lisp.c b/doc/tools/src2html1.4a/Ctags/lisp.c deleted file mode 100644 index 652313d4fe..0000000000 --- a/doc/tools/src2html1.4a/Ctags/lisp.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)lisp.c 5.5 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include "ctags.h" - -extern char *lbp; /* pointer shared with fortran */ - -/* - * lisp tag functions - * just look for (def or (DEF - */ -l_entries() -{ - register int special; - register char *cp, - savedc; - char tok[MAXTOKEN]; - - for (;;) { - lineftell = ftell(inf); - if (!fgets(lbuf,sizeof(lbuf),inf)) - return; - ++lineno; - lbp = lbuf; - if (!cicmp("(def")) - continue; - special = NO; - switch(*lbp | ' ') { - case 'm': - if (cicmp("method")) - special = YES; - break; - case 'w': - if (cicmp("wrapper") || cicmp("whopper")) - special = YES; - } - for (;!isspace(*lbp);++lbp); - for (;isspace(*lbp);++lbp); - for (cp = lbp;*cp && *cp != '\n';++cp); - *cp = EOS; - if (special) { - if (!(cp = index(lbp,')'))) - continue; - for (;cp >= lbp && *cp != ':';--cp); - if (cp < lbp) - continue; - lbp = cp; - for (;*cp && *cp != ')' && *cp != ' ';++cp); - } - else - for (cp = lbp + 1; - *cp && *cp != '(' && *cp != ' ';++cp); - savedc = *cp; - *cp = EOS; - (void)strcpy(tok,lbp); - *cp = savedc; - getline(); - pfnote(tok,lineno); - } - /*NOTREACHED*/ -} diff --git a/doc/tools/src2html1.4a/Ctags/print.c b/doc/tools/src2html1.4a/Ctags/print.c deleted file mode 100644 index 1c1c545ab6..0000000000 --- a/doc/tools/src2html1.4a/Ctags/print.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)print.c 5.4 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include -#include -#include "ctags.h" - -extern char searchar; /* ex search character */ - -/* - * getline -- - * get the line the token of interest occurred on, - * prepare it for printing. - */ -getline() -{ - register long saveftell; - register int c, - cnt; - register char *cp; - - saveftell = ftell(inf); - (void)fseek(inf,lineftell,SEEK_SET); - if (xflag) - for (cp = lbuf;GETC(!=,'\n');*cp++ = c); - /* - * do all processing here, so we don't step through the - * line more than once; means you don't call this routine - * unless you're sure you've got a keeper. - */ - else for (cnt = 0,cp = lbuf;GETC(!=,EOF) && cnt < ENDLINE;++cnt) { - if (c == (int)'\\') { /* backslashes */ - if (cnt > ENDLINE - 2) - break; - *cp++ = '\\'; *cp++ = '\\'; - ++cnt; - } - else if (c == (int)searchar) { /* search character */ - if (cnt > ENDLINE - 2) - break; - *cp++ = '\\'; *cp++ = c; - ++cnt; - } - else if (c == (int)'\n') { /* end of keep */ - *cp++ = '$'; /* can find whole line */ - break; - } - else - *cp++ = c; - } - *cp = EOS; - (void)fseek(inf,saveftell,SEEK_SET); -} - -char *symtype[]= { - "Unknown", - "Preprocessor macro", - "Preprocessor define", - "C function", - "C variable", - "C struct", - "C union", - "C typedef", - "C enum" -}; - -/* - * put_entries -- - * write out the tags - */ -put_entries(node) - register NODE *node; -{ - extern FILE *outf; /* ioptr for tags file */ - extern int vflag; /* -v: vgrind style output */ - extern int yflag; /* -y: yet another style output */ - - if (node->left) - put_entries(node->left); - if (vflag) - printf("%s %s %d\n", - node->entry,node->file,(node->lno + 63) / 64); - else if (xflag) - printf("%-16s %4d %-16s %s\n", - node->entry,node->lno,node->file,node->pat); - else if (yflag) - printf("%-16s %4d %-16s %s\n", - node->entry,node->lno,node->file,symtype[node->symbtype]); - else - fprintf(outf,"%s\t%s\t%c^%s%c\n", - node->entry,node->file,searchar,node->pat,searchar); - if (node->right) - put_entries(node->right); -} diff --git a/doc/tools/src2html1.4a/Ctags/strerror.c b/doc/tools/src2html1.4a/Ctags/strerror.c deleted file mode 100644 index 7a82b869bf..0000000000 --- a/doc/tools/src2html1.4a/Ctags/strerror.c +++ /dev/null @@ -1,6 +0,0 @@ -char *strerror(i) - int i; - { - extern char *sys_errlist[]; - return sys_errlist[i]; - } diff --git a/doc/tools/src2html1.4a/Ctags/tree.c b/doc/tools/src2html1.4a/Ctags/tree.c deleted file mode 100644 index e82c72c404..0000000000 --- a/doc/tools/src2html1.4a/Ctags/tree.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)tree.c 5.5 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include -#include -#include "ctags.h" - -/* - * pfnote -- - * enter a new node in the tree - */ -pfnote(name,ln,type) - char *name; - int ln; - int type; -{ - extern NODE *head; /* head of the sorted binary tree */ - extern char *curfile; /* current input file name */ - register NODE *np; - register char *fp; - char nbuf[MAXTOKEN]; - - /*NOSTRICT*/ - if (!(np = (NODE *)malloc(sizeof(NODE)))) { - fputs("ctags: too many entries to sort\n",stderr); - put_entries(head); - free_tree(head); - /*NOSTRICT*/ - if (!(head = np = (NODE *)malloc(sizeof(NODE)))) { - fputs("ctags: out of space.\n",stderr); - exit(1); - } - } - if (!xflag && !strcmp(name,"main")) { - if (!(fp = rindex(curfile,'/'))) - fp = curfile; - else - ++fp; - (void)sprintf(nbuf,"M%s",fp); - fp = rindex(nbuf,'.'); - if (fp && !fp[2]) - *fp = EOS; - name = nbuf; - } - if (!(np->entry = strdup(name))) { - (void)fprintf(stderr, "ctags: %s\n", strerror(errno)); - exit(1); - } - np->file = curfile; - np->lno = ln; np->symbtype= type; - np->left = np->right = 0; - if (!(np->pat = strdup(lbuf))) { - (void)fprintf(stderr, "ctags: %s\n", strerror(errno)); - exit(1); - } - if (!head) - head = np; - else - add_node(np,head); -} - -add_node(node,cur_node) - register NODE *node, - *cur_node; -{ - extern int wflag; /* -w: suppress warnings */ - register int dif; - - dif = strcmp(node->entry,cur_node->entry); - if (!dif) { - if (node->file == cur_node->file) { - if (!wflag) - fprintf(stderr,"Duplicate entry in file %s, line %d: %s\nSecond entry ignored\n",node->file,lineno,node->entry); - return; - } - if (!cur_node->been_warned) - if (!wflag) - fprintf(stderr,"Duplicate entry in files %s and %s: %s (Warning only)\n",node->file,cur_node->file,node->entry); - cur_node->been_warned = YES; - } - else if (dif < 0) - if (cur_node->left) - add_node(node,cur_node->left); - else - cur_node->left = node; - else if (cur_node->right) - add_node(node,cur_node->right); - else - cur_node->right = node; -} - -free_tree(node) - register NODE *node; -{ - NODE *nl; - while (node) { - if (node->right) - free_tree(node->right); - nl= node->left; free(node); - node = nl; - } -} diff --git a/doc/tools/src2html1.4a/Ctags/yacc.c b/doc/tools/src2html1.4a/Ctags/yacc.c deleted file mode 100644 index f073f2bb7c..0000000000 --- a/doc/tools/src2html1.4a/Ctags/yacc.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 1987 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)yacc.c 5.6 (Berkeley) 2/26/91"; -#endif /* not lint */ - -#include -#include -#include "ctags.h" - -/* - * y_entries: - * find the yacc tags and put them in. - */ -y_entries() -{ - register int c; - register char *sp; - register bool in_rule; - char tok[MAXTOKEN]; - - while (GETC(!=,EOF)) - switch ((char)c) { - case '\n': - SETLINE; - /* FALLTHROUGH */ - case ' ': - case '\f': - case '\r': - case '\t': - break; - case '{': - if (skip_key((int)'}')) - in_rule = NO; - break; - case '\'': - case '"': - if (skip_key(c)) - in_rule = NO; - break; - case '%': - if (GETC(==,'%')) - return; - (void)ungetc(c,inf); - break; - case '/': - if (GETC(==,'*')) - skip_comment(); - else - (void)ungetc(c,inf); - break; - case '|': - case ';': - in_rule = NO; - break; - default: - if (in_rule || !isalpha(c) && c != (int)'.' - && c != (int)'_') - break; - sp = tok; - *sp++ = c; - while (GETC(!=,EOF) && (intoken(c) || c == (int)'.')) - *sp++ = c; - *sp = EOS; - getline(); /* may change before ':' */ - while (iswhite(c)) { - if (c == (int)'\n') - SETLINE; - if (GETC(==,EOF)) - return; - } - if (c == (int)':') { - pfnote(tok,lineno); - in_rule = YES; - } - else - (void)ungetc(c,inf); - } -} - -/* - * toss_yysec -- - * throw away lines up to the next "\n%%\n" - */ -toss_yysec() -{ - register int c, /* read character */ - state; - - /* - * state == 0 : waiting - * state == 1 : received a newline - * state == 2 : received first % - * state == 3 : recieved second % - */ - lineftell = ftell(inf); - for (state = 0;GETC(!=,EOF);) - switch ((char)c) { - case '\n': - ++lineno; - lineftell = ftell(inf); - if (state == 3) /* done! */ - return; - state = 1; /* start over */ - break; - case '%': - if (state) /* if 1 or 2 */ - ++state; /* goto 3 */ - break; - default: - state = 0; /* reset */ - } -} diff --git a/doc/tools/src2html1.4a/Ctags/z.c b/doc/tools/src2html1.4a/Ctags/z.c deleted file mode 100644 index 4c90e6ec95..0000000000 --- a/doc/tools/src2html1.4a/Ctags/z.c +++ /dev/null @@ -1,20 +0,0 @@ -#define fred 23 -#define jim(a) (a+2) - -int helo; - -struct thing { - int v; -} doris; - -union what { - int v; - char q; -} mary; - -enum thinddd { 1,2,3,4,5 } zoo; - -typedef unsigned int uinty; - -int rain() - { printf("Hello world\n"); } diff --git a/doc/tools/src2html1.4a/FreeBSD/.cvsignore b/doc/tools/src2html1.4a/FreeBSD/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/tools/src2html1.4a/FreeBSD/FreeBSD.hdr b/doc/tools/src2html1.4a/FreeBSD/FreeBSD.hdr deleted file mode 100644 index 6c2f8e185c..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/FreeBSD.hdr +++ /dev/null @@ -1,25 +0,0 @@ -Welcome to the hyperlinked source code tree for FreeBSD-2.1.0. This is an -attempt at a WWW document that allows you to find functions, structs -etc. in the FreeBSD source code by name.

- -If you are interested in a particular type of symbols (e.g functions), use -the type links below. If you are interested in a particular directory in -FreeBSD, choose the directory link below.

- -Follow the links until you reach the source code you are interested in.

- -

Bugs and Missing Features

- -I am using ctags and perl to find the symbols and produce the html documents. -My parsing of the ctags output (especially for variables) seems slightly -wrong. I'd appreciate a better way of doing things.

- -The final code should have hyperlinks that allow you to follow references -to other symbols in the tree (e.g calls to bread() etc). This is difficult -given C's scoping rules, and I don't want to write a C grammar parser. -Until I can think of a clean way, I'll omit the desired hyperlinks.

- - -Warren Toomey -wkt@cs.adfa.oz.au, January 1996 - diff --git a/doc/tools/src2html1.4a/FreeBSD/FreeBSD.s2h b/doc/tools/src2html1.4a/FreeBSD/FreeBSD.s2h deleted file mode 100644 index 925eefeb58..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/FreeBSD.s2h +++ /dev/null @@ -1,68 +0,0 @@ -# -# -# Input description for the FreeBSD 2.1.0 source tree -# Place this file and all the .hdr files in a directory, -# cd into that directory, and say `src2html FreeBSD.s2h'. -# -set Formdir /cgi-bin -set Htmldir FreeBSD-srctree -set Htmlroot . -set Newsrctree newsrc -set Srctree sys -# -dir conf Kernel configuration parameters -dir ddb Kernel debugging routines -dir dev/aic7xxx Adaptec AIC7770/AIC7870 sequencer code -dir dev/vn Vnode disk driver -dir gnu/i386/fpemul GNU's i387 floating point emulator -dir gnu/i386/isa Device drivers with GNU licensing -dir gnu/isdn An ISDN driver -dir i386/apm i386-specific power management -dir i386/apm/apm_init i386-specific power management -dir i386/boot/biosboot i386-specific boot code -dir i386/boot/dosboot i386-specific boot code -dir i386/boot/kzipboot i386-specific boot code -dir i386/boot/netboot i386-specific boot code -dir i386/eisa Device drivers for peripherals on the EISA bus -dir i386/i386 i386-specific code -dir i386/ibcs2 Intel Unix Binary Compatibility code -dir i386/include i386-specific C-language include files -dir i386/include/pc i386-specific C-language include files -dir i386/isa Device drivers for peripherals on the ISA bus -dir i386/isa/ic Device drivers for peripherals on the ISA bus -dir i386/isa/matcd Matsushita device driver -dir i386/isa/pcvt VT-220 emulation code -dir i386/isa/sound Device drivers for sound peripherals on the ISA bus -dir i386/linux Linux binaries support -dir i386/scsi Device drivers for SCSI peripherals on the ISA bus -dir isofs/cd9660 ISO CD9660 file-system code -dir kern The core OS routines: processes, scheduling, syscalls -dir libkern The kernel library -dir miscfs/deadfs Miscellaneous file systems -dir miscfs/devfs Miscellaneous file systems -dir miscfs/fdesc Miscellaneous file systems -dir miscfs/fifofs Miscellaneous file systems -dir miscfs/kernfs Miscellaneous file systems -dir miscfs/nullfs Miscellaneous file systems -dir miscfs/portal Miscellaneous file systems -dir miscfs/procfs Miscellaneous file systems -dir miscfs/specfs Miscellaneous file systems -dir miscfs/umapfs Miscellaneous file systems -dir miscfs/union Miscellaneous file systems -dir msdosfs The MS-DOS file system code -dir net Routing and general network interfaces -dir netccitt CCITT Networking code -dir netinet Internet protocols -dir netiso ISO Networking code -dir netiso/xebec ISO Networking code -dir netns Xerox NS Networking code -dir nfs The Network File System -dir pccard Interface code for PC-CARD controllers. -dir pci Device drivers for peripherals on the PCI bus -dir scsi Device drivers for peripherals on the SCSI bus -dir sys Widely used C-language include files -dir ufs/ffs The Berkeley Fast Filesystem -dir ufs/lfs The Log Filesystem -dir ufs/mfs The Memory Filesystem -dir ufs/ufs The Unix Filesystem -dir vm The Virtual Memory Management subsystem diff --git a/doc/tools/src2html1.4a/FreeBSD/Makefile.am b/doc/tools/src2html1.4a/FreeBSD/Makefile.am deleted file mode 100644 index 534baa84e8..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -## $Id$ - - -EXTRA_DIST = FreeBSD.hdr FreeBSD.s2h conf.hdr ddb.hdr i386.i386.hdr \ - i386.include.hdr i386.isa.hdr i386.stand.hdr kern.hdr net.hdr \ - netinet.hdr nfs.hdr stand.hdr sys.hdr ufs.hdr vm.hdr diff --git a/doc/tools/src2html1.4a/FreeBSD/conf.hdr b/doc/tools/src2html1.4a/FreeBSD/conf.hdr deleted file mode 100644 index 103742dbe2..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/conf.hdr +++ /dev/null @@ -1,9 +0,0 @@ -The conf directory holds miscellaneous files, such as the list of -files which are needed/optional in the OS. The main file of concern is -param.c, which describes the system-dependent configuration -parameters of FreeBSD. - -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't really cover this directory. It is vaguely covered in Chapter 8 of -the "System Performance Tuning" Nutshell book by Mike Loukides. -

diff --git a/doc/tools/src2html1.4a/FreeBSD/ddb.hdr b/doc/tools/src2html1.4a/FreeBSD/ddb.hdr deleted file mode 100644 index 2882f3dfa8..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/ddb.hdr +++ /dev/null @@ -1,6 +0,0 @@ -The ddb directory holds routines used to debug the kernel. -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't really cover this directory. However, some information has been -presented by Kirk KcKusick and Keith Bostic in their "UNIX Kernel Internals" -notes, which they have presented in many places in the past few years. -

diff --git a/doc/tools/src2html1.4a/FreeBSD/i386.i386.hdr b/doc/tools/src2html1.4a/FreeBSD/i386.i386.hdr deleted file mode 100644 index 72ea58d1f1..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/i386.i386.hdr +++ /dev/null @@ -1,5 +0,0 @@ -The i386/i386 directory holds the routines that deal with the Intel -386/486 CPU in the PC architecture. -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't describe this anywhere at all, because this is machine-specific. -

diff --git a/doc/tools/src2html1.4a/FreeBSD/i386.include.hdr b/doc/tools/src2html1.4a/FreeBSD/i386.include.hdr deleted file mode 100644 index 7acfb0ec1b..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/i386.include.hdr +++ /dev/null @@ -1,5 +0,0 @@ -The i386/include directory holds C-language include files that -define things that are specific about the PC architecture.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't describe this anywhere at all.

diff --git a/doc/tools/src2html1.4a/FreeBSD/i386.isa.hdr b/doc/tools/src2html1.4a/FreeBSD/i386.isa.hdr deleted file mode 100644 index ec13230f00..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/i386.isa.hdr +++ /dev/null @@ -1,10 +0,0 @@ -The i386/isa directory holds the routines that deal with the ISA -I/O bus in the PC architecture. -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't describe this anywhere at all, because this is machine-specific. -You can however glean some information from the following chapter: - -

-
Chapter 8, pp 225-256 Device Drivers. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/i386.stand.hdr b/doc/tools/src2html1.4a/FreeBSD/i386.stand.hdr deleted file mode 100644 index c548c044b0..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/i386.stand.hdr +++ /dev/null @@ -1,14 +0,0 @@ -The i386/stand directory holds functions that are useful, but cannot -be called from the kernel. For example printf() is great, but if the kernel -called printf() it would generate a TRAP and wind up back in the kernel.

- -The functions here emulate these functions by dealing directly with the -hardware on the system.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -covers machine-independent stand functionality in: - -

-
Chapter 13.2, pg 394 Bootstrapping. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/kern.hdr b/doc/tools/src2html1.4a/FreeBSD/kern.hdr deleted file mode 100644 index f8ec13e4a1..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/kern.hdr +++ /dev/null @@ -1,18 +0,0 @@ -The kern directory holds the core functionality of FreeBSD: -system startup, core system calls and syscall dispatching, process -management, scheduling, signals, file descriptors, top-level filesystem -code, interprocess communication and terminal handling.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -covers kern in: - -

-
Chapter 2, pp 19-42 Overview of the Kernel. -
Chapter 3, pp 43-66 Kernel Services. -
Chapter 4, pp 69-108 Process Management. -
Chapter 6, pp 169-186 I/O System Overview. -
Chapter 9, pp 259-278 Terminal Handling. -
Chapter 10, pp 281-309 Interprocess Communication. -
Chapter 13, pp 393-411 System Startup. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/net.hdr b/doc/tools/src2html1.4a/FreeBSD/net.hdr deleted file mode 100644 index 59c1f67741..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/net.hdr +++ /dev/null @@ -1,11 +0,0 @@ -The net directory holds the network functionality of FreeBSD that -deals with routing and generic interfaces: SLIP, PPP, Ethernet, packet -filters. - -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -covers kern in: - -

-
Chapter 11, pp 311-341 Network Communication. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/netinet.hdr b/doc/tools/src2html1.4a/FreeBSD/netinet.hdr deleted file mode 100644 index 19cdffa577..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/netinet.hdr +++ /dev/null @@ -1,10 +0,0 @@ -The netinet directory holds the code for the Internet network -protocols used in FreeBSD: TCP, IP, ICMP, ARP.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -covers netinet in: - -

-
Chapter 12, pp 343-389 Network Protocols. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/nfs.hdr b/doc/tools/src2html1.4a/FreeBSD/nfs.hdr deleted file mode 100644 index f9aeab2bbb..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/nfs.hdr +++ /dev/null @@ -1,7 +0,0 @@ -The nfs directory holds the code for the Network File System. -The code was developed from a specification of NFS from Sun Microsystems.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't cover nfs. You probably don't really want to delve into -it too much, but there is an RFC around describing the protocol, but not -the code here.

diff --git a/doc/tools/src2html1.4a/FreeBSD/stand.hdr b/doc/tools/src2html1.4a/FreeBSD/stand.hdr deleted file mode 100644 index 9e7df8861f..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/stand.hdr +++ /dev/null @@ -1,14 +0,0 @@ -The stand directory holds functions that are useful, but cannot be -called from the kernel. For example printf() is great, but if the kernel -called printf() it would generate a TRAP and wind up back in the kernel.

- -The functions here emulate these functions by dealing directly with the -hardware on the system.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -covers stand in: - -

-
Chapter 13.2, pg 394 Bootstrapping. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/sys.hdr b/doc/tools/src2html1.4a/FreeBSD/sys.hdr deleted file mode 100644 index 2624741a87..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/sys.hdr +++ /dev/null @@ -1,6 +0,0 @@ -The sys directory holds C-language include files that are used -by all parts of the FreeBSD source tree.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -doesn't cover these files specifically, but discussion of their contents -crops up everywhere.

diff --git a/doc/tools/src2html1.4a/FreeBSD/ufs.hdr b/doc/tools/src2html1.4a/FreeBSD/ufs.hdr deleted file mode 100644 index 8cec8cddac..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/ufs.hdr +++ /dev/null @@ -1,10 +0,0 @@ -The ufs directory holds the code for the Berkeley Fast Filesystem, -which is the filesystem used on locally mounted hard and floppy disks.

- -The 4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman -covers ufs in: - -

-
Chapter 7, pp 187-223 The Filesystem. -
-

diff --git a/doc/tools/src2html1.4a/FreeBSD/vm.hdr b/doc/tools/src2html1.4a/FreeBSD/vm.hdr deleted file mode 100644 index 26205175a8..0000000000 --- a/doc/tools/src2html1.4a/FreeBSD/vm.hdr +++ /dev/null @@ -1,9 +0,0 @@ -The vm directory holds the virtual memory subsystem used by -FreeBSD. This was derived from the VM system used in the Mach kernel, -with the interface to the rest of the kernel rewritten. As such, it is -not described in the -4.3BSD Internals book by Leffler, McKusick, Karels and Quarterman, -but it is described by Kirk KcKusick and Keith Bostic in their -"UNIX Kernel Internals" -notes, which they have presented in many places in the past few years. -

diff --git a/doc/tools/src2html1.4a/Makefile.am b/doc/tools/src2html1.4a/Makefile.am deleted file mode 100644 index ee9fc2ddee..0000000000 --- a/doc/tools/src2html1.4a/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ - - -SUBDIRS = Ctags FreeBSD ctags-emacs - -noinst_SCRIPTS = ctags-wr src2html src2html.cgi - -EXTRA_DIST = src2html.1 Readme $(noinst_SCRIPTS) - diff --git a/doc/tools/src2html1.4a/Readme b/doc/tools/src2html1.4a/Readme deleted file mode 100644 index 2153411891..0000000000 --- a/doc/tools/src2html1.4a/Readme +++ /dev/null @@ -1,65 +0,0 @@ - src2html - Hyperlink a C source code tree using HTML, Version 1.3-alpha - - Warren Toomey wkt@cs.adfa.oz.au June 1995 - - -Src2html is a program which takes a C source tree and creates a set of -HTML hypertext documents that allows the most important symbols in the -source tree to be found easily. As well, a HTML version of the source -tree is created, with the symbols given in bold font where they are defined -in the source. - - -REQUIREMENTS - -You will need: - - + Perl 4.x - + a standard Unix sort(1) command. - + a mkdir(1) that supports recursive creation of directories. - src2html is configured to use `mkdir -p' to do this. - + an egrep(1) if you're going to use the search facility. - + httpd(1) if you're going to use the search facility. - + Ctags-new, which is bundled with src2html, and a C compiler - to compile it. - - -INSTALLATION - -Extract the src2html archive, including the Ctags-new and Example directories; -you probably have already done that. Go into the Ctags-new directory and make -ctags-new. This should be very straight-forward. - -Install ctags-new and src2html in a directory on your path, make them -executable and install their man pages as well. If your mkdir(1) uses a -different option to -p, edit src2html to fix this. - -If you want to use the search facility, you need to install src2html.cgi -in your httpd script directory, and edit it to reflect the root of your -HTML documents, as set in DirectryRoot in conf/srm.conf. - -Make sure that ctags-new, src2html and src2html.cgi are executable, and -that the latter two can find the Perl interpreter. Installation is complete. - - -USING SRC2HTML - -Using src2html is pretty straight-forward. Print out and read the man page -before trying anything. In the FreeBSD directory I have included the config -file and header files for my src2html conversion of the FreeBSD-2.0.5 source -tree; read the man page and FreeBSD/FreeBSD.s2h in tandem. The root document of -this HTML tree is at http://minnie.cs.adfa.oz.au/FreeBSD-srctree/FreeBSD.html. - - -COMMENTS AND QUESTIONS - -Surprisingly, src2html is reasonably fast even on large source trees. This was -my first Perl program, so it could probably be made faster and smaller. I've -placed comments in the source to give you an idea of what each section does. If -you have any questions or comments, please email them to me at -wkt@cs.adfa.oz.au. Now that it's finished I'm not that keen on overhauling it -etc. I consider it as a good prototype. Getting inter-source hyperlinks done -would be great, but I really don't want to write a C parser myself. - -Cheers, - Warren Toomey diff --git a/doc/tools/src2html1.4a/ctags-emacs/.cvsignore b/doc/tools/src2html1.4a/ctags-emacs/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/doc/tools/src2html1.4a/ctags-emacs/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/tools/src2html1.4a/ctags-emacs/Makefile.am b/doc/tools/src2html1.4a/ctags-emacs/Makefile.am deleted file mode 100644 index f84020f37e..0000000000 --- a/doc/tools/src2html1.4a/ctags-emacs/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -## $Id$ - - -EXTRA_DIST = ctags etags.c-ada-patch README diff --git a/doc/tools/src2html1.4a/ctags-emacs/README b/doc/tools/src2html1.4a/ctags-emacs/README deleted file mode 100644 index 83415c92f4..0000000000 --- a/doc/tools/src2html1.4a/ctags-emacs/README +++ /dev/null @@ -1,20 +0,0 @@ -# -# $Id$ -# - -Included in this directory is a patch for the file lib-src/etags.c -from emacs-20.2. This patch and the following instructions may -or may not work for any other emacs version. - -mkdir work -tar xzf ..../emacs-20.2.tar.gz -cd emacs-20.2/lib-src -patch <...../etags.c-ada-patch -cd ../.. -mkdir build -cd build -../emacs-20.2/configure -cd lib-src -gmake ctags - -The ctags file in this directory is a pre-compiled binary. diff --git a/doc/tools/src2html1.4a/ctags-emacs/ctags b/doc/tools/src2html1.4a/ctags-emacs/ctags deleted file mode 100644 index 7fc51e6e9c53992eb51bda822d0f3d9e3b8d49b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145997 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 An*aa+ diff --git a/doc/tools/src2html1.4a/ctags-emacs/etags.c-ada-patch b/doc/tools/src2html1.4a/ctags-emacs/etags.c-ada-patch deleted file mode 100644 index 7f660ce864..0000000000 --- a/doc/tools/src2html1.4a/ctags-emacs/etags.c-ada-patch +++ /dev/null @@ -1,424 +0,0 @@ -*** etags.c.orig Wed Aug 6 02:09:19 1997 ---- etags.c Wed Nov 5 13:30:11 1997 -*************** -*** 31,37 **** - * Francesco Potorti` (F.Potorti@cnuce.cnr.it) is the current maintainer. - */ - -! char pot_etags_version[] = "@(#) pot revision number is 12.11"; - - #define TRUE 1 - #define FALSE 0 ---- 31,37 ---- - * Francesco Potorti` (F.Potorti@cnuce.cnr.it) is the current maintainer. - */ - -! char pot_etags_version[] = "@(#) pot revision number is 12.11/patched for Ada"; - - #define TRUE 1 - #define FALSE 0 -*************** -*** 182,193 **** ---- 182,195 ---- - char *relative_filename (), *absolute_filename (), *absolute_dirname (); - void grow_linebuffer (); - long *xmalloc (), *xrealloc (); -+ char *basename_no_extension (); - - typedef void Lang_function (); - /* Many compilers barf on this: - Lang_function Asm_labels; - so let's write it this way */ - void Asm_labels (); -+ void Ada_funcs (); - void C_entries (); - void default_C_entries (); - void plain_C_entries (); -*************** -*** 300,305 **** ---- 302,309 ---- - bool cxref_style; /* -x: create cxref style output */ - bool cplusplus; /* .[hc] means C++, not C */ - bool noindentypedefs; /* -I: ignore indentation in C */ -+ bool packages_only; /* -P: only ada packages */ -+ bool do_filename_tags; /* -F: insert a tag for the filename */ - - #ifdef LONG_OPTIONS - struct option longopts[] = -*************** -*** 330,335 **** ---- 334,341 ---- - { "update", no_argument, NULL, 'u' }, - { "version", no_argument, NULL, 'V' }, - { "vgrind", no_argument, NULL, 'v' }, -+ { "packages-only", no_argument, NULL, 'P' }, -+ { "do-filename-tags", no_argument, NULL, 'F' }, - { 0 } - }; - #endif /* LONG_OPTIONS */ -*************** -*** 371,376 **** ---- 377,386 ---- - NULL - }; - -+ /* Ada code */ -+ char *Ada_suffixes [] = -+ { "ads", "adb", "ada", NULL }; -+ - /* Note that .c and .h can be considered C++, if the --c++ flag was - given. That is why default_C_entries is called here. */ - char *default_C_suffixes [] = -*************** -*** 445,450 **** ---- 455,461 ---- - struct lang_entry lang_names [] = - { - { "asm", Asm_labels, Asm_suffixes, NULL }, -+ { "Ada", Ada_funcs, Ada_suffixes, NULL }, - { "c", default_C_entries, default_C_suffixes, NULL }, - { "c++", Cplusplus_entries, Cplusplus_suffixes, NULL }, - { "c*", Cstar_entries, Cstar_suffixes, NULL }, -*************** -*** 609,614 **** ---- 620,631 ---- - which you like."); - } - -+ puts ("-P, --packages-only\n\ -+ For Ada files, generates tags entries only for packages."); -+ -+ puts ("-F, --do-filename-tags\n\ -+ Generates a tag entry with tagname being file basename without suffix."); -+ - puts ("-V, --version\n\ - Print the version of the program.\n\ - -h, --help\n\ -*************** -*** 816,824 **** - char *optstring; - - #ifdef ETAGS_REGEXPS -! optstring = "-aCdDf:Il:o:r:RStTi:BuvxwVhH"; - #else -! optstring = "-aCdDf:Il:o:StTi:BuvxwVhH"; - #endif /* ETAGS_REGEXPS */ - - #ifndef LONG_OPTIONS ---- 833,841 ---- - char *optstring; - - #ifdef ETAGS_REGEXPS -! optstring = "-aCdDf:Il:o:r:RStTi:BuvxwVhHPF"; - #else -! optstring = "-aCdDf:Il:o:StTi:BuvxwVhHPF"; - #endif /* ETAGS_REGEXPS */ - - #ifndef LONG_OPTIONS -*************** -*** 892,897 **** ---- 909,923 ---- - case 'T': - typedefs = typedefs_and_cplusplus = TRUE; - break; -+ -+ case 'P': -+ packages_only++; -+ break; -+ -+ case 'F': -+ do_filename_tags++; -+ break; -+ - #if (!CTAGS) - /* Etags options */ - case 'i': -*************** -*** 1169,1174 **** ---- 1195,1201 ---- - if (!CTAGS) - { - char *filename; -+ char *tagfilename; - - if (absolutefn (file)) - { -*************** -*** 1181,1186 **** ---- 1208,1220 ---- - to the directory of the tags file. */ - filename = relative_filename (file, tagfiledir); - } -+ if (do_filename_tags) -+ { -+ tagfilename = basename_no_extension(filename); -+ pfnote(savestr(tagfilename), FALSE, tagfilename, 0, 1, 0); -+ free (tagfilename); -+ } -+ - fprintf (tagf, "\f\n%s,%d\n", filename, total_size_of_entries (head)); - free (filename); - put_entries (head); -*************** -*** 2954,2959 **** ---- 2988,3198 ---- - C_entries (YACC, inf); - } - -+ /* ada parsing */ -+ -+ char *adbp; -+ int apfcnt; -+ -+ void -+ Ada_funcs(fi) -+ FILE *fi; -+ { -+ int inquote; -+ -+ inquote = 0; -+ lineno = 0; -+ charno = 0; -+ apfcnt = 0; -+ -+ while (!feof (fi)) -+ { -+ if (adbp == NULL || *adbp == 0) -+ { -+ lineno++; -+ linecharno = charno; -+ charno += readline (&lb, fi) + 1; -+ adbp = lb.buffer; -+ } -+ if (*adbp == '-') -+ { -+ adbp++ ; -+ if (*adbp == '-') -+ { -+ while (*adbp) -+ adbp++; -+ continue; -+ } -+ } -+ if (*adbp == '\'') -+ { -+ adbp++ ; -+ if (*adbp) adbp++; -+ continue; -+ } -+ if (inquote || (*adbp == '"')) -+ { -+ inquote = 1; -+ adbp++ ; -+ while (*adbp && *adbp != '"') -+ adbp++; -+ if (*adbp == '"') -+ { -+ adbp++; -+ inquote = 0; -+ } -+ continue; -+ } -+ while (*adbp && !begtoken(*adbp)) -+ { -+ if ((*adbp == '-') || (*adbp == '"') || (*adbp == '\'')) -+ break; -+ adbp++; -+ } -+ if ((*adbp == '-') || (*adbp == '"') || (*adbp == '\'')) -+ continue; -+ if (*adbp == 0) -+ continue; -+ switch (*adbp) -+ { -+ case 'f': -+ case 'F': -+ if (adatail("function") && !packages_only) -+ adagetit(fi, "/f"); -+ else -+ adaskip(); -+ continue; -+ case 'p': -+ case 'P': -+ if (adatail("procedure") && !packages_only) -+ adagetit(fi, "/p"); -+ else if (adatail("package")) -+ adagetit(fi, "/s"); -+ else -+ adaskip(); -+ continue; -+ case 't': -+ case 'T': -+ if (adatail("task") && !packages_only) -+ adagetit(fi, "/k"); -+ else if (typedefs && adatail("type") && !packages_only) -+ adagetit(fi, "/t"); -+ else -+ adaskip(); -+ continue; -+ -+ default: -+ adaskip(); -+ continue; -+ } -+ } -+ } -+ adaskip() -+ { -+ while (*adbp && !endtoken(*adbp)) -+ adbp++; -+ while (*adbp && !begtoken(*adbp)) -+ { -+ if ((*adbp == '"') || (*adbp == '\'') || (*adbp == '-')) -+ return; -+ adbp++; -+ } -+ } -+ -+ adatail(cp) -+ char *cp; -+ { -+ register int len = 0; -+ -+ while (*cp && (*cp == tolower(*(adbp+len)))) -+ cp++, len++; -+ if (*cp == 0) -+ { -+ adbp += len; -+ if (intoken(*adbp)) -+ return (0); -+ else -+ return (1); -+ } -+ return (0); -+ } -+ -+ adagetit(fi, name_qualifier) -+ FILE *fi; -+ char *name_qualifier; -+ -+ { -+ register char *cp; -+ char c; -+ char nambuf[BUFSIZ]; -+ char * local_name_qualifier; -+ -+ local_name_qualifier = name_qualifier; -+ -+ while (!feof (fi)) -+ { -+ if (*adbp == '\0') -+ { -+ lineno++; -+ linecharno = charno; -+ charno += readline (&lb, fi) + 1; -+ adbp = lb.buffer; -+ } -+ if (*adbp == '-') -+ { -+ adbp++ ; -+ if (*adbp == '-') -+ { -+ while (*adbp) -+ adbp++; -+ continue; -+ } -+ } -+ while (isspace(*adbp)) -+ adbp++; -+ if (*adbp == 0) -+ continue; -+ if (*adbp == '-') -+ continue; -+ switch(*adbp) -+ { -+ case 'b': -+ case 'B': -+ if (adatail("body")) -+ { -+ local_name_qualifier = "/b"; -+ continue; -+ } -+ break; -+ -+ case 't': -+ case 'T': -+ if (adatail("type")) -+ continue; -+ break; -+ } -+ if (*adbp == '"') -+ { -+ for (cp = adbp+1; *cp && *cp != '"'; cp++) -+ continue; -+ } -+ else -+ for (cp = adbp+1; -+ *cp && (isalpha(*cp) || isdigit(*cp) || *cp == '_'); -+ cp++) -+ continue; -+ c = cp[0]; -+ cp[0] = 0; -+ strcpy(nambuf, adbp); -+ strcat(nambuf, local_name_qualifier); -+ cp[0] = c; -+ pfnote(savenstr (nambuf, strlen(nambuf)), TRUE, lb.buffer, cp - lb.buffer + 1, lineno, linecharno); -+ /* I am not really sure what the name is used for. */ -+ /* probably to be used to add a qualifier like /f /p /b /s /k /t */ -+ apfcnt++; -+ return; -+ } -+ } -+ - /* Fortran parsing */ - - char *dbp; -*************** -*** 4684,4689 **** ---- 4923,4968 ---- - return path.buffer; - #endif /* not MSDOS */ - #endif /* not HAVE_GETCWD */ -+ } -+ -+ /* Returna newly allocated string containing the filename -+ of FILE without any precending directory and without -+ extension. */ -+ char * -+ basename_no_extension (file) -+ char *file; -+ { -+ char *begin = file + strlen(file); -+ char *end = begin; -+ char *res, *rescp; -+ bool in_extension; -+ -+ -+ /* position begin at the begining of the basename -+ end will point to the end of the basename -+ without extension */ -+ in_extension = TRUE; -+ -+ while (begin > file && *begin != '/') -+ { -+ if (*begin == '.' && in_extension) -+ { -+ end = begin; -+ in_extension = FALSE; -+ } -+ begin--; -+ } -+ if (*begin == '/') -+ begin++; -+ -+ res = xnew(strlen(begin) - strlen(end) + 1, char); -+ rescp = res; -+ while (begin != end) -+ { -+ *rescp++ = *begin++; -+ } -+ *rescp = '\0'; -+ return res; - } - - /* Return a newly allocated string containing the file name diff --git a/doc/tools/src2html1.4a/ctags-wr b/doc/tools/src2html1.4a/ctags-wr deleted file mode 100644 index d514e85cab..0000000000 --- a/doc/tools/src2html1.4a/ctags-wr +++ /dev/null @@ -1,41 +0,0 @@ -#! /bin/sh -# -# Ctags wrapper -# -# Invokes the version shipped with src2html for C. -# Invokes the Ada patched GNU Emacs version for Ada. -# -# $Id$ - -TOOLSBASE=/usr1/rtems/rtemsdoc-work/tools/src2html - -if [ ! -f ${TOOLSBASE}/ctags-new ]; then - echo Can not find ${TOOLSBASE}/ctags-new for C programs. - exit 1 -fi - -if [ ! -f ${TOOLSBASE}/ctags ]; then - echo Can not find ${TOOLSBASE}/ctags for Ada programs. - exit 1 -fi - -cfiles=`find $1 -name "*.[ch]" -o "*.inl" 2>/dev/null | grep -v "/no-"` -adafiles=`find $1 -name "*.ad[sb]" 2>/dev/null | grep -v "/no-"` -adafiles=`ls -1 $1/*.ad[sb] 2>/dev/null` - -#cfiles=`ls -1 $1/*.[ch] $1/*.inl 2>/dev/null | grep -v "/no-"` -#adafiles=`ls -1 $1/*.ad[sb] 2>/dev/null` - -if [ "x${cfiles}" != x ] ; then - ${TOOLSBASE}/ctags-new -d -t -w -y ${cfiles} - #mv tags tags.c -fi - -if [ "x${adafiles}" != x ] ; then - ${TOOLSBASE}-src/ctags -d -t -x --no-warn ${adafiles} -fi -# cat tags -#mv tags tags.ada -# -#cat tags.c tags.ada -#rm -f tags.c tags.ada diff --git a/doc/tools/src2html1.4a/src2html b/doc/tools/src2html1.4a/src2html deleted file mode 100644 index 98d9d83d7f..0000000000 --- a/doc/tools/src2html1.4a/src2html +++ /dev/null @@ -1,704 +0,0 @@ -#!/usr/bin/perl -# Src2html: Take a source tree and generate Html documents that have hyperlinks -# to the definition of structures, variables, functions, and preprocessor -# definitions. Read the manual page for details on how to use the program. -# -# Version 1.4-alpha. Written by Warren Toomey wkt@cs.adfa.oz.au -# -# 19th January 1996 -# -# $Id$ -# - -if ($#ARGV <= 0 || $#ARGV > 4) { # Check arg count - print(STDERR "Usage: $0 [-na] [-nl] [-d num] input_description\n"); - print(STDERR " -na: Don't produce top-level category files\n"); - print(STDERR " -nl: Don't produce per-letter files\n"); - print(STDERR " -d: Set debugging to given number (0-3)\n"); - exit(1); -} - -# Set up default option values -$NoLetters= 0; -$NoAll= 0; -$Debug=0; -$Top= $ARGV[$#ARGV]; -$Top=~ s/\.s2h$//; - -# Parse the options -for ($i=0; $i<= $#ARGV; $i++) { - if ($ARGV[$i] eq "-na") { $NoAll= 1; next; } - if ($ARGV[$i] eq "-nl") { $NoLetters= 1; next; } - if ($ARGV[$i] eq "-d") { $i++; $Debug= $ARGV[$i]; next; } -} - -$Title{"m"}= "C Macros"; -$Title{"d"}= "C Defines"; -$Title{"f"}= "C Functions"; -$Title{"v"}= "C Variables"; -$Title{"s"}= "C Structs"; -$Title{"u"}= "C Unions"; -$Title{"t"}= "C Typedefs"; -$Title{"e"}= "C Enums"; -$Title{"AdaType"}= "Ada Types"; -$Title{"AdaProcedure"}= "Ada Procedures"; -$Title{"AdaFunction"}= "Ada Functions"; -$Title{"AdaPackage"}= "Ada Packages"; -$Title{"AdaTask"}= "Ada Tasks"; -$Title{"g"}= "All symbols"; - -&get_s2h; # Read the description file -&make_dirs; # Make directories as needed -&make_ctags; # Generate ctags for all src -&parse_ctags; # Parse ctags, generate html ptr files -foreach $i (keys(%Dirinfo)) -{ &rewrite_src($i); } # Rewrite the src code -exit(0); # and exit - - -## get_s2h: Opens the source description file, reads it, and sets up some -## variables describing where some directories are, and the source directories -## to process. Variables used are: -## Srctree - The root of the source tree we are processing -## Htmlroot - The directory where all WWW documents are kept -## Htmldir - The directory under Htmlroot for this source tree -## Htmltree - The root of the destination tree for the Html code -## Newsrctree - The directory in Htmltree to store the new Htmlised code -## Headers - The directory where we keep information to prepend in some docs -## Formdir - The place to put the index searching script -## Dirinfo{} - The list of dirs and the info about the directory -## Dotdir{} - The directory name with /'s -> .'s - -sub get_s2h { - $Newsrctree= 'newsrc'; # Set up as default - $Headers= '.'; - - - ######################################################### - # make sure we dump out the last bit of the last file.... - - # Print out the remainder of the - # current file, incl. the buffered line - if ($In_file == 1) { - if ("$line" ne "") { print OUT $line; } - while () { - s/\&/&/g; s/\/>/g; print OUT; - } - print OUT "\n\n\n\n\n\n\n\n\n"; - close(IN); close(OUT); - } - ######################################################### - - open(S2H,$ARGV[$#ARGV]) # Open descript - || die "$0: can't open $ARGV[$#ARGV]: $!\n"; - - while() { # Read in input lines - next if /^#/; # Skip comments - if ( /^set\s+Srctree\s+(\S+)/ ) { - $Srctree = $1; next; # Set the variable - } - if ( /^set\s+Htmlroot\s+(\S+)/ ) { - $Htmlroot = $1; next; # Set the variable - } - if ( /^set\s+Htmldir\s+(\S+)/ ) { - $Htmldir = $1; next; # Set the variable - } - if ( /^set\s+Newsrctree\s+(\S+)/ ) { - $Newsrctree = $1; next; # Set the variable - } - if ( /^set\s+Headers\s+(\S+)/ ) { - $Headers = $1; next; # Set the variable - } - if ( /^set\s+Formdir\s+(\S+)/ ) { - $Formdir = $1; next; # Set the variable - } - if ( /^dir\s+(\S+)\s+(.*)/ ) { - $Dirinfo{$1}= $2; $Dotdir{$1}=$1; - $Dotdir{$1}=~ s/\//./g; - next; # Get dir commands - } - if ( /^\n/ ) { next; } # Ignore blank lines - # Bad input line, give warning - chop; print "$_: Bad line, ignoring\n"; next; - } - close(S2H); - if (!defined($Srctree)) { die "$0: Srctree undefined in $ARGV[$#ARGV]\n"; } - if (!defined($Htmlroot)) { die "$0: Htmlroot undefined in $ARGV[$#ARGV]\n"; } - if (!defined($Htmldir)) { die "$0: Htmldir undefined in $ARGV[$#ARGV]\n"; } - $Htmltree= "$Htmlroot/$Htmldir"; -} - -## make_dirs: Make the directories need to store the Html documents, and also -## check to make sure that the input directories exist. We depend upon mkdir(1) -## having the -p option to make intermediate directories as needed. - -sub make_dirs { - local($i); - - foreach $i (keys(%Dirinfo)) { # Check that the directories exist - if (! -e "$Srctree/$i") { - die "$0: Input dir $Srctree/$i doesn't exist\n"; - } - if (! -d "$Srctree/$i") { - die "$0: Input dir $Srctree/$i is not a directory\n"; - } - } - if (! -e "$Htmltree") { - system("mkdir -p $Htmltree") && die "$0: Can't mkdir $Htmltree\n"; - } - if (! -e "$Htmltree/$Newsrctree") { - system("mkdir -p $Htmltree/$Newsrctree") - && die "$0: Can't mkdir $Htmltree/$Newsrctree\n"; - } - if (! -e "$Htmltree/ctags") { - system("mkdir -p $Htmltree/ctags") && die "$0: Can't mkdir ctags\n"; - } - foreach $i (keys(%Dirinfo)) { - if (! -e "$Htmltree/$Newsrctree/$i") { - system("mkdir -p $Htmltree/$Newsrctree/$i") - && die "$0: Can't mkdir $Htmltree/$Newsrctree/$i\n"; - } - } -} - -## make_ctags: Process all the source code, creating the ctags files. -## The Ctagsfile{} array is set up to hold the name of the ctags files -## created. - -sub make_ctags { - local($i); - - foreach $i (keys(%Dirinfo)) { - $Ctagsfile{$i}= "$Htmltree/ctags/$Dotdir{$i}.ctags"; - if ($Debug > 0 ) { print "Generating ctags for $Ctagsfile{$i}\n"; } - system("(cd $Srctree; /usr1/rtems/rtemsdoc-work/tools/src2html/ctags-wr $i) > $Ctagsfile{$i}") - && print "$0: ctags failed on $Srctree/$i\n"; - } -} - - -## parse_ctags: Parse the ctags file produced by make_ctags, creating several -## arrays of information. The arrays created are: -## Macro{} - The name of every macro and its name lowercased -## Def{} - The name of every define and its name lowercased -## Func{} - The name of every function and its name lowercased -## Var{} - The name of every variable and its name lowercased -## Struct{} - The name of every struct and its name lowercased -## Union{} - The name of every union and its name lowercased -## Type{} - The name of every typedef and its name lowercased -## Enum{} - The name of every enum and its name lowercased -## Nfile{} - The directory in which the symbol was found -## Nline{} - The line number where the symbol was found - -sub parse_ctags { - local($i); - local($low); - local($count); - - $count = 0; - - foreach $i (keys(%Dirinfo)) { - open(CTAGS,$Ctagsfile{$i}) || die "$0: Can't open $Ctagsfile{$i}, $!\n"; - if ($Debug > 0) { print "Parsing $Ctagsfile{$i} to build ptr files\n"; } - while () { - $count ++; - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+Preprocessor macro/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Macro{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+Preprocessor define/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Def{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+C struct/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Struct{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+C union/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Union{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+C typedef/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Type{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+C enum/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Enum{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+C function/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Func{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\s+(\d+)\s+(\S+)\s+C variable/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $Var{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(return)\/.\s+(\d+)\s+(\S+)\s+.*/ ) { - next; - # Code like the following line results in "return" as ctag - # "type Action is access function return Boolean; - } - if ( /^(\w+)\/.\s+(\d+)\s+(\S+)\s+use .*/ ) { - next; - # throw away lines like "use type System" - } - - if ( /^(\w+)\/.\s+(\d+)\s+(\S+)\s+type .*/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $AdaType{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\/.+\s+(\d+)\s+(\S+)\s+procedure .*/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $AdaProcedure{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\/.+\s+(\d+)\s+(\S+)\s+function .*/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $AdaFunction{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\".+)\/.+\s+(\d+)\s+(\S+)\s+function .*/ ) { - next; - # throw away functions like "*" - } - if ( /^(\w+)\/.\s+(\d+)\s+(\S+)\s+package .*/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $AdaPackage{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^(\w+)\/.\s+(\d+)\s+(\S+)\s+task .*/ ) { - ($low=$1)=~tr/A-Z_/a-z/d; $k="$low$count"; - $AdaTask{$k}=$1; $Nline{$k}= $2; - $Nfile{$k}= $3; next; - } - if ( /^([\w\/]+)\s+(\d+)\s+(\S+)\s+use type .*/ ) { - next; - } - if ( /^([\w\/\(]+)\s+(\d+)\s+(\S+)\s+type .*/ ) { - next; - } - if ( /^;([\w\/\(]+)\s+(\d+)\s+(\S+)\s+type .*/ ) { - next; - } - if ( /^\(([\w\/\(]+)\s+(\d+)\s+(\S+)\s+procedure .*/ ) { - next; - } - print "$0: In Ctagsfile{$i}, don't recognise $_"; - } - close(CTAGS); - &make_dir_html($i); - undef %Macro; undef %Def; undef %Func; undef %Var; - undef %Struct; undef %Union; undef %Type; undef %Enum; - undef %AdaType; undef %AdaProcedure; undef %AdaFunction; - undef %AdaPackage; undef %AdaTask; - } - &make_top_html; -} - -## make_letters_html: Make the lowest HTML documents, i.e those per-directory -## per-type per-letter Htmls that point directly at the source code. -## Arguments are: Dir name, prefix, title, Name/dir list -## If the file is created, set $Exists(letter) positive, else to 0. - -sub make_letters_html { - local($dir)= $_[0]; - local($pref)= $_[1]; - local($title)= $_[2]; - local(*type)= $_[3]; - local($htmlfile); - local($let)="@"; - - foreach $i ( "a".."z", - "AdaType", "AdaProcedure", "AdaFunction", "AdaPackage", "AdaTask" ) { - $Exists{$i}=0; - } - foreach $name (sort keys( %type )) { - if (substr($name,0,1) ne $let) { - if ($let ne "@") { - print HTML "\n"; - close(HTML); - $Exists{$let}= 1; - } - $let= substr($name, 0, 1); - $htmlfile= "$Htmltree/$Dotdir{$dir}.$pref$let.html"; - open(HTML, "> $htmlfile") || die "$0: Can't open $htmlfile, $!\n"; - - print HTML "\n$title starting with "; - print HTML "`$let' in $dir\n"; - print HTML "

$title starting with "; - print HTML "`$let' in $dir

\n"; - print HTML "

    \n"; - } - # print HTML "
  • $type{$name} "; - # print HTML "$Nfile{$type{$name}}:$Nline{$type{$name}}\n"; next; - - print HTML "
  • $type{$name} "; - print HTML "$Nfile{$name}:$Nline{$name}\n"; next; - } - print HTML "
\n"; - close(HTML); - $Exists{$let}= 1; -} - -## make_type_html: Make the type htmls. If there are <50 symbols for the -## directory, create the per-directory per-type html document only. Otherwise -## for every letter grep symbols, call make_lowest_letter_html, and -## finally create the per-directory per-type html document that points only -## at the letter files created. -## Arguments are: Dir name, prefix, title, Name/dir list - -sub make_type_html { - local($dir)= $_[0]; - local($pref)= $_[1]; - local($title)= $_[2]; - local(*type)= $_[3]; - local($i); - local($htmlfile); - local(@keys)= keys(%type); - local($name); - - $Exists{$title}=0; - if ( $#keys < 0 ) { return; } - if ($Debug > 0) { - $i= $#keys + 1; - print "The associative array for $dir $title has $i elements\n"; - } - if ( ($#keys < 50) || ($NoLetters == 1) ) { - $htmlfile= "$Htmltree/$Dotdir{$dir}.$pref.html"; - open(HTML, "> $htmlfile") || die "$0: Can't open $htmlfile, $!\n"; - print HTML "\n$title in $dir\n"; - print HTML "

$title in $dir

\n"; - print HTML "
    \n"; - foreach $name (sort keys( %type )) { - # print HTML "
  • $type{$name} "; - # print HTML "$Nfile{$type{$name}}:$Nline{$type{$name}}\n"; next; - - print HTML "
  • $type{$name} "; - print HTML "$Nfile{$name}:$Nline{$name}\n"; next; - } - print HTML "
\n"; - close(HTML); - $Exists{$title}=1; - } - else { - &make_letters_html($dir, $pref, $title, *type); - - open(HTML, "> $Htmltree/$Dotdir{$dir}.$pref.html") - || die "$0: Can't open $htmlfile.$pref.html, $!\n"; - print HTML "\n$title in $dir\n"; - print HTML "

$title in $dir

\n"; - print HTML "

    \n"; - - foreach $i ( "a".."z", - "AdaType", "AdaProcedure", "AdaFunction", "AdaPackage", "AdaTask" ) { - if ($Exists{$i} > 0) { # A file exists - print HTML "
  • "; - print HTML "$i\n"; $Exists{$title}++; $Exists{$i}=0; - } - } - print HTML "
\n"; - close(HTML); - if ($Exists{$title} == 0) { unlink($htmlfile); } - } -} - -## asappend: Append the contents of the second associative array to the -## first. - -sub asappend { - local(*To)= $_[0]; - local(*From)= $_[1]; - local($i); - - foreach $i (keys(%From)) { $To{$i}= $From{$i} ; } -} - -## make_dir_html: Make the html document for the directory. Use the -## Exist{} array to determine what types to include on the document. -## Arguments are: Dir name - -sub make_dir_html { - local($dir)= $_[0]; - local($i); - local(@keys); - - if ($Debug > 1) { print"In makedir, dir is $dir\n"; } - &make_type_html($dir, "f", $Title{"f"}, *Func); - &make_type_html($dir, "m", $Title{"m"}, *Macro); - &make_type_html($dir, "d", $Title{"d"}, *Def); - &make_type_html($dir, "v", $Title{"v"}, *Var); - &make_type_html($dir, "s", $Title{"s"}, *Struct); - &make_type_html($dir, "u", $Title{"u"}, *Union); - &make_type_html($dir, "t", $Title{"t"}, *Type); - &make_type_html($dir, "e", $Title{"e"}, *Enum); - &make_type_html($dir, "AdaType", $Title{"AdaType"}, *AdaType); - &make_type_html($dir, - "AdaProcedure", $Title{"AdaProcedure"}, *AdaProcedure); - &make_type_html($dir, "AdaFunction", $Title{"AdaFunction"}, *AdaFunction); - &make_type_html($dir, "AdaPackage", $Title{"AdaPackage"}, *AdaPackage); - &make_type_html($dir, "AdaTask", $Title{"AdaTask"}, *AdaTask); - - if ($NoAll != 1) { - &asappend(*GFunc, *Func); - &asappend(*GMacro, *Macro); - &asappend(*GDef, *Def); - &asappend(*GVar, *Var); - &asappend(*GStruct, *Struct); - &asappend(*GUnion, *Union); - &asappend(*GType, *Type); - &asappend(*GEnum, *Enum); - &asappend(*GAdaType, *AdaType); - &asappend(*GAdaProcedure, *AdaProcedure); - &asappend(*GAdaFunction, *AdaFunction); - &asappend(*GAdaPackage, *AdaPackage); - &asappend(*GAdaTask, *AdaTask); - } - - &asappend(*Alldir, *Func); - &asappend(*Alldir, *Macro); - &asappend(*Alldir, *Def); - &asappend(*Alldir, *Var); - &asappend(*Alldir, *Struct); - &asappend(*Alldir, *Union); - &asappend(*Alldir, *Type); - &asappend(*Alldir, *Enum); - &asappend(*Alldir, *AdaType); - &asappend(*Alldir, *AdaProcedure); - &asappend(*Alldir, *AdaFunction); - &asappend(*Alldir, *AdaPackage); - &asappend(*Alldir, *AdaTask); - - if ($NoLetters != 1) { - &make_letters_html($dir, "g", $Title{"g"}, *Alldir); - } - undef %Alldir; - - open(HTML, "> $Htmltree/$Dotdir{$dir}.html") - || die "$0: Can't open $Htmltree/$Dotdir{$dir}.html, $!\n"; - print HTML "\nCross-references for $dir\n"; - print HTML "

Cross-references for $dir

\n"; - if (-f "$Headers/$Dotdir{$dir}.hdr" ) { - open(TOPHDR, "$Headers/$Dotdir{$dir}.hdr"); - while () { print HTML; } - close(TOPHDR); - } - - if (defined($Formdir)) { - print HTML "


\n"; - print HTML "\n"; - print HTML "\n"; - print HTML "Enter a symbol's name here to quickly find it.\n"; - print HTML "

\n"; - } - print HTML "

Cross-references for $dir by type

    \n"; - - foreach $i ( "f","m","d","v","s","u","t","e", - "AdaType", "AdaProcedure", "AdaFunction", "AdaPackage", "AdaTask" ) { - if ($Exists{$Title{$i}} > 0) { # A type exists - print HTML "
  • "; - print HTML "$Title{$i}\n"; - $Exists{$dir}++; $Exists{$Title{$i}}=0; - } - } - print HTML "

\n"; - if ($NoLetters != 1) { - print HTML "

Cross-references for $dir by letter

    \n"; - foreach $i ( "a".."z" ) { - if ($Exists{$i} > 0) { # A letter exists - print HTML "
  • "; - print HTML "$i\n"; $Exists{$i}=0; - } - } - } - print HTML "
\n"; - close(HTML); -} - -## Make_top_html: Make the top html document by making the ones below -## it and then adding links to them. - -sub make_top_html { - local($i); - local(@keys); - - $Dotdir{$Top}=$Top; - &make_type_html($Top, "f", $Title{"f"}, *GFunc); - &make_type_html($Top, "m", $Title{"m"}, *GMacro); - &make_type_html($Top, "d", $Title{"d"}, *GDef); - &make_type_html($Top, "v", $Title{"v"}, *GVar); - &make_type_html($Top, "s", $Title{"s"}, *GStruct); - &make_type_html($Top, "u", $Title{"u"}, *GUnion); - &make_type_html($Top, "t", $Title{"t"}, *GType); - &make_type_html($Top, "e", $Title{"e"}, *GEnum); - &make_type_html($Top, "AdaType", $Title{"AdaType"}, *GAdaType); - &make_type_html($Top, "AdaProcedure", $Title{"AdaProcedure"}, *GAdaProcedure); - &make_type_html($Top, "AdaFunction", $Title{"AdaFunction"}, *GAdaFunction); - &make_type_html($Top, "AdaPackage", $Title{"AdaPackage"}, *GAdaPackage); - &make_type_html($Top, "AdaTask", $Title{"AdaTask"}, *GAdaTask); - - open(HTMLTOP, "> $Htmltree/$Top.html") - || die "$0: Can't open $Htmltree/$Top.html, $!\n"; - print HTMLTOP "\nCross-references for $Top\n"; - print HTMLTOP "

Cross-references for $Top

\n"; - - if (-f "$Headers/$Top.hdr" ) { - open(TOPHDR, "$Headers/$Top.hdr"); - while () { print HTMLTOP; } - close(TOPHDR); - } - - if (defined($Formdir)) { - print HTMLTOP "


\n"; - print HTMLTOP "\n"; - print HTMLTOP "\n"; - print HTMLTOP "Enter a symbol's name here to quickly find it.\n"; - print HTMLTOP "

\n"; - } - print HTMLTOP "

Cross-references by directory

\n"; - print HTMLTOP "

    \n"; - - foreach $i (sort keys(%Dirinfo)) { - if ($Exists{$i} > 0) { # A dir exists - print HTMLTOP "
  • "; - print HTMLTOP "$i $Dirinfo{$i}\n"; $Exists{$i}=0; - } - } - if ($NoAll != 1) { - print HTMLTOP "

Cross-references by type

    \n"; - foreach $i ( "f","m","d","v","s","u","t","e", - "AdaType", "AdaProcedure", "AdaFunction", "AdaPackage", "AdaTask" ) { - if ($Exists{$Title{$i}} > 0) { # A type exists - print HTMLTOP "
  • "; - print HTMLTOP "$Title{$i}\n"; - } - } - if ($NoLetters != 1) { - print HTMLTOP "

All Cross-references for $Top"; - print HTMLTOP "

    \n"; - &asappend(*Alltop, *GFunc); - &asappend(*Alltop, *GMacro); - &asappend(*Alltop, *GDef); - &asappend(*Alltop, *GVar); - &asappend(*Alltop, *GStruct); - &asappend(*Alltop, *GUnion); - &asappend(*Alltop, *GType); - &asappend(*Alltop, *GEnum); - &asappend(*Alltop, *GAdaType); - &asappend(*Alltop, *GAdaProcedure); - &asappend(*Alltop, *GAdaFunction); - &asappend(*Alltop, *GAdaPackage); - &asappend(*Alltop, *GAdaTask); - - if ($Debug > 0) { print "Making top letters\n"; } - &make_letters_html($Top, "g", $Title{"g"}, *Alltop); - if ($Debug > 0) { print "Making top letters, part 2\n"; } - foreach $i ( "a".."z" ) { - if ($Exists{$i} > 0) { - print HTMLTOP "
  • "; - print HTMLTOP "$i\n"; - } - } - } - } - print HTMLTOP "
\n"; - print HTMLTOP "
This source tree was made with "; - print HTMLTOP "src2html.\n"; - close(HTMLTOP); -} - - -## rewrite_src: Reread the ctags file for the given directory, and -## rewrite the source code, adding in anchor points and bolding symbols. -## This is messy as we can have multiple symbols on a single source line, -## therefore we must buffer each line while reading from the ctags file. -## -sub rewrite_src { - local($dir)= $_[0]; - local($i); - local($file)=""; - local($line)=""; - local($symb); - local($cnt); - local($nextcnt); - - $In_file=0; - open(CTAGS,"sort +2 -3 +1n -2 $Ctagsfile{$dir} |") - || die "$0: Can't open sorted $Ctagsfile{$dir}, $!\n"; - if ($Debug > 0) { print "Rewriting source in $dir\n"; } - while () { - # Get the next file, line, symbol - if (/^([\w\/]+)\s+(\d+)\s+([A-Za-z0-9_\+\-\.\/]+)/) { - if ($Debug > 2) { print "Symb $1 at $2 in $3\n"; } - $fname=$3; $nextcnt= $2; $symb=$1; - $symb=~ s/\/.//g; - - # If it's in a new file - if ("$file" ne "$fname") { - # Print out the remainder of the - # current file, incl. the buffered line - if ($In_file == 1) { - if ("$line" ne "") { print OUT $line; } - while () { - s/\&/&/g; s/\/>/g; print OUT; - } - print OUT "\n\n\n\n\n\n\n\n\n\n\n"; - close(IN); close(OUT); - } - $file= "$fname"; - # Open the new file & do the preamble - open(IN, "$Srctree/$file") || - print "Cannot open $Srctree/$file\n"; - open(OUT, "> $Htmltree/$Newsrctree/$file.html"); - $In_file=1; - print OUT "\n$file Source\n"; - print OUT "\n"; - print OUT "

Source to $file

\n"; - if (defined($Formdir)) { - print OUT "
\n"; - print OUT "\n"; - print OUT "\n"; - print OUT "Enter a symbol's name here to quickly find it.\n"; - print OUT "

\n"; - } - print OUT "
\n";
-					# Get the first line
-		$cnt=1; $line = ;
-	        $line=~ s/\&/&/g;
-	        $line=~ s/\/>/g;
-	    }
-	}
-					# Print all lines until one with a symb
-	while ($cnt < $nextcnt) {
-	    print OUT $line; $cnt++; $line= ;
-	    $line=~ s/\&/&/g;
-	    $line=~ s/\/>/g;
-	}
-						# Now rewrite the line
-	$line=~ s/\b$symb\b/$symb<\/b>/;
-	next;
-    }
-    close(CTAGS); close(IN); close(OUT);
-}
diff --git a/doc/tools/src2html1.4a/src2html.1 b/doc/tools/src2html1.4a/src2html.1
deleted file mode 100644
index 7401859ca8..0000000000
--- a/doc/tools/src2html1.4a/src2html.1
+++ /dev/null
@@ -1,244 +0,0 @@
-.TH src2html 1L "June 1994"
-.SH NAME
-src2html \- Hyperlink a C source code tree  using HTML, Version 1.3-alpha
-
-.SH SYNOPSIS
-.B src2html
-[
-.I \-na
-] [
-.I \-nl
-] [
-.I \-d debug_level
-]
-.I configuration_file
-
-.SH DESCRIPTION
-
-.B src2html
-is a program which takes a C source tree and creates a set of
-HTML hypertext documents that allows the most important symbols in the
-source tree to be found easily. As well, a HTML version of the source
-tree is created, with the symbols given in bold font where they are defined
-in the source.
-
-.B src2html
-finds and hyperlinks the following C symbols: Preprocessor defines
-and macros, C functions, global variables, structs, unions, enums and typedefs.
-If defined in the
-.I configuration file,
-a query document is used so that symbols can be located by an index query
-as well as following the hyperlinks.
-
-.SH OPTIONS
-The
-.I debug level
-was used when debugging the program, and its only use is
-to assure the user that something is actually happening, especially for large
-source trees. The highest debug level of 3 is not particularly verbose.
-.PP
-By default,
-.B src2html
-produces html pages for each category of C symbols. If there are more than
-50 in each category,
-.B src2html
-then further subdivides the symbols on a first-letter basis, making HTML
-documents for each letter.
-.PP
-If the
-.I -nl
-flag is set, no first-letter HTML documents will ever be produced.
-Similarly,
-.B src2html
-creates a top-level document with category links. If the
-.I -na
-flag is set, no top-level category links will be produced.
-
-.SH CONFIGURATION FILE
-
-.B src2html
-takes as an argument a
-.I configuration file
-which describes the directories in a source tree to process, and
-where to place the resulting HTML documents. Lines beginning with a #
-sign are ignored, as are blank lines. The following lines have special meaning:
-.P
-.IP "set Srctree source_tree"
-Set the root of the tree where the original source is kept, e.g
-/usr/src/sys. Do not leave a trailing slash on the tree name.
-This line must appear in the configuration file.
-.P
-.IP "set Htmlroot html_tree"
-Set the root of the tree where HTML documents are normally kept.
-This is the same as DocumentRoot in the httpd(1L) configuration.
-Again, do not leave a trailing slash on the tree name.
-This line must appear in the configuration file.
-.P
-.IP "set Htmldir html_dir"
-Set the directory within Htmlroot where the HTML documents for this
-tree will be placed.
-Again, do not leave a trailing slash on the tree name.
-This line must appear in the configuration file.
-.P
-.IP "set Newsrctree new_source_tree"
-Set the directory within the Htmltree where the marked up source code
-is placed, e.g src. This allows the source to be kept separate from the
-`pointer' documents which point at the source; see the next section for
-more details. This line is optional, and the default value of
-Newsrctree is `newsrc'.
-.P
-.IP "set Headers header_dir"
-.B src2html
-allows information to be placed at the beginning of the HTML
-documents created, e.g to describe the contents of a particular
-subdirectory. Files containing this information are kept in this
-directory. This line is optional, and the default value of
-Headers is `.'.
-.P
-.IP "set Formdir form_dir"
-If set, this tells
-.B src2html
-that the active HTML document which can
-perform index lookups for the source tree is located in this
-directory. If not set,
-.B src2html
-will not put query boxes in the
-HTML documents created. This line is optional, and there is no
-default value.
-.P
-.IP "dir directory comments_about_the_dir"
-This line may appear may times, and tells
-.B src2html
-to process
-source files in the directory Srctree/dir. This allows only particular
-sections of the source tree to be marked up. The comments after the
-directory are placed in the top-level HTML document to explain
-what that directory contains.
-
-.SH DIRECTORY STRUCTURE
-
-.B src2html
-expects to be given a source tree to process, and it produces
-a new tree with HTML documents. The configuration file should have a suffix
-of `.s2h', although this is strictly not needed.
-
-As an example, consider the following configuration file named BSD.s2h:
-.PP
-.nf
-# Comments
-set Srctree /usr/src/sys
-set Htmltree /usr/local/WWW
-set Htmldir sys
-set Newsrctree newsrc				# Comments here too
-set Headers /home/staff/warren/sys_headers
-set Formdir /cgi
-dir kern        The core OS routines: processes, scheduling, syscalls
-dir sys         Widely used C-language include files
-dir i386/isa    Device drivers for peripherals on the ISA bus
-.fi
-.PP
-Three directories containing C source will be processed,
-.nf
-	/usr/src/sys/kern,
-	/usr/src/sys/sys and
-	/usr/src/sys/i386/isa
-.fi
-
-The resulting marked up source code will be placed in
-.nf
-	/usr/local/WWW/sys/newsrc/kern,
-	/usr/local/WWW/sys/newsrc/sys and
-	/usr/local/WWW/sys/newsrc/i386/isa
-.fi
-respectivey.
-.PP
-The directory /usr/local/WWW/sys will itself contain a set of pointer
-documents which point to the source code documents on a per-directory,
-per-symbol-type and per-first-letter basis (and combinations of the
-above). One file, BSD.html (named from the configuration file name), is the
-root of the hyperlinks, and the entire source tree can be browsed from this
-one document.
-
-.SH HEADER FILES
-
-.B src2html
-creates a root HTML document, and HTML documents for each directory
-named in the configuration file. Textual information can be placed in the
-head of these documents to describe the contents of the tree/directory,
-give references etc. The files that hold this information are kept in the
-Headers directory. Taking the above configuration file as an example,
-
-	/home/staff/warren/sys_headers/BSD.hdr
-	/home/staff/warren/sys_headers/kern.hdr
-	/home/staff/warren/sys_headers/sys.hdr
-	/home/staff/warren/sys_headers/i386.isa.hdr
-
-can hold the information to be placed in the head of the appropriate
-documents. Note that if a directory name has a slash as given in the
-configuration file, the name of the header file has a dot instead.
-.PP
-Header files are placed `as is' into the head of the document, and thus
-can contain HTML markup commands. Any and all header files are optional;
-if the file does not exist, nothing will be placed in the head of the
-appropriate HTML document.
-.PP
-Once
-.B src2html
-has completed, the header files may be removed. However,
-you may wish to keep them in case you ever need to re-run
-.B src2html
-on the same source tree.
-
-.SH SEARCH SCRIPT
-
-During execution,
-.B src2html
-builds a ctags directory in Htmltree and places
-the output of ctags-new(1L) on the source tree directories in this place.
-This information is needed if a search script is also requested.
-.PP
-If the Formdir is set in the configuration file,
-.B src2html
-will configure the HTML code produced to use the search script
-.I src2html.cgi
-to search for symbols in the source tree. This script
-conforms to the cgi query format as used by httpd(1). You must move the
-supplied
-.I src2html.cgi
-file into the Formdir in the httpd hierachy before the query functionality
-can be used.
-.PP
-Again, from the example configuration file above,
-/usr/local/httpd/cgi/src2html.cgi is where to place the script, if the
-httpd hierachy is kept in /usr/local/httpd.
-
-.SH EXAMPLE SOURCE TREE
-
-The output from
-.B src2html
-for the full FreeBSD 2.0.5 kernel source directory can be browsed
-from the Web page http://minnie.cs.adfa.oz.au/FreeBSD-srctree/FreeBSD.html.
-
-.SH BUGS AND SHORTCOMINGS
-
-.B src2html
-uses the ctags-new(1L) program, which does not correctly parse C variable
-declarations and function pointer usage. Someone should rewrite this in Perl.
-.PP
-Ideally,
-.B src2html
-should include hyperlinks within each source file,
-but this is difficult given C's scoping rules, and would need a more
-sophisticated parser than ctags(1L).
-.PP
-.B src2html
-looks at all files in the named source directories, including
-files that don't end in .c and .h. This may be construed as a feature.
-
-.SH SEE ALSO
-.PD
-ctags-new(1L), httpd(1L), perl(1L)
-
-.SH AUTHOR
-.PD
-Warren Toomey   wkt@cs.adfa.oz.au
diff --git a/doc/tools/src2html1.4a/src2html.cgi b/doc/tools/src2html1.4a/src2html.cgi
deleted file mode 100644
index cfc93d4134..0000000000
--- a/doc/tools/src2html1.4a/src2html.cgi
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/local/bin/perl
-#
-# src2html.cgi -- A search script to file symbols in a src2html tree.
-# You need to install this in your httpd script directory AND set the
-# httpd web root below.
-#
-# We need the cgi-lib.pl package to be available to Perl
-require 'cgi-lib.pl';
-#
-## We MUST know the root of the httpd server, so we can find the ctags
-## 
-#
-$Http_root= "/usr/pub/pub/www";
-
-						# Parse input -> %in
-&ReadParse;					# and print first 2 lines
-
-@keys= keys(%in);			# We only expect one name/val pair
-if ($#keys != 0) {			# Otherwise, return an error document
-    print <<"query_error";
-Content-type: text/html
-
-    
Query Error
-

Query Error

- The document you used to query this source tree has an error in it. - You should email the maintainer of the source tree with a copy of the - document with the query form in it. - -query_error - exit(1); -} - # Given the name, determine which tree -$Htmltree= "$Http_root/$keys[0]"; -$Htmltree=~ s/\/[^\/]*$//; # Location of the Html tree root -$Srctree= "/$keys[0]"; # URL of the actual source -$Ctags= "$Htmltree/ctags"; # Location of the ctags files - -@symbol= split(/\s+/, $in{$keys[0]}); # Get one symbol to search for - -if ($#symbol != 0) { # Hmm, <> 1 symbol, return an error - print <<"symbol_error"; -Content-type: text/html - -
$Htmltree Search Error
-

$Htmltree Search Error

- Hmm, you either sent in no symbols to me to search, or a number of - symbols to find, separated by whitespace.

- The search function can only handle regexp expressions with no - whitespace. Try resubmitting your query. - -symbol_error - exit(1); -} - # Let's go to work, egrep the ctags - -# Naftali Schwartz (nschwart@SLINKY.CS.NYU.EDU) reports that using the ^ -# on the following line stops the script from working under SunOS 4.1.3. -# Sounds like ctags-new doesn't start the symbol in the 1st column. -open(IN, "cat $Ctags/* | egrep ^$symbol[0] |") || die "$0: egrep failed\n"; -$cnt=0; -while() { - ($sym, $line, $file, $com)= split(/\s+/); - $Sym[$cnt]=$sym; $Line[$cnt]= $line; $File[$cnt]= $file; $cnt++; -} -close(IN); - # How many did we get? Zero, no symbol -if ($cnt == 0) { - print <<"symbol_missing"; -Content-type: text/html - -

$Htmltree Search Error
-

$Htmltree Search Error

- The symbol $symbol[0] does not appear in the source tree. - -symbol_missing - exit(1); -} - -if ($cnt == 1) { # Exactly one, return ptr to that doc - print "Location: $Srctree/$File[0]"; - -# I used to use the commented out line under NCSA httpd because the other -# line didn't work. You may need to try things out on your server. - print ".html\#$Sym[0]\n\n"; -# print ".html\n\n"; - exit(0); -} - # Else return a list of choices -print <<"many_found"; -Content-type: text/html - -
$Htmltree Search
-

$Htmltree Search

\n"; -exit(0);